diff --git a/.gitignore b/.gitignore
index b39a7f0..dcf494f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -117,6 +117,8 @@
 dlls/stdole32.tlb/std_ole_v1.tlb
 dlls/sti/sti_wia.h
 dlls/sti/sti_wia_p.c
+dlls/urlmon/urlmon_urlmon.h
+dlls/urlmon/urlmon_urlmon_p.c
 dlls/user.exe16
 dlls/wprocs.dll16
 include/activaut.h
diff --git a/dlls/urlmon/Makefile.in b/dlls/urlmon/Makefile.in
index 448a069..f0dd490 100644
--- a/dlls/urlmon/Makefile.in
+++ b/dlls/urlmon/Makefile.in
@@ -4,7 +4,9 @@
 VPATH     = @srcdir@
 MODULE    = urlmon.dll
 IMPORTLIB = urlmon
-IMPORTS   = uuid ole32 shlwapi wininet user32 advapi32 kernel32 ntdll
+IMPORTS   = uuid ole32 rpcrt4 shlwapi wininet user32 advapi32 kernel32 ntdll
+EXTRADEFS = -D_URLMON_ -DENTRY_PREFIX=URLMON_ -DPROXY_DELEGATION -DREGISTER_PROXY_DLL \
+	    -DPROXY_CLSID_IS="{0x79EAC9F1,0xBAF9,0x11CE,{0x8C,0x82,0x00,0xAA,0x00,0x4B,0xA9,0x0B}}"
 
 C_SRCS = \
 	bindctx.c \
@@ -26,10 +28,15 @@
 	session.c \
 	umon.c \
 	umstream.c \
-	urlmon_main.c
+	urlmon_main.c \
+	usrmarshal.c
 
 RC_SRCS = rsrc.rc
 
+IDL_P_SRCS = urlmon_urlmon.idl
+
+EXTRA_OBJS = dlldata.o
+
 @MAKE_DLL_RULES@
 
 @DEPENDENCIES@  # everything below this line is overwritten by make depend
diff --git a/dlls/urlmon/regsvr.c b/dlls/urlmon/regsvr.c
index 9561a23..9e27825 100644
--- a/dlls/urlmon/regsvr.c
+++ b/dlls/urlmon/regsvr.c
@@ -495,6 +495,12 @@
         "urlmon.dll",
         "Both"
     },
+    {   &CLSID_PSFactoryBuffer,
+        "URLMoniker ProxyStub Factory",
+        NULL,
+        "urlmon.dll",
+        "Apartment"
+    },
     { NULL }			/* list terminator */
 };
 
@@ -573,12 +579,14 @@
 
     TRACE("\n");
 
-    hr = register_coclasses(coclass_list);
-    if (SUCCEEDED(hr))
+    hr = URLMON_DllRegisterServer();
+    if(SUCCEEDED(hr))
+        hr = register_coclasses(coclass_list);
+    if(SUCCEEDED(hr))
 	hr = register_interfaces(interface_list);
-    if(FAILED(hr))
-        return hr;
-    return register_inf(TRUE);
+    if(SUCCEEDED(hr))
+        hr = register_inf(TRUE);
+    return hr;
 }
 
 /***********************************************************************
@@ -590,10 +598,12 @@
 
     TRACE("\n");
 
-    hr = unregister_coclasses(coclass_list);
-    if (SUCCEEDED(hr))
+    hr = URLMON_DllUnregisterServer();
+    if(SUCCEEDED(hr))
+        hr = unregister_coclasses(coclass_list);
+    if(SUCCEEDED(hr))
 	hr = unregister_interfaces(interface_list);
-    if(FAILED(hr))
-        return hr;
-    return register_inf(FALSE);
+    if(SUCCEEDED(hr))
+        hr = register_inf(FALSE);
+    return hr;
 }
diff --git a/dlls/urlmon/urlmon_main.c b/dlls/urlmon/urlmon_main.c
index a420308..272884e 100644
--- a/dlls/urlmon/urlmon_main.c
+++ b/dlls/urlmon/urlmon_main.c
@@ -348,6 +348,7 @@
 HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
 {
     unsigned int i;
+    HRESULT hr;
     
     TRACE("(%s,%s,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
     
@@ -357,6 +358,10 @@
 	    return IClassFactory_QueryInterface(object_creation[i].cf, riid, ppv);
     }
 
+    hr = URLMON_DllGetClassObject(rclsid, riid, ppv);
+    if(SUCCEEDED(hr))
+        return hr;
+
     FIXME("%s: no class found.\n", debugstr_guid(rclsid));
     return CLASS_E_CLASSNOTAVAILABLE;
 }
diff --git a/dlls/urlmon/urlmon_main.h b/dlls/urlmon/urlmon_main.h
index 21b9343..8db786b 100644
--- a/dlls/urlmon/urlmon_main.h
+++ b/dlls/urlmon/urlmon_main.h
@@ -48,6 +48,12 @@
 extern HRESULT MkProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj);
 extern HRESULT MimeFilter_Construct(IUnknown *pUnkOuter, LPVOID *ppobj);
 
+extern HRESULT WINAPI URLMON_DllGetClassObject(REFCLSID rclsid, REFIID iid,LPVOID *ppv) DECLSPEC_HIDDEN;
+extern HRESULT WINAPI URLMON_DllRegisterServer(void) DECLSPEC_HIDDEN;
+extern HRESULT WINAPI URLMON_DllUnregisterServer(void) DECLSPEC_HIDDEN;
+
+extern GUID const CLSID_PSFactoryBuffer DECLSPEC_HIDDEN;
+
 /**********************************************************************
  * Dll lifetime tracking declaration for urlmon.dll
  */
diff --git a/dlls/urlmon/urlmon_urlmon.idl b/dlls/urlmon/urlmon_urlmon.idl
new file mode 100644
index 0000000..71a0719
--- /dev/null
+++ b/dlls/urlmon/urlmon_urlmon.idl
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2009 Piotr Caban for Codeweavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "urlmon.idl"
diff --git a/dlls/urlmon/usrmarshal.c b/dlls/urlmon/usrmarshal.c
new file mode 100644
index 0000000..b945563
--- /dev/null
+++ b/dlls/urlmon/usrmarshal.c
@@ -0,0 +1,162 @@
+/*
+ * Copyright 2009 Piotr Caban for Codeweavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "urlmon_main.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(urlmon);
+
+HRESULT CALLBACK IWinInetHttpInfo_QueryInfo_Proxy(IWinInetHttpInfo* This,
+    DWORD dwOption, LPVOID pBuffer, DWORD *pcbBuf, DWORD *pdwFlags,
+    DWORD *pdwReserved)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT __RPC_STUB IWinInetHttpInfo_QueryInfo_Stub(IWinInetHttpInfo* This,
+    DWORD dwOption, BYTE *pBuffer, DWORD *pcbBuf, DWORD *pdwFlags,
+    DWORD *pdwReserved)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT CALLBACK IWinInetInfo_QueryOption_Proxy(IWinInetInfo* This,
+        DWORD dwOption, LPVOID pBuffer, DWORD *pcbBuf)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT __RPC_STUB IWinInetInfo_QueryOption_Stub(IWinInetInfo* This,
+        DWORD dwOption, BYTE *pBuffer, DWORD *pcbBuf)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT CALLBACK IBindHost_MonikerBindToStorage_Proxy(IBindHost* This,
+        IMoniker *pMk, IBindCtx *pBC, IBindStatusCallback *pBSC,
+        REFIID riid, void **ppvObj)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT __RPC_STUB IBindHost_MonikerBindToStorage_Stub(IBindHost* This,
+        IMoniker *pMk, IBindCtx *pBC, IBindStatusCallback *pBSC,
+        REFIID riid, IUnknown **ppvObj)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT CALLBACK IBindHost_MonikerBindToObject_Proxy(IBindHost* This,
+        IMoniker *pMk, IBindCtx *pBC, IBindStatusCallback *pBSC,
+        REFIID riid, void **ppvObj)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT __RPC_STUB IBindHost_MonikerBindToObject_Stub(IBindHost* This,
+        IMoniker *pMk, IBindCtx *pBC, IBindStatusCallback *pBSC,
+        REFIID riid, IUnknown **ppvObj)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT CALLBACK IBindStatusCallbackEx_GetBindInfoEx_Proxy(
+        IBindStatusCallbackEx* This, DWORD *grfBINDF, BINDINFO *pbindinfo,
+        DWORD *grfBINDF2, DWORD *pdwReserved)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT __RPC_STUB IBindStatusCallbackEx_GetBindInfoEx_Stub(
+        IBindStatusCallbackEx* This, DWORD *grfBINDF, RemBINDINFO *pbindinfo,
+        RemSTGMEDIUM *pstgmed, DWORD *grfBINDF2, DWORD *pdwReserved)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT CALLBACK IBindStatusCallback_GetBindInfo_Proxy(
+        IBindStatusCallback* This, DWORD *grfBINDF, BINDINFO *pbindinfo)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT __RPC_STUB IBindStatusCallback_GetBindInfo_Stub(
+        IBindStatusCallback* This, DWORD *grfBINDF,
+        RemBINDINFO *pbindinfo, RemSTGMEDIUM *pstgmed)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT CALLBACK IBindStatusCallback_OnDataAvailable_Proxy(
+        IBindStatusCallback* This, DWORD grfBSCF, DWORD dwSize,
+        FORMATETC *pformatetc, STGMEDIUM *pstgmed)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT __RPC_STUB IBindStatusCallback_OnDataAvailable_Stub(
+        IBindStatusCallback* This, DWORD grfBSCF, DWORD dwSize,
+        RemFORMATETC *pformatetc, RemSTGMEDIUM *pstgmed)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT CALLBACK IBinding_GetBindResult_Proxy(IBinding* This,
+        CLSID *pclsidProtocol, DWORD *pdwResult,
+        LPOLESTR *pszResult, DWORD *pdwReserved)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT __RPC_STUB IBinding_GetBindResult_Stub(IBinding* This,
+        CLSID *pclsidProtocol, DWORD *pdwResult,
+        LPOLESTR *pszResult, DWORD dwReserved)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE IWindowForBindingUI_GetWindow_Proxy(
+        IWindowForBindingUI* This, REFGUID rguidReason, HWND *phwnd)
+{
+    FIXME("stub\n");
+    return E_NOTIMPL;
+}
+
+void __RPC_STUB IWindowForBindingUI_GetWindow_Stub(IRpcStubBuffer* This,
+        IRpcChannelBuffer* pRpcChannelBuffer, PRPC_MESSAGE pRpcMessage,
+        DWORD* pdwStubPhase)
+{
+    FIXME("stub\n");
+}
