diff --git a/loader/module.c b/loader/module.c
index dd12615..ea528f4 100644
--- a/loader/module.c
+++ b/loader/module.c
@@ -34,9 +34,10 @@
 #include "callback.h"
 #include "loadorder.h"
 #include "elfdll.h"
+#include "server.h"
 
-DEFAULT_DEBUG_CHANNEL(module)
-DECLARE_DEBUG_CHANNEL(win32)
+DEFAULT_DEBUG_CHANNEL(module);
+DECLARE_DEBUG_CHANNEL(win32);
 
 /*************************************************************************
  *		MODULE_WalkModref
@@ -328,29 +329,6 @@
     return retval;
 }
 
-/*************************************************************************
- *		MODULE_SendLoadDLLEvents
- * 
- * Sends DEBUG_DLL_LOAD events for all outstanding modules.
- *
- * NOTE: Assumes that the process critical section is held!
- *
- */
-void MODULE_SendLoadDLLEvents( void )
-{
-    WINE_MODREF *wm;
-
-    for ( wm = PROCESS_Current()->modref_list; wm; wm = wm->next )
-    {
-        if ( wm->type != MODULE32_PE ) continue;
-        if ( wm == PROCESS_Current()->exe_modref ) continue;
-        if ( wm->flags & WINE_MODREF_DEBUG_EVENT_SENT ) continue;
-
-        DEBUG_SendLoadDLLEvent( -1 /*FIXME*/, wm->module, &wm->modname );
-        wm->flags |= WINE_MODREF_DEBUG_EVENT_SENT;
-    }
-}
-
 
 /***********************************************************************
  *           MODULE_CreateDummyModule
@@ -1352,8 +1330,6 @@
 	wm = MODULE_LoadLibraryExA( libname, hfile, flags );
 	if ( wm )
 	{
-                MODULE_SendLoadDLLEvents();
-                        
 		if ( !MODULE_DllProcessAttach( wm, NULL ) )
 		{
 			WARN_(module)("Attach failed for module '%s', \n", libname);
@@ -1381,7 +1357,7 @@
  */
 WINE_MODREF *MODULE_LoadLibraryExA( LPCSTR libname, HFILE hfile, DWORD flags )
 {
-	DWORD err;
+	DWORD err = GetLastError();
 	WINE_MODREF *pwm;
 	int i;
 	module_loadorder_t *plo;
@@ -1402,26 +1378,27 @@
 
 	for(i = 0; i < MODULE_LOADORDER_NTYPES; i++)
 	{
+                SetLastError( ERROR_FILE_NOT_FOUND );
 		switch(plo->loadorder[i])
 		{
 		case MODULE_LOADORDER_DLL:
 			TRACE("Trying native dll '%s'\n", libname);
-			pwm = PE_LoadLibraryExA(libname, flags, &err);
+			pwm = PE_LoadLibraryExA(libname, flags);
 			break;
 
 		case MODULE_LOADORDER_ELFDLL:
 			TRACE("Trying elfdll '%s'\n", libname);
-			pwm = ELFDLL_LoadLibraryExA(libname, flags, &err);
+			pwm = ELFDLL_LoadLibraryExA(libname, flags);
 			break;
 
 		case MODULE_LOADORDER_SO:
 			TRACE("Trying so-library '%s'\n", libname);
-			pwm = ELF_LoadLibraryExA(libname, flags, &err);
+			pwm = ELF_LoadLibraryExA(libname, flags);
 			break;
 
 		case MODULE_LOADORDER_BI:
 			TRACE("Trying built-in '%s'\n", libname);
-			pwm = BUILTIN32_LoadLibraryExA(libname, flags, &err);
+			pwm = BUILTIN32_LoadLibraryExA(libname, flags);
 			break;
 
 		default:
@@ -1443,16 +1420,15 @@
 			pwm->refCount++;
 
 			LeaveCriticalSection(&PROCESS_Current()->crit_section);
-
+                        SetLastError( err );  /* restore last error */
 			return pwm;
 		}
 
-		if(err != ERROR_FILE_NOT_FOUND)
+		if(GetLastError() != ERROR_FILE_NOT_FOUND)
 			break;
 	}
 
-	WARN("Failed to load module '%s'; error=0x%08lx, \n", libname, err);
-	SetLastError(err);
+	WARN("Failed to load module '%s'; error=0x%08lx, \n", libname, GetLastError());
 	LeaveCriticalSection(&PROCESS_Current()->crit_section);
 	return NULL;
 }
@@ -1610,8 +1586,11 @@
     /* Call process detach notifications */
     if ( PROCESS_Current()->free_lib_count <= 1 )
     {
+        struct unload_dll_request *req = get_req_buffer();
+
         MODULE_DllProcessDetach( FALSE, NULL );
-        DEBUG_SendUnloadDLLEvent( wm->module );
+        req->base = (void *)wm->module;
+        server_call_noerr( REQ_UNLOAD_DLL );
     }
 
     TRACE("END\n");
