diff --git a/dlls/kernel/kernel32.spec b/dlls/kernel/kernel32.spec
index fb5a6e3b5bf..0462b77e701 100644
--- a/dlls/kernel/kernel32.spec
+++ b/dlls/kernel/kernel32.spec
@@ -270,8 +270,8 @@
 @ stdcall EnumSystemLocalesW(ptr long)
 @ stdcall EnumTimeFormatsA(ptr long long)
 @ stdcall EnumTimeFormatsW(ptr long long)
-@ stub EnumUILanguagesA
-@ stub EnumUILanguagesW
+@ stdcall EnumUILanguagesA(ptr long long)
+@ stdcall EnumUILanguagesW(ptr long long)
 @ stdcall EraseTape(ptr long long)
 @ stdcall EscapeCommFunction(long long)
 @ stdcall ExitProcess(long)
diff --git a/dlls/kernel/locale.c b/dlls/kernel/locale.c
index 2ac2e1dce5f..fb1f992e53b 100644
--- a/dlls/kernel/locale.c
+++ b/dlls/kernel/locale.c
@@ -3162,3 +3162,35 @@ BOOL WINAPI SetUserGeoID( GEOID GeoID )
     FIXME("%ld\n",GeoID);
     return FALSE;
 }
+
+/******************************************************************************
+ *           EnumUILanguagesA (KERNEL32.@)
+ */
+BOOL WINAPI EnumUILanguagesA(UILANGUAGE_ENUMPROCA pUILangEnumProc, DWORD dwFlags, LONG_PTR lParam)
+{
+    static char value[] = "0409";
+
+    if(!pUILangEnumProc) return FALSE;
+
+    FIXME("%p, %lx, %lx calling pUILangEnumProc with %s\n",
+          pUILangEnumProc, dwFlags, lParam, debugstr_a(value));
+
+    pUILangEnumProc( value, lParam );
+    return(TRUE);
+}
+
+/******************************************************************************
+ *           EnumUILanguagesW (KERNEL32.@)
+ */
+BOOL WINAPI EnumUILanguagesW(UILANGUAGE_ENUMPROCW pUILangEnumProc, DWORD dwFlags, LONG_PTR lParam)
+{
+    static WCHAR value[] = {'0','4','0','9',0};
+
+    if(!pUILangEnumProc) return FALSE;
+
+    FIXME("%p, %lx, %lx calling pUILangEnumProc with %s\n",
+          pUILangEnumProc, dwFlags, lParam, debugstr_w(value));
+
+    pUILangEnumProc( value, lParam );
+    return(TRUE);
+}