diff --git a/dlls/comctl32/comctl32undoc.c b/dlls/comctl32/comctl32undoc.c
index b51c65b..c521532 100644
--- a/dlls/comctl32/comctl32undoc.c
+++ b/dlls/comctl32/comctl32undoc.c
@@ -252,7 +252,7 @@
     FIXME (commctrl, "(%lx %lx %lx %lx) empty stub!\n",
 	   dwParam1, dwParam2, dwParam3, dwParam4);
 
-    return -1;
+    return TRUE;
 }
 
 
@@ -1353,7 +1353,7 @@
 	}
 
 	if (uOptions & DPAS_INSERTAFTER) {
-	    TRACE (commctrl, "-- ret=%d\n", r);
+	    TRACE (commctrl, "-- ret=%d\n", l);
 	    return l;
 	}
     }
diff --git a/dlls/comctl32/pager.c b/dlls/comctl32/pager.c
index 815a55f..8562805 100644
--- a/dlls/comctl32/pager.c
+++ b/dlls/comctl32/pager.c
@@ -91,6 +91,7 @@
     NMPGCALCSIZE nmpgcs;
 
     if (infoPtr->hwndChild) {
+	ZeroMemory (&nmpgcs, sizeof (NMPGCALCSIZE));
 	nmpgcs.hdr.hwndFrom = wndPtr->hwndSelf;
 	nmpgcs.hdr.idFrom = wndPtr->wIDmenu;
 	nmpgcs.hdr.code = PGN_CALCSIZE;
@@ -166,10 +167,11 @@
     FIXME (pager, "hwnd=%x\n", infoPtr->hwndChild);
 
     /* FIXME: redraw */
-    SetParent32 (infoPtr->hwndChild, wndPtr->hwndSelf);
-    SetWindowPos32 (infoPtr->hwndChild, wndPtr->hwndSelf,
-		    0, 0, 40, 40, SWP_SHOWWINDOW);
-    RedrawWindow32 (wndPtr->hwndSelf, NULL, NULL, RDW_INVALIDATE);
+    if (infoPtr->hwndChild) {
+	SetParent32 (infoPtr->hwndChild, wndPtr->hwndSelf);
+	SetWindowPos32 (infoPtr->hwndChild, HWND_TOP,
+			0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE);
+    }
 
     return 0;
 }
@@ -185,8 +187,8 @@
     FIXME (pager, "pos=%d\n", infoPtr->nPos);
 
     /* FIXME: redraw */
-    SetWindowPos32 (infoPtr->hwndChild, wndPtr->hwndSelf,
-		    0, 0, 0, 0, SWP_NOSIZE);
+    SetWindowPos32 (infoPtr->hwndChild, HWND_TOP,
+		    0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE);
 
     return 0;
 }
@@ -212,7 +214,7 @@
     }
 
     /* set default settings */
-    infoPtr->hwndChild = 0;
+    infoPtr->hwndChild = (HWND32)NULL;
     infoPtr->clrBk = GetSysColor32 (COLOR_BTNFACE);
     infoPtr->nBorder = 0;
     infoPtr->nButtonSize = 0;
@@ -245,10 +247,12 @@
     HBRUSH32 hBrush = CreateSolidBrush32 (infoPtr->clrBk);
     RECT32 rect;
 
-//    GetClientRect32 (wndPtr->hwndSelf, &rect);
-//    FillRect32 ((HDC32)wParam, &rect, hBrush);
-//    DeleteObject32 (hBrush);
-    return TRUE;
+    GetClientRect32 (wndPtr->hwndSelf, &rect);
+    FillRect32 ((HDC32)wParam, &rect, hBrush);
+    DeleteObject32 (hBrush);
+
+//    return TRUE;
+    return FALSE;
 }
 
 
@@ -256,6 +260,28 @@
 // << PAGER_Paint >>
 
 
+static LRESULT
+PAGER_Size (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
+{
+    PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
+    RECT32 rect;
+
+    GetClientRect32 (wndPtr->hwndSelf, &rect);
+    if (infoPtr->hwndChild) {
+	SetWindowPos32 (infoPtr->hwndChild, HWND_TOP, rect.left, rect.top,
+			rect.right - rect.left, rect.bottom - rect.top,
+			SWP_SHOWWINDOW);
+//	MoveWindow32 (infoPtr->hwndChild, 1, 1, rect.right - 2, rect.bottom-2, TRUE);
+//	UpdateWindow32 (infoPtr->hwndChild);
+
+    }
+//    FillRect32 ((HDC32)wParam, &rect, hBrush);
+//    DeleteObject32 (hBrush);
+    return TRUE;
+}
+
+
+
 LRESULT WINAPI
 PAGER_WindowProc (HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam)
 {
@@ -316,6 +342,8 @@
 //	case WM_PAINT:
 //	    return PAGER_Paint (wndPtr, wParam);
 
+	case WM_SIZE:
+	    return PAGER_Size (wndPtr, wParam, lParam);
 
 	default:
 	    if (uMsg >= WM_USER)
@@ -327,8 +355,8 @@
 }
 
 
-void
-PAGER_Register (void)
+VOID
+PAGER_Register (VOID)
 {
     WNDCLASS32A wndClass;
 
@@ -346,3 +374,11 @@
     RegisterClass32A (&wndClass);
 }
 
+
+VOID
+PAGER_Unregister (VOID)
+{
+    if (GlobalFindAtom32A (WC_PAGESCROLLER32A))
+	UnregisterClass32A (WC_PAGESCROLLER32A, (HINSTANCE32)NULL);
+}
+
diff --git a/dlls/comctl32/toolbar.c b/dlls/comctl32/toolbar.c
index fd5e0c4..f9a248b 100644
--- a/dlls/comctl32/toolbar.c
+++ b/dlls/comctl32/toolbar.c
@@ -129,7 +129,7 @@
 
     HDC32 hdcImageList = CreateCompatibleDC32 (0);
     HDC32 hdcMask = CreateCompatibleDC32 (0);
-    HIMAGELIST himl = infoPtr->himlDef;
+    HIMAGELIST himl = infoPtr->himlStd;
     HBITMAP32 hbmMask;
 
     /* create new bitmap */
@@ -187,7 +187,15 @@
 	DrawEdge32 (hdc, &rc, EDGE_RAISED,
 		    BF_SOFT | BF_RECT | BF_MIDDLE | BF_ADJUST);
 
-	TOOLBAR_DrawMasked (infoPtr, btnPtr, hdc, rc.left+1, rc.top+1);
+	if (bFlat) {
+//	    if (infoPtr->himlDis)
+		ImageList_Draw (infoPtr->himlDis, btnPtr->iBitmap, hdc,
+				rc.left+1, rc.top+1, ILD_NORMAL);
+//	    else
+//		TOOLBAR_DrawMasked (infoPtr, btnPtr, hdc, rc.left+1, rc.top+1);
+	}
+	else
+	    TOOLBAR_DrawMasked (infoPtr, btnPtr, hdc, rc.left+1, rc.top+1);
 
 	TOOLBAR_DrawString (infoPtr, btnPtr, hdc, btnPtr->fsState);
 	return;
@@ -197,7 +205,7 @@
     if (btnPtr->fsState & TBSTATE_PRESSED) {
 	DrawEdge32 (hdc, &rc, EDGE_SUNKEN,
 		    BF_RECT | BF_MIDDLE | BF_ADJUST);
-	ImageList_Draw (infoPtr->himlDef, btnPtr->iBitmap, hdc,
+	ImageList_Draw (infoPtr->himlStd, btnPtr->iBitmap, hdc,
 			rc.left+2, rc.top+2, ILD_NORMAL);
 	TOOLBAR_DrawString (infoPtr, btnPtr, hdc, btnPtr->fsState);
 	return;
@@ -214,8 +222,12 @@
 			BF_RECT | BF_MIDDLE | BF_ADJUST);
 
 	TOOLBAR_DrawPattern (hdc, &rc);
-	ImageList_Draw (infoPtr->himlDef, btnPtr->iBitmap, hdc,
-			rc.left+2, rc.top+2, ILD_NORMAL);
+	if (bFlat)
+	    ImageList_Draw (infoPtr->himlDef, btnPtr->iBitmap, hdc,
+			    rc.left+2, rc.top+2, ILD_NORMAL);
+	else
+	    ImageList_Draw (infoPtr->himlStd, btnPtr->iBitmap, hdc,
+			    rc.left+2, rc.top+2, ILD_NORMAL);
 	TOOLBAR_DrawString (infoPtr, btnPtr, hdc, btnPtr->fsState);
 	return;
     }
@@ -234,8 +246,14 @@
     /* normal state */
     DrawEdge32 (hdc, &rc, EDGE_RAISED,
 		BF_SOFT | BF_RECT | BF_MIDDLE | BF_ADJUST);
-    ImageList_Draw (infoPtr->himlDef, btnPtr->iBitmap, hdc,
-		    rc.left+1, rc.top+1, ILD_NORMAL);
+
+    if (bFlat)
+	ImageList_Draw (infoPtr->himlDef, btnPtr->iBitmap, hdc,
+			rc.left+1, rc.top+1, ILD_NORMAL);
+    else
+	ImageList_Draw (infoPtr->himlStd, btnPtr->iBitmap, hdc,
+			rc.left+1, rc.top+1, ILD_NORMAL);
+
     TOOLBAR_DrawString (infoPtr, btnPtr, hdc, btnPtr->fsState);
 }
 
@@ -603,7 +621,7 @@
     if (!(infoPtr->himlDef)) {
 	/* create new default image list */
 	TRACE (toolbar, "creating default image list!\n");
-	infoPtr->himlDef =
+	infoPtr->himlStd =
 	    ImageList_Create (infoPtr->nBitmapWidth, infoPtr->nBitmapHeight,
 			      ILC_COLOR | ILC_MASK, (INT32)wParam, 2);
     }
@@ -622,7 +640,7 @@
     /* Add bitmaps to the default image list */
     if (lpAddBmp->hInst == (HINSTANCE32)0) {
 	nIndex = 
-	    ImageList_AddMasked (infoPtr->himlDef, (HBITMAP32)lpAddBmp->nID,
+	    ImageList_AddMasked (infoPtr->himlStd, (HBITMAP32)lpAddBmp->nID,
 				 CLR_DEFAULT);
     }
     else if (lpAddBmp->hInst == HINST_COMMCTRL) {
@@ -631,14 +649,14 @@
 
 	/* Hack to "add" some reserved images within the image list 
 	   to get the right image indices */
-	nIndex = ImageList_GetImageCount (infoPtr->himlDef);
-	ImageList_SetImageCount (infoPtr->himlDef, nIndex + (INT32)wParam);
+	nIndex = ImageList_GetImageCount (infoPtr->himlStd);
+	ImageList_SetImageCount (infoPtr->himlStd, nIndex + (INT32)wParam);
     }
     else {
 	HBITMAP32 hBmp =
 	    LoadBitmap32A (lpAddBmp->hInst, (LPSTR)lpAddBmp->nID);
 
-	nIndex = ImageList_AddMasked (infoPtr->himlDef, hBmp, CLR_DEFAULT);
+	nIndex = ImageList_AddMasked (infoPtr->himlStd, hBmp, CLR_DEFAULT);
 
 	DeleteObject32 (hBmp); 
     }
@@ -2052,7 +2070,7 @@
     if (wndPtr->dwStyle & TBSTYLE_TOOLTIPS) {
 	/* Create tooltip control */
 	infoPtr->hwndToolTip =
-	    CreateWindowEx32A (0, TOOLTIPS_CLASS32A, NULL, TTS_ALWAYSTIP,
+	    CreateWindowEx32A (0, TOOLTIPS_CLASS32A, NULL, 0,
 			       CW_USEDEFAULT32, CW_USEDEFAULT32,
 			       CW_USEDEFAULT32, CW_USEDEFAULT32,
 			       wndPtr->hwndSelf, 0, 0, 0);
@@ -2830,7 +2848,8 @@
 }
 
 
-void TOOLBAR_Register (void)
+VOID
+TOOLBAR_Register (VOID)
 {
     WNDCLASS32A wndClass;
 
@@ -2847,3 +2866,12 @@
  
     RegisterClass32A (&wndClass);
 }
+
+
+VOID
+TOOLBAR_Unregister (VOID)
+{
+    if (GlobalFindAtom32A (TOOLBARCLASSNAME32A))
+	UnregisterClass32A (TOOLBARCLASSNAME32A, (HINSTANCE32)NULL);
+}
+
