diff --git a/dlls/ole32/compobj.c b/dlls/ole32/compobj.c
index 693999a289f7a9ef96ea92c785ff0cb3c045dc9f..dc716ace64323ce337b216f10944913cb2e02ffd 100644
--- a/dlls/ole32/compobj.c
+++ b/dlls/ole32/compobj.c
@@ -1315,8 +1315,6 @@ HRESULT WINAPI CoGetClassObject(
     typedef HRESULT (CALLBACK *DllGetClassObjectFunc)(REFCLSID clsid,
 			     REFIID iid, LPVOID *ppv);
     DllGetClassObjectFunc DllGetClassObject;
-    HKEY key;
-    char buf[200];
 
     WINE_StringFromCLSID((LPCLSID)rclsid,xclsid);
 
@@ -1351,20 +1349,6 @@ HRESULT WINAPI CoGetClassObject(
       return hres;
     }
 
-    if (((CLSCTX_LOCAL_SERVER) & dwClsContext)
-        && !((CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER) & dwClsContext))
-	return create_marshalled_proxy(rclsid,iid,ppv);
-
-  
-
-    /* remote servers not supported yet */
-    if (     ((CLSCTX_REMOTE_SERVER) & dwClsContext)
-        && !((CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER) & dwClsContext)
-    ){
-        FIXME("CLSCTX_REMOTE_SERVER not supported!\n");
-	return E_NOINTERFACE;
-    }
-
     if ((CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER) & dwClsContext) {
         HKEY key;
 	char buf[200];
@@ -1400,31 +1384,17 @@ HRESULT WINAPI CoGetClassObject(
     }
     
 
-    /* Finally try out of process */
-    /* out of process and remote servers not supported yet */
+    /* Next try out of process */
     if (CLSCTX_LOCAL_SERVER & dwClsContext)
     {
-	memset(ProviderName,0,sizeof(ProviderName));
-	sprintf(buf,"CLSID\\%s\\LocalServer32",xclsid);
-        if (((hres = RegOpenKeyExA(HKEY_CLASSES_ROOT, buf, 0, KEY_READ, &key)) != ERROR_SUCCESS) ||
-            ((hres = RegQueryValueExW(key,NULL,NULL,NULL,(LPBYTE)ProviderName,&ProviderNameLen)),
-             RegCloseKey (key),
-             hres != ERROR_SUCCESS))
-        {
-            hres = REGDB_E_CLASSNOTREG;
-        }
-        else
-        {
-            /* CO_E_APPNOTFOUND if no exe */
-            FIXME("CLSCTX_LOCAL_SERVER %s registered but not yet supported!\n",debugstr_w(ProviderName));
-            hres = E_ACCESSDENIED;
-	}
+        return create_marshalled_proxy(rclsid,iid,ppv);
     }
 
+    /* Finally try remote */
     if (CLSCTX_REMOTE_SERVER & dwClsContext)
     {
         FIXME ("CLSCTX_REMOTE_SERVER not supported\n");
-        hres = E_ACCESSDENIED;
+        hres = E_NOINTERFACE;
     }
 
     return hres;
diff --git a/dlls/ole32/rpc.c b/dlls/ole32/rpc.c
index 5411e6c93de1401744a00453cafbe5c337842c41..2eeafbcdd3b77e87639742a90925822f6674823e 100644
--- a/dlls/ole32/rpc.c
+++ b/dlls/ole32/rpc.c
@@ -479,13 +479,13 @@ create_server(REFCLSID rclsid) {
   hres = RegOpenKeyExA(HKEY_CLASSES_ROOT, buf, 0, KEY_READ, &key);
 
   if (hres != ERROR_SUCCESS)
-      return REGDB_E_CLASSNOTREG;
+      return REGDB_E_READREGDB; /* Probably */
 
   memset(dllName,0,sizeof(dllName));
   hres= RegQueryValueExW(key,NULL,NULL,NULL,(LPBYTE)dllName,&dllNameLen);
+  RegCloseKey(key);
   if (hres)
 	  return REGDB_E_CLASSNOTREG; /* FIXME: check retval */
-  RegCloseKey(key);
   memset(&sinfo,0,sizeof(sinfo));
   sinfo.cb = sizeof(sinfo);
   if (!CreateProcessW(NULL,dllName,NULL,NULL,FALSE,0,NULL,NULL,&sinfo,&pinfo))