Index: TortoiseOverlays/TortoiseOverlays.cpp
===================================================================
--- TortoiseOverlays/TortoiseOverlays.cpp	(revision 18329)
+++ TortoiseOverlays/TortoiseOverlays.cpp	(working copy)
@@ -67,11 +67,12 @@
     if (state != FileStateInvalid)
     {
 		CShellExtClassFactory *pcf = new CShellExtClassFactory(state);
-		return pcf->QueryInterface(riid, ppvOut);
+		// refcount set to 0 at this moment
+		const HRESULT hr = pcf->QueryInterface(riid, ppvOut);
+		if (FAILED(hr))
+			delete pcf;
+		return hr;
     }
 	
     return CLASS_E_CLASSNOTAVAILABLE;
-
 }
-
-
Index: TortoiseProc/Settings/SetBugTraqAdv.cpp
===================================================================
--- TortoiseProc/Settings/SetBugTraqAdv.cpp	(revision 18329)
+++ TortoiseProc/Settings/SetBugTraqAdv.cpp	(working copy)
@@ -148,13 +148,15 @@
 	}
 
 	VARIANT_BOOL valid;
-	if (FAILED(hr = pProvider->ValidateParameters(GetSafeHwnd(), m_sParameters.AllocSysString(), &valid)))
+	ATL::CComBSTR parameters;
+	parameters.Attach(m_sParameters.AllocSysString());
+	if (FAILED(hr = pProvider->ValidateParameters(GetSafeHwnd(), parameters, &valid)))
 	{
 		ShowBalloon(IDC_BUGTRAQPARAMETERS, IDS_ERR_PROVIDER_VALIDATE_FAILED);
 		return;
 	}
 
-	if (valid != VARIANT_TRUE)
+	if (valid == VARIANT_FALSE)
 		return;	// It's assumed that the provider will have done this.
 
 	CResizableStandAloneDialog::OnOK();
@@ -203,7 +205,7 @@
 		hr = pProvider->HasOptions(&hasOptions);
 		if (SUCCEEDED(hr))
 		{
-			if (hasOptions == VARIANT_TRUE)
+			if (hasOptions != VARIANT_FALSE)
 			{
 				GetDlgItem(IDC_OPTIONS)->EnableWindow(TRUE);
 				return;
Index: TortoiseShell/TortoiseSVN.cpp
===================================================================
--- TortoiseShell/TortoiseSVN.cpp	(revision 18329)
+++ TortoiseShell/TortoiseSVN.cpp	(working copy)
@@ -162,7 +162,11 @@
 		g_cAprInit++;
 		
 		CShellExtClassFactory *pcf = new CShellExtClassFactory(state);
-		return pcf->QueryInterface(riid, ppvOut);
+		// refcount currently set to 0
+		const HRESULT hr = pcf->QueryInterface(riid, ppvOut);
+		if(FAILED(hr))
+			delete pcf;
+		return hr;
     }
 	
     return CLASS_E_CLASSNOTAVAILABLE;
