diff --git a/dlls/ole32/ole2stubs.c b/dlls/ole32/ole2stubs.c
index b35e0da..bedb25f 100644
--- a/dlls/ole32/ole2stubs.c
+++ b/dlls/ole32/ole2stubs.c
@@ -5,6 +5,7 @@
  */
 
 #include "ole2.h"
+#include "winuser.h"
 #include "debugtools.h"
 
 DEFAULT_DEBUG_CHANNEL(ole)
@@ -59,7 +60,7 @@
  *             OleTranslateAccelerator [OLE32.130]
  */
 HRESULT WINAPI OleTranslateAccelerator (LPOLEINPLACEFRAME lpFrame,
-                   LPOLEINPLACEFRAMEINFO lpFrameInfo, struct tagMSG* lpmsg)
+                   LPOLEINPLACEFRAMEINFO lpFrameInfo, LPMSG lpmsg)
 {
     FIXME("(%p,%p,%p),stub!\n", lpFrame, lpFrameInfo, lpmsg);
     return S_OK;
@@ -78,7 +79,7 @@
 /******************************************************************************
  *              IsAccelerator        [OLE32.75]
  */
-BOOL WINAPI IsAccelerator(HACCEL hAccel, int cAccelEntries, struct tagMSG* lpMsg, WORD* lpwCmd)
+BOOL WINAPI IsAccelerator(HACCEL hAccel, int cAccelEntries, LPMSG lpMsg, WORD* lpwCmd)
 {
   FIXME("(%x,%i,%p,%p), stub!\n", hAccel, cAccelEntries, lpMsg, lpwCmd);
   return TRUE;
diff --git a/dlls/ole32/storage.c b/dlls/ole32/storage.c
index 5962f12..b6fd586 100644
--- a/dlls/ole32/storage.c
+++ b/dlls/ole32/storage.c
@@ -1669,7 +1669,7 @@
  * StgOpenStorage16 [STORAGE.3]
  */
 HRESULT WINAPI StgOpenStorage16(
-	const OLECHAR16 * pwcsName,IStorage16 *pstgPriority,DWORD grfMode,
+	LPCOLESTR16 pwcsName,IStorage16 *pstgPriority,DWORD grfMode,
 	SNB16 snbExclude,DWORD reserved, IStorage16 **ppstgOpen
 ) {
 	HFILE		hf;
diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
index 107a9f8..0eba627 100644
--- a/dlls/oleaut32/typelib.c
+++ b/dlls/oleaut32/typelib.c
@@ -135,7 +135,7 @@
  *    Failure: Status
  */
 HRESULT WINAPI LoadTypeLib16(
-    OLECHAR *szFile, /* [in] Name of file to load from */
+    LPOLESTR szFile, /* [in] Name of file to load from */
     void * *pptLib) /* [out] Pointer to pointer to loaded type library */
 {
     FIXME_(ole)("('%s',%p): stub\n",debugstr_w((LPWSTR)szFile),pptLib);
diff --git a/dlls/stress/stress_main.c b/dlls/stress/stress_main.c
index 860c35d..3786fdb 100644
--- a/dlls/stress/stress_main.c
+++ b/dlls/stress/stress_main.c
@@ -5,7 +5,7 @@
 DEFAULT_DEBUG_CHANNEL(stress)
 
 
-int WINAPI AllocDiskSpace(long lLeft, UINT16 uDrive)
+INT16 WINAPI AllocDiskSpace(LONG lLeft, UINT16 uDrive)
 {
 	FIXME("(%d, %ld) - stub\n", 
 		       uDrive, lLeft);
@@ -13,7 +13,7 @@
 	return 1;
 }
 
-int WINAPI AllocFileHandles(int Left)
+INT16 WINAPI AllocFileHandles(INT16 Left)
 {
 	TRACE("(%d) - stub\n", Left);
 
@@ -64,7 +64,7 @@
        TRACE("GetFreeAllUserMem\n");
 }
 
-int WINAPI GetFreeFileHandles(void)
+INT16 WINAPI GetFreeFileHandles(void)
 {
 	TRACE("GetFreeFileHandles\n");
 
diff --git a/if1632/dummy.c b/if1632/dummy.c
index 0c2d93f..d06477b 100644
--- a/if1632/dummy.c
+++ b/if1632/dummy.c
@@ -7,50 +7,50 @@
 
 DEFAULT_DEBUG_CHANNEL(relay)
 
-long WINAPI stub_GDI_379(HDC16 hdc) { FIXME("STARTPAGE: stub\n"); return 1; }
-long WINAPI stub_GDI_381(HDC16 hdc, SEGPTR proc) { FIXME("SETABORTPROC: stub\n"); return 1; }
-long WINAPI stub_GDI_382(void) { FIXME("ABORTPROC: stub\n"); return 1; }
-long WINAPI stub_GDI_530(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_GDI_531(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_GDI_532(LPINT16 buffer, INT16 xx) { 
+LONG WINAPI stub_GDI_379(HDC16 hdc) { FIXME("STARTPAGE: stub\n"); return 1; }
+LONG WINAPI stub_GDI_381(HDC16 hdc, SEGPTR proc) { FIXME("SETABORTPROC: stub\n"); return 1; }
+LONG WINAPI stub_GDI_382(void) { FIXME("ABORTPROC: stub\n"); return 1; }
+LONG WINAPI stub_GDI_530(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_GDI_531(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_GDI_532(LPINT16 buffer, INT16 xx) { 
       FIXME("(%p, %hd): stub\n",buffer,xx); 
       return 0; 
 }
-long WINAPI stub_GDI_536(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_GDI_538(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_GDI_540(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_GDI_543(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_GDI_555(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_GDI_560(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_GDI_561(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_GDI_564(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_GDI_565(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_GDI_566(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_GDI_571(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_GDI_572(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_GDI_573(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_GDI_556(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_GDI_558(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_GDI_569(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_USER_489(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_USER_490(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_USER_492(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_USER_496(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_USER_902(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_USER_905(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_USER_906(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_USER_907(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_USER_909(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_USER_910(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_USER_911(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_USER_912(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_USER_913(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_USER_914(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_USER_915(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_USER_916(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_USER_918(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_USER_919(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_USER_920(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_USER_922(void) { FIXME("stub\n"); return 0; }
-long WINAPI stub_USER_923(void) { FIXME("stub\n"); return 0; }
-long WINAPI KERNEL_nop(void) { return 0; }
+LONG WINAPI stub_GDI_536(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_GDI_538(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_GDI_540(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_GDI_543(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_GDI_555(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_GDI_560(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_GDI_561(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_GDI_564(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_GDI_565(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_GDI_566(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_GDI_571(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_GDI_572(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_GDI_573(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_GDI_556(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_GDI_558(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_GDI_569(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_USER_489(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_USER_490(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_USER_492(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_USER_496(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_USER_902(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_USER_905(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_USER_906(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_USER_907(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_USER_909(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_USER_910(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_USER_911(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_USER_912(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_USER_913(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_USER_914(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_USER_915(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_USER_916(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_USER_918(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_USER_919(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_USER_920(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_USER_922(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI stub_USER_923(void) { FIXME("stub\n"); return 0; }
+LONG WINAPI KERNEL_nop(void) { return 0; }
diff --git a/include/stress.h b/include/stress.h
index e51f010..61b6a96 100644
--- a/include/stress.h
+++ b/include/stress.h
@@ -14,9 +14,9 @@
 BOOL16	WINAPI AllocGDIMem(UINT16);
 BOOL16	WINAPI AllocMem(DWORD);
 BOOL16	WINAPI AllocUserMem(UINT16);
-int	WINAPI AllocDiskSpace(long, UINT16);
-int	WINAPI AllocFileHandles(int);
-int	WINAPI GetFreeFileHandles(void);
+INT16	WINAPI AllocDiskSpace(LONG, UINT16);
+INT16	WINAPI AllocFileHandles(INT16);
+INT16	WINAPI GetFreeFileHandles(void);
 void	WINAPI FreeAllGDIMem(void);
 void	WINAPI FreeAllMem(void);
 void	WINAPI FreeAllUserMem(void);
diff --git a/include/wine/wingdi16.h b/include/wine/wingdi16.h
index cb7f0a0..88d37b4 100644
--- a/include/wine/wingdi16.h
+++ b/include/wine/wingdi16.h
@@ -5,6 +5,8 @@
 
 #include "pshpack1.h"
 
+typedef HANDLE16 HPQ16;
+typedef HANDLE16 HPJOB16;
 
 typedef struct
 {
@@ -278,7 +280,7 @@
 BOOL16      WINAPI BitBlt16(HDC16,INT16,INT16,INT16,INT16,HDC16,INT16,INT16,DWORD);
 BOOL16      WINAPI Chord16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16,INT16,INT16);
 BOOL16      WINAPI CloseFigure16(HDC16);
-int         WINAPI CloseJob16(HANDLE16);
+INT16       WINAPI CloseJob16(HPJOB16);
 HMETAFILE16 WINAPI CloseMetaFile16(HDC16);
 INT16       WINAPI CombineRgn16(HRGN16,HRGN16,HRGN16,INT16);
 HMETAFILE16 WINAPI CopyMetaFile16(HMETAFILE16,LPCSTR);
@@ -315,7 +317,7 @@
 HBRUSH16    WINAPI CreateSolidBrush16(COLORREF);
 VOID        WINAPI Death16(HDC16);
 BOOL16      WINAPI DeleteDC16(HDC16);
-int         WINAPI DeleteJob16(HANDLE16,WORD);
+INT16       WINAPI DeleteJob16(HPJOB16,INT16);
 BOOL16      WINAPI DeleteMetaFile16(HMETAFILE16);
 BOOL16      WINAPI DeleteObject16(HGDIOBJ16);
 BOOL16      WINAPI DPtoLP16(HDC16,LPPOINT16,INT16);
@@ -325,7 +327,7 @@
 INT16       WINAPI EndDoc16(HDC16);
 INT16       WINAPI EndPage16(HDC16);
 BOOL16      WINAPI EndPath16(HDC16);
-int         WINAPI EndSpoolPage16(HANDLE16);
+INT16       WINAPI EndSpoolPage16(HPJOB16);
 INT16       WINAPI EnumFontFamilies16(HDC16,LPCSTR,FONTENUMPROC16,LPARAM);
 INT16       WINAPI EnumFontFamiliesEx16(HDC16,LPLOGFONT16,FONTENUMPROCEX16,LPARAM,DWORD);
 INT16       WINAPI EnumFonts16(HDC16,LPCSTR,FONTENUMPROC16,LPARAM);
@@ -513,7 +515,7 @@
 BOOL16      WINAPI SetWindowOrgEx16(HDC16,INT16,INT16,LPPOINT16);
 INT16       WINAPI StartDoc16(HDC16,const DOCINFO16*);
 INT16       WINAPI StartPage16(HDC16);
-int         WINAPI StartSpoolPage16(HANDLE16);
+INT16       WINAPI StartSpoolPage16(HPJOB16);
 BOOL16      WINAPI StretchBlt16(HDC16,INT16,INT16,INT16,INT16,HDC16,INT16,
                                 INT16,INT16,INT16,DWORD);
 INT16       WINAPI StretchDIBits16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16,
@@ -524,8 +526,8 @@
 BOOL16      WINAPI UnrealizeObject16(HGDIOBJ16);
 INT16       WINAPI UpdateColors16(HDC16);
 BOOL16      WINAPI WidenPath16(HDC16);
-int         WINAPI WriteDialog16(HANDLE16,LPSTR,WORD);
-int         WINAPI WriteSpool16(HANDLE16,LPSTR,WORD);
+INT16       WINAPI WriteDialog16(HPJOB16,LPSTR,INT16);
+INT16       WINAPI WriteSpool16(HPJOB16,LPSTR,INT16);
 
 
 #endif /* __WINE_WINE_WINGDI16_H */
diff --git a/misc/printdrv.c b/misc/printdrv.c
index 006555e..db93fbb 100644
--- a/misc/printdrv.c
+++ b/misc/printdrv.c
@@ -253,9 +253,6 @@
 /*
  * The following function should implement a queing system
  */
-#ifndef HPQ 
-#define HPQ WORD
-#endif
 struct hpq 
 {
     struct hpq 	*next;
@@ -269,7 +266,7 @@
  *           CreatePQ   (GDI.230)
  *
  */
-HPQ WINAPI CreatePQ16(int size) 
+HPQ16 WINAPI CreatePQ16(INT16 size) 
 {
 #if 0
     HGLOBAL16 hpq = 0;
@@ -286,7 +283,7 @@
     *pPQ++ = 0;
     GlobalUnlock16(hpq);
 
-    return (HPQ)hpq;
+    return (HPQ16)hpq;
 #else
     FIXME("(%d): stub\n",size);
     return 1;
@@ -297,7 +294,7 @@
  *           DeletePQ   (GDI.235)
  *
  */
-int WINAPI DeletePQ16(HPQ hPQ) 
+INT16 WINAPI DeletePQ16(HPQ16 hPQ) 
 {
     return GlobalFree16((HGLOBAL16)hPQ);
 }
@@ -306,7 +303,7 @@
  *           ExtractPQ   (GDI.232)
  *
  */
-int WINAPI ExtractPQ16(HPQ hPQ) 
+INT16 WINAPI ExtractPQ16(HPQ16 hPQ) 
 { 
     struct hpq *queue, *prev, *current, *currentPrev;
     int key = 0, tag = -1;
@@ -348,7 +345,7 @@
  *           InsertPQ   (GDI.233)
  *
  */
-int WINAPI InsertPQ16(HPQ hPQ, int tag, int key) 
+INT16 WINAPI InsertPQ16(HPQ16 hPQ, INT16 tag, INT16 key) 
 {
     struct hpq *queueItem = xmalloc(sizeof(struct hpq));
     queueItem->next = hpqueue;
@@ -364,7 +361,7 @@
  *           MinPQ   (GDI.231)
  *
  */
-int WINAPI MinPQ16(HPQ hPQ) 
+INT16 WINAPI MinPQ16(HPQ16 hPQ) 
 {
     FIXME("(%x): stub\n", hPQ); 
     return 0;
@@ -374,7 +371,7 @@
  *           SizePQ   (GDI.234)
  *
  */
-int WINAPI SizePQ16(HPQ hPQ, int sizechange) 
+INT16 WINAPI SizePQ16(HPQ16 hPQ, INT16 sizechange) 
 {  
     FIXME("(%x %d): stub\n", hPQ, sizechange); 
     return -1; 
@@ -491,9 +488,9 @@
  *           OpenJob   (GDI.240)
  *
  */
-HANDLE16 WINAPI OpenJob16(LPCSTR lpOutput, LPCSTR lpTitle, HDC16 hDC)
+HPJOB16 WINAPI OpenJob16(LPCSTR lpOutput, LPCSTR lpTitle, HDC16 hDC)
 {
-    HANDLE16 hHandle = (HANDLE16)SP_ERROR;
+    HPJOB16 hHandle = (HPJOB16)SP_ERROR;
     PPRINTJOB pPrintJob;
 
     TRACE("'%s' '%s' %04x\n", lpOutput, lpTitle, hDC);
@@ -530,7 +527,7 @@
  *           CloseJob   (GDI.243)
  *
  */
-int WINAPI CloseJob16(HANDLE16 hJob)
+INT16 WINAPI CloseJob16(HPJOB16 hJob)
 {
     int nRet = SP_ERROR;
     PPRINTJOB pPrintJob = NULL;
@@ -552,7 +549,7 @@
  *           WriteSpool   (GDI.241)
  *
  */
-int WINAPI WriteSpool16(HANDLE16 hJob, LPSTR lpData, WORD cch)
+INT16 WINAPI WriteSpool16(HPJOB16 hJob, LPSTR lpData, INT16 cch)
 {
     int nRet = SP_ERROR;
     PPRINTJOB pPrintJob = NULL;
@@ -582,7 +579,7 @@
  *           WriteDialog   (GDI.242)
  *
  */
-int WINAPI WriteDialog16(HANDLE16 hJob, LPSTR lpMsg, WORD cchMsg)
+INT16 WINAPI WriteDialog16(HPJOB16 hJob, LPSTR lpMsg, INT16 cchMsg)
 {
     int nRet = 0;
 
@@ -597,7 +594,7 @@
  *           DeleteJob  (GDI.244)
  *
  */
-int WINAPI DeleteJob16(HANDLE16 hJob, WORD wNotUsed)
+INT16 WINAPI DeleteJob16(HPJOB16 hJob, INT16 nNotUsed)
 {
     int nRet;
 
@@ -617,7 +614,7 @@
  *           StartSpoolPage   (GDI.246)
  *
  */
-int WINAPI StartSpoolPage16(HANDLE16 hJob)
+INT16 WINAPI StartSpoolPage16(HPJOB16 hJob)
 {
     FIXME("StartSpoolPage GDI.246 unimplemented\n");
     return 1;
@@ -629,7 +626,7 @@
  *           EndSpoolPage   (GDI.247)
  *
  */
-int WINAPI EndSpoolPage16(HANDLE16 hJob)
+INT16 WINAPI EndSpoolPage16(HPJOB16 hJob)
 {
     FIXME("EndSpoolPage GDI.247 unimplemented\n");
     return 1;
diff --git a/windows/input.c b/windows/input.c
index 532c9e4..d14d18f 100644
--- a/windows/input.c
+++ b/windows/input.c
@@ -460,7 +460,7 @@
  * keyboard-input message.  This function retrieves the state of the key
  * at the time the input message was generated.  (SDK 3.1 Vol 2. p 390)
  */
-INT16 WINAPI GetKeyState(INT vkey)
+SHORT WINAPI GetKeyState(INT vkey)
 {
     INT retval;
 
@@ -1017,7 +1017,7 @@
   UINT wScanCode,
   PBYTE  lpKeyState,
   LPWSTR pwszBuff,
-  int    cchBuff,
+  INT    cchBuff,
   UINT wFlags) {
 
        FIXME_(keyboard)(": stub\n");
diff --git a/windows/user.c b/windows/user.c
index f5372d3..ff920b2 100644
--- a/windows/user.c
+++ b/windows/user.c
@@ -580,14 +580,14 @@
 /***********************************************************************
  *           GetUserObjectInformation32A   (USER32.299)
  */
-BOOL WINAPI GetUserObjectInformationA( HANDLE hObj, int nIndex, LPVOID pvInfo, DWORD nLength, LPDWORD lpnLen )
+BOOL WINAPI GetUserObjectInformationA( HANDLE hObj, INT nIndex, LPVOID pvInfo, DWORD nLength, LPDWORD lpnLen )
 {	FIXME_(win32)("(0x%x %i %p %ld %p),stub!\n", hObj, nIndex, pvInfo, nLength, lpnLen );
 	return TRUE;
 }
 /***********************************************************************
  *           GetUserObjectInformation32W   (USER32.300)
  */
-BOOL WINAPI GetUserObjectInformationW( HANDLE hObj, int nIndex, LPVOID pvInfo, DWORD nLength, LPDWORD lpnLen )
+BOOL WINAPI GetUserObjectInformationW( HANDLE hObj, INT nIndex, LPVOID pvInfo, DWORD nLength, LPDWORD lpnLen )
 {	FIXME_(win32)("(0x%x %i %p %ld %p),stub!\n", hObj, nIndex, pvInfo, nLength, lpnLen );
 	return TRUE;
 }
