diff --git a/controls/combo.c b/controls/combo.c
index 7254e4a..3ff0f27 100644
--- a/controls/combo.c
+++ b/controls/combo.c
@@ -582,7 +582,7 @@
                                            lphc->droppedRect.right - lphc->droppedRect.left,
                                            lphc->droppedRect.bottom - lphc->droppedRect.top,
                                            hwnd, (HMENU)ID_CB_LISTBOX,
-                                           GetWindowLongA( hwnd, GWL_HINSTANCE ), lphc );
+                                           (HINSTANCE)GetWindowLongA( hwnd, GWL_HINSTANCE ), lphc );
       else
           lphc->hWndLBox = CreateWindowExA(lbeExStyle, "ComboLBox", NULL, lbeStyle,
                                            lphc->droppedRect.left,
@@ -590,7 +590,7 @@
                                            lphc->droppedRect.right - lphc->droppedRect.left,
                                            lphc->droppedRect.bottom - lphc->droppedRect.top,
                                            hwnd, (HMENU)ID_CB_LISTBOX,
-                                           GetWindowLongA( hwnd, GWL_HINSTANCE ), lphc );
+                                           (HINSTANCE)GetWindowLongA( hwnd, GWL_HINSTANCE ), lphc );
 
       if( lphc->hWndLBox )
       {
@@ -623,14 +623,14 @@
                                                    lphc->textRect.right - lphc->textRect.left,
                                                    lphc->textRect.bottom - lphc->textRect.top,
                                                    hwnd, (HMENU)ID_CB_EDIT,
-                                                   GetWindowLongA( hwnd, GWL_HINSTANCE ), NULL );
+                                                   (HINSTANCE)GetWindowLongA( hwnd, GWL_HINSTANCE ), NULL );
               else
                   lphc->hWndEdit = CreateWindowExA(0, "Edit", NULL, lbeStyle,
                                                    lphc->textRect.left, lphc->textRect.top,
                                                    lphc->textRect.right - lphc->textRect.left,
                                                    lphc->textRect.bottom - lphc->textRect.top,
                                                    hwnd, (HMENU)ID_CB_EDIT,
-                                                   GetWindowLongA( hwnd, GWL_HINSTANCE ), NULL );
+                                                   (HINSTANCE)GetWindowLongA( hwnd, GWL_HINSTANCE ), NULL );
 
 	      if( !lphc->hWndEdit )
 		bEdit = FALSE;
@@ -927,7 +927,8 @@
    */
   if (CB_DISABLED(lphc))
   {
-    hBkgBrush = SendMessageW(lphc->owner, WM_CTLCOLORSTATIC, hDC, (LPARAM)lphc->self );
+    hBkgBrush = (HBRUSH)SendMessageW(lphc->owner, WM_CTLCOLORSTATIC,
+				     (WPARAM)hDC, (LPARAM)lphc->self );
 
     /*
      * We have to change the text color since WM_CTLCOLORSTATIC will
@@ -940,11 +941,13 @@
   {
     if (lphc->wState & CBF_EDIT)
     {
-      hBkgBrush = SendMessageW(lphc->owner, WM_CTLCOLOREDIT, hDC, (LPARAM)lphc->self );
+      hBkgBrush = (HBRUSH)SendMessageW(lphc->owner, WM_CTLCOLOREDIT,
+				       (WPARAM)hDC, (LPARAM)lphc->self );
     }
     else
     {
-      hBkgBrush = SendMessageW(lphc->owner, WM_CTLCOLORLISTBOX, hDC, (LPARAM)lphc->self );
+      hBkgBrush = (HBRUSH)SendMessageW(lphc->owner, WM_CTLCOLORLISTBOX,
+				       (WPARAM)hDC, (LPARAM)lphc->self );
     }
   }
 
@@ -1946,14 +1949,14 @@
 
         case WM_PRINTCLIENT:
 	        if (lParam & PRF_ERASEBKGND)
-		  COMBO_EraseBackground(hwnd, lphc, wParam);
+		  COMBO_EraseBackground(hwnd, lphc, (HDC)wParam);
 
 		/* Fallthrough */
      	case WM_PAINT:
 		/* wParam may contain a valid HDC! */
-		return  COMBO_Paint(lphc, wParam);
+		return  COMBO_Paint(lphc, (HDC)wParam);
 	case WM_ERASEBKGND:
-		return  COMBO_EraseBackground(hwnd, lphc, wParam);
+		return  COMBO_EraseBackground(hwnd, lphc, (HDC)wParam);
 	case WM_GETDLGCODE:
 	{
 		LRESULT result = DLGC_WANTARROWS | DLGC_WANTCHARS;
@@ -1980,7 +1983,7 @@
 		  !(lphc->wState & CBF_NORESIZE) ) COMBO_Size( lphc );
 		return  TRUE;
 	case WM_SETFONT:
-		COMBO_Font( lphc, (HFONT16)wParam, (BOOL)lParam );
+		COMBO_Font( lphc, (HFONT)wParam, (BOOL)lParam );
 		return  TRUE;
 	case WM_GETFONT:
 		return  (LRESULT)lphc->hFont;
diff --git a/controls/desktop.c b/controls/desktop.c
index b26d828..689a46f 100644
--- a/controls/desktop.c
+++ b/controls/desktop.c
@@ -51,7 +51,7 @@
     DesktopWndProc,       /* procW */
     0,                    /* extra */
     IDC_ARROWA,           /* cursor */
-    COLOR_BACKGROUND+1    /* brush */
+    (HBRUSH)(COLOR_BACKGROUND+1)    /* brush */
 };
 
 
@@ -151,7 +151,7 @@
             (!fTileWallPaper && ((bitmapSize.cx < rect.right) || (bitmapSize.cy < rect.bottom))))
         {
             HBRUSH brush = hbrushPattern;
-            if (!brush) brush = GetClassLongA( hwnd, GCL_HBRBACKGROUND );
+            if (!brush) brush = (HBRUSH)GetClassLongA( hwnd, GCL_HBRBACKGROUND );
             /* Set colors in case pattern is a monochrome bitmap */
             SetBkColor( hdc, RGB(0,0,0) );
             SetTextColor( hdc, GetSysColor(COLOR_BACKGROUND) );
@@ -267,4 +267,3 @@
     else hbrushPattern = 0;
     return TRUE;
 }
-
diff --git a/controls/edit.c b/controls/edit.c
index 392db39..2d14b6d 100644
--- a/controls/edit.c
+++ b/controls/edit.c
@@ -1506,7 +1506,7 @@
  */
 static void EDIT_LockBuffer(EDITSTATE *es)
 {
-	HINSTANCE hInstance = GetWindowLongW( es->hwndSelf, GWL_HINSTANCE );
+	HINSTANCE hInstance = (HINSTANCE)GetWindowLongW( es->hwndSelf, GWL_HINSTANCE );
 	if (!es->text) {
 	    CHAR *textA = NULL;
 	    UINT countA = 0;
@@ -2181,7 +2181,7 @@
  */
 static void EDIT_UnlockBuffer(EDITSTATE *es, BOOL force)
 {
-	HINSTANCE hInstance = GetWindowLongW( es->hwndSelf, GWL_HINSTANCE );
+	HINSTANCE hInstance = (HINSTANCE)GetWindowLongW( es->hwndSelf, GWL_HINSTANCE );
 
 	/* Edit window might be already destroyed */
 	if(!IsWindow(es->hwndSelf))
@@ -2491,7 +2491,7 @@
  */
 static HLOCAL16 EDIT_EM_GetHandle16(EDITSTATE *es)
 {
-	HINSTANCE hInstance = GetWindowLongW( es->hwndSelf, GWL_HINSTANCE );
+	HINSTANCE hInstance = (HINSTANCE)GetWindowLongW( es->hwndSelf, GWL_HINSTANCE );
 	CHAR *textA;
 	UINT countA, alloc_size;
 
@@ -3121,7 +3121,7 @@
  */
 static void EDIT_EM_SetHandle(EDITSTATE *es, HLOCAL hloc)
 {
-	HINSTANCE hInstance = GetWindowLongW( es->hwndSelf, GWL_HINSTANCE );
+	HINSTANCE hInstance = (HINSTANCE)GetWindowLongW( es->hwndSelf, GWL_HINSTANCE );
 
 	if (!(es->style & ES_MULTILINE))
 		return;
@@ -3201,7 +3201,7 @@
  */
 static void EDIT_EM_SetHandle16(EDITSTATE *es, HLOCAL16 hloc)
 {
-	HINSTANCE hInstance = GetWindowLongW( es->hwndSelf, GWL_HINSTANCE );
+	HINSTANCE hInstance = (HINSTANCE)GetWindowLongW( es->hwndSelf, GWL_HINSTANCE );
 	INT countW, countA;
 	HLOCAL hloc32W_new;
 	WCHAR *textW;
@@ -3748,7 +3748,7 @@
  */
 static LRESULT EDIT_WM_Destroy(EDITSTATE *es)
 {
-	HINSTANCE hInstance = GetWindowLongW( es->hwndSelf, GWL_HINSTANCE );
+	HINSTANCE hInstance = (HINSTANCE)GetWindowLongW( es->hwndSelf, GWL_HINSTANCE );
 	LINEDEF *pc, *pp;
 
 	if (es->hloc32W) {
diff --git a/controls/static.c b/controls/static.c
index 50042ba..188e1e0 100644
--- a/controls/static.c
+++ b/controls/static.c
@@ -125,7 +125,7 @@
 	ERR("huh? hBitmap!=0, but not bitmap\n");
     	return 0;
     }
-    hOldBitmap = SetWindowLongA( hwnd, HICON_GWL_OFFSET, hBitmap );
+    hOldBitmap = (HBITMAP)SetWindowLongA( hwnd, HICON_GWL_OFFSET, (LONG)hBitmap );
     if (hBitmap)
     {
         BITMAP bm;
@@ -143,7 +143,7 @@
  */
 static HICON STATIC_LoadIconA( HWND hwnd, LPCSTR name )
 {
-    HINSTANCE hInstance = GetWindowLongA( hwnd, GWL_HINSTANCE );
+    HINSTANCE hInstance = (HINSTANCE)GetWindowLongA( hwnd, GWL_HINSTANCE );
     HICON hicon = LoadIconA( hInstance, name );
     if (!hicon) hicon = LoadIconA( 0, name );
     return hicon;
@@ -156,7 +156,7 @@
  */
 static HICON STATIC_LoadIconW( HWND hwnd, LPCWSTR name )
 {
-    HINSTANCE hInstance = GetWindowLongA( hwnd, GWL_HINSTANCE );
+    HINSTANCE hInstance = (HINSTANCE)GetWindowLongA( hwnd, GWL_HINSTANCE );
     HICON hicon = LoadIconW( hInstance, name );
     if (!hicon) hicon = LoadIconW( 0, name );
     return hicon;
@@ -169,7 +169,7 @@
  */
 static HBITMAP STATIC_LoadBitmapA( HWND hwnd, LPCSTR name )
 {
-    HINSTANCE hInstance = GetWindowLongA( hwnd, GWL_HINSTANCE );
+    HINSTANCE hInstance = (HINSTANCE)GetWindowLongA( hwnd, GWL_HINSTANCE );
     HBITMAP hbitmap = LoadBitmapA( hInstance, name );
     if (!hbitmap)  /* Try OEM icon (FIXME: is this right?) */
         hbitmap = LoadBitmapA( 0, name );
@@ -183,7 +183,7 @@
  */
 static HBITMAP STATIC_LoadBitmapW( HWND hwnd, LPCWSTR name )
 {
-    HINSTANCE hInstance = GetWindowLongA( hwnd, GWL_HINSTANCE );
+    HINSTANCE hInstance = (HINSTANCE)GetWindowLongA( hwnd, GWL_HINSTANCE );
     HBITMAP hbitmap = LoadBitmapW( hInstance, name );
     if (!hbitmap)  /* Try OEM icon (FIXME: is this right?) */
         hbitmap = LoadBitmapW( 0, name );
@@ -360,7 +360,7 @@
     case STM_SETIMAGE:
         switch(wParam) {
 	case IMAGE_BITMAP:
-	    lResult = STATIC_SetBitmap( hwnd, (HBITMAP)lParam, style );
+	    lResult = (LRESULT)STATIC_SetBitmap( hwnd, (HBITMAP)lParam, style );
 	    break;
 	case IMAGE_ICON:
 	    lResult = (LRESULT)STATIC_SetIcon( hwnd, (HICON)lParam, style );
@@ -418,7 +418,7 @@
   dis.itemData   = 0;
   GetClientRect( hwnd, &dis.rcItem );
 
-  SendMessageW( GetParent(hwnd), WM_CTLCOLORSTATIC, hdc, (LPARAM)hwnd );
+  SendMessageW( GetParent(hwnd), WM_CTLCOLORSTATIC, (WPARAM)hdc, (LPARAM)hwnd );
   SendMessageW( GetParent(hwnd), WM_DRAWITEM, id, (LPARAM)&dis );
 }
 
@@ -462,15 +462,15 @@
     if (style & SS_NOPREFIX)
 	wFormat |= DT_NOPREFIX;
 
-    if ((hFont = GetWindowLongA( hwnd, HFONT_GWL_OFFSET ))) SelectObject( hdc, hFont );
+    if ((hFont = (HFONT)GetWindowLongA( hwnd, HFONT_GWL_OFFSET ))) SelectObject( hdc, hFont );
 
     if ((style & SS_NOPREFIX) || ((style & SS_TYPEMASK) != SS_SIMPLE))
     {
-        hBrush = SendMessageW( GetParent(hwnd), WM_CTLCOLORSTATIC, hdc,
-			       (LPARAM)hwnd );
+        hBrush = (HBRUSH)SendMessageW( GetParent(hwnd), WM_CTLCOLORSTATIC,
+				       (WPARAM)hdc, (LPARAM)hwnd );
         if (!hBrush) /* did the app forget to call defwindowproc ? */
-            hBrush = DefWindowProcW(GetParent(hwnd), WM_CTLCOLORSTATIC, hdc,
-				    (LPARAM)hwnd);
+            hBrush = (HBRUSH)DefWindowProcW(GetParent(hwnd), WM_CTLCOLORSTATIC,
+					    (WPARAM)hdc, (LPARAM)hwnd);
         FillRect( hdc, &rc, hBrush );
     }
     if (!IsWindowEnabled(hwnd)) SetTextColor(hdc, GetSysColor(COLOR_GRAYTEXT));
@@ -529,7 +529,8 @@
     HICON hIcon;
 
     GetClientRect( hwnd, &rc );
-    hbrush = SendMessageW( GetParent(hwnd), WM_CTLCOLORSTATIC, hdc, (LPARAM)hwnd );
+    hbrush = (HBRUSH)SendMessageW( GetParent(hwnd), WM_CTLCOLORSTATIC,
+				   (WPARAM)hdc, (LPARAM)hwnd );
     FillRect( hdc, &rc, hbrush );
     if ((hIcon = (HICON)GetWindowLongA( hwnd, HICON_GWL_OFFSET )))
         DrawIcon( hdc, rc.left, rc.top, hIcon );
@@ -543,7 +544,8 @@
     HBITMAP hBitmap, oldbitmap;
 
     GetClientRect( hwnd, &rc );
-    hbrush = SendMessageW( GetParent(hwnd), WM_CTLCOLORSTATIC, hdc, (LPARAM)hwnd );
+    hbrush = (HBRUSH)SendMessageW( GetParent(hwnd), WM_CTLCOLORSTATIC,
+				   (WPARAM)hdc, (LPARAM)hwnd );
     FillRect( hdc, &rc, hbrush );
 
     if ((hBitmap = (HBITMAP)GetWindowLongA( hwnd, HICON_GWL_OFFSET )))
diff --git a/controls/uitools.c b/controls/uitools.c
index 4a6fd23..7171f7f 100644
--- a/controls/uitools.c
+++ b/controls/uitools.c
@@ -576,20 +576,6 @@
 
 
 /**********************************************************************
- *          DrawEdge   (USER.659)
- */
-BOOL16 WINAPI DrawEdge16( HDC16 hdc, LPRECT16 rc, UINT16 edge, UINT16 flags )
-{
-    RECT rect32;
-    BOOL ret;
-
-    CONV_RECT16TO32( rc, &rect32 );
-    ret = DrawEdge( hdc, &rect32, edge, flags );
-    CONV_RECT32TO16( &rect32, rc );
-    return ret;
-}
-
-/**********************************************************************
  *          DrawEdge   (USER32.@)
  */
 BOOL WINAPI DrawEdge( HDC hdc, LPRECT rc, UINT edge, UINT flags )
@@ -1383,22 +1369,6 @@
 
 
 /**********************************************************************
- *          DrawFrameControl  (USER.656)
- */
-BOOL16 WINAPI DrawFrameControl16( HDC16 hdc, LPRECT16 rc, UINT16 uType,
-                                  UINT16 uState )
-{
-    RECT rect32;
-    BOOL ret;
-
-    CONV_RECT16TO32( rc, &rect32 );
-    ret = DrawFrameControl( hdc, &rect32, uType, uState );
-    CONV_RECT32TO16( &rect32, rc );
-    return ret;
-}
-
-
-/**********************************************************************
  *          DrawFrameControl  (USER32.@)
  */
 BOOL WINAPI DrawFrameControl( HDC hdc, LPRECT rc, UINT uType,
