diff --git a/ChangeLog b/ChangeLog
index 407674d..001d4ad 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,107 @@
+----------------------------------------------------------------------
+Tue Jun 14 08:09:14 1994  Bob Amstadt  (bob@pooh)
+
+	* loader/selector.c (GetCurrentPDB): 
+	Added trivial function GetCurrentPDB() which returns the program
+	segment prefix selector.
+
+	* memory/heap.c (HEAP_Free): 
+	If free list is empty, make the freed block the free list.
+
+Fri Jun 10 07:56:49 1994  Bob Amstadt  (bob@pooh)
+
+	* controls/edit.c (EDIT_SetTextMsg): 
+	Do not append a newline at the end of the last line.
+
+	* windows/event.c (SetCapture): 
+	Set winHasCursor if mouse capture succeeds.
+
+Jun 6, 94 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte)
+
+	* [controls/listbox.c]
+	Fix bug in listbox : InsertString should call AddString if -1.
+
+	* [controls/menu.c]
+	New function GetMenuState().
+
+	* [controls/scroll.c] [windows/nonclient.c]
+	Try to make ShowScrollBar() recalc NC_ regions. Not finished !
+
+	* [objects/text.c]
+	Add Stub for TabbedTextOut(), which temporarely call Textout().
+
+	* [windows/keyboard.c] [windows/event.c]
+	New function GetKeyBoardState() with an KeyStateTable array
+		& associated handling in function EVENT_key().
+
+Mon Jun 13 16:45:24 MET DST 1994 (erik@hacktic.nl)
+
+        * [controls/menu.c]
+        IsMenu() added.
+
+        * [loader/library.c]
+        ModuleFirst(), ModuleNext(), ModuleFindName(), ModuleFindHandle()
+        added.
+
+        * [object/gdiobj.c]
+        IsGDIObject() added.
+
+        * [miscemu/int2[56].c]
+        bugfix: both didn't leave flags pushed on 16bit-stack.
+        (winfile gets a bit further)
+
+        * [miscemu/int16.c]
+        Added (empty).
+
+Sat Jun 11 22:56:48 1994 Jon Tombs (jon@esix2.us.es)
+	* windows/event.c:
+	Added code to drop redundant motion Events in the XEvent queue.
+
+Thu Jun  9 10:55:55 MET DST 1994  Jochen Hein ( Hein@Student.TU-Clausthal.de )
+
+	* [misc/main.c misc/message.c include/texts.h]
+	Removed the text-constants from message.c into variables
+	which may be changed from X-resources.
+
+	* [misc/main.c misc/message.c]
+	added <locale.h> and setlocale() to main.c, used toupper() in message.c
+
+Mon, 13 Jun 94 09:41:16 -0500 Paul Bramel <paulbr@comm.mot.com>
+
+        * controls/button.c ( [CR]B_LButton* ) 
+        left rc.right at full window width so click on label also 
+        activates the control (MSWin behavior)
+
+Sat Jun 11 19:05:40 1994  Olaf Flebbe  (flebbe@tat.physik.uni-tuebingen.de)
+
+        * include/windows.h:
+          functions pointers can not be packed.
+          (annoying warnings with forthcomming gcc-2.6.x)
+        
+        * loader/main.c (InitDLL): 
+          Fixed a printf statement. (for control.exe) 
+
+          (InitializeLoadedDLLs): 
+          deleted shadow definition of  *wpnt.
+          (Breaks many programs, because now COMMDLG will be
+           initialized :-(
+
+        * windows/win.c (SetWindowText): 
+          added missing breaks; (PENSATE starts) 
+
+        * windows/graphics.c (FloodFill): 
+          Proper boundarys. (BANGBANG starts) FloodFile_rec should
+          be rewritten.
+
+        * objects/font.c (FONT_GetMetrics): 
+          TYPO: use font->perchar only if it is defined. (WRITE starts)
+
+Sun June 12, Peter Broadhurst (pbr@ua.nwl.ac.uk)
+        controls/scroll.c:
+        Fixes for improved behaviour when dragging thumb;
+        Added SB_THUMBPOSITION message when thumb is released.
+
+----------------------------------------------------------------------
 Tue Jun  7 08:41:27 1994  Bob Amstadt  (bob@pooh)
 
 	* loader/selector.c (FixupFunctionPrologs): 
@@ -69,7 +173,7 @@
 
 Jun 6, 94 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte)
 
-	* [tools/.c]
+	* [tools/build.c]
 	Change MAX_ORDINALS	define to higher value, 1299 entries.
 	(MMSYSTEM doesn't have succesive numbers, some are around 1200).
 
@@ -83,9 +187,6 @@
 	* [misc/message.c] [controls/combo.c]
 	Add an InvalidateRect() in WM_SHOWWINDOW to statisfy the new 'saveunder'.
 
-	* [windows/winpos.c]
-	Bug fix in SetWindowPos(), (redraw was done if SWP_NOREDRAW set).
-
 	* [windows/win.c]
 	In CreateWindowEx(), do SetMenu() calls after window creation,
 		just before sending to WM_NCCALCSIZE.
diff --git a/DEVELOPERS-HINTS b/DEVELOPERS-HINTS
index da8a598..2ea1e9f 100644
--- a/DEVELOPERS-HINTS
+++ b/DEVELOPERS-HINTS
@@ -1,16 +1,10 @@
 This is intend to be a document to help new developers get started.
 Existing developers should feel free to add there comments.
 
-RESERVING WINE PROJECT ARES:
-
-If you wish to work on a specific set of API functions.  Send
-mail to wine-project@amscons.com.  The automatic mail handler
-will provide you with instructions.
-
 SUBMITTING YOUR WORK:
 
 Submissions of code for inclussion into Wine should be sent to
-bob@amscons.com (Bob Amstadt).  You MUST provide a suitable
+wine-new@amscons.com (Bob Amstadt).  You MUST provide a suitable
 ChangeLog entry for any work that you submit.  I prefer new code
 to be submitted as unified diffs (diff -u) off of the latest release.  
 Releases are every Tuesday evening (approximately 17:00 PST or 
diff --git a/Imakefile b/Imakefile
index f87fc8f..fec5a48 100644
--- a/Imakefile
+++ b/Imakefile
@@ -100,4 +100,4 @@
 install::
 
 etags::
-	etags `find . -name '*.[chS]'`
\ No newline at end of file
+	etags `find . -name '*.[chS]'`
diff --git a/README b/README
index 5432ca5..20e5748 100644
--- a/README
+++ b/README
@@ -38,9 +38,9 @@
 	NetBSD-current
 	FreeBSD-current or FreeBSD 1.1
 
-To build Wine, first do a "./Configure" and then a "make".  The
-executable "wine" will be built.  "wine" will load and run 16-bit
-Windows' executables. 
+To build Wine, first do a "./Configure" and then a "make" (or "gmake"
+if you're running *BSD).  The executable "wine" will be built.  "wine"
+will load and run 16-bit Windows' executables. 
 
 
 
diff --git a/controls/button.c b/controls/button.c
index 8d96819..67de0ab 100644
--- a/controls/button.c
+++ b/controls/button.c
@@ -540,7 +540,6 @@
     delta = (rc.bottom - rc.top - tm.tmHeight) >> 1;
     rc.top += delta;
     rc.bottom = tm.tmHeight + delta;
-    rc.right = tm.tmHeight;
     if (PtInRect(&rc, MAKEPOINT(lParam)))
     {
 	SetFocus(hWnd);
@@ -569,7 +568,6 @@
     delta = (rc.bottom - rc.top - tm.tmHeight) >> 1;
     rc.top += delta;
     rc.bottom = tm.tmHeight + delta;
-    rc.right = tm.tmHeight;
 
     if (PtInRect(&rc, MAKEPOINT(lParam)))
     {
@@ -625,7 +623,6 @@
     delta = (rc.bottom - rc.top - tm.tmHeight) >> 1;
     rc.top += delta;
     rc.bottom = tm.tmHeight + delta;
-    rc.right = tm.tmHeight;
     if (PtInRect(&rc, MAKEPOINT(lParam)))
 	NOTIFY_PARENT(hWnd, BN_DOUBLECLICKED);
 }
@@ -744,7 +741,6 @@
     delta = (rc.bottom - rc.top - tm.tmHeight) >> 1;
     rc.top += delta;
     rc.bottom = tm.tmHeight + delta;
-    rc.right = tm.tmHeight;
     if (PtInRect(&rc, MAKEPOINT(lParam)))
     {
 	SetFocus(hWnd);
@@ -773,7 +769,6 @@
     delta = (rc.bottom - rc.top - tm.tmHeight) >> 1;
     rc.top += delta;
     rc.bottom = tm.tmHeight + delta;
-    rc.right = tm.tmHeight;
 
     if (PtInRect(&rc, MAKEPOINT(lParam)))
     {
@@ -801,7 +796,6 @@
     delta = (rc.bottom - rc.top - tm.tmHeight) >> 1;
     rc.top += delta;
     rc.bottom = tm.tmHeight + delta;
-    rc.right = tm.tmHeight;
     if (PtInRect(&rc, MAKEPOINT(lParam)))
 	NOTIFY_PARENT(hWnd, BN_DOUBLECLICKED);
 }
diff --git a/controls/combo.c b/controls/combo.c
index 22a1b08..ef6c3b7 100644
--- a/controls/combo.c
+++ b/controls/combo.c
@@ -103,6 +103,14 @@
 		printf("Combo WM_DESTROY %lX !\n", lphc);
 #endif
 		return DefWindowProc( hwnd, message, wParam, lParam );
+	case WM_SHOWWINDOW:
+#ifdef DEBUG_COMBO
+		printf("ComboBox WM_SHOWWINDOW hWnd=%04X !\n", hwnd);
+#endif
+		if (!(wParam == 0 && lParam == 0L)) {
+			InvalidateRect(hwnd, NULL, TRUE);
+			}
+	    break;
 	
     case WM_COMMAND:
 		wndPtr = WIN_FindWndPtr(hwnd);
diff --git a/controls/edit.c b/controls/edit.c
index 8d43172..abafcfe 100644
--- a/controls/edit.c
+++ b/controls/edit.c
@@ -15,9 +15,7 @@
 #include "class.h"
 #include "user.h"
 
-/*
-#define DEBUG_EDIT
-*/
+#define DEBUG_EDIT /* */
 
 #define NOTIFY_PARENT(hWndCntrl, wNotifyCode) \
 	SendMessage(GetParent(hWndCntrl), WM_COMMAND, \
@@ -1993,7 +1991,7 @@
 	es->hText = EDIT_HEAP_REALLOC(es->hText, len + 3);
 	text = EDIT_HEAP_ADDR(es->hText);
 	strcpy(text, (char *)lParam);
-	text[len] = '\n';
+/*	text[len] = '\n'; */ /* Removed by Bob Amstadt */
 	text[len + 1] = '\0';
 	text[len + 2] = '\0';
 	EDIT_BuildTextPointers(hwnd);
diff --git a/controls/listbox.c b/controls/listbox.c
index 522131a..196cb9b 100644
--- a/controls/listbox.c
+++ b/controls/listbox.c
@@ -833,6 +833,10 @@
 	HANDLE	hTemp;
 	LPSTR	str;
 	UINT	Count;
+#ifdef DEBUG_LISTBOX
+    printf("ListBoxInsertString(%04X, %d, %08X);\n", hwnd, uIndex, newstr);
+#endif
+	if (uIndex == (UINT)-1) return ListBoxAddString(hwnd, newstr);
 	lphl = ListBoxGetWindowAndStorage(hwnd, &wndPtr);
 	if (lphl == NULL) return LB_ERR;
 	if (uIndex >= lphl->ItemsCount) return LB_ERR;
@@ -846,7 +850,7 @@
 	hTemp = USER_HEAP_ALLOC(GMEM_MOVEABLE, sizeof(LISTSTRUCT));
 	lplsnew = (LPLISTSTRUCT) USER_HEAP_ADDR(hTemp);
     if (lplsnew == NULL) {
-		printf("ListBoxAddString() // Bad allocation of new item !\n");
+		printf("ListBoxInsertString() // Bad allocation of new item !\n");
 		return LB_ERRSPACE;
 		}
 	ListBoxDefaultItem(hwnd, wndPtr, lphl, lplsnew);
@@ -862,6 +866,9 @@
 			if (str == NULL) return LB_ERRSPACE;
 			strcpy(str, newstr);
 			newstr = str;
+#ifdef DEBUG_LISTBOX
+		    printf("ListBoxInsertString // after strcpy '%s'\n", str);
+#endif
 			}
 		}
 	lplsnew->lpNext = NULL;
@@ -886,6 +893,9 @@
 		InvalidateRect(hwnd, NULL, TRUE);
 		UpdateWindow(hwnd);
 		}
+#ifdef DEBUG_LISTBOX
+    printf("ListBoxInsertString // count=%d\n", lphl->ItemsCount);
+#endif
 	return lphl->ItemsCount;
 }
 
diff --git a/controls/menu.c b/controls/menu.c
index 6470497..58a9865 100644
--- a/controls/menu.c
+++ b/controls/menu.c
@@ -845,6 +845,9 @@
 	if (lpitem == NULL) goto EndOfPaint;
 	for(i = 0; i < lppop->nItems; i++) {
 		CopyRect(&rect2, &lpitem->rect);
+#ifdef DEBUG_MENU
+		printf("StdDrawMenuBar // start left=%d\n", rect2.left);
+#endif
 		if ((lpitem->item_flags & MF_CHECKED) == MF_CHECKED) {
 			hMemDC = CreateCompatibleDC(hDC);
 			if (lpitem->hCheckBit == 0) {
@@ -856,7 +859,11 @@
 				GetObject(lpitem->hCheckBit, sizeof(BITMAP), (LPSTR)&bm);
 				}
 			BitBlt(hDC, rect2.left, rect2.top + 1,
-			bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
+				bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
+			rect2.left += bm.bmWidth;
+#ifdef DEBUG_MENU
+			printf("StdDrawMenuBar // MF_CHECKED bm.bmWidth=%d\n", bm.bmWidth);
+#endif
 			DeleteDC(hMemDC);
 			}
 		else {
@@ -866,6 +873,10 @@
 				GetObject(lpitem->hUnCheckBit, sizeof(BITMAP), (LPSTR)&bm);
 				BitBlt(hDC, rect2.left, rect2.top + 1,
 					bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
+				rect2.left += bm.bmWidth;
+#ifdef DEBUG_MENU
+				printf("StdDrawMenuBar // MF_UNCHECKED bm.bmWidth=%d\n", bm.bmWidth);
+#endif
 				DeleteDC(hMemDC);
 				}
 			}
@@ -898,6 +909,9 @@
 				}
 			if ((lpitem->item_flags & MF_HILITE) == MF_HILITE)
 				FillRect(hDC, &rect2, GetStockObject(BLACK_BRUSH));
+#ifdef DEBUG_MENU
+			printf("StdDrawMenuBar // rect2.left=%d\n", rect2.left);
+#endif
 			DrawText(hDC, lpitem->item_text, -1, &rect2, 
 				DT_LEFT | DT_VCENTER | DT_SINGLELINE);
 			SetTextColor(hDC, OldTextColor);
@@ -1073,13 +1087,15 @@
 		lprect->left, lprect->top, lprect->right, lprect->bottom);
 #endif
 	hOldFont = SelectObject(hDC, GetStockObject(SYSTEM_FONT));
-	LineHeight = OldHeight = SYSMETRICS_CYMENU + 1;
+	lppop->CheckWidth = 0;
+	LineHeight = OldHeight = SYSMETRICS_CYMENU + 2;
 	SetRect(&rect, lprect->left, lprect->top, 0, lprect->top + LineHeight);
 	lpitem2 = lppop->firstItem;
 	while (lpitem != NULL) {
 		lpitem = lpitem2;
 		while(rect.right < lprect->right) {
 			if (lpitem == NULL) break;
+			rect.right = rect.left;
 			if ((lpitem->item_flags & MF_BITMAP) == MF_BITMAP) {
 				hBitMap = (HBITMAP)LOWORD((LONG)lpitem->item_text);
 				GetObject(hBitMap, sizeof(BITMAP), (LPSTR)&bm);
@@ -1095,6 +1111,21 @@
 				dwRet = max(SYSMETRICS_CYMENU, (HIWORD(dwRet) + 6));
 				LineHeight = max(LineHeight, (WORD)dwRet);
 				}
+			if ((lpitem->item_flags & MF_CHECKED) == MF_CHECKED) {
+				if (lpitem->hCheckBit != 0)
+					GetObject(lpitem->hCheckBit, sizeof(BITMAP), (LPSTR)&bm);
+				else
+					GetObject(hStdCheck, sizeof(BITMAP), (LPSTR)&bm);
+				rect.right += bm.bmWidth;
+				LineHeight = max(LineHeight, bm.bmHeight);
+				}
+			else {
+				if (lpitem->hUnCheckBit != 0) {
+					GetObject(lpitem->hUnCheckBit, sizeof(BITMAP), (LPSTR)&bm);
+					rect.right += bm.bmWidth;
+					LineHeight = max(LineHeight, bm.bmHeight);
+ 					}
+				}
 			CopyRect(&lpitem->rect, &rect);
 			rect.left = rect.right;
 			lpitem = (LPMENUITEM)lpitem->next;
@@ -1112,7 +1143,7 @@
 			}
 		}
 	lppop->Width = lprect->right - lprect->left;
-	lppop->Height =  rect.bottom - lprect->top;
+	lppop->Height = rect.bottom - lprect->top;
 	lprect->bottom = lprect->top + lppop->Height;
 	CopyRect(&lppop->rect, lprect);
 #ifdef DEBUG_MENUCALC
@@ -1362,8 +1393,10 @@
 {
 	LPPOPUPMENU	menu;
 	LPMENUITEM 	lpitem;
+#ifdef DEBUG_MENU
 	printf("HiliteMenuItem(%04X, %04X, %04X, %04X);\n", 
 						hWnd, hMenu, wItemID, wHilite);
+#endif
 	menu = (LPPOPUPMENU) GlobalLock(hMenu);
 	if (menu == NULL) return FALSE;
 	lpitem = FindMenuItem(hMenu, wItemID, wHilite);
@@ -1373,6 +1406,24 @@
 
 
 /**********************************************************************
+ *			GetMenuState		[USER.250]
+ */
+WORD GetMenuState(HMENU hMenu, WORD wItemID, WORD wFlags)
+{
+	LPPOPUPMENU	menu;
+	LPMENUITEM 	lpitem;
+#ifdef DEBUG_MENU
+	printf("GetMenuState(%04X, %04X, %04X);\n", hMenu, wItemID, wFlags);
+#endif
+	menu = (LPPOPUPMENU) GlobalLock(hMenu);
+	if (menu == NULL) return -1;
+	lpitem = FindMenuItem(hMenu, wItemID, wFlags);
+	if (lpitem == NULL) return -1;
+	return lpitem->item_flags;
+}
+
+
+/**********************************************************************
  *			GetMenuItemCount		[USER.263]
  */
 WORD GetMenuItemCount(HMENU hMenu)
@@ -2186,10 +2237,20 @@
 #endif
 		lppop = (LPPOPUPMENU) GlobalLock(wndPtr->wIDmenu);
 		if (lppop == NULL) return;
-		if ((lppop->rect.bottom - lppop->rect.top) != 0) {
+		if (lppop->Height != 0) {
+			int oldHeight;
+			oldHeight = lppop->Height;
 			hDC = GetWindowDC(hWnd);
 			StdDrawMenuBar(hDC, &lppop->rect, lppop, FALSE);
 			ReleaseDC(hWnd, hDC);
+			if (oldHeight != lppop->Height) {
+				printf("DrawMenuBar // menubar changed oldHeight=%d != lppop->Height=%d\n",
+											oldHeight, lppop->Height);
+				/* Reduce ClientRect according to MenuBar height */
+				wndPtr->rectClient.top -= oldHeight;
+				wndPtr->rectClient.top += lppop->Height;
+				SendMessage(hWnd, WM_NCPAINT, 1, 0L);
+				}
 			}
 		else
 			SendMessage(hWnd, WM_NCPAINT, 1, 0L);
@@ -2319,4 +2380,17 @@
     return next_item;
 }
 
+/**********************************************************************
+ *		IsMenu(USER.358)
+ */
+BOOL IsMenu(HMENU hMenu)
+{
+	LPPOPUPMENU	menu;
 
+	menu = (LPPOPUPMENU) GlobalLock(hMenu);
+	if (menu == NULL) 
+		return FALSE;
+
+	GlobalUnlock(hMenu);
+	return TRUE;
+}
diff --git a/controls/scroll.c b/controls/scroll.c
index af1d12d..e962e8c 100644
--- a/controls/scroll.c
+++ b/controls/scroll.c
@@ -1,8 +1,10 @@
-/*
+/*		
  * Interface code to SCROLLBAR widget
  *
  * Copyright  Martin Ayotte, 1993
  *
+ * Small fixes and implemented SB_THUMBPOSITION
+ * by Peter Broadhurst, 940611
  */
 
 /*
@@ -58,6 +60,8 @@
 	RECT 	rect, rect2;
 	LPCREATESTRUCT lpCreat;
 	static RECT rectsel;
+	POINT *pt;
+	pt=(POINT*)&lParam;
 	switch(message) {
     case WM_CREATE:
 		lpCreat = (LPCREATESTRUCT)lParam;
@@ -95,15 +99,15 @@
 	
 	case WM_LBUTTONDOWN:
 		SetCapture(hWnd);
-		ScrollBarButtonDown(hWnd, SB_CTL, LOWORD(lParam), HIWORD(lParam));
+		ScrollBarButtonDown(hWnd, SB_CTL, pt->x,pt->y);
 		break;
 	case WM_LBUTTONUP:
 		ReleaseCapture();
-		ScrollBarButtonUp(hWnd, SB_CTL, LOWORD(lParam), HIWORD(lParam));
+		ScrollBarButtonUp(hWnd, SB_CTL, pt->x,pt->y);
 		break;
 
 	case WM_MOUSEMOVE:
-		ScrollBarMouseMove(hWnd, SB_CTL, wParam, LOWORD(lParam), HIWORD(lParam));
+		ScrollBarMouseMove(hWnd, SB_CTL, wParam, pt->x,pt->y);
 		break;
 	case WM_KEYDOWN:
 	case WM_KEYUP:
@@ -297,7 +301,24 @@
 	printf("ScrollBarButtonUp // x=%d y=%d\n", x, y); 
 #endif
 	lphs = GetScrollObjectStruct(hWnd, nBar);
-	lphs->ThumbActive = FALSE;
+	if(lphs->ThumbActive)
+	  {
+	    HWND hWndOwner,hWndParent;
+	    if (nBar == SB_CTL) {
+		hWndParent = GetParent(hWnd);
+		hWndOwner = lphs->hWndOwner;
+		}
+	    else {
+		hWndParent = hWnd;
+		hWndOwner = 0;
+		}
+
+	
+	    SendMessage(hWndParent, lphs->Direction, 
+			SB_THUMBPOSITION, MAKELONG(lphs->ThumbVal, hWndOwner));
+	    lphs->ThumbActive = FALSE;
+	  }
+	  
 	if (lphs->ButtonDown != 0) {
 		lphs->ButtonDown = 0;
 		if (nBar == SB_CTL) {
@@ -337,21 +358,38 @@
 		printf("ScrollBarButtonMove SB_?SCROLL // x=%d y=%d\n", x, y);
 #endif
 		}
-	if (lphs->Direction == WM_VSCROLL) {
-		int butsiz = lphs->rect.right - lphs->rect.left;
-		y = y - butsiz - (butsiz >> 1);
-		}
-	else {
-		int butsiz = lphs->rect.bottom - lphs->rect.top;
-		y = x - butsiz - (butsiz >> 1);
-		}
-	x = (y * (lphs->MaxVal - lphs->MinVal) / 
-			lphs->MaxPix) + lphs->MinVal;
+
+	if(x<lphs->rect.left||x>lphs->rect.right||
+	   y<lphs->rect.top||y>lphs->rect.bottom)
+	  {
+
 #ifdef DEBUG_SCROLL
-	printf("Scroll WM_MOUSEMOVE val=%d pix=%d\n", x, y);
+	    printf("Rejecting thumb position !\n");
+#endif
+	    lphs->ThumbVal=lphs->CurVal;/*revert to last set position*/
+	  }
+	else
+	  {
+	
+	    if (lphs->Direction == WM_VSCROLL) {
+	      int butsiz = lphs->rect.right - lphs->rect.left;
+	      y = y - butsiz - (butsiz >> 1);
+	    }
+	    else {
+	      int butsiz = lphs->rect.bottom - lphs->rect.top;
+	      y = x - butsiz - (butsiz >> 1);
+	    }
+	    if(y<0)y=0;
+	    if(y>lphs->MaxPix)y=lphs->MaxPix;
+	    lphs->ThumbVal = (y * (lphs->MaxVal - lphs->MinVal) / 
+			      lphs->MaxPix) + lphs->MinVal;
+	  }
+
+#ifdef DEBUG_SCROLL
+	printf("Scroll WM_MOUSEMOVE val=%d pix=%d\n", lphs->ThumbVal, y);
 #endif
 	SendMessage(hWndParent, lphs->Direction, 
-		SB_THUMBTRACK, MAKELONG(x, hWndOwner));
+		SB_THUMBTRACK, MAKELONG(lphs->ThumbVal, hWndOwner));
 }
 
 
@@ -442,9 +480,11 @@
 		lphs->rectDown.left = rect.right - w2;
 		}
 	if (lphs->MaxVal != lphs->MinVal)
-	lphs->CurPix = lphs->MaxPix * (abs((short)lphs->CurVal) - abs(lphs->MinVal)) / 
-    		(abs(lphs->MaxVal) - abs(lphs->MinVal));
+	lphs->CurPix = lphs->MaxPix * (lphs->CurVal - lphs->MinVal) / 
+    		(lphs->MaxVal - lphs->MinVal);
+	if(lphs->CurPix <0)lphs->CurPix=0;
 	if (lphs->CurPix > lphs->MaxPix)  lphs->CurPix = lphs->MaxPix;
+
 	hMemDC = CreateCompatibleDC(hDC);
 	if (lphs->Direction == WM_VSCROLL) {
 		GetObject(hUpArrow, sizeof(BITMAP), (LPSTR)&bm);
@@ -597,6 +637,7 @@
 		lphs->rect.right = width;
 		lphs->hWndOwner = hWnd;
 		wndPtr->VScroll = lphs;
+	    wndPtr->scroll_flags |= 0x0001;
 		if (wndPtr->dwStyle & WS_HSCROLL) height += SYSMETRICS_CYHSCROLL;
 		}
 	if (wndPtr->dwStyle & WS_HSCROLL) {
@@ -609,6 +650,7 @@
 		lphs->rect.bottom = height;
 		lphs->hWndOwner = hWnd;
 		wndPtr->HScroll = lphs;
+	    wndPtr->scroll_flags |= 0x0002;
 		}
 }
 
@@ -642,8 +684,10 @@
 	nRet = lphs->CurVal;
 	lphs->CurVal = (short)nPos;
 	if (lphs->MaxVal != lphs->MinVal)
-	lphs->CurPix = lphs->MaxPix * (abs((short)nPos) - abs(lphs->MinVal)) / 
-    		(abs(lphs->MaxVal) - abs(lphs->MinVal));
+	lphs->CurPix = lphs->MaxPix * (lphs->CurVal - lphs->MinVal) / 
+    		(lphs->MaxVal - lphs->MinVal);
+	if(lphs->CurPix <0)lphs->CurPix=0;
+
     if (lphs->CurPix > lphs->MaxPix)  lphs->CurPix = lphs->MaxPix;
 #ifdef DEBUG_SCROLL
     printf("SetScrollPos val=%d pixval=%d pixmax%d\n",
@@ -691,12 +735,15 @@
 	HDC		hDC;
     lphs = GetScrollObjectStruct(hWnd, nBar);
     if (lphs == NULL) return;
+
+/*    should a bad range be rejected here? 
+ */
     lphs->MinVal = (short)MinPos;
     lphs->MaxVal = (short)MaxPos;
     if (lphs->MaxVal != lphs->MinVal)
-	lphs->CurPix = abs(lphs->MaxVal) * 
-		(abs(lphs->CurVal) - abs(lphs->MinVal)) / 
-    		(abs(lphs->MaxVal) - abs(lphs->MinVal));
+      lphs->CurPix = lphs->MaxPix * (lphs->CurVal - lphs->MinVal) / 
+	  (lphs->MaxVal - lphs->MinVal);
+    if(lphs->CurPix <0)lphs->CurPix=0;
     if (lphs->CurPix > lphs->MaxPix)  lphs->CurPix = lphs->MaxPix;
 #ifdef DEBUG_SCROLL
     printf("SetScrollRange min=%d max=%d\n", lphs->MinVal, lphs->MaxVal);
@@ -737,32 +784,32 @@
  */
 void ShowScrollBar(HWND hWnd, WORD wBar, BOOL bFlag)
 {
-    WND  *wndPtr;
+	WND  *wndPtr;
+	printf("ShowScrollBar hWnd=%04X wBar=%d bFlag=%d\n", hWnd, wBar, bFlag);
 #ifdef DEBUG_SCROLL
-    printf("ShowScrollBar hWnd=%04X wBar=%d bFlag=%d\n", hWnd, wBar, bFlag);
+	printf("ShowScrollBar hWnd=%04X wBar=%d bFlag=%d\n", hWnd, wBar, bFlag);
 #endif
-    if (wBar == SB_CTL) {
-    	if (bFlag)
-	    ShowWindow(hWnd, SW_SHOW);
-	else
-	    ShowWindow(hWnd, SW_HIDE);
-	return;
-	}
-    wndPtr = WIN_FindWndPtr(hWnd);
-/*
-    if ((wBar == SB_VERT) || (wBar == SB_BOTH)) {
-    	if (bFlag)
-	    wndPtr->dwStyle |= WS_VSCROLL;
-	else
-	    wndPtr->dwStyle &= 0xFFFFFFFFL ^ WS_VSCROLL;
-	}
-    if ((wBar == SB_HORZ) || (wBar == SB_BOTH)) {
-    	if (bFlag)
-	    wndPtr->dwStyle |= WS_HSCROLL;
-	else
-	    wndPtr->dwStyle &= 0xFFFFFFFFL ^ WS_HSCROLL;
-	}
-*/
+	if (wBar == SB_CTL) {
+		if (bFlag)
+			ShowWindow(hWnd, SW_SHOW);
+		else
+			ShowWindow(hWnd, SW_HIDE);
+		return;
+		}
+	wndPtr = WIN_FindWndPtr(hWnd);
+	if ((wBar == SB_VERT) || (wBar == SB_BOTH)) {
+		if (bFlag)
+			wndPtr->scroll_flags != 0x0001;
+		else
+			wndPtr->scroll_flags &= 0xFFFE;
+		}
+	if ((wBar == SB_HORZ) || (wBar == SB_BOTH)) {
+		if (bFlag)
+			wndPtr->scroll_flags != 0x0002;
+		else
+			wndPtr->scroll_flags &= 0xFFFD;
+		}
+	SetWindowPos(hWnd, 0, 0, 0, 0, 0, 
+		SWP_NOZORDER | SWP_NOMOVE | 
+		SWP_NOSIZE | SWP_FRAMECHANGED);
 }
-
-
diff --git a/if1632/gdi.spec b/if1632/gdi.spec
index b63e283..bc4a231 100644
--- a/if1632/gdi.spec
+++ b/if1632/gdi.spec
@@ -279,7 +279,7 @@
 #452 pascal GDISEEGDIDO
 #460 pascal GDITASKTERMINATION
 461 return SetObjectOwner 4 0
-#462 pascal ISGDIOBJECT
+462 pascal IsGDIObject(word) IsGDIObject(1)
 #463 pascal MAKEOBJECTPRIVATE
 #464 pascal FIXUPBOGUSPUBLISHERMETAFILE
 465 pascal RectVisible(word ptr) RectVisible(1 2)
diff --git a/if1632/kernel.spec b/if1632/kernel.spec
index 5f0ed34..668b05a 100644
--- a/if1632/kernel.spec
+++ b/if1632/kernel.spec
@@ -39,7 +39,7 @@
 34  pascal SetTaskQueue(word word) SetTaskQueue(1 2)
 35  pascal GetTaskQueue(word) GetTaskQueue(1)
 36  pascal GetCurrentTask() GetCurrentTask()
-#37 GETCURRENTPDB
+37  pascal GetCurrentPDB() GetCurrentPDB()
 #38 SETTASKSIGNALPROC
 #41 ENABLEDOS
 #42 DISABLEDOS
diff --git a/if1632/relay.c b/if1632/relay.c
index 752fc37..bfd7fcb 100644
--- a/if1632/relay.c
+++ b/if1632/relay.c
@@ -288,9 +288,9 @@
 		    perc = implemented * 100.00 / used;
 	    else
 		    perc = 0.0;
-	    printf("%s: %d %d %3.1f\n", dll_builtin_table[i].dll_name, implemented, used, perc);
+	    printf("%s: %d of %d (%3.1f %%)\n", dll_builtin_table[i].dll_name, implemented, used, perc);
     };
 	perc = timplemented * 100.00 / tused;
-	printf("TOTAL: %d %d %3.1f\n",timplemented, tused, perc);
+	printf("TOTAL: %d of %d implemented (%3.1f %%)\n",timplemented, tused, perc);
 }
 #endif /* WINESTAT */
diff --git a/if1632/toolhelp.spec b/if1632/toolhelp.spec
index 0037da9..fe1e180 100644
--- a/if1632/toolhelp.spec
+++ b/if1632/toolhelp.spec
@@ -1,3 +1,38 @@
 name	toolhelp
 id	13
 length	83
+
+# 50   1  057b  GLOBALHANDLETOSEL exported, shared data
+# 51   1  0318  GLOBALFIRST exported, shared data
+# 52   1  0399  GLOBALNEXT exported, shared data
+# 53   1  02a2  GLOBALINFO exported, shared data
+# 54   1  0417  GLOBALENTRYHANDLE exported, shared data
+# 55   1  04a9  GLOBALENTRYMODULE exported, shared data
+# 56   1  090e  LOCALINFO exported, shared data
+# 57   1  095e  LOCALFIRST exported, shared data
+# 58   1  09e9  LOCALNEXT exported, shared data
+#59 pascal ModuleFirst(ptr) ModuleFirst(1)
+#60 pascal ModuleNext(ptr) ModuleNext(1)
+#61 pascal ModuleFindName(ptr ptr) ModuleFindName(1 2)
+#62 pascal ModuleFindHandle(ptr word) ModuleFindHandle(1 2)
+# 63   1  0caa  TASKFIRST exported, shared data
+# 64   1  0ced  TASKNEXT exported, shared data
+# 65   1  0d2e  TASKFINDHANDLE exported, shared data
+# 66   1  0f1c  STACKTRACEFIRST exported, shared data
+# 67   1  0f67  STACKTRACECSIPFIRST exported, shared data
+# 68   1  0fca  STACKTRACENEXT exported, shared data
+# 69   1  28b0  CLASSFIRST exported, shared data
+# 70   1  2925  CLASSNEXT exported, shared data
+# 71   1  11ce  SYSTEMHEAPINFO exported, shared data
+# 72   1  13f4  MEMMANINFO exported, shared data
+# 73   1  1b72  NOTIFYREGISTER exported, shared data
+# 74   1  1c29  NOTIFYUNREGISTER exported, shared data
+# 75   1  2060  INTERRUPTREGISTER exported, shared data
+# 76   1  2111  INTERRUPTUNREGISTER exported, shared data
+# 77   1  26ea  TERMINATEAPP exported, shared data
+# 78   1  29c4  MEMORYREAD exported, shared data
+# 79   1  2b6c  MEMORYWRITE exported, shared data
+# 80   1  2dae  TIMERCOUNT exported, shared data
+# 81   1  0d68  TASKSETCSIP exported, shared data
+# 82   1  0d97  TASKGETCSIP exported, shared data
+# 83   1  0dc0  TASKSWITCH exported, shared data
diff --git a/if1632/user.spec b/if1632/user.spec
index 259f377..2023ed5 100644
--- a/if1632/user.spec
+++ b/if1632/user.spec
@@ -199,7 +199,8 @@
 193 pascal IsClipboardFormatAvailable(word) IsClipboardFormatAvailable(1)
 194  pascal DlgDirSelectComboBox(word ptr word) DlgDirSelectComboBox(1 2 3)
 195 pascal DlgDirListComboBox(word ptr word word word) DlgDirListComboBox(1 2 3 4 5)
-#196 TABBEDTEXTOUT
+196 pascal TabbedTextOut(word s_word s_word ptr s_word s_word ptr s_word)
+		TabbedTextOut(1 2 3 4 5 6 7 8)
 #197 GETTABBEDTEXTEXTENT
 #198 CASCADECHILDWINDOWS
 #199 TILECHILDWINDOWS
@@ -227,7 +228,7 @@
 220 pascal LoadMenuIndirect(ptr) LoadMenuIndirect(1)
 221 pascal ScrollDC(word s_word s_word ptr ptr word ptr) 
 	   ScrollDC(1 2 3 4 5 6 7)
-#222 GETKEYBOARDSTATE
+222 pascal GetKeyboardState(ptr) GetKeyboardState(1)
 #223 SETKEYBOARDSTATE
 224 pascal GetWindowTask(word) GetWindowTask(1)
 225 pascal EnumTaskWindows(word ptr long) EnumTaskWindows(1 2 3)
@@ -259,7 +260,7 @@
 247 pascal GetCursor() GetCursor()
 248 pascal GetOpenClipboardWindow() GetOpenClipboardWindow()
 249 pascal GetAsyncKeyState(word) GetAsyncKeyState(1)
-#250 GETMENUSTATE
+250 pascal GetMenuState(word word word) GetMenuState(1 2 3)
 #251 SENDDRIVERMESSAGE
 #252 OPENDRIVER
 #253 CLOSEDRIVER
@@ -328,7 +329,7 @@
 #343 GETFILEPORTNAME
 #356 LOADDIBCURSORHANDLER
 #357 LOADDIBICONHANDLER
-#358 ISMENU
+358 pascal IsMenu(word) IsMenu(1)
 359 pascal GetDCEx(word word long) GetDCEx(1 2 3)
 #362 DCHOOK
 #368 COPYICON
@@ -414,7 +415,7 @@
 #510 WNETLOCKQUEUEDATA
 #511 WNETUNLOCKQUEUEDATA
 512 pascal WNetGetConnection(ptr ptr ptr) WNetGetConnection(1 2 3)
-#513 WNETGETCAPS
+513 pascal WNetGetCaps(word) WNetGetCaps(1)
 #514 WNETDEVICEMODE
 #515 WNETBROWSEDIALOG
 516 pascal WNetGetUser(ptr ptr ptr) WNetGetUser(1 2 3)
diff --git a/include/msdos.h b/include/msdos.h
index b394555..99eccef 100644
--- a/include/msdos.h
+++ b/include/msdos.h
@@ -30,10 +30,11 @@
 #define CS context->sc_cs
 #define DS context->sc_ds
 #define ES context->sc_es
+#define SS context->sc_ss
 
 #define DI context->sc_edi
 #define SI context->sc_esi
-
+#define SP context->sc_esp
 #define EFL context->sc_efl
 
 #define SetCflag	(EFL |= 0x00000001L)
@@ -43,8 +44,8 @@
 #define segment(a) 	((DWORD)a >> 16)
 #define offset(a)	((DWORD)a & 0xffff)
 
-#define setword(a,b)	*(BYTE*)a	= b & 0xff; \
-			*((BYTE*)a + 1) = (b>>8) & 0xff;
+#define setword(a,b)	*(BYTE*)(a)	= b & 0xff; \
+			*((BYTE*)(a + 1)) = (b>>8) & 0xff;
 			
 #define setdword(a,b)	*(BYTE*)a	= b & 0xff; \
 			*((BYTE*)a + 1) = (b>>8) & 0xff; \
diff --git a/include/scroll.h b/include/scroll.h
index 76e94f5..02ce9d1 100644
--- a/include/scroll.h
+++ b/include/scroll.h
@@ -9,6 +9,7 @@
     short	MaxVal;
     short	MaxPix;
     short	CurPix;
+    short      ThumbVal;
     RECT	rect;
     RECT	rectUp;
     RECT	rectDown;
diff --git a/include/task.h b/include/task.h
index 05aba51..1c05265 100644
--- a/include/task.h
+++ b/include/task.h
@@ -5,21 +5,42 @@
 #ifndef TASK_H
 #define TASK_H
 
+#include "toolhelp.h"
+
+typedef HANDLE HGLOBAL;
+
 typedef struct {
-	HANDLE		hTask;
-	HANDLE		hModule;
+	DWORD		dwSize;
+	HTASK		hTask;
+	HTASK		hTaskParent;
 	HINSTANCE	hInst;
+	HMODULE		hModule;
+	WORD		wSS;
+	WORD		wSP;
+	WORD		wStackTop;
+	WORD		wStackMinimum;
+	WORD		wStackBottom;
+	WORD		wcEvents;
+	HGLOBAL		hQueue;
+	char		szModule[MAX_MODULE_NAME + 1];
+	WORD		wPSPOffset;
+	HANDLE		hNext;
+} TASKENTRY;
+typedef TASKENTRY *LPTASKENTRY;
+
+typedef struct {
+	TASKENTRY	te;
 	int			unix_pid;
 	HICON		hIcon;
 	HWND		*lpWndList;
 	void		*lpPrevTask;
 	void		*lpNextTask;
-} TASKENTRY;
-typedef TASKENTRY *LPTASKENTRY;
+} WINETASKENTRY;
+typedef WINETASKENTRY *LPWINETASKENTRY;
 
 #define MAXWIN_PER_TASK  256
 
-HANDLE CreateNewTask(HINSTANCE hInst);
+HANDLE CreateNewTask(HINSTANCE hInst, HTASK hTaskParent);
 BOOL RemoveWindowFromTask(HTASK hTask, HWND hWnd);
 BOOL AddWindowToTask(HTASK hTask, HWND hWnd);
 
diff --git a/include/texts.h b/include/texts.h
new file mode 100644
index 0000000..343b399
--- /dev/null
+++ b/include/texts.h
@@ -0,0 +1,26 @@
+
+/*
+ * texts.h - String constants are read from Xresources/app-defaults
+ * (c) 1994 Jochen Hein ( Hein@Student.TU-Clausthal.de )
+ */
+
+/*
+ * Type-description for buttons
+ */
+
+typedef struct tButtonDesc {
+  char *Label;              /* Label of the Button */
+  char Hotkey;               /* Hotkey to press this Button */
+} ButtonDesc;
+
+typedef struct tButtonTexts {
+  ButtonDesc Yes;
+  ButtonDesc No;
+  ButtonDesc Ok;
+  ButtonDesc Cancel;
+  ButtonDesc Abort;
+  ButtonDesc Retry;
+  ButtonDesc Ignore;
+} ButtonTexts;
+
+
diff --git a/include/win.h b/include/win.h
index 0a4a566..1928632 100644
--- a/include/win.h
+++ b/include/win.h
@@ -44,6 +44,7 @@
     HANDLE       hdce;           /* Window DCE (if CS_OWNDC or CS_CLASSDC) */
     void		 *VScroll;		 /* Vertical ScrollBar Struct Pointer */
     void		 *HScroll;		 /* Horizontal ScrollBar Struct Pointer */
+    WORD         scroll_flags;   /* scrolls flags (vert & horz visible) */
     WORD         wIDmenu;        /* ID or hmenu (from CreateWindow) */
     HANDLE       hText;          /* Handle of window text */
     WORD         flags;          /* Misc. flags (see below) */
diff --git a/include/windows.h b/include/windows.h
index e4ca0e2..5281abd 100644
--- a/include/windows.h
+++ b/include/windows.h
@@ -161,7 +161,7 @@
 #ifdef WINELIB
 typedef LONG (*WNDPROC)(HWND, UINT, WPARAM, LPARAM);
 #else
-typedef LONG	(* WNDPROC)() WINE_PACKED;
+typedef LONG	(* WNDPROC)();
 #endif
 
 typedef struct {
@@ -3008,7 +3008,7 @@
 Fg(BOOL,SetWindowPos,HWND,a,HWND,b,short,c,short,d,short,e,short,f,WORD,g)
 Fh(BOOL,ExtTextOut,HDC,a,short,b,short,c,WORD,d,LPRECT,e,LPSTR,f,WORD,g,LPINT,h)
 Fh(HANDLE,DeferWindowPos,HANDLE,hWinPosInfo,HWND,hWnd,HWND,hWndInsertAfter,int,x,int,y,int,cx,int,cy,WORD,wFlags)
-Fh(LONG,TabbedTextOut,HDC,a,int,b,int,c,LPSTR,d,int,e,int,f,LPINT,g,int,h)
+Fh(LONG,TabbedTextOut,HDC,a,short,b,short,c,LPSTR,d,short,e,short,f,LPINT,g,short,h)
 Fh(int,ScrollWindowEx,HWND,a,short,b,short,c,LPRECT,d,LPRECT,e,HRGN,f,LPRECT,g,WORD,h)
 Fi(BOOL,Arc,HDC,a,int,xLeft,int,yTop,int,xRight,int,yBottom,int,xStart,int,yStart,int,xEnd,int,yEnd)
 Fi(BOOL,Chord,HDC,a,int,xLeft,int,yTop,int,xRight,int,yBottom,int,xStart,int,yStart,int,xEnd,int,yEnd)
diff --git a/loader/library.c b/loader/library.c
index 02b74d2..21898e9 100644
--- a/loader/library.c
+++ b/loader/library.c
@@ -20,10 +20,14 @@
 #include "wine.h"
 #include "dlls.h"
 #include "task.h"
+#include "toolhelp.h"
 
 extern struct  w_files *wine_files;
 extern struct dll_name_table_entry_s dll_builtin_table[];
 
+struct w_files *GetFileInfo(HANDLE);
+char *GetDosFileName(char *);
+
 #define IS_BUILTIN_DLL(handle) ((handle >> 8) == 0xff) 
 
 /**********************************************************************/
@@ -53,12 +57,17 @@
 {
 	register struct w_files *w = wine_files;
 	int 	i;
+	char dllname[256];
+
+	if ((int) lpModuleName & 0xffff0000)
+		ExtractDLLName(lpModuleName, dllname);
+
 	if ((int) lpModuleName & 0xffff0000)
 	 	printf("GetModuleHandle('%s');\n", lpModuleName);
 	else
 	 	printf("GetModuleHandle('%x');\n", lpModuleName);
 
- 	printf("GetModuleHandle // searching in builtin libraries\n");
+/* 	printf("GetModuleHandle // searching in builtin libraries\n");*/
 	for (i = 0; i < N_BUILTINS; i++) {
 		if (dll_builtin_table[i].dll_name == NULL) break;
 		if (((int) lpModuleName & 0xffff0000) == 0) {
@@ -68,7 +77,7 @@
 				return 0xFF00 + i;
 				}
 			}
-		else if (strcasecmp(dll_builtin_table[i].dll_name, lpModuleName) == 0) {
+		else if (strcasecmp(dll_builtin_table[i].dll_name, dllname) == 0) {
 			printf("GetModuleHandle('%x') return %04X \n", 
 							lpModuleName, 0xFF00 + i);
 			return (0xFF00 + i);
@@ -85,7 +94,7 @@
 				return w->hinstance;
 				}
 			}
-		else if (strcasecmp(w->name, lpModuleName) == 0) {
+		else if (strcasecmp(w->name, dllname) == 0) {
 			printf("GetModuleHandle('%s') return %04X \n", 
 							lpModuleName, w->hinstance);
 			return w->hinstance;
@@ -309,3 +318,97 @@
 
 #endif /* ifndef WINELIB */
 
+/* internal dlls */
+static void 
+FillModStructBuiltIn(MODULEENTRY *lpModule, struct dll_name_table_entry_s *dll)
+{
+	lpModule->dwSize = dll->dll_table_length * 1024;
+	strcpy(lpModule->szModule, dll->dll_name);
+	lpModule->hModule = 0xff00 + dll->dll_number;
+	lpModule->wcUsage = GetModuleUsage(lpModule->hModule);
+	GetModuleFileName(lpModule->hModule, lpModule->szExePath, MAX_PATH + 1);
+	lpModule->wNext = 0;
+}
+
+/* loaded dlls */
+static void 
+FillModStructLoaded(MODULEENTRY *lpModule, struct w_files *dll)
+{
+	lpModule->dwSize = 16384;
+	strcpy(lpModule->szModule, dll->name);
+	lpModule->hModule = dll->hinstance;
+	lpModule->wcUsage = GetModuleUsage(lpModule->hModule);
+	GetModuleFileName(lpModule->hModule, lpModule->szExePath, MAX_PATH + 1);
+	lpModule->wNext = 0;
+}
+
+/**********************************************************************
+ *		ModuleFirst [TOOHELP.59]
+ */
+BOOL ModuleFirst(MODULEENTRY *lpModule)
+{
+	printf("ModuleFirst(%08X)\n", lpModule);
+	
+	FillModStructBuiltIn(lpModule, &dll_builtin_table[0]);
+	return TRUE;
+}
+
+/**********************************************************************
+ *		ModuleNext [TOOHELP.60]
+ */
+BOOL ModuleNext(MODULEENTRY *lpModule)
+{
+	struct w_files *w;
+
+	printf("ModuleNext(%08X)\n", lpModule);
+
+	if (IS_BUILTIN_DLL(lpModule->hModule)) {
+		/* last built-in ? */
+		if ((lpModule->hModule & 0xff) == (N_BUILTINS - 1) ) {
+			if (wine_files) {
+				FillModStructLoaded(lpModule, wine_files);
+				return TRUE;
+			} else
+				return FALSE;
+		}
+		FillModStructBuiltIn(lpModule, &dll_builtin_table[(lpModule->hModule & 0xff)+1]);
+		return TRUE;
+	}
+	w = GetFileInfo(lpModule->hModule);
+	if (w->next) {
+		FillModStructLoaded(lpModule, w->next);
+		return TRUE;
+	}
+	return FALSE;
+}
+
+/**********************************************************************
+ *		ModuleFindHandle [TOOHELP.62]
+ */
+HMODULE ModuleFindHandle(MODULEENTRY *lpModule, HMODULE hModule)
+{
+	struct w_files *w;
+
+	printf("ModuleFindHandle(%08X, %04X)\n", lpModule, hModule);
+
+	/* built-in dll ? */
+	if (IS_BUILTIN_DLL(hModule)) {
+		FillModStructBuiltIn(lpModule, &dll_builtin_table[hModule & 0xff]);
+		return hModule;
+	}
+
+	/* check loaded dlls */
+	if ((w = GetFileInfo(hModule)) == NULL)
+	    	return (HMODULE) NULL;
+	
+	FillModStructLoaded(lpModule, w);
+	return w->hinstance;
+}
+
+/**********************************************************************
+ *		ModuleFindName [TOOHELP.61]
+ */
+HMODULE ModuleFindName(MODULEENTRY *lpModule, LPCSTR lpstrName)
+{
+	return (ModuleFindHandle(lpModule, GetModuleHandle((char*)lpstrName)));
+}
diff --git a/loader/main.c b/loader/main.c
index 119d00f..90ec7e5 100644
--- a/loader/main.c
+++ b/loader/main.c
@@ -132,7 +132,7 @@
     char buffer[256], header[2], modulename[64], *fullname;
 
     ExtractDLLName(module, modulename);
-
+    printf("%sLoadImage \n", module);
     /* built-in one ? */
     if (FindDLLTable(modulename)) {
 	return GetModuleHandle(modulename);
@@ -212,7 +212,8 @@
     wpnt->mz_header = (struct mz_header_s *) malloc(sizeof(struct mz_header_s));;
     status = lseek(wpnt->fd, 0, SEEK_SET);
     load_mz_header (wpnt->fd, wpnt->mz_header);
-    if (wpnt->mz_header->must_be_0x40 != 0x40)
+    if (wpnt->mz_header->must_be_0x40 != 0x40 &&
+	wpnt->mz_header->must_be_0x40 != 0x1e)
 	myerror("This is not a Windows program");
 
     /* read first two bytes to determine filetype */
@@ -361,7 +362,8 @@
 {
     static flagReadyToRun = 0;
     struct w_files *final_wpnt;
-    struct w_files * wpnt;
+
+    printf("InitializeLoadedDLLs %08X\n", wpnt);
 
     if (wpnt == NULL)
     {
diff --git a/loader/selector.c b/loader/selector.c
index b9b66bd..c2faab8 100644
--- a/loader/selector.c
+++ b/loader/selector.c
@@ -824,6 +824,13 @@
 }
 
 /**********************************************************************
+ */
+WORD GetCurrentPDB()
+{
+    return PSPSelector;
+}
+
+/**********************************************************************
  *					CreatePSP
  */
 static SEGDESC *
diff --git a/loader/signal.c b/loader/signal.c
index 7e8bc0f..861c04e 100644
--- a/loader/signal.c
+++ b/loader/signal.c
@@ -57,6 +57,7 @@
 		return 1;	/* get base mem size */                
 
 	      case 0x15: return do_int15(scp);
+	      case 0x16: return do_int16(scp);
 	      case 0x1A: return do_int1A(scp);
 	      case 0x21: return do_int21(scp);
 
diff --git a/loader/task.c b/loader/task.c
index 856f634..569c64b 100644
--- a/loader/task.c
+++ b/loader/task.c
@@ -14,7 +14,7 @@
 #include "wine.h"
 #include "task.h"
 
-static LPTASKENTRY lpTaskList = NULL;
+static LPWINETASKENTRY lpTaskList = NULL;
 static int nTaskCount = 0;
 
 
@@ -23,7 +23,7 @@
  */
 HTASK GetCurrentTask()
 {
-	LPTASKENTRY lpTask = lpTaskList;
+	LPWINETASKENTRY lpTask = lpTaskList;
 	int pid = getpid();
 #ifdef DEBUG_TASK
 	printf("GetCurrentTask() // unix_pid=%08X !\n", pid);
@@ -35,9 +35,9 @@
 		lpTask = lpTask->lpNextTask;
 		}
 #ifdef DEBUG_TASK
-	printf("GetCurrentTask() returned hTask=%04X !\n", lpTask->hTask);
+	printf("GetCurrentTask() returned hTask=%04X !\n", lpTask->te.hTask);
 #endif
-	return lpTask->hTask;
+	return lpTask->te.hTask;
 }
 
 
@@ -58,7 +58,7 @@
 {
 	HWND 	*wptr;
 	int		count;
-	LPTASKENTRY lpTask = lpTaskList;
+	LPWINETASKENTRY lpTask = lpTaskList;
 	printf("GetWindowTask(%04X) !\n", hWnd);
 	while (lpTask != NULL) {
 		wptr = lpTask->lpWndList;
@@ -66,11 +66,11 @@
 			count = 0;
 			while (++count < MAXWIN_PER_TASK) {
 				printf("GetWindowTask // searching %04X %04X !\n",
-										lpTask->hTask, *(wptr));
+										lpTask->te.hTask, *(wptr));
 				if (*(wptr) == hWnd) {
 					printf("GetWindowTask(%04X) found hTask=%04X !\n", 
-												hWnd, lpTask->hTask);
-					return lpTask->hTask;
+												hWnd, lpTask->te.hTask);
+					return lpTask->te.hTask;
 					}
 				wptr++;
 				}
@@ -89,10 +89,10 @@
 	HWND 	*wptr, hWnd;
 	BOOL	bRet;
 	int		count = 0;
-	LPTASKENTRY lpTask = lpTaskList;
+	LPWINETASKENTRY lpTask = lpTaskList;
 	printf("EnumTaskWindows(%04X, %08X, %08X) !\n", hTask, lpEnumFunc, lParam);
 	while (TRUE) {
-		if (lpTask->hTask == hTask) break;
+		if (lpTask->te.hTask == hTask) break;
 		if (lpTask == NULL) {
 			printf("EnumTaskWindows // hTask=%04X not found !\n", hTask);
 			return FALSE;
@@ -120,19 +120,19 @@
 /**********************************************************************
  *				CreateNewTask		[internal]
  */
-HANDLE CreateNewTask(HINSTANCE hInst)
+HANDLE CreateNewTask(HINSTANCE hInst, HTASK hTaskParent)
 {
     HANDLE hTask;
-	LPTASKENTRY lpTask = lpTaskList;
-	LPTASKENTRY lpNewTask;
+	LPWINETASKENTRY lpTask = lpTaskList;
+	LPWINETASKENTRY lpNewTask;
 	if (lpTask != NULL) {
 		while (TRUE) {
 			if (lpTask->lpNextTask == NULL) break;
 			lpTask = lpTask->lpNextTask;
 			}
 		}
-	hTask = GlobalAlloc(GMEM_MOVEABLE, sizeof(TASKENTRY));
-	lpNewTask = (LPTASKENTRY) GlobalLock(hTask);
+	hTask = GlobalAlloc(GMEM_MOVEABLE, sizeof(WINETASKENTRY));
+	lpNewTask = (LPWINETASKENTRY) GlobalLock(hTask);
 #ifdef DEBUG_TASK
     printf("CreateNewTask entry allocated %08X\n", lpNewTask);
 #endif
@@ -143,13 +143,25 @@
 		}
 	else {
 		lpTask->lpNextTask = lpNewTask;
+		lpTask->te.hNext = lpNewTask->te.hTask;
 		lpNewTask->lpPrevTask = lpTask;
 		}
 	lpNewTask->lpNextTask = NULL;
 	lpNewTask->hIcon = 0;
-	lpNewTask->hModule = 0;
-	lpNewTask->hInst = hInst;
-	lpNewTask->hTask = hTask;
+	lpNewTask->te.dwSize = sizeof(TASKENTRY);
+	lpNewTask->te.hModule = 0;
+	lpNewTask->te.hInst = hInst;
+	lpNewTask->te.hTask = hTask;
+	lpNewTask->te.hTaskParent = hTaskParent;
+	lpNewTask->te.wSS = 0;
+	lpNewTask->te.wSP = 0;
+	lpNewTask->te.wStackTop = 0;
+	lpNewTask->te.wStackMinimum = 0;
+	lpNewTask->te.wStackBottom = 0;
+	lpNewTask->te.wcEvents = 0;
+	lpNewTask->te.hQueue = 0;
+	sprintf(lpNewTask->te.szModule, "TASK%04X", hInst);
+	lpNewTask->te.wPSPOffset = 0;
 	lpNewTask->unix_pid = getpid();
 	lpNewTask->lpWndList = (HWND *) malloc(MAXWIN_PER_TASK * sizeof(HWND));
 	if (lpNewTask->lpWndList != NULL) 
@@ -171,12 +183,12 @@
 {
 	HWND 	*wptr;
 	int		count = 0;
-	LPTASKENTRY lpTask = lpTaskList;
+	LPWINETASKENTRY lpTask = lpTaskList;
 #ifdef DEBUG_TASK
 	printf("AddWindowToTask(%04X, %04X); !\n", hTask, hWnd);
 #endif
 	while (TRUE) {
-		if (lpTask->hTask == hTask) break;
+		if (lpTask->te.hTask == hTask) break;
 		if (lpTask == NULL) {
 			printf("AddWindowToTask // hTask=%04X not found !\n", hTask);
 			return FALSE;
@@ -204,12 +216,12 @@
 {
 	HWND 	*wptr;
 	int		count = 0;
-	LPTASKENTRY lpTask = lpTaskList;
+	LPWINETASKENTRY lpTask = lpTaskList;
 #ifdef DEBUG_TASK
 	printf("RemoveWindowToTask(%04X, %04X); !\n", hTask, hWnd);
 #endif
 	while (TRUE) {
-		if (lpTask->hTask == hTask) break;
+		if (lpTask->te.hTask == hTask) break;
 		if (lpTask == NULL) {
 			printf("RemoveWindowFromTask // hTask=%04X not found !\n", hTask);
 			return FALSE;
diff --git a/memory/heap.c b/memory/heap.c
index ceaa85b..734520a 100644
--- a/memory/heap.c
+++ b/memory/heap.c
@@ -245,8 +245,24 @@
      * Validate pointer.
      */
     m_free = (MDESC *) block - 1;
-    if (m_free->prev != m_free || m_free->next != m_free || 
-	((int) m_free & 0xffff0000) != ((int) *free_list & 0xffff0000))
+    if (m_free->prev != m_free || m_free->next != m_free)
+    {
+#ifdef DEBUG_HEAP
+	printf("Attempt to free bad pointer,"
+	       "m_free = %08x, *free_list = %08x\n",
+	       m_free, free_list);
+#endif
+	return -1;
+    }
+
+    if (*free_list == NULL)
+    {
+	*free_list = m_free;
+	(*free_list)->next = NULL;
+	(*free_list)->prev = NULL;
+	return 0;
+    }
+    else if (((int) m_free & 0xffff0000) != ((int) *free_list & 0xffff0000))
     {
 #ifdef DEBUG_HEAP
 	printf("Attempt to free bad pointer,"
diff --git a/misc/main.c b/misc/main.c
index ab3c2e7..ae0d5c9 100644
--- a/misc/main.c
+++ b/misc/main.c
@@ -9,6 +9,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <locale.h>
 #include <X11/Xlib.h>
 #include <X11/Xresource.h>
 #include <X11/Xutil.h>
@@ -17,6 +18,7 @@
 #include "windows.h"
 #include "options.h"
 #include "prototypes.h"
+#include "texts.h"
 
 #define WINE_CLASS    "Wine"    /* Class name for resources */
 
@@ -32,6 +34,7 @@
 int desktopX = 0, desktopY = 0;  /* Desktop window position (if any) */
 
 char *ProgramName;		/* Used by resource.c with WINELIB */
+extern ButtonTexts ButtonText;
 
 struct options Options =
 {  /* default options */
@@ -141,6 +144,54 @@
 
 
 /***********************************************************************
+ *           MAIN_GetButtonText
+ *
+ * Fetch the value of resource 'name' using the correct instance name.
+ * 'name' must begin with '.' or '*'
+ *
+ * The address of the string got from the XResoure is stored in Button.Label.
+ * The corresponding hotkey is taken from this string.
+ */
+
+static void MAIN_GetButtonText( XrmDatabase db, char *name, ButtonDesc *Button)
+{
+    XrmValue value;
+    char Hotkey;
+    char *i;
+
+    if (MAIN_GetResource( db, name, &value))
+      {
+       Button->Label = value.addr;
+       i = strchr(Button->Label,'&');
+       if ( i == NULL )
+         Button->Hotkey = '\0';
+       else if ( i++ == '\0' )
+         Button->Hotkey = '\0';
+       else
+         Button->Hotkey = *i;
+      }
+    Button->Hotkey = toupper(Button->Hotkey);
+}
+
+/***********************************************************************
+ *           MAIN_GetAllButtonTexts
+ *
+ * Read all Button-labels from X11-resources if they exist.
+ */
+
+static void MAIN_GetAllButtonTexts(XrmDatabase db)
+{
+  MAIN_GetButtonText(db, ".YesLabel",    &ButtonText.Yes);
+  MAIN_GetButtonText(db, ".NoLabel",     &ButtonText.No);
+  MAIN_GetButtonText(db, ".OkLabel",     &ButtonText.Ok);
+  MAIN_GetButtonText(db, ".CancelLabel", &ButtonText.Cancel);
+  MAIN_GetButtonText(db, ".AbortLabel",  &ButtonText.Abort);
+  MAIN_GetButtonText(db, ".RetryLabel",  &ButtonText.Retry);
+  MAIN_GetButtonText(db, ".IgnoreLabel", &ButtonText.Ignore);
+  MAIN_GetButtonText(db, ".CancelLabel", &ButtonText.Cancel);
+}
+
+/***********************************************************************
  *           MAIN_ParseOptions
  *
  * Parse command line options and open display.
@@ -152,10 +203,10 @@
     XrmDatabase db = NULL;
 
       /* Parse command line */
-
     Options.programName = MAIN_GetProgramName( *argc, argv );
     XrmParseCommand( &db, optionsTable, NB_OPTIONS,
 		     Options.programName, argc, argv );
+
 #ifdef WINELIB
     /* Need to assemble command line and pass it to WinMain */
 #else
@@ -175,8 +226,10 @@
 	exit(1);
     }
 
-      /* Get all options */
+      /* Use app-defaults */
+    display->db = db;
 
+      /* Get all options */
     if (MAIN_GetResource( db, ".iconic", &value ))
 	Options.cmdShow = SW_SHOWMINIMIZED;
     if (MAIN_GetResource( db, ".privatemap", &value ))
@@ -197,6 +250,9 @@
 	screenDepth = atoi( value.addr );
     if (MAIN_GetResource( db, ".desktop", &value))
 	Options.desktopGeometry = value.addr;
+
+/*    MAIN_GetAllButtonTexts(db); */
+ 
 }
 
 
@@ -311,7 +367,9 @@
     int ret_val;
     int depth_count, i;
     int *depth_list;
-    
+
+    setlocale(LC_CTYPE,"");
+
     XrmInitialize();
     
     MAIN_ParseOptions( &argc, argv );
diff --git a/misc/message.c b/misc/message.c
index d9669b6..825e224 100644
--- a/misc/message.c
+++ b/misc/message.c
@@ -19,6 +19,21 @@
 #include "prototypes.h"
 #include "heap.h"
 #include "win.h"
+#include "texts.h"
+ 
+/*
+ * Defaults for button-texts
+ */
+
+ButtonTexts ButtonText = {
+  "&Yes",    'Y',
+  "&No",     'N',
+  "&Ok",     'O',
+  "&Cancel", 'C',
+  "&Abort",  'A',
+  "&Retry",  'R',
+  "&Ignore", 'I'
+};
 
 extern HINSTANCE hSysRes;
 extern HBITMAP hUpArrow;
@@ -175,7 +190,7 @@
 	switch(message) {
 	case WM_CREATE:
 #ifdef DEBUG_MSGBOX
-		printf("MessageBox WM_CREATE !\n");
+		printf("MessageBox WM_CREATE hWnd=%04X !\n", hWnd);
 #endif
 		wndPtr = WIN_FindWndPtr(hWnd);
 		createStruct = (CREATESTRUCT *)lParam;
@@ -191,55 +206,55 @@
 		lpmb->rectStr.bottom -= 32;
 		switch(lpmb->wType & MB_TYPEMASK) {
 		case MB_OK :
-			lpmb->hWndYes = CreateWindow("BUTTON", "&Ok", 
+		        lpmb->hWndYes = CreateWindow("BUTTON", ButtonText.Ok.Label,
 				WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE | BS_PUSHBUTTON,
 				rect.right / 2 - 30, rect.bottom - 25, 
 				60, 18, hWnd, IDOK, wndPtr->hInstance, 0L);
 			break;
 		case MB_OKCANCEL :
-			lpmb->hWndYes = CreateWindow("BUTTON", "&Ok", 
+			lpmb->hWndYes = CreateWindow("BUTTON", ButtonText.Ok.Label,
 				WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE | BS_PUSHBUTTON,
 				rect.right / 2 - 65, rect.bottom - 25, 
 				60, 18, hWnd, IDOK, wndPtr->hInstance, 0L);
-			lpmb->hWndCancel = CreateWindow("BUTTON", "&Cancel", 
+			lpmb->hWndCancel = CreateWindow("BUTTON", ButtonText.Cancel.Label,
 				WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE | BS_PUSHBUTTON,
 				rect.right / 2 + 5, rect.bottom - 25, 
 				60, 18, hWnd, IDCANCEL, wndPtr->hInstance, 0L);
 			break;
 		case MB_ABORTRETRYIGNORE :
-			lpmb->hWndYes = CreateWindow("BUTTON", "&Retry", 
+			lpmb->hWndYes = CreateWindow("BUTTON", ButtonText.Retry.Label,
 				WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE | BS_PUSHBUTTON,
 				rect.right / 2 - 100, rect.bottom - 25, 
 				60, 18, hWnd, IDRETRY, wndPtr->hInstance, 0L);
-			lpmb->hWndNo = CreateWindow("BUTTON", "&Ignore", 
+			lpmb->hWndNo = CreateWindow("BUTTON", ButtonText.Ignore.Label,
 				WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE | BS_PUSHBUTTON,
 				rect.right / 2 - 30, rect.bottom - 25, 
 				60, 18, hWnd, IDIGNORE, wndPtr->hInstance, 0L);
-			lpmb->hWndCancel = CreateWindow("BUTTON", "&Abort", 
+			lpmb->hWndCancel = CreateWindow("BUTTON", ButtonText.Abort.Label,
 				WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE | BS_PUSHBUTTON,
 				rect.right / 2 + 40, rect.bottom - 25, 
 				60, 18, hWnd, IDABORT, wndPtr->hInstance, 0L);
 			break;
 		case MB_YESNO :
-			lpmb->hWndYes = CreateWindow("BUTTON", "&Yes", 
+			lpmb->hWndYes = CreateWindow("BUTTON", ButtonText.Yes.Label,
 				WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE | BS_PUSHBUTTON,
 				rect.right / 2 - 65, rect.bottom - 25, 
 				60, 18, hWnd, IDYES, wndPtr->hInstance, 0L);
-			lpmb->hWndNo = CreateWindow("BUTTON", "&No", 
+			lpmb->hWndNo = CreateWindow("BUTTON", ButtonText.No.Label,
 				WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE | BS_PUSHBUTTON,
 				rect.right / 2 + 5, rect.bottom - 25, 
 				60, 18, hWnd, IDNO, wndPtr->hInstance, 0L);
 			break;
 		case MB_YESNOCANCEL :
-			lpmb->hWndYes = CreateWindow("BUTTON", "&Yes", 
+			lpmb->hWndYes = CreateWindow("BUTTON", ButtonText.Yes.Label,
 				WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE | BS_PUSHBUTTON,
 				rect.right / 2 - 100, rect.bottom - 25, 
 				60, 18, hWnd, IDYES, wndPtr->hInstance, 0L);
-			lpmb->hWndNo = CreateWindow("BUTTON", "&No", 
+			lpmb->hWndNo = CreateWindow("BUTTON", ButtonText.No.Label,
 				WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE | BS_PUSHBUTTON,
 				rect.right / 2 - 30, rect.bottom - 25, 
 				60, 18, hWnd, IDNO, wndPtr->hInstance, 0L);
-			lpmb->hWndCancel = CreateWindow("BUTTON", "&Cancel", 
+			lpmb->hWndCancel = CreateWindow("BUTTON", ButtonText.Cancel.Label,
 				WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE | BS_PUSHBUTTON,
 				rect.right / 2 + 40, rect.bottom - 25, 
 				60, 18, hWnd, IDCANCEL, wndPtr->hInstance, 0L);
@@ -271,6 +286,9 @@
 			}
 	    break;
 	case WM_SHOWWINDOW:
+#ifdef DEBUG_MSGBOX
+		printf("MessageBox WM_SHOWWINDOW hWnd=%04X !\n", hWnd);
+#endif
 		if (!(wParam == 0 && lParam == 0L)) {
 			InvalidateRect(hWnd, NULL, TRUE);
 			}
@@ -281,7 +299,12 @@
 #endif
 		lpmb = MsgBoxGetStorageHeader(hWnd);
 		if (lpmb == NULL) break;
+		if (!lpmb->ActiveFlg) break;
 		hDC = BeginPaint(hWnd, &ps);
+		if (hDC == 0) {
+			printf("MessageBox WM_PAINT // BeginPaint returned BAD hDC !\n");
+			break;
+			}
 		GetClientRect(hWnd, &rect);
 		FillRect(hDC, &rect, GetStockObject(WHITE_BRUSH));
 		CopyRect(&rect, &lpmb->rectStr);
@@ -307,7 +330,6 @@
 	    ReleaseCapture();
 	    lpmb = MsgBoxGetStorageHeader(hWnd);
 		if (lpmb == NULL) break;
-	    lpmb->ActiveFlg = FALSE;
 	    if (lpmb->hIcon) DestroyIcon(lpmb->hIcon);
 	    if (lpmb->hWndYes) DestroyWindow(lpmb->hWndYes);
 	    if (lpmb->hWndNo) DestroyWindow(lpmb->hWndNo);
@@ -315,6 +337,7 @@
 #ifdef DEBUG_MSGBOX
 	    printf("MessageBox WM_DESTROY end !\n");
 #endif
+	    lpmb->ActiveFlg = FALSE;
 	    break;
 	case WM_COMMAND:
 	    lpmb = MsgBoxGetStorageHeader(hWnd);
@@ -328,36 +351,28 @@
 	    break;
 	case WM_CHAR:
 	    lpmb = MsgBoxGetStorageHeader(hWnd);
+/*          if (wParam >= 'a' || wParam <= 'z') wParam -= 'a' - 'A'; */
+		wParam = toupper(wParam);
+	    if (wParam == ButtonText.Yes.Hotkey)
+                lpmb->wRetVal = IDYES;
+            else if (wParam == ButtonText.Ok.Hotkey)
+                lpmb->wRetVal = IDOK;
+            else if (wParam == ButtonText.Retry.Hotkey)
+                lpmb->wRetVal = IDRETRY;
+            else if (wParam == ButtonText.Abort.Hotkey)
+                lpmb->wRetVal = IDABORT;
+            else if (wParam == ButtonText.No.Hotkey)
+                lpmb->wRetVal = IDNO;
+            else if (wParam == ButtonText.Ignore.Hotkey)
+                 lpmb->wRetVal = IDIGNORE;
+            else if ((wParam == ButtonText.Ok.Hotkey) || (wParam == VK_ESCAPE))
+                lpmb->wRetVal = IDCANCEL;
+	    else
+		return 0;
 		if (lpmb == NULL) break;
-		if (wParam >= 'a' || wParam <= 'z') wParam -= 'a' - 'A';
-		switch(wParam) {
-			case 'Y':
-			    lpmb->wRetVal = IDYES;
-				break;
-			case 'O':
-			    lpmb->wRetVal = IDOK;
-				break;
-			case 'R':
-			    lpmb->wRetVal = IDRETRY;
-				break;
-			case 'A':
-			    lpmb->wRetVal = IDABORT;
-				break;
-			case 'N':
-			    lpmb->wRetVal = IDNO;
-				break;
-			case 'I':
-			    lpmb->wRetVal = IDIGNORE;
-				break;
-			case 'C':
-			case VK_ESCAPE:
-			    lpmb->wRetVal = IDCANCEL;
-				break;
-			default:
-			    return 0;
-			}
-	    PostMessage(hWnd, WM_CLOSE, 0, 0L);
-	    break;
+		ShowWindow(hWnd, SW_HIDE);
+		PostMessage(hWnd, WM_CLOSE, 0, 0L);
+		break;
 	default:
 	    return DefWindowProc(hWnd, message, wParam, lParam );
     }
diff --git a/misc/network.c b/misc/network.c
index 60a4bb3..779d6aa 100644
--- a/misc/network.c
+++ b/misc/network.c
@@ -43,6 +43,14 @@
 }
 
 /**************************************************************************
+ *				WNetGetCaps		[USER.513]
+ */
+int WNetGetCaps(WORD capability)
+{
+	return 0;
+}
+
+/**************************************************************************
  *				WNetGetUser			[USER.516]
  */
 UINT WNetGetUser(LPSTR lpLocalName, LPSTR lpUserName, DWORD *lpSize)
diff --git a/miscemu/Imakefile b/miscemu/Imakefile
index 65c043f..27798bb 100644
--- a/miscemu/Imakefile
+++ b/miscemu/Imakefile
@@ -6,6 +6,7 @@
 	emulate.c \
 	int10.c \
 	int15.c \
+	int16.c \
 	int1a.c \
 	int21.c \
 	int25.c \
diff --git a/miscemu/int16.c b/miscemu/int16.c
new file mode 100644
index 0000000..88ff49d
--- /dev/null
+++ b/miscemu/int16.c
@@ -0,0 +1,16 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "msdos.h"
+#include "wine.h"
+
+int do_int16(struct sigcontext_struct *context)
+{
+	switch((context->sc_eax >> 8) & 0xff)
+	{
+	case 0xc0:
+		
+	default:
+		IntBarf(0x16, context);
+	};
+	return 1;
+}
diff --git a/miscemu/int25.c b/miscemu/int25.c
index 89d188d..9a9a366 100644
--- a/miscemu/int25.c
+++ b/miscemu/int25.c
@@ -11,9 +11,7 @@
 	if( (ECX & 0xffff) == 0xffff)
 	{
 		begin = getdword(dataptr);
-
 		length = getword(&dataptr[4]);
-
 		dataptr = (BYTE *) getdword(&dataptr[6]);
 			
 	} else {
@@ -23,6 +21,19 @@
 	fprintf(stderr, "int25: abs diskread, drive %d, sector %d, "
 	"count %d, buffer %d\n", EAX & 0xff, begin, length, (int) dataptr);
 
+	memset(dataptr, 0, length * 512);
+
+	if (begin == 0 && length > 1) 
+		*(dataptr + 512) = 0xf8;
+
+	if (begin == 1) 
+		*dataptr = 0xf8;
+
 	ResetCflag;
+
+	/* push flags on stack */
+	SP -= sizeof(WORD);
+	setword(pointer(SS,SP), (WORD) EFL);
+
 	return 1;
 }
diff --git a/miscemu/int26.c b/miscemu/int26.c
index 5fb86a3..0308d37 100644
--- a/miscemu/int26.c
+++ b/miscemu/int26.c
@@ -23,5 +23,10 @@
 		" buffer %d\n", EAX & 0xff, begin, length, (int) dataptr);
 
 	ResetCflag;
+
+	/* push flags on stack */
+	SP -= sizeof(WORD);
+	setword(pointer(SS,SP), (WORD) EFL);
+
 	return 1;
 }
diff --git a/miscemu/int2f.c b/miscemu/int2f.c
index 8c50267..0a7d14e 100644
--- a/miscemu/int2f.c
+++ b/miscemu/int2f.c
@@ -5,11 +5,21 @@
 
 int do_int2f(struct sigcontext_struct *context)
 {
-	switch(context->sc_eax & 0xffff)
+	switch((context->sc_eax >> 8) & 0xff)
 	{
-	case 0x1600: /* windows enhanced mode install check */
-		/* don't return anything as we're running in standard mode */
-		break;
+	case 0x15: /* mscdex */
+		/* ignore requests */
+		return 1;
+
+	case 0x16:
+		switch(context->sc_eax & 0xff)
+		{
+		case 0x00: /* windows enhanced mode install check */
+			   /* don't return anything as we're running in standard mode */
+			return 1;
+
+		default:
+		}
 
 	default:
 		IntBarf(0x2f, context);
diff --git a/objects/font.c b/objects/font.c
index 5963b96..fba3ab2 100644
--- a/objects/font.c
+++ b/objects/font.c
@@ -47,7 +47,8 @@
       case FF_DECORATIVE: family = "*"; break;
       default:            family = "*"; break;
     }
-    AnsiLower(family);
+    else 
+	AnsiLower(family);
     
 	while (TRUE) {
 	    /* Width==0 seems not to be a valid wildcard on SGI's, using * instead */
@@ -111,7 +112,7 @@
     metrics->tmDigitizedAspectX = 1;
     metrics->tmDigitizedAspectY = 1;
 
-    if (xfont->per_char) average = metrics->tmMaxCharWidth;
+    if (!xfont->per_char) average = metrics->tmMaxCharWidth;
     else
     {
 	XCharStruct * charPtr = xfont->per_char;
diff --git a/objects/gdiobj.c b/objects/gdiobj.c
index 4f7fa67..7937282 100644
--- a/objects/gdiobj.c
+++ b/objects/gdiobj.c
@@ -553,3 +553,17 @@
 	printf("EnumObjects // End of enumeration !\n");
 	return 0;
 }
+
+/***********************************************************************
+ *		IsGDIObject(GDI.462)
+ */
+BOOL IsGDIObject(HANDLE handle)
+{
+	GDIOBJHDR *object;
+
+	object = (GDIOBJHDR *) GDI_HEAP_ADDR( handle );
+	if (object)
+		return TRUE;
+	else
+		return FALSE;
+}
diff --git a/objects/text.c b/objects/text.c
index d4448a9..53c5bb0 100644
--- a/objects/text.c
+++ b/objects/text.c
@@ -422,6 +422,21 @@
 }
 
 /***********************************************************************
+ *			TabbedTextOut		[USER.196]
+ */
+LONG TabbedTextOut(HDC hDC, short x, short y, LPSTR lpStr, short nCount, 
+		short nTabCount, LPINT lpTabPos, short nTabOrg)
+{
+	WORD 	width, height;
+	printf("EMPTY STUB !!! TabbedTextOut(); ! call TextOut() for now !\n");
+	height = HIWORD(GetTextExtent(hDC, lpStr, nCount));
+	width = LOWORD(GetTextExtent(hDC, lpStr, nCount));
+	TextOut(hDC, x, y, lpStr, nCount);
+	return MAKELONG(width, height);
+}
+
+
+/***********************************************************************
  *			ExtTextOut			[GDI.351]
  */
 BOOL ExtTextOut(HDC hDC, short x, short y, WORD wOptions, LPRECT lprect,
@@ -432,3 +447,4 @@
 	return FALSE;
 }
 
+
diff --git a/windows/event.c b/windows/event.c
index 861f95f..b873bef 100644
--- a/windows/event.c
+++ b/windows/event.c
@@ -35,6 +35,7 @@
   /* State variables */
 BOOL MouseButtonsStates[NB_BUTTONS] = { FALSE, FALSE, FALSE };
 BOOL AsyncMouseButtonsStates[NB_BUTTONS] = { FALSE, FALSE, FALSE };
+BYTE KeyStateTable[256];
 static WORD ALTKeyState;
 static HWND captureWnd = 0;
 Window winHasCursor = 0;
@@ -164,6 +165,16 @@
 	break;
 
     case MotionNotify:
+        /* Wine between two fast machines across the overloaded campus
+	   ethernet gets very boged down in MotionEvents. The following
+	   simply finds the last motion event in the queue and drops
+	   the rest. On a good link events are servered before they build
+	   up so this doesn't take place. On a slow link this may cause
+	   problems if the event order is important. I'm not yet seen
+	   of any problems. Jon 7/6/96.
+	 */
+        while (XCheckTypedWindowEvent(display, ((XAnyEvent *)event)->window,
+			  MotionNotify, event));    
 	EVENT_MotionNotify( (XMotionEvent*)event );
 	break;
 
@@ -310,6 +321,7 @@
     if (event->type == KeyPress)
     {
 	if (vkey == VK_MENU) ALTKeyState = TRUE;
+	KeyStateTable[vkey] = 1;
 	keylp.lp1.count = 1;
 	keylp.lp1.code = LOBYTE(event->keycode);
 	keylp.lp1.extended = (extended ? 1 : 0);
@@ -341,6 +353,7 @@
     else
     {
 	if (vkey == VK_MENU) ALTKeyState = FALSE;
+	KeyStateTable[vkey] = 1;
 	keylp.lp1.count = 1;
 	keylp.lp1.code = LOBYTE(event->keycode);
 	keylp.lp1.extended = (extended ? 1 : 0);
@@ -462,6 +475,7 @@
 
     if (rv == GrabSuccess)
     {
+	winHasCursor = wnd_p->window;
 	captureWnd = wnd;
 	return old_capture_wnd;
     }
diff --git a/windows/graphics.c b/windows/graphics.c
index 4a1abe1..dda491a 100644
--- a/windows/graphics.c
+++ b/windows/graphics.c
@@ -673,24 +673,31 @@
 	if (x > endx || x < orgx || y > endy || y < orgy)
 		return FALSE;
 	XPutPixel(image, x, y, fillp);
-
-	testp = XGetPixel(image, x+1, y+1);
-	if (testp != borderp && testp != fillp)
-		FloodFill_rec(image, x+1, y+1, orgx, orgy, 
-				endx, endy, borderp, fillp);
-
-	testp = XGetPixel(image, x+1, y-1);
-	if (testp != borderp && testp != fillp)
+	
+	if ((x+1 <= endx) && (y+1 <= endy)) {
+	  testp = XGetPixel(image, x+1, y+1);
+	  if (testp != borderp && testp != fillp)
+	    FloodFill_rec(image, x+1, y+1, orgx, orgy, 
+			  endx, endy, borderp, fillp);
+	}
+	if ((x+1 <= endx) && (y-1 >= orgy)) {
+	  testp = XGetPixel(image, x+1, y-1);
+	  if (testp != borderp && testp != fillp)
 		FloodFill_rec(image, x+1, y-1, orgx, orgy, 
 				endx, endy, borderp, fillp);
-	testp = XGetPixel(image, x-1, y+1); 
-	if (testp != borderp && testp != fillp)
-		FloodFill_rec(image, x-1, y+1, orgx, orgy,
-				endx, endy, borderp, fillp);
-	testp = XGetPixel(image, x-1, y-1);
- 	if (testp != borderp && testp != fillp) 
-		FloodFill_rec(image, x-1, y-1, orgx, orgy, 
-				endx, endy, borderp, fillp);
+	}
+	if ((x-1 >= orgx) && (y+1 <= endy)) {
+	  testp = XGetPixel(image, x-1, y+1); 
+	  if (testp != borderp && testp != fillp)
+	    FloodFill_rec(image, x-1, y+1, orgx, orgy,
+			  endx, endy, borderp, fillp);
+	}
+	if ((x-1 >= orgx) && (y-1 >= orgy)) {
+	  testp = XGetPixel(image, x-1, y-1);
+	  if (testp != borderp && testp != fillp) 
+	    FloodFill_rec(image, x-1, y-1, orgx, orgy, 
+			  endx, endy, borderp, fillp);
+	}
 	return TRUE;
 }
 
@@ -737,8 +744,8 @@
 	return FALSE;
     if (!FloodFill_rec(image, x, y, 
 		       0, 0, 
-		       dc->w.DCOrgX + dc->w.DCSizeX, 
-		       dc->w.DCOrgY + dc->w.DCSizeY, 
+		       dc->w.DCSizeX-1, 
+		       dc->w.DCSizeY-1, 
 		       boundrypixel, dc->u.x.brush.pixel)) {
 	XDestroyImage(image);
 	return FALSE;
diff --git a/windows/keyboard.c b/windows/keyboard.c
index ffa5777..bdde31e 100644
--- a/windows/keyboard.c
+++ b/windows/keyboard.c
@@ -11,9 +11,10 @@
 
 extern BOOL MouseButtonsStates[3];
 extern BOOL AsyncMouseButtonsStates[3];
+extern BYTE KeyStateTable[256];
 
 /**********************************************************************
- *		GetKeyState	(USER.106)
+ *		GetKeyState			[USER.106]
  */
 int GetKeyState(int keycode)
 {
@@ -29,6 +30,15 @@
 		}
 }
 
+/**********************************************************************
+ *		GetKeyboardState			[USER.222]
+ */
+void GetKeyboardState(BYTE FAR *lpKeyState)
+{
+	if (lpKeyState != NULL) {
+		memcpy(lpKeyState, KeyStateTable, 256);
+		}
+}
 
 /**********************************************************************
  *
diff --git a/windows/mdi.c b/windows/mdi.c
index 00c02f1..08f45bb 100644
--- a/windows/mdi.c
+++ b/windows/mdi.c
@@ -14,7 +14,7 @@
 #include "sysmetrics.h"
 #include "menu.h"
 
-/* #define DEBUG_MDI /* */
+#define DEBUG_MDI /* */
 
 /**********************************************************************
  *					MDIRecreateMenuList
@@ -683,32 +683,37 @@
 DefFrameProc(HWND hwnd, HWND hwndMDIClient, WORD message, 
 	     WORD wParam, LONG lParam)
 {
-    switch (message)
+    if (hwndMDIClient)
     {
-      case WM_COMMAND:
-	MDIBringChildToTop(hwndMDIClient, wParam, TRUE, FALSE);
-	break;
+	switch (message)
+	{
+	  case WM_COMMAND:
+	    MDIBringChildToTop(hwndMDIClient, wParam, TRUE, FALSE);
+	    break;
 
-      case WM_NCLBUTTONDOWN:
-	if (MDIHandleLButton(hwnd, hwndMDIClient, wParam, lParam))
-	    return 0;
-	break;
+	  case WM_NCLBUTTONDOWN:
+	    if (MDIHandleLButton(hwnd, hwndMDIClient, wParam, lParam))
+		return 0;
+	    break;
+	    
+	  case WM_NCACTIVATE:
+	    SendMessage(hwndMDIClient, message, wParam, lParam);
+	    return MDIPaintMaximized(hwnd, hwndMDIClient, 
+				     message, wParam, lParam);
 
-      case WM_NCACTIVATE:
-	SendMessage(hwndMDIClient, message, wParam, lParam);
-	return MDIPaintMaximized(hwnd, hwndMDIClient, message, wParam, lParam);
-
-      case WM_NCPAINT:
-	return MDIPaintMaximized(hwnd, hwndMDIClient, message, wParam, lParam);
+	  case WM_NCPAINT:
+	    return MDIPaintMaximized(hwnd, hwndMDIClient, 
+				     message, wParam, lParam);
 	
-      case WM_SETFOCUS:
-	SendMessage(hwndMDIClient, WM_SETFOCUS, wParam, lParam);
-	break;
+	  case WM_SETFOCUS:
+	    SendMessage(hwndMDIClient, WM_SETFOCUS, wParam, lParam);
+	    break;
 
-      case WM_SIZE:
-	MoveWindow(hwndMDIClient, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
-	break;
-
+	  case WM_SIZE:
+	    MoveWindow(hwndMDIClient, 0, 0, 
+		       LOWORD(lParam), HIWORD(lParam), TRUE);
+	    break;
+	}
     }
     
     return DefWindowProc(hwnd, message, wParam, lParam);
diff --git a/windows/nonclient.c b/windows/nonclient.c
index d8fedc0..e31a875 100644
--- a/windows/nonclient.c
+++ b/windows/nonclient.c
@@ -599,22 +599,24 @@
 		if (lpMenu->Height == 0) lpMenu->Height = SYSMETRICS_CYMENU + 1;
 		oldHeight = lpMenu->Height;
 		rect2.bottom = rect2.top + oldHeight; 
-/*		printf("NC_DoNCPaint // menubar old Height=%d\n", oldHeight); */
 		StdDrawMenuBar(hdc, &rect2, lpMenu, suppress_menupaint);
-		GlobalUnlock(wndPtr->wIDmenu);
-/*		printf("NC_DoNCPaint // menubar new Height=%d\n", lpMenu->Height); */
 		if (oldHeight != lpMenu->Height) {
+			printf("NC_DoNCPaint // menubar changed oldHeight=%d != lpMenu->Height=%d\n",
+									oldHeight, lpMenu->Height);
 			/* Reduce ClientRect according to MenuBar height */
 			wndPtr->rectClient.top -= oldHeight;
 			wndPtr->rectClient.top += lpMenu->Height;
 			}
+		GlobalUnlock(wndPtr->wIDmenu);
 		}
 	}
 
     if (wndPtr->dwStyle & (WS_VSCROLL | WS_HSCROLL)) {
- 	if (wndPtr->dwStyle & WS_VSCROLL) {
+ 	if ((wndPtr->dwStyle & WS_VSCROLL) && (wndPtr->VScroll != NULL) &&
+	    (wndPtr->scroll_flags & 0x0001)) {
  	    int bottom = rect.bottom;
- 	    if (wndPtr->dwStyle & WS_HSCROLL) bottom -= SYSMETRICS_CYHSCROLL;
+ 	    if ((wndPtr->dwStyle & WS_HSCROLL) && (wndPtr->scroll_flags & 0x0001))
+			bottom -= SYSMETRICS_CYHSCROLL;
 	    SetRect(&rect2, rect.right - SYSMETRICS_CXVSCROLL, 
 	    	rect.top, rect.right, bottom); 
 	    if (wndPtr->dwStyle & WS_CAPTION) rect.top += SYSMETRICS_CYSIZE;
@@ -622,21 +624,23 @@
 	    	rect2.top += SYSMETRICS_CYMENU + 1;
  	    StdDrawScrollBar(hwnd, hdc, SB_VERT, &rect2, (LPHEADSCROLL)wndPtr->VScroll);
  	    }
-	if (wndPtr->dwStyle & WS_HSCROLL) {
+ 	if ((wndPtr->dwStyle & WS_HSCROLL) && wndPtr->HScroll != NULL &&
+	    (wndPtr->scroll_flags & 0x0002)) {
 	    int right = rect.right;
-	    if (wndPtr->dwStyle & WS_VSCROLL) right -= SYSMETRICS_CYVSCROLL;
+	    if ((wndPtr->dwStyle & WS_VSCROLL) && (wndPtr->scroll_flags & 0x0001))
+			right -= SYSMETRICS_CYVSCROLL;
 	    SetRect(&rect2, rect.left, rect.bottom - SYSMETRICS_CYHSCROLL,
 		    right, rect.bottom);
 	    StdDrawScrollBar(hwnd, hdc, SB_HORZ, &rect2, (LPHEADSCROLL)wndPtr->HScroll);
 	    }
 
-	if ((wndPtr->dwStyle & WS_VSCROLL) && (wndPtr->dwStyle & WS_HSCROLL))
-	{
-	    RECT r = rect;
-	    r.left = r.right - SYSMETRICS_CXVSCROLL;
-	    r.top  = r.bottom - SYSMETRICS_CYHSCROLL;
-	    FillRect( hdc, &r, sysColorObjects.hbrushScrollbar );
-	}
+	if ((wndPtr->dwStyle & WS_VSCROLL) && (wndPtr->dwStyle & WS_HSCROLL) &&
+	    (wndPtr->scroll_flags & 0x0003) == 0x0003) {
+		RECT r = rect;
+		r.left = r.right - SYSMETRICS_CXVSCROLL;
+		r.top  = r.bottom - SYSMETRICS_CYHSCROLL;
+		FillRect( hdc, &r, sysColorObjects.hbrushScrollbar );
+		}
     }    
 
     ReleaseDC( hwnd, hdc );
diff --git a/windows/win.c b/windows/win.c
index 1f0a8f7..041c227 100644
--- a/windows/win.c
+++ b/windows/win.c
@@ -201,6 +201,7 @@
     wndPtr->hdce              = 0;
     wndPtr->VScroll           = NULL;
     wndPtr->HScroll           = NULL;
+    wndPtr->scroll_flags      = 0;
     wndPtr->wIDmenu           = 0;
     wndPtr->hText             = 0;
     wndPtr->flags             = 0;
@@ -318,6 +319,7 @@
     wndPtr->flags             = 0;
     wndPtr->VScroll           = NULL;
     wndPtr->HScroll           = NULL;
+    wndPtr->scroll_flags      = 0;
     wndPtr->hSysMenu          = 0;
     wndPtr->hProp	          = 0;
     wndPtr->hTask	          = 0;
@@ -692,8 +694,11 @@
     else switch(offset)
     {
 	case GWL_STYLE:   ptr = &wndPtr->dwStyle;
+	  break;
         case GWL_EXSTYLE: ptr = &wndPtr->dwExStyle;
+	  break;
 	case GWL_WNDPROC: ptr = (LONG *)(&wndPtr->lpfnWndProc);
+	  break;
 	default: return 0;
     }
     retval = *ptr;
