diff --git a/loader/module.c b/loader/module.c
index 161ef42..578561c 100644
--- a/loader/module.c
+++ b/loader/module.c
@@ -50,6 +50,14 @@
 WINE_MODREF *exe_modref;
 int process_detaching = 0;  /* set on process detach to avoid deadlocks with thread detach */
 
+inline static HMODULE get_exe_module(void)
+{
+    HMODULE mod;
+    /* FIXME: should look into PEB */
+    LdrGetDllHandle( 0, 0, NULL, &mod );
+    return mod;
+}
+
 /***********************************************************************
  *           wait_input_idle
  *
@@ -922,46 +930,24 @@
 	LPSTR lpFileName,	/* [out] filenamebuffer */
         DWORD size )		/* [in] size of filenamebuffer */
 {
-    DWORD       len = 0;
+    LPWSTR filenameW = HeapAlloc( GetProcessHeap(), 0, size * sizeof(WCHAR) );
 
-    lpFileName[0] = 0;
-
-    RtlEnterCriticalSection( &loader_section );
-    if (!hModule && !(NtCurrentTeb()->tibflags & TEBF_WIN32))
+    if (!filenameW)
     {
-        /* 16-bit task - get current NE module name */
-        NE_MODULE *pModule = NE_GetPtr( GetCurrentTask() );
-        if (pModule) len = GetLongPathNameA(NE_MODULE_NAME(pModule), lpFileName, size);
+        SetLastError( ERROR_NOT_ENOUGH_MEMORY );
+        return 0;
     }
-    else if (hModule || LdrGetDllHandle( 0, 0, NULL, &hModule ) == STATUS_SUCCESS)
-    {
-        LDR_MODULE* pldr;
-        NTSTATUS    nts;
-
-        nts = LdrFindEntryForAddress( hModule, &pldr );
-        if (nts == STATUS_SUCCESS)
-        {
-            WideCharToMultiByte( CP_ACP, 0, 
-                                 pldr->FullDllName.Buffer, pldr->FullDllName.Length,
-                                 lpFileName, size, NULL, NULL );
-            len = min(size, pldr->FullDllName.Length / sizeof(WCHAR));
-        }
-        else SetLastError( RtlNtStatusToDosError( nts ) );
-    }
-    RtlLeaveCriticalSection( &loader_section );
-
-    TRACE( "%s\n", debugstr_an(lpFileName, len) );
-    return len;
+    GetModuleFileNameW( hModule, filenameW, size );
+    WideCharToMultiByte( CP_ACP, 0, filenameW, -1, lpFileName, size, NULL, NULL );
+    HeapFree( GetProcessHeap(), 0, filenameW );
+    return strlen( lpFileName );
 }
 
-
 /***********************************************************************
  *              GetModuleFileNameW      (KERNEL32.@)
  */
 DWORD WINAPI GetModuleFileNameW( HMODULE hModule, LPWSTR lpFileName, DWORD size )
 {
-    DWORD       len = 0;
-
     lpFileName[0] = 0;
 
     RtlEnterCriticalSection( &loader_section );
@@ -973,30 +959,25 @@
         {
             WCHAR    path[MAX_PATH];
 
-            MultiByteToWideChar( CP_ACP, 0, NE_MODULE_NAME(pModule), -1, 
-                                 path, MAX_PATH );
-            len = GetLongPathNameW(path, lpFileName, size);
+            MultiByteToWideChar( CP_ACP, 0, NE_MODULE_NAME(pModule), -1, path, MAX_PATH );
+            GetLongPathNameW(path, lpFileName, size);
         }
     }
-    else if (hModule || LdrGetDllHandle( 0, 0, NULL, &hModule ) == STATUS_SUCCESS)
+    else
     {
         LDR_MODULE* pldr;
         NTSTATUS    nts;
 
+        if (!hModule) hModule = get_exe_module();
         nts = LdrFindEntryForAddress( hModule, &pldr );
-        if (nts == STATUS_SUCCESS)
-        {
-            len = min(size, pldr->FullDllName.Length / sizeof(WCHAR));
-            strncpyW(lpFileName, pldr->FullDllName.Buffer, len);
-            if (len < size) lpFileName[len] = 0;
-        }
+        if (nts == STATUS_SUCCESS) lstrcpynW(lpFileName, pldr->FullDllName.Buffer, size);
         else SetLastError( RtlNtStatusToDosError( nts ) );
 
     }
     RtlLeaveCriticalSection( &loader_section );
 
-    TRACE( "%s\n", debugstr_wn(lpFileName, len) );
-    return len;
+    TRACE( "%s\n", debugstr_w(lpFileName) );
+    return strlenW(lpFileName);
 }
 
 /******************************************************************
