diff --git a/dlls/mstask/Makefile.in b/dlls/mstask/Makefile.in
index ed1c9ee..a4559d1 100644
--- a/dlls/mstask/Makefile.in
+++ b/dlls/mstask/Makefile.in
@@ -8,8 +8,7 @@
 	task_scheduler.c \
 	task_trigger.c
 
-RC_SRCS = rsrc.rc
-
 IDL_I_SRCS = mstask_local.idl
+IDL_R_SRCS = mstask_local.idl
 
 @MAKE_DLL_RULES@
diff --git a/dlls/mstask/mstask.inf b/dlls/mstask/mstask.inf
deleted file mode 100644
index 1056093..0000000
--- a/dlls/mstask/mstask.inf
+++ /dev/null
@@ -1,16 +0,0 @@
-[version]
-Signature="$CHICAGO$"
-
-[RegisterDll]
-AddReg=Classes.Reg
-
-[UnregisterDll]
-DelReg=Classes.Reg
-
-[Classes.Reg]
-HKCR,"CLSID\%CLSID_CTaskScheduler%",,,"CTaskScheduler"
-HKCR,"CLSID\%CLSID_CTaskScheduler%\InProcServer32",,,"mstask.dll"
-HKCR,"CLSID\%CLSID_CTaskScheduler%\InProcServer32","ThreadingModel",,"Both"
-HKCR,"CLSID\%CLSID_CTask%",,,"CTask"
-HKCR,"CLSID\%CLSID_CTask%\InProcServer32",,,"mstask.dll"
-HKCR,"CLSID\%CLSID_CTask%\InProcServer32","ThreadingModel",,"Both"
diff --git a/dlls/mstask/mstask_main.c b/dlls/mstask/mstask_main.c
index df1f1d8..000833d 100644
--- a/dlls/mstask/mstask_main.c
+++ b/dlls/mstask/mstask_main.c
@@ -19,8 +19,8 @@
 #include <stdio.h>
 
 #include "mstask_private.h"
-#include "winreg.h"
-#include "advpub.h"
+#include "objbase.h"
+#include "rpcproxy.h"
 
 #include "wine/debug.h"
 
@@ -66,97 +66,12 @@
     return dll_ref != 0 ? S_FALSE : S_OK;
 }
 
-static inline char *mstask_strdup(const char *s)
-{
-    size_t n = strlen(s) + 1;
-    char *d = HeapAlloc(GetProcessHeap(), 0, n);
-    return d ? memcpy(d, s, n) : NULL;
-}
-
-static HRESULT init_register_strtable(STRTABLEA *strtable)
-{
-#define CLSID_EXPANSION_ENTRY(id) { "CLSID_" #id, &CLSID_ ## id }
-    static const struct
-    {
-        const char *name;
-        const CLSID *clsid;
-    }
-    expns[] =
-    {
-        CLSID_EXPANSION_ENTRY(CTaskScheduler),
-        CLSID_EXPANSION_ENTRY(CTask)
-    };
-#undef CLSID_EXPANSION_ENTRY
-    static STRENTRYA pse[sizeof expns / sizeof expns[0]];
-    unsigned int i;
-
-    strtable->cEntries = sizeof pse / sizeof pse[0];
-    strtable->pse = pse;
-    for (i = 0; i < strtable->cEntries; i++)
-    {
-        static const char dummy_sample[] =
-                "{12345678-1234-1234-1234-123456789012}";
-        const CLSID *clsid = expns[i].clsid;
-        pse[i].pszName = mstask_strdup(expns[i].name);
-        pse[i].pszValue = HeapAlloc(GetProcessHeap(), 0, sizeof dummy_sample);
-        if (!pse[i].pszName || !pse[i].pszValue)
-            return E_OUTOFMEMORY;
-        sprintf(pse[i].pszValue,
-                "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
-                clsid->Data1, clsid->Data2, clsid->Data3, clsid->Data4[0],
-                clsid->Data4[1], clsid->Data4[2], clsid->Data4[3],
-                clsid->Data4[4], clsid->Data4[5], clsid->Data4[6],
-                clsid->Data4[7]);
-    }
-
-    return S_OK;
-}
-
-static void cleanup_register_strtable(STRTABLEA *strtable)
-{
-    unsigned int i;
-    for (i = 0; i < strtable->cEntries; i++)
-    {
-        HeapFree(GetProcessHeap(), 0, strtable->pse[i].pszName);
-        HeapFree(GetProcessHeap(), 0, strtable->pse[i].pszValue);
-        if (!strtable->pse[i].pszName || !strtable->pse[i].pszValue)
-            return;
-    }
-}
-
-static HRESULT register_mstask(BOOL do_register)
-{
-    HRESULT hr;
-    STRTABLEA strtable;
-    HMODULE hAdvpack;
-    HRESULT (WINAPI *pRegInstall)(HMODULE hm,
-            LPCSTR pszSection, const STRTABLEA* pstTable);
-    static const WCHAR wszAdvpack[] =
-            {'a','d','v','p','a','c','k','.','d','l','l',0};
-
-    TRACE("(%x)\n", do_register);
-
-    hAdvpack = LoadLibraryW(wszAdvpack);
-    pRegInstall = (void *)GetProcAddress(hAdvpack, "RegInstall");
-
-    hr = init_register_strtable(&strtable);
-    if (SUCCEEDED(hr))
-        hr = pRegInstall(hInst, do_register ? "RegisterDll" : "UnregisterDll",
-                &strtable);
-    cleanup_register_strtable(&strtable);
-
-    if (FAILED(hr))
-        WINE_ERR("RegInstall failed: %08x\n", hr);
-
-    return hr;
-}
-
 HRESULT WINAPI DllRegisterServer(void)
 {
-    return register_mstask(TRUE);
+    return __wine_register_resources( hInst, NULL );
 }
 
 HRESULT WINAPI DllUnregisterServer(void)
 {
-    return register_mstask(FALSE);
+    return __wine_unregister_resources( hInst, NULL );
 }
diff --git a/dlls/mstask/rsrc.rc b/dlls/mstask/rsrc.rc
deleted file mode 100644
index 9915e02..0000000
--- a/dlls/mstask/rsrc.rc
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2008 Google (Roy Shea)
- *
- * 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
- */
-
-/* @makedep: mstask.inf */
-REGINST REGINST mstask.inf
diff --git a/include/mstask.idl b/include/mstask.idl
index cc70cce..ecff641 100644
--- a/include/mstask.idl
+++ b/include/mstask.idl
@@ -22,6 +22,12 @@
 import "oaidl.idl";
 import "oleidl.idl";
 
+#ifndef __WIDL__
+#define threading(model)
+#define progid(str)
+#define vi_progid(str)
+#endif
+
 cpp_quote("#define TASK_SUNDAY 0x1")
 cpp_quote("#define TASK_MONDAY 0x2")
 cpp_quote("#define TASK_TUESDAY 0x4")
@@ -368,6 +374,7 @@
 }
 
 [
+    threading(both),
     uuid(148BD52A-A2AB-11CE-B11F-00AA00530503)
 ]
 coclass CTaskScheduler
@@ -377,6 +384,7 @@
 
 
 [
+    threading(both),
     uuid(148BD520-A2AB-11CE-B11F-00AA00530503)
 ]
 coclass CTask
