diff --git a/dlls/shdocvw/factory.c b/dlls/shdocvw/factory.c
index 71a37aae0955afb7b8c63a320e9927aaef147fa0..58fffcbcf861b2d55866ead51edbf69d85c3e73a 100644
--- a/dlls/shdocvw/factory.c
+++ b/dlls/shdocvw/factory.c
@@ -54,6 +54,7 @@ static HRESULT WINAPI WBCF_QueryInterface(LPCLASSFACTORY iface,
 
     if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IClassFactory, riid)) {
         *ppobj = iface;
+        IClassFactory_AddRef(iface);
         return S_OK;
     }
 
diff --git a/dlls/shdocvw/urlhist.c b/dlls/shdocvw/urlhist.c
index 2b2e5720d090fbb3cc903cd0dbcc5230cbc48eb2..c801718f1f33adc1edebb2839c0216d595431d0f 100644
--- a/dlls/shdocvw/urlhist.c
+++ b/dlls/shdocvw/urlhist.c
@@ -37,9 +37,10 @@ static HRESULT WINAPI UrlHistoryStg_QueryInterface(IUrlHistoryStg2 *iface, REFII
         *ppv = iface;
     }
 
-    if(*ppv)
+    if(*ppv) {
+        IUnknown_AddRef((IUnknown*)*ppv);
         return S_OK;
-
+    }
 
     WARN("(%s %p)\n", debugstr_guid(riid), ppv);
     return E_NOINTERFACE;
@@ -47,11 +48,13 @@ static HRESULT WINAPI UrlHistoryStg_QueryInterface(IUrlHistoryStg2 *iface, REFII
 
 static ULONG WINAPI UrlHistoryStg_AddRef(IUrlHistoryStg2 *iface)
 {
+    SHDOCVW_LockModule();
     return 2;
 }
 
 static ULONG WINAPI UrlHistoryStg_Release(IUrlHistoryStg2 *iface)
 {
+    SHDOCVW_UnlockModule();
     return 1;
 }