diff --git a/windows/nonclient.c b/windows/nonclient.c
index 02dbfa2..7501c39 100644
--- a/windows/nonclient.c
+++ b/windows/nonclient.c
@@ -30,16 +30,15 @@
 
 BOOL NC_DrawGrayButton(HDC hdc, int x, int y);
 
-static HBITMAP16 hbitmapClose = 0;
-static HBITMAP16 hbitmapCloseD = 0;
-static HBITMAP16 hbitmapMinimize = 0;
-static HBITMAP16 hbitmapMinimizeD = 0;
-static HBITMAP16 hbitmapMaximize = 0;
-static HBITMAP16 hbitmapMaximizeD = 0;
-static HBITMAP16 hbitmapRestore = 0;
-static HBITMAP16 hbitmapRestoreD = 0;
+static HBITMAP hbitmapClose;
+static HBITMAP hbitmapMinimize;
+static HBITMAP hbitmapMinimizeD;
+static HBITMAP hbitmapMaximize;
+static HBITMAP hbitmapMaximizeD;
+static HBITMAP hbitmapRestore;
+static HBITMAP hbitmapRestoreD;
 
-BYTE lpGrayMask[] = { 0xAA, 0xA0,
+static const BYTE lpGrayMask[] = { 0xAA, 0xA0,
 		      0x55, 0x50,  
 		      0xAA, 0xA0,
 		      0x55, 0x50,  
@@ -1104,174 +1103,93 @@
 static void NC_DrawCloseButton95 (HWND hwnd, HDC hdc, BOOL down, BOOL bGrayed)
 {
     RECT rect;
-    HDC hdcMem;
     WND *wndPtr = WIN_FindWndPtr( hwnd );
 
     if( !(wndPtr->dwExStyle & WS_EX_MANAGED) )
     {
-	BITMAP bmp;
-	HBITMAP hBmp, hOldBmp;
-
-	NC_GetInsideRect95( hwnd, &rect );
+        NC_GetInsideRect95( hwnd, &rect );
 
 	/* A tool window has a smaller Close button */
 	if(wndPtr->dwExStyle & WS_EX_TOOLWINDOW)
 	{
-            RECT toolRect;	     
             INT iBmpHeight = 11; /* Windows does not use SM_CXSMSIZE and SM_CYSMSIZE   */
-            INT iBmpWidth = 11;  /* it uses 11x11 for  the close button in tool window */ 	  	 
+            INT iBmpWidth = 11;  /* it uses 11x11 for  the close button in tool window */
             INT iCaptionHeight = GetSystemMetrics(SM_CYSMCAPTION);
 
-            toolRect.top = rect.top + (iCaptionHeight - 1 - iBmpHeight) / 2;
-            toolRect.left = rect.right - (iCaptionHeight + 1 + iBmpWidth) / 2;
-            toolRect.bottom = toolRect.top + iBmpHeight;
-            toolRect.right = toolRect.left + iBmpWidth;
-            DrawFrameControl(hdc,&toolRect,
-                             DFC_CAPTION,DFCS_CAPTIONCLOSE | 
-                             down ? DFCS_PUSHED : 0 | 
-                             bGrayed ? DFCS_INACTIVE : 0);
-	}
-	else
-	{
-            hdcMem = CreateCompatibleDC( hdc );
-            hBmp = down ? hbitmapCloseD : hbitmapClose;
-            hOldBmp = SelectObject (hdcMem, hBmp);
-            GetObjectA (hBmp, sizeof(BITMAP), &bmp);
-
-            BitBlt (hdc, rect.right - (GetSystemMetrics(SM_CYCAPTION) + 1 + bmp.bmWidth) / 2,
-                    rect.top + (GetSystemMetrics(SM_CYCAPTION) - 1 - bmp.bmHeight) / 2,
-                    bmp.bmWidth, bmp.bmHeight, hdcMem, 0, 0, SRCCOPY);
-
-            if(bGrayed)
-                NC_DrawGrayButton(hdc,rect.right - (GetSystemMetrics(SM_CYCAPTION) + 1 + bmp.bmWidth) / 2 + 2,
-                                  rect.top + (GetSystemMetrics(SM_CYCAPTION) - 1 - bmp.bmHeight) / 2 + 2);
-
-            SelectObject (hdcMem, hOldBmp);
-            DeleteDC (hdcMem);
-	}
+            rect.top = rect.top + (iCaptionHeight - 1 - iBmpHeight) / 2;
+            rect.left = rect.right - (iCaptionHeight + 1 + iBmpWidth) / 2;
+            rect.bottom = rect.top + iBmpHeight;
+            rect.right = rect.left + iBmpWidth;
+        }
+        else
+        {
+            rect.left = rect.right - GetSystemMetrics(SM_CXSIZE) - 1;
+            rect.bottom = rect.top + GetSystemMetrics(SM_CYSIZE) - 1;
+            rect.top += 2;
+            rect.right -= 2;
+        }
+        DrawFrameControl( hdc, &rect, DFC_CAPTION,
+                          (DFCS_CAPTIONCLOSE |
+                           (down ? DFCS_PUSHED : 0) |
+                           (bGrayed ? DFCS_INACTIVE : 0)) );
     }
     WIN_ReleaseWndPtr(wndPtr);
 }
 
 /******************************************************************************
- *
- *   NC_DrawMaxButton95(
- *      HWND  hwnd,
- *      HDC16  hdc,
- *      BOOL  down 
- *      BOOL    bGrayed )
+ *   NC_DrawMaxButton95
  *
  *   Draws the maximize button for Win95 style windows.
- *
  *   If bGrayed is true, then draw a disabled Maximize button
- *
- *   Bugs
- *        Many.  Spacing might still be incorrect.  Need to fit a close
- *        button between the max button and the edge.
- *        Should scale the image with the title bar.  And more...
- *
- *   Revision history
- *        05-Jul-1997 Dave Cuthbert (dacut@ece.cmu.edu)
- *             Original implementation.
- *
- *****************************************************************************/
-
+ */
 static void NC_DrawMaxButton95(HWND hwnd,HDC16 hdc,BOOL down, BOOL bGrayed)
 {
     RECT rect;
-    HDC hdcMem;
     WND *wndPtr = WIN_FindWndPtr( hwnd );
 
     if( !(wndPtr->dwExStyle & WS_EX_MANAGED))
     {
-        BITMAP  bmp;
-        HBITMAP  hBmp,hOldBmp;
-
-	NC_GetInsideRect95( hwnd, &rect );
-	hdcMem = CreateCompatibleDC( hdc );
-	hBmp = IsZoomed(hwnd) ?
-	    (down ? hbitmapRestoreD : hbitmapRestore ) :
-	    (down ? hbitmapMaximizeD: hbitmapMaximize);
-	hOldBmp=SelectObject( hdcMem, hBmp );
-	GetObjectA (hBmp, sizeof(BITMAP), &bmp);
-	
-	if (wndPtr->dwStyle & WS_SYSMENU)
-	    rect.right -= GetSystemMetrics(SM_CYCAPTION) + 1;
-	
-	BitBlt( hdc, rect.right - (GetSystemMetrics(SM_CXSIZE) + bmp.bmWidth) / 2,
-		  rect.top + (GetSystemMetrics(SM_CYCAPTION) - 1 - bmp.bmHeight) / 2,
-		  bmp.bmWidth, bmp.bmHeight, hdcMem, 0, 0, SRCCOPY );
-	
-	if(bGrayed)
-	    NC_DrawGrayButton(hdc, rect.right - (GetSystemMetrics(SM_CXSIZE) + bmp.bmWidth) / 2 + 2,
-			      rect.top + (GetSystemMetrics(SM_CYCAPTION) - 1 - bmp.bmHeight) / 2 + 2);
-	    
-	
-	SelectObject (hdcMem, hOldBmp);
-	DeleteDC( hdcMem );
+        UINT flags = IsZoomed(hwnd) ? DFCS_CAPTIONRESTORE : DFCS_CAPTIONMAX;
+        NC_GetInsideRect95( hwnd, &rect );
+        if (wndPtr->dwStyle & WS_SYSMENU)
+            rect.right -= GetSystemMetrics(SM_CXSIZE) + 1;
+        rect.left = rect.right - GetSystemMetrics(SM_CXSIZE);
+        rect.bottom = rect.top + GetSystemMetrics(SM_CYSIZE) - 1;
+        rect.top += 2;
+        rect.right -= 2;
+        if (down) flags |= DFCS_PUSHED;
+        if (bGrayed) flags |= DFCS_INACTIVE;
+        DrawFrameControl( hdc, &rect, DFC_CAPTION, flags );
     }
     WIN_ReleaseWndPtr(wndPtr);
 }
 
 /******************************************************************************
- *
- *   NC_DrawMinButton95(
- *      HWND  hwnd,
- *      HDC16  hdc,
- *      BOOL  down,
- *      BOOL    bGrayed )
+ *   NC_DrawMinButton95
  *
  *   Draws the minimize button for Win95 style windows.
- *
  *   If bGrayed is true, then draw a disabled Minimize button
- *
- *   Bugs
- *        Many.  Spacing is still incorrect.  Should scale the image with the
- *        title bar.  And more...
- *
- *   Revision history
- *        05-Jul-1997 Dave Cuthbert (dacut@ece.cmu.edu)
- *             Original implementation.
- *
- *****************************************************************************/
-
+ */
 static void  NC_DrawMinButton95(HWND hwnd,HDC16 hdc,BOOL down, BOOL bGrayed)
 {
     RECT rect;
-    HDC hdcMem;
     WND *wndPtr = WIN_FindWndPtr( hwnd );
 
     if( !(wndPtr->dwExStyle & WS_EX_MANAGED))
-        
     {
-       BITMAP  bmp;
-       HBITMAP  hBmp,hOldBmp;
-	
-	NC_GetInsideRect95( hwnd, &rect );
-
-       hdcMem = CreateCompatibleDC( hdc );
-       hBmp = down ? hbitmapMinimizeD : hbitmapMinimize;
-       hOldBmp= SelectObject( hdcMem, hBmp );
-	GetObjectA (hBmp, sizeof(BITMAP), &bmp);
-
-	if (wndPtr->dwStyle & WS_SYSMENU)
-	    rect.right -= GetSystemMetrics(SM_CYCAPTION) + 1;
-
-	/* In win 95 there is always a Maximize box when there is a Minimize one */
-	if ((wndPtr->dwStyle & WS_MAXIMIZEBOX) || (wndPtr->dwStyle & WS_MINIMIZEBOX)) 
-	    rect.right += -1 - (GetSystemMetrics(SM_CXSIZE) + bmp.bmWidth) / 2;
-
-	BitBlt( hdc, rect.right - (GetSystemMetrics(SM_CXSIZE) + bmp.bmWidth) / 2,
-		  rect.top + (GetSystemMetrics(SM_CYCAPTION) - 1 - bmp.bmHeight) / 2,
-		  bmp.bmWidth, bmp.bmHeight, hdcMem, 0, 0, SRCCOPY );
-
-	if(bGrayed)
-	    NC_DrawGrayButton(hdc, rect.right - (GetSystemMetrics(SM_CXSIZE) + bmp.bmWidth) / 2 + 2,
-			      rect.top + (GetSystemMetrics(SM_CYCAPTION) - 1 - bmp.bmHeight) / 2 + 2);
-			  
-	
-       SelectObject (hdcMem, hOldBmp);
-       DeleteDC( hdcMem );
+        UINT flags = DFCS_CAPTIONMIN;
+        NC_GetInsideRect95( hwnd, &rect );
+        if (wndPtr->dwStyle & WS_SYSMENU)
+            rect.right -= GetSystemMetrics(SM_CXSIZE) + 1;
+        if (wndPtr->dwStyle & (WS_MAXIMIZEBOX|WS_MINIMIZEBOX))
+            rect.right -= GetSystemMetrics(SM_CXSIZE) - 2;
+        rect.left = rect.right - GetSystemMetrics(SM_CXSIZE);
+        rect.bottom = rect.top + GetSystemMetrics(SM_CYSIZE) - 1;
+        rect.top += 2;
+        rect.right -= 2;
+        if (down) flags |= DFCS_PUSHED;
+        if (bGrayed) flags |= DFCS_INACTIVE;
+        DrawFrameControl( hdc, &rect, DFC_CAPTION, flags );
     }
     WIN_ReleaseWndPtr(wndPtr);
 }
@@ -1468,7 +1386,6 @@
             WIN_ReleaseWndPtr(wndPtr);
 	    return;
         }
-	hbitmapCloseD    = LoadBitmapA( 0, MAKEINTRESOURCEA(OBM_CLOSED) );
 	hbitmapMinimize  = LoadBitmapA( 0, MAKEINTRESOURCEA(OBM_REDUCE) );
 	hbitmapMinimizeD = LoadBitmapA( 0, MAKEINTRESOURCEA(OBM_REDUCED) );
 	hbitmapMaximize  = LoadBitmapA( 0, MAKEINTRESOURCEA(OBM_ZOOM) );
@@ -1577,18 +1494,6 @@
     FillRect( hdc, &r, GetSysColorBrush(active ? COLOR_ACTIVECAPTION :
 					    COLOR_INACTIVECAPTION) );
 
-    if (!hbitmapClose) {
-	if (!(hbitmapClose = LoadBitmapA( 0, MAKEINTRESOURCEA(OBM_CLOSE) )))
-	    return;
-        hbitmapCloseD = LoadBitmapA( 0, MAKEINTRESOURCEA(OBM_CLOSED));
-	hbitmapMinimize  = LoadBitmapA( 0, MAKEINTRESOURCEA(OBM_REDUCE) );
-	hbitmapMinimizeD = LoadBitmapA( 0, MAKEINTRESOURCEA(OBM_REDUCED) );
-	hbitmapMaximize  = LoadBitmapA( 0, MAKEINTRESOURCEA(OBM_ZOOM) );
-	hbitmapMaximizeD = LoadBitmapA( 0, MAKEINTRESOURCEA(OBM_ZOOMD) );
-	hbitmapRestore   = LoadBitmapA( 0, MAKEINTRESOURCEA(OBM_RESTORE) );
-	hbitmapRestoreD  = LoadBitmapA( 0, MAKEINTRESOURCEA(OBM_RESTORED) );
-    }
-    
     if ((style & WS_SYSMENU) && !(exStyle & WS_EX_TOOLWINDOW)) {
 	if (NC_DrawSysButton95 (hwnd, hdc, FALSE))
 	    r.left += GetSystemMetrics(SM_CYCAPTION) - 1;
