diff --git a/controls/menu.c b/controls/menu.c
index 675026d..f15adea 100644
--- a/controls/menu.c
+++ b/controls/menu.c
@@ -1068,7 +1068,7 @@
         if (lpitem->fState & MF_GRAYED)  dis.itemState |= ODS_GRAYED;
         if (lpitem->fState & MF_HILITE)  dis.itemState |= ODS_SELECTED;
         dis.itemAction = odaction; /* ODA_DRAWENTIRE | ODA_SELECT | ODA_FOCUS; */
-        dis.hwndItem   = hmenu;
+        dis.hwndItem   = (HWND)hmenu;
         dis.hDC        = hdc;
         dis.rcItem     = lpitem->rect;
         TRACE("Ownerdraw: owner=%04x itemID=%d, itemState=%d, itemAction=%d, "
@@ -2901,7 +2901,7 @@
     if (!(wFlags & TPM_NONOTIFY))
        SendMessageA( hWnd, WM_ENTERMENULOOP, bPopup, 0 );
 
-    SendMessageA( hWnd, WM_SETCURSOR, hWnd, HTCAPTION );
+    SendMessageA( hWnd, WM_SETCURSOR, (WPARAM)hWnd, HTCAPTION );
 
     if (!(wFlags & TPM_NONOTIFY))
     {
@@ -3007,20 +3007,6 @@
 
 
 /**********************************************************************
- *           TrackPopupMenu   (USER.416)
- */
-BOOL16 WINAPI TrackPopupMenu16( HMENU16 hMenu, UINT16 wFlags, INT16 x, INT16 y,
-                           INT16 nReserved, HWND16 hWnd, const RECT16 *lpRect )
-{
-    RECT r;
-    if (lpRect)
-   	 CONV_RECT16TO32( lpRect, &r );
-    return TrackPopupMenu( hMenu, wFlags, x, y, nReserved, hWnd,
-                             lpRect ? &r : NULL );
-}
-
-
-/**********************************************************************
  *           TrackPopupMenu   (USER32.@)
  *
  * Like the win32 API, the function return the command ID only if the
@@ -3350,16 +3336,6 @@
 
 
 /**********************************************************************
- *         HiliteMenuItem    (USER.162)
- */
-BOOL16 WINAPI HiliteMenuItem16( HWND16 hWnd, HMENU16 hMenu, UINT16 wItemID,
-                                UINT16 wHilite )
-{
-    return HiliteMenuItem( hWnd, hMenu, wItemID, wHilite );
-}
-
-
-/**********************************************************************
  *         HiliteMenuItem    (USER32.@)
  */
 BOOL WINAPI HiliteMenuItem( HWND hWnd, HMENU hMenu, UINT wItemID,
@@ -3836,15 +3812,6 @@
 
 
 /**********************************************************************
- *         GetSystemMenu    (USER.156)
- */
-HMENU16 WINAPI GetSystemMenu16( HWND16 hWnd, BOOL16 bRevert )
-{
-    return GetSystemMenu( hWnd, bRevert );
-}
-
-
-/**********************************************************************
  *         GetSystemMenu    (USER32.@)
  */
 HMENU WINAPI GetSystemMenu( HWND hWnd, BOOL bRevert )
@@ -3899,15 +3866,6 @@
 
 
 /*******************************************************************
- *         SetSystemMenu    (USER.280)
- */
-BOOL16 WINAPI SetSystemMenu16( HWND16 hwnd, HMENU16 hMenu )
-{
-    return SetSystemMenu( hwnd, hMenu );
-}
-
-
-/*******************************************************************
  *         SetSystemMenu    (USER32.@)
  */
 BOOL WINAPI SetSystemMenu( HWND hwnd, HMENU hMenu )
@@ -3926,15 +3884,6 @@
 
 
 /**********************************************************************
- *         GetMenu    (USER.157)
- */
-HMENU16 WINAPI GetMenu16( HWND16 hWnd ) 
-{
-    return (HMENU16)GetMenu(hWnd);
-}
-
-
-/**********************************************************************
  *         GetMenu    (USER32.@)
  */
 HMENU WINAPI GetMenu( HWND hWnd ) 
@@ -3946,15 +3895,6 @@
 
 
 /**********************************************************************
- *         SetMenu    (USER.158)
- */
-BOOL16 WINAPI SetMenu16( HWND16 hWnd, HMENU16 hMenu )
-{
-    return SetMenu( hWnd, hMenu );
-}
-
-
-/**********************************************************************
  *         SetMenu    (USER32.@)
  */
 BOOL WINAPI SetMenu( HWND hWnd, HMENU hMenu )
@@ -4013,15 +3953,6 @@
 
 
 /**********************************************************************
- *         DrawMenuBar    (USER.160)
- */
-void WINAPI DrawMenuBar16( HWND16 hWnd )
-{
-    DrawMenuBar( hWnd );
-}
-
-
-/**********************************************************************
  *         DrawMenuBar    (USER32.@)
  */
 BOOL WINAPI DrawMenuBar( HWND hWnd )
@@ -4702,21 +4633,6 @@
      return TRUE;
 }
 
-/**********************************************************************
- *		GetMenuItemRect    (USER.665)
- */
-
-BOOL16 WINAPI GetMenuItemRect16 (HWND16 hwnd, HMENU16 hMenu, UINT16 uItem,
-				 LPRECT16 rect)
-{
-     RECT r32;
-     BOOL res;
-
-     if (!rect) return FALSE;
-     res = GetMenuItemRect (hwnd, hMenu, uItem, &r32);
-     CONV_RECT32TO16 (&r32, rect);
-     return res;
-}
 
 /**********************************************************************
  *		SetMenuInfo    (USER32.@)
@@ -5037,43 +4953,3 @@
     WARN_(accel)("couldn't translate accelerator key\n");
     return 0;
 }
-
-
-/**********************************************************************
- *           TranslateAccelerator      (USER.178)
- */
-INT16 WINAPI TranslateAccelerator16( HWND16 hWnd, HACCEL16 hAccel, LPMSG16 msg )
-{
-    LPACCEL16 lpAccelTbl;
-    int i;
-
-    if (msg == NULL)
-    {
-        WARN_(accel)("msg null; should hang here to be win compatible\n");
-        return 0;
-    }
-    if (!hAccel || !(lpAccelTbl = (LPACCEL16) LockResource16(hAccel)))
-    {
-        WARN_(accel)("invalid accel handle=%x\n", hAccel);
-        return 0;
-    }
-    if ((msg->message != WM_KEYDOWN &&
-         msg->message != WM_KEYUP &&
-         msg->message != WM_SYSKEYDOWN &&
-         msg->message != WM_SYSKEYUP &&
-         msg->message != WM_CHAR)) return 0;
-
-    TRACE_(accel)("TranslateAccelerators hAccel=%04x, hWnd=%04x,"
-                  "msg->hwnd=%04x, msg->message=%04x, wParam=%04x, lParam=%lx\n",
-                  hAccel,hWnd,msg->hwnd,msg->message,msg->wParam,msg->lParam);
-
-    i = 0;
-    do
-    {
-        if (translate_accelerator( hWnd, msg->message, msg->wParam, msg->lParam,
-                                   lpAccelTbl[i].fVirt, lpAccelTbl[i].key, lpAccelTbl[i].cmd ))
-            return 1;
-    } while ((lpAccelTbl[i++].fVirt & 0x80) == 0);
-    WARN_(accel)("couldn't translate accelerator key\n");
-    return 0;
-}
