diff --git a/loader/main.c b/loader/main.c
index 8ee5a4e..e1bcee8 100644
--- a/loader/main.c
+++ b/loader/main.c
@@ -51,6 +51,9 @@
 
     int queueSize;
 
+    /* Load the configuration file */
+    if (!PROFILE_LoadWineIni()) return 0;
+
     SpyInit();
 
 #ifndef WINELIB
@@ -89,7 +92,7 @@
 
 #ifndef WINELIB    
       /* Initialize the DOS memory */
-    INT21_Init();
+    if (!INT21_Init()) return 0;
 
       /* Create USER heap */
     if (!USER_HeapInit()) return 0;
diff --git a/loader/module.c b/loader/module.c
index 5c9557a..e97c806 100644
--- a/loader/module.c
+++ b/loader/module.c
@@ -954,14 +954,16 @@
           /* Create the module structure */
 
         hModule = MODULE_LoadExeHeader( fd, &ofs );
-        if (hModule == 21) hModule = PE_LoadModule( fd, &ofs, paramBlock );
-        close( fd );
         if (hModule < 32)
         {
-            fprintf( stderr, "LoadModule: can't load '%s', error=%d\n",
-                     name, hModule );
+            if (hModule == 21) hModule = PE_LoadModule( fd, &ofs, paramBlock );
+            close(fd);
+            if (hModule < 32)
+                fprintf( stderr, "LoadModule: can't load '%s', error=%d\n",
+                         name, hModule );
             return hModule;
         }
+        close( fd );
         pModule = (NE_MODULE *)GlobalLock( hModule );
 
           /* Allocate the segments for this module */
diff --git a/loader/ne_image.c b/loader/ne_image.c
index 80eea87..da9675d 100644
--- a/loader/ne_image.c
+++ b/loader/ne_image.c
@@ -320,7 +320,8 @@
 		if(additive && offset)
         	fprintf(stderr,"Additive selector to %4.4x.Please report\n",offset);
 	    } 
-	    while (offset != 0xffff && !additive);
+            /* FIXME: Quicken 5 has a zero offset fixup.  This seems to work */
+	    while (offset && offset != 0xffff && !additive);
 	    break;
 	    
 	  default:
diff --git a/loader/pe_image.c b/loader/pe_image.c
index f7f3f72..3d749c1 100644
--- a/loader/pe_image.c
+++ b/loader/pe_image.c
@@ -38,7 +38,9 @@
 void my_wcstombs(char * result, u_short * source, int len)
 {
   while(len--) {
-    if(isascii(*source)) *result++ = *source++;
+    /* this used to be isascii, but see isascii implementation in Linux'
+	   ctype.h */
+    if(*source<255) *result++ = *source++;
     else {
       printf("Unable to handle unicode right now\n");
       exit(0);
@@ -206,7 +208,7 @@
 	  }
 	  dprintf_win32(stddeb, "--- %s %s.%d\n", pe_name->Name, Module, pe_name->Hint);
 #ifndef WINELIB /* FIXME: JBP: Should this happen in libwine.a? */
-	/* Both calls should be unified into GetProcAddress */
+	/* FIXME: Both calls should be unified into GetProcAddress */
 	  *thunk_list=(unsigned int)RELAY32_GetEntryPoint(Module,pe_name->Name,pe_name->Hint);
 	  if(*thunk_list == 0)
 	  	*thunk_list = WIN32_GetProcAddress(MODULE_FindModule(Module),
@@ -236,7 +238,11 @@
         }
         dprintf_win32(stddeb, "--- %s %s.%d\n", pe_name->Name, Module, pe_name->Hint);
 #ifndef WINELIB /* FIXME: JBP: Should this happen in libwine.a? */
+	/* FIXME: Both calls should be unified into GetProcAddress */
         *thunk_list=(unsigned int)RELAY32_GetEntryPoint(Module,pe_name->Name,pe_name->Hint);
+	if(*thunk_list == 0)
+	  	*thunk_list = WIN32_GetProcAddress(MODULE_FindModule(Module),
+				pe_name->Name);
 #else
         fprintf(stderr,"JBP: Call to RELAY32_GetEntryPoint being ignored.\n");
 #endif
@@ -346,6 +352,7 @@
 {
 	int i, result;
     unsigned int load_addr;
+	struct Directory dir;
 
 	wpnt->pe = xmalloc(sizeof(struct pe_data));
 	memset(wpnt->pe,0,sizeof(struct pe_data));
@@ -426,17 +433,89 @@
 
 	if(strcmp(wpnt->pe->pe_seg[i].Name, ".rsrc") == 0) {
 	    wpnt->pe->pe_resource = (struct PE_Resource_Directory *) result;
-
+#if 0
+/* FIXME pe->resource_offset should be deleted from structure if this
+ ifdef doesn't break anything */
 	    /* save offset for PE_FindResource */
 	    wpnt->pe->resource_offset = wpnt->pe->pe_seg[i].Virtual_Address - 
 					wpnt->pe->pe_seg[i].PointerToRawData;
+#endif	
 	    }
-	
 	if(strcmp(wpnt->pe->pe_seg[i].Name, ".reloc") == 0)
 		wpnt->pe->pe_reloc = (struct PE_Reloc_Block *) result;
 
 	}
 
+	/* There is word that the actual loader does not care about the
+	   section names, and only goes for the DataDirectory */
+	dir=wpnt->pe->pe_header->opt_coff.DataDirectory[IMAGE_FILE_EXPORT_DIRECTORY];
+	if(dir.Size)
+	{
+		if(wpnt->pe->pe_export && 
+			wpnt->pe->pe_export!=load_addr+dir.Virtual_address)
+			fprintf(stderr,"wrong export directory??\n");
+		else
+			wpnt->pe->pe_export = load_addr+dir.Virtual_address;
+	}
+
+	dir=wpnt->pe->pe_header->opt_coff.DataDirectory[IMAGE_FILE_IMPORT_DIRECTORY];
+	if(dir.Size)
+	{
+		if(wpnt->pe->pe_import && 
+			wpnt->pe->pe_import!=load_addr+dir.Virtual_address)
+			fprintf(stderr,"wrong export directory??\n");
+		else
+			wpnt->pe->pe_import = load_addr+dir.Virtual_address;
+	}
+
+	dir=wpnt->pe->pe_header->opt_coff.DataDirectory[IMAGE_FILE_RESOURCE_DIRECTORY];
+	if(dir.Size)
+	{
+		if(wpnt->pe->pe_resource && 
+			wpnt->pe->pe_resource!=load_addr+dir.Virtual_address)
+			fprintf(stderr,"wrong resource directory??\n");
+		else
+			wpnt->pe->pe_resource = load_addr+dir.Virtual_address;
+	}
+
+	dir=wpnt->pe->pe_header->opt_coff.DataDirectory[IMAGE_FILE_BASE_RELOCATION_TABLE];
+	if(dir.Size)
+	{
+		if(wpnt->pe->pe_reloc && 
+			wpnt->pe->pe_reloc!=load_addr+dir.Virtual_address)
+			fprintf(stderr,"wrong export directory??\n");
+		else
+			wpnt->pe->pe_reloc = load_addr+dir.Virtual_address;
+	}
+
+	if(wpnt->pe->pe_header->opt_coff.DataDirectory
+		[IMAGE_FILE_EXCEPTION_DIRECTORY].Size)
+		dprintf_win32(stdnimp,"Exception directory ignored\n");
+
+	if(wpnt->pe->pe_header->opt_coff.DataDirectory
+		[IMAGE_FILE_SECURITY_DIRECTORY].Size)
+		dprintf_win32(stdnimp,"Security directory ignored\n");
+
+	if(wpnt->pe->pe_header->opt_coff.DataDirectory
+		[IMAGE_FILE_DEBUG_DIRECTORY].Size)
+		dprintf_win32(stdnimp,"Debug directory ignored\n");
+
+	if(wpnt->pe->pe_header->opt_coff.DataDirectory
+		[IMAGE_FILE_DESCRIPTION_STRING].Size)
+		dprintf_win32(stdnimp,"Description string ignored\n");
+
+	if(wpnt->pe->pe_header->opt_coff.DataDirectory
+		[IMAGE_FILE_MACHINE_VALUE].Size)
+		dprintf_win32(stdnimp,"Machine Value ignored\n");
+
+	if(wpnt->pe->pe_header->opt_coff.DataDirectory
+		[IMAGE_FILE_THREAD_LOCAL_STORAGE].Size)
+		 dprintf_win32(stdnimp,"Thread local storage ignored\n");
+
+	if(wpnt->pe->pe_header->opt_coff.DataDirectory
+		[IMAGE_FILE_CALLBACK_DIRECTORY].Size)
+		dprintf_win32(stdnimp,"Callback directory ignored\n");
+
 
 	if(wpnt->pe->pe_import) fixup_imports(wpnt);
 	if(wpnt->pe->pe_export) dump_exports(wpnt->pe->pe_export,load_addr);
diff --git a/loader/signal.c b/loader/signal.c
index 1968046..adc2c64 100644
--- a/loader/signal.c
+++ b/loader/signal.c
@@ -68,6 +68,17 @@
         fprintf( stderr,"In win_fault %x:%lx\n",
                  CS_reg(context), EIP_reg(context) );
     }
+
+      /* If SIGTRAP not caused by breakpoint or single step 
+         don't jump into the debugger */
+    if ((signal == SIGTRAP) && !(EFL_reg(context) & STEP_FLAG))
+    {
+        DBG_ADDR addr;
+        addr.seg = CS_reg(context);
+        addr.off = EIP_reg(context) - 1;
+        if (DEBUG_FindBreakpoint(&addr) == -1) return;
+    }
+
     XUngrabPointer(display, CurrentTime);
     XUngrabServer(display);
     XFlush(display);
diff --git a/loader/task.c b/loader/task.c
index 5e45faf..08d730c 100644
--- a/loader/task.c
+++ b/loader/task.c
@@ -77,7 +77,7 @@
 {
     static const char program_name[] = "KRNL386.EXE";
     char **e, *p;
-    int initial_size, size, i, winpathlen, windirlen, sysdirlen;
+    int initial_size, size, i, winpathlen, sysdirlen;
     HANDLE handle;
 
     extern char **environ;
@@ -88,7 +88,6 @@
      * ...
      * ASCIIZ   string n
      * ASCIIZ   PATH=xxx
-     * ASCIIZ   windir=xxx
      * BYTE     0
      * WORD     1
      * ASCIIZ   program name (e.g. C:\WINDOWS\SYSTEM\KRNL386.EXE)
@@ -103,10 +102,8 @@
         winpathlen += len + 1;
     }
     if (!winpathlen) winpathlen = 1;
-    windirlen  = GetWindowsDirectory( NULL, 0 ) + 1;
     sysdirlen  = GetSystemDirectory( NULL, 0 ) + 1;
     initial_size = 5 + winpathlen +           /* PATH=xxxx */
-                   7 + windirlen +            /* windir=xxxx */
                    1 +                        /* BYTE 0 at end */
                    sizeof(WORD) +             /* WORD 1 */
                    sysdirlen +                /* program directory */
@@ -148,7 +145,7 @@
 	}
     }
 
-    /* Now add the path and Windows directory */
+    /* Now add the path */
 
     strcpy( p, "PATH=" );
     for (i = 0, p += 5; ; i++)
@@ -160,10 +157,6 @@
     if (p[-1] == ';') p[-1] = '\0';
     else p++;
 
-    strcpy( p, "windir=" );
-    GetWindowsDirectory( p + 7, windirlen );
-    p += 7 + windirlen;
-
     /* Now add the program name */
 
     *p++ = '\0';
@@ -575,34 +568,36 @@
 static void TASK_DeleteTask( HTASK hTask )
 {
     TDB *pTask;
+    HANDLE hPDB;
 
     if (!(pTask = (TDB *)GlobalLock( hTask ))) return;
+    hPDB = pTask->hPDB;
+
+    /* Free the task module */
+
+    FreeModule( pTask->hModule );
 
     /* Close all open files of this task */
 
     FILE_CloseAllFiles( pTask->hPDB );
 
-      /* Free the task module */
-
-    FreeModule( pTask->hModule );
-
-      /* Free all memory used by this task (including the 32-bit stack, */
-      /* the environment block and the thunk segments). */
-
-    GlobalFreeAll( pTask->hPDB );
-
-      /* Free message queue */
+    /* Free the message queue */
 
     MSG_DeleteMsgQueue( pTask->hQueue );
 
-      /* Free the selector aliases */
+    /* Free the selector aliases */
 
     GLOBAL_FreeBlock( pTask->hCSAlias );
     GLOBAL_FreeBlock( pTask->hPDB );
 
-      /* Free the task structure itself */
+    /* Free the task structure itself */
 
     GlobalFree( hTask );
+
+    /* Free all memory used by this task (including the 32-bit stack, */
+    /* the environment block and the thunk segments). */
+
+    GlobalFreeAll( hPDB );
 }
 
 
@@ -626,7 +621,7 @@
     if (nTaskCount <= 1)
     {
         dprintf_task( stddeb, "Killing the last task, exiting\n" );
-        exit(0);
+        ExitWindows( 0, 0 );
     }
 
     /* Remove the task from the list to be sure we never switch back to it */
@@ -792,13 +787,13 @@
     ESI_reg(&context) = (DWORD)pTask->hPrevInstance;
     EDI_reg(&context) = (DWORD)pTask->hInstance;
     ES_reg (&context) = (WORD)pTask->hPDB;
-#endif
 
     /* Initialize the local heap */
     if ( pModule->heap_size )
     {
         LocalInit( pTask->hInstance, 0, pModule->heap_size );
     }    
+#endif
 
 
     /* Initialize the INSTANCEDATA structure */
