diff --git a/loader/task.c b/loader/task.c
index 8c38da3..396e6b7 100644
--- a/loader/task.c
+++ b/loader/task.c
@@ -930,17 +930,44 @@
     BYTE *thunk,*lfunc;
     SEGPTR thunkaddr;
 
-    if (!func) {
-      ERR("Ouch ! MakeProcInstance called with func == NULL !\n");
-      return (FARPROC16)0; /* Windows seems to do the same */
+    TRACE("(%08lx, %04x);", (DWORD)func, hInstance);
+
+    if (!HIWORD(func)) {
+      /* Win95 actually protects via SEH, but this is better for debugging */
+      ERR("Ouch ! Called with invalid func 0x%08lx !\n", (DWORD)func);
+      return (FARPROC16)0;
     }
-    if ( GetTaskDS16() !=hInstance )
+
+    if (hInstance)
     {
-        ERR("Problem with hInstance? Got %04x, using %04x instead\n",
-                   hInstance,GetTaskDS16());
-        hInstance = GetTaskDS16();
+	if ( (!(hInstance & 4)) ||
+	     ((hInstance != 0xffff) && IS_SELECTOR_FREE(hInstance|7)) )
+ 	{
+	    ERR("Invalid hInstance (%04x) passed to MakeProcInstance !\n",
+		hInstance);
+	    return 0;
+	}
     }
-    if (!hInstance) hInstance = CURRENT_DS;
+
+    if ( (CURRENT_DS != hInstance)
+      && (hInstance != 0)
+      && (hInstance != 0xffff) )
+    {
+	/* calling MPI with a foreign DSEG is invalid ! */
+        ERR("Problem with hInstance? Got %04x, using %04x instead\n",
+                   hInstance,CURRENT_DS);
+    }
+
+    /* Always use the DSEG that MPI was entered with.
+     * We used to set hInstance to GetTaskDS16(), but this should be wrong
+     * as CURRENT_DS provides the DSEG value we need.
+     * ("calling" DS, *not* "task" DS !) */
+    hInstance = CURRENT_DS;
+
+    /* no thunking for DLLs */
+    if (NE_GetPtr(FarGetOwner16(hInstance))->flags & NE_FFLAGS_LIBMODULE)
+	return func;
+
     thunkaddr = TASK_AllocThunk( GetCurrentTask() );
     if (!thunkaddr) return (FARPROC16)0;
     thunk = PTR_SEG_TO_LIN( thunkaddr );
@@ -948,12 +975,10 @@
 
     TRACE("(%08lx,%04x): got thunk %08lx\n",
           (DWORD)func, hInstance, (DWORD)thunkaddr );
-    if (((lfunc[0]==0x8c) && (lfunc[1]==0xd8)) ||
-    	((lfunc[0]==0x1e) && (lfunc[1]==0x58))
+    if (((lfunc[0]==0x8c) && (lfunc[1]==0xd8)) || /* movw %ds, %ax */
+    	((lfunc[0]==0x1e) && (lfunc[1]==0x58))    /* pushw %ds, popw %ax */
     ) {
-    	FIXME("thunk would be useless for %p, overwriting with nop;nop;\n", func );
-	lfunc[0]=0x90; /* nop */
-	lfunc[1]=0x90; /* nop */
+    	FIXME("This was the (in)famous \"thunk useless\" warning. We thought we have to overwrite with nop;nop;, but this isn't true.\n");
     }
     
     *thunk++ = 0xb8;    /* movw instance, %ax */
@@ -962,6 +987,7 @@
     *thunk++ = 0xea;    /* ljmp func */
     *(DWORD *)thunk = (DWORD)func;
     return (FARPROC16)thunkaddr;
+    /* CX reg indicates if thunkaddr != NULL, implement if needed */
 }
 
 
