diff --git a/dlls/msi/msi.spec b/dlls/msi/msi.spec
index 7c0ea819b4d3f3e5fa58a727d1097d2fad87904b..8dfade1629095bdb3325e719ed8c2954d0e04dea 100644
--- a/dlls/msi/msi.spec
+++ b/dlls/msi/msi.spec
@@ -203,8 +203,8 @@
 207 stub MsiSetFeatureAttributesW
 208 stub MsiSourceListClearAllA
 209 stub MsiSourceListClearAllW
-210 stub MsiSourceListAddSourceA
-211 stub MsiSourceListAddSourceW
+210 stdcall MsiSourceListAddSourceA(str str long str)
+211 stdcall MsiSourceListAddSourceW(wstr wstr long wstr)
 212 stub MsiSourceListForceResolutionA
 213 stub MsiSourceListForceResolutionW
 214 stub MsiIsProductElevatedA
diff --git a/dlls/msi/source.c b/dlls/msi/source.c
index 4f67e185f03134988287a861de6fb5061a2f886c..e0ed472d5cf772830eba0ad3d94bf7f86005d8a9 100644
--- a/dlls/msi/source.c
+++ b/dlls/msi/source.c
@@ -37,6 +37,7 @@
 #include "winuser.h"
 #include "wine/unicode.h"
 #include "action.h"
+#include "sddl.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(msi);
 
@@ -396,6 +397,61 @@ UINT WINAPI MsiSourceListSetInfoW( LPCWSTR szProduct, LPCWSTR szUserSid,
 
 }
 
+/******************************************************************
+ *  MsiSourceListAddSourceW (MSI.@)
+ */
+UINT WINAPI MsiSourceListAddSourceW( LPCWSTR szProduct, LPCWSTR szUserName,
+        DWORD dwReserved, LPCWSTR szSource)
+{
+    INT ret;
+    LPWSTR sidstr = NULL;
+    DWORD sidsize = 0;
+
+    TRACE("%s %s %s\n", debugstr_w(szProduct), debugstr_w(szUserName), debugstr_w(szSource));
+
+    if (LookupAccountNameW(NULL, szUserName, NULL, &sidsize, NULL, NULL, NULL))
+    {
+        PSID psid = msi_alloc(sidsize);
+
+        if (LookupAccountNameW(NULL, szUserName, psid, &sidsize, NULL, NULL, NULL))
+            ConvertSidToStringSidW(psid, &sidstr);
+
+        msi_free(psid);
+    }
+
+    ret = MsiSourceListAddSourceExW(szProduct, sidstr, 
+        MSIINSTALLCONTEXT_USERMANAGED, MSISOURCETYPE_NETWORK, szSource, 0);
+
+    if (sidstr)
+        LocalFree(sidstr);
+
+    return ret;
+}
+
+/******************************************************************
+ *  MsiSourceListAddSourceA (MSI.@)
+ */
+UINT WINAPI MsiSourceListAddSourceA( LPCSTR szProduct, LPCSTR szUserName,
+        DWORD dwReserved, LPCSTR szSource)
+{
+    INT ret;
+    LPWSTR szwproduct;
+    LPWSTR szwusername;
+    LPWSTR szwsource;
+
+    szwproduct = strdupAtoW( szProduct );
+    szwusername = strdupAtoW( szUserName );
+    szwsource = strdupAtoW( szSource );
+
+    ret = MsiSourceListAddSourceW(szwproduct, szwusername, 0, szwsource);
+
+    msi_free(szwproduct);
+    msi_free(szwusername);
+    msi_free(szwsource);
+
+    return ret;
+}
+
 /******************************************************************
  *  MsiSourceListAddSourceExW (MSI.@)
  */