diff --git a/dlls/user/user.spec b/dlls/user/user.spec
index 175f481..f7909d0 100644
--- a/dlls/user/user.spec
+++ b/dlls/user/user.spec
@@ -111,7 +111,7 @@
 106 pascal16 GetKeyState(word) GetKeyState16
 107 pascal   DefWindowProc(word word word long) DefWindowProc16
 108 pascal16 GetMessage(segptr word word word) GetMessage16
-109 pascal16 PeekMessage(ptr word word word word) PeekMessage16
+109 pascal16 PeekMessage(segptr word word word word) PeekMessage16
 110 pascal16 PostMessage(word word word long) PostMessage16
 111 pascal   SendMessage(word word word long) SendMessage16
 112 pascal16 WaitMessage() WaitMessage
@@ -536,7 +536,7 @@
 802 stub OPENFILENAME_CALLBACK16
 803 stub PRINTDLG_CALLBACK16
 804 stub CHOOSECOLOR_CALLBACK16
-819 pascal16 PeekMessage32(ptr word word word word word) PeekMessage32_16
+819 pascal16 PeekMessage32(segptr word word word word word) PeekMessage32_16
 820 pascal   GetMessage32(segptr word word word word) GetMessage32_16
 821 pascal16 TranslateMessage32(ptr word) TranslateMessage32_16 
 #821 stub IsDialogMessage32		# FIXME: two ordinal 821???
diff --git a/include/wine/winuser16.h b/include/wine/winuser16.h
index 32f1cdb..4ba05d1 100644
--- a/include/wine/winuser16.h
+++ b/include/wine/winuser16.h
@@ -833,8 +833,8 @@
 void        WINAPI OffsetRect16(LPRECT16,INT16,INT16);
 BOOL16      WINAPI OpenClipboard16(HWND16);
 BOOL16      WINAPI OpenIcon16(HWND16);
-BOOL16      WINAPI PeekMessage16(LPMSG16,HWND16,UINT16,UINT16,UINT16);
-BOOL16      WINAPI PeekMessage32_16(LPMSG16_32,HWND16,UINT16,UINT16,UINT16,BOOL16);
+BOOL16      WINAPI PeekMessage16(SEGPTR,HWND16,UINT16,UINT16,UINT16);
+BOOL16      WINAPI PeekMessage32_16(SEGPTR,HWND16,UINT16,UINT16,UINT16,BOOL16);
 BOOL16      WINAPI PostAppMessage16(HTASK16,UINT16,WPARAM16,LPARAM);
 BOOL16      WINAPI PostMessage16(HWND16,UINT16,WPARAM16,LPARAM);
 void        WINAPI PostQuitMessage16(INT16);
diff --git a/windows/message.c b/windows/message.c
index 7a70c99..2e63551 100644
--- a/windows/message.c
+++ b/windows/message.c
@@ -1374,11 +1374,12 @@
 /***********************************************************************
  *         PeekMessage32_16   (USER.819)
  */
-BOOL16 WINAPI PeekMessage32_16( LPMSG16_32 lpmsg16_32, HWND16 hwnd,
+BOOL16 WINAPI PeekMessage32_16( SEGPTR msg16_32, HWND16 hwnd,
                                 UINT16 first, UINT16 last, UINT16 flags, 
                                 BOOL16 wHaveParamHigh )
 {
     BOOL ret;
+    MSG32_16 *lpmsg16_32 = (MSG32_16 *)PTR_SEG_TO_LIN(msg16_32);
     MSG msg;
 
     ret = MSG_PeekMessage( QMSG_WIN16, &msg, hwnd, first, last, flags, TRUE );
@@ -1394,16 +1395,17 @@
     if ( wHaveParamHigh )
         lpmsg16_32->wParamHigh = HIWORD(msg.wParam);
 
+    HOOK_CallHooks16( WH_GETMESSAGE, HC_ACTION, flags & PM_REMOVE, (LPARAM)msg16_32 );
     return ret;
 }
 
 /***********************************************************************
  *           PeekMessage16   (USER.109)
  */
-BOOL16 WINAPI PeekMessage16( LPMSG16 lpmsg, HWND16 hwnd, 
+BOOL16 WINAPI PeekMessage16( SEGPTR msg, HWND16 hwnd,
                              UINT16 first, UINT16 last, UINT16 flags )
 {
-    return PeekMessage32_16( (LPMSG16_32)lpmsg, hwnd, first, last, flags, FALSE );
+    return PeekMessage32_16( msg, hwnd, first, last, flags, FALSE );
 }
 
 /***********************************************************************
@@ -1412,7 +1414,14 @@
 BOOL WINAPI PeekMessageA( LPMSG lpmsg, HWND hwnd,
                           UINT min, UINT max, UINT wRemoveMsg)
 {
-    return MSG_PeekMessage( QMSG_WIN32A, lpmsg, hwnd, min, max, wRemoveMsg, TRUE );
+    BOOL ret = MSG_PeekMessage( QMSG_WIN32A, lpmsg, hwnd, min, max, wRemoveMsg, TRUE );
+
+    TRACE( "peekmessage %04x, hwnd %04x, filter(%04x - %04x)\n", 
+           lpmsg->message, hwnd, min, max );
+
+    if (ret) HOOK_CallHooksA( WH_GETMESSAGE, HC_ACTION,
+                              wRemoveMsg & PM_REMOVE, (LPARAM)lpmsg );
+    return ret;
 }
 
 /***********************************************************************
@@ -1450,7 +1459,10 @@
   UINT wRemoveMsg /* removal flags */ 
 ) 
 {
-    return MSG_PeekMessage( QMSG_WIN32W, lpmsg, hwnd, min, max, wRemoveMsg, TRUE );
+    BOOL ret = MSG_PeekMessage( QMSG_WIN32W, lpmsg, hwnd, min, max, wRemoveMsg, TRUE );
+    if (ret) HOOK_CallHooksW( WH_GETMESSAGE, HC_ACTION,
+                              wRemoveMsg & PM_REMOVE, (LPARAM)lpmsg );
+    return ret;
 }
 
 
@@ -1479,7 +1491,7 @@
     TRACE( "message %04x, hwnd %04x, filter(%04x - %04x)\n",
            lpmsg16_32->msg.message, hWnd, first, last );
 
-    HOOK_CallHooks16( WH_GETMESSAGE, HC_ACTION, 0, (LPARAM)msg16_32 );
+    HOOK_CallHooks16( WH_GETMESSAGE, HC_ACTION, PM_REMOVE, (LPARAM)msg16_32 );
     return lpmsg16_32->msg.message != WM_QUIT;
 }
 
@@ -1501,7 +1513,7 @@
     TRACE( "message %04x, hwnd %04x, filter(%04x - %04x)\n", 
            lpmsg->message, hwnd, min, max );
     
-    HOOK_CallHooksA( WH_GETMESSAGE, HC_ACTION, 0, (LPARAM)lpmsg );
+    HOOK_CallHooksA( WH_GETMESSAGE, HC_ACTION, PM_REMOVE, (LPARAM)lpmsg );
     return lpmsg->message != WM_QUIT;
 }
 
@@ -1544,7 +1556,7 @@
     TRACE( "message %04x, hwnd %04x, filter(%04x - %04x)\n", 
            lpmsg->message, hwnd, min, max );
     
-    HOOK_CallHooksW( WH_GETMESSAGE, HC_ACTION, 0, (LPARAM)lpmsg );
+    HOOK_CallHooksW( WH_GETMESSAGE, HC_ACTION, PM_REMOVE, (LPARAM)lpmsg );
     return lpmsg->message != WM_QUIT;
 }
 
diff --git a/windows/win.c b/windows/win.c
index f7103d6..6342c64 100644
--- a/windows/win.c
+++ b/windows/win.c
@@ -3223,8 +3223,8 @@
  */
 BOOL WINAPI DragDetect( HWND hWnd, POINT pt )
 {
-    MSG16 msg;
-    RECT16  rect;
+    MSG msg;
+    RECT rect;
 
     rect.left = pt.x - wDragWidth;
     rect.right = pt.x + wDragWidth;
@@ -3236,7 +3236,7 @@
 
     while(1)
     {
-	while(PeekMessage16(&msg ,0 ,WM_MOUSEFIRST ,WM_MOUSELAST ,PM_REMOVE))
+	while(PeekMessageA(&msg ,0 ,WM_MOUSEFIRST ,WM_MOUSELAST ,PM_REMOVE))
         {
             if( msg.message == WM_LBUTTONUP )
 	    {
@@ -3245,7 +3245,10 @@
             }
             if( msg.message == WM_MOUSEMOVE )
 	    {
-		if( !PtInRect16( &rect, MAKEPOINT16(msg.lParam) ) )
+                POINT tmp;
+                tmp.x = LOWORD(msg.lParam);
+                tmp.y = HIWORD(msg.lParam);
+		if( !PtInRect( &rect, tmp ))
                 {
 		    ReleaseCapture();
 		    return 1;
@@ -3263,7 +3266,7 @@
 DWORD WINAPI DragObject16( HWND16 hwndScope, HWND16 hWnd, UINT16 wObj,
                            HANDLE16 hOfStruct, WORD szList, HCURSOR16 hCursor )
 {
-    MSG16	msg;
+    MSG	msg;
     LPDRAGINFO	lpDragInfo;
     SEGPTR	spDragInfo;
     HCURSOR16 	hDragCursor=0, hOldCursor=0, hBummer=0;
@@ -3318,11 +3321,12 @@
     do
     {
 	do{  WaitMessage(); }
-	while( !PeekMessage16(&msg,0,WM_MOUSEFIRST,WM_MOUSELAST,PM_REMOVE) );
+	while( !PeekMessageA(&msg,0,WM_MOUSEFIRST,WM_MOUSELAST,PM_REMOVE) );
 
        *(lpDragInfo+1) = *lpDragInfo;
 
-	lpDragInfo->pt = msg.pt;
+	lpDragInfo->pt.x = msg.pt.x;
+	lpDragInfo->pt.y = msg.pt.y;
 
 	/* update DRAGINFO struct */
 	TRACE_(msg)("lpDI->hScope = %04x\n",lpDragInfo->hScope);
