diff --git a/dlls/gdi/enhmfdrv/objects.c b/dlls/gdi/enhmfdrv/objects.c
index dd3fefdfb1ed2d9b52c65a5563ccf21ba97f7f2a..b994423c39655635f7e4aa272253dbd74f3ffe71 100644
--- a/dlls/gdi/enhmfdrv/objects.c
+++ b/dlls/gdi/enhmfdrv/objects.c
@@ -231,7 +231,7 @@ static HPEN EMFDRV_CreatePenIndirect(PHYSDEV dev, HPEN hPen )
 
     if(!EMFDRV_WriteRecord( dev, &emr.emr ))
         index = 0;
-    return index;
+    return (HPEN)index;
 }
 
 /******************************************************************
@@ -257,7 +257,7 @@ HPEN EMFDRV_SelectPen(PHYSDEV dev, HPEN hPen )
             goto found;
         }
     }
-    if (!(index = EMFDRV_CreatePenIndirect(dev, hPen ))) return 0;
+    if (!(index = (DWORD)EMFDRV_CreatePenIndirect(dev, hPen ))) return 0;
  found:
     emr.emr.iType = EMR_SELECTOBJECT;
     emr.emr.nSize = sizeof(emr);
diff --git a/dlls/gdi/mfdrv/init.c b/dlls/gdi/mfdrv/init.c
index 7eca98927a27ce8acfb4dd730a2a8ed630c1b3a9..45f4a0210c2cc14027ed5ee32bb86fab6c7a4dd3 100644
--- a/dlls/gdi/mfdrv/init.c
+++ b/dlls/gdi/mfdrv/init.c
@@ -21,6 +21,7 @@
 #include "windef.h"
 #include "wine/winbase16.h"
 #include "gdi.h"
+#include "wownt32.h"
 #include "mfdrv/metafiledrv.h"
 #include "wine/debug.h"
 
@@ -324,7 +325,7 @@ HMETAFILE16 WINAPI CloseMetaFile16(
 {
     HMETAFILE16 hmf;
     METAFILEDRV_PDEVICE *physDev;
-    DC *dc = MFDRV_CloseMetaFile(hdc);
+    DC *dc = MFDRV_CloseMetaFile(HDC_32(hdc));
     if (!dc) return 0;
     physDev = (METAFILEDRV_PDEVICE *)dc->physDev;
 
diff --git a/dlls/gdi/mfdrv/objects.c b/dlls/gdi/mfdrv/objects.c
index a6403e89632ccc4bd1b11cad9cca99440d91c8c4..ef84200c818717beed51a03777e16d515edba23e 100644
--- a/dlls/gdi/mfdrv/objects.c
+++ b/dlls/gdi/mfdrv/objects.c
@@ -24,6 +24,7 @@
 
 #include "bitmap.h"
 #include "font.h"
+#include "wownt32.h"
 #include "mfdrv/metafiledrv.h"
 #include "wine/debug.h"
 
@@ -78,7 +79,7 @@ INT16 MFDRV_CreateBrushIndirect(PHYSDEV dev, HBRUSH hBrush )
 	    BITMAPINFO *info;
 	    DWORD bmSize;
 
-	    GetObjectA(logbrush.lbHatch, sizeof(bm), &bm);
+	    GetObjectA((HANDLE)logbrush.lbHatch, sizeof(bm), &bm);
 	    if(bm.bmBitsPixel != 1 || bm.bmPlanes != 1) {
 	        FIXME("Trying to store a colour pattern brush\n");
 		goto done;
@@ -104,7 +105,7 @@ INT16 MFDRV_CreateBrushIndirect(PHYSDEV dev, HBRUSH hBrush )
 	    info->bmiHeader.biBitCount = 1;
 	    bits = ((BYTE *)info) + sizeof(BITMAPINFO) + sizeof(RGBQUAD);
 
-	    GetDIBits(physDev->hdc, logbrush.lbHatch, 0, bm.bmHeight,
+	    GetDIBits(physDev->hdc, (HANDLE)logbrush.lbHatch, 0, bm.bmHeight,
 		      bits, info, DIB_RGB_COLORS);
 	    *(DWORD *)info->bmiColors = 0;
 	    *(DWORD *)(info->bmiColors + 1) = 0xffffff;
@@ -168,7 +169,7 @@ HBRUSH MFDRV_SelectBrush( PHYSDEV dev, HBRUSH hbrush )
  *         MFDRV_CreateFontIndirect
  */
 
-static BOOL MFDRV_CreateFontIndirect(PHYSDEV dev, HFONT16 hFont, LOGFONT16 *logfont)
+static BOOL MFDRV_CreateFontIndirect(PHYSDEV dev, HFONT hFont, LOGFONT16 *logfont)
 {
     int index;
     char buffer[sizeof(METARECORD) - 2 + sizeof(LOGFONT16)];
@@ -195,7 +196,7 @@ HFONT MFDRV_SelectFont( PHYSDEV dev, HFONT hfont )
 {
     LOGFONT16 lf16;
 
-    if (!GetObject16( hfont, sizeof(lf16), &lf16 )) return GDI_ERROR;
+    if (!GetObject16( HFONT_16(hfont), sizeof(lf16), &lf16 )) return HGDI_ERROR;
     if (MFDRV_CreateFontIndirect(dev, hfont, &lf16)) return 0;
     return HGDI_ERROR;
 }
@@ -203,7 +204,7 @@ HFONT MFDRV_SelectFont( PHYSDEV dev, HFONT hfont )
 /******************************************************************
  *         MFDRV_CreatePenIndirect
  */
-static BOOL MFDRV_CreatePenIndirect(PHYSDEV dev, HPEN16 hPen, LOGPEN16 *logpen)
+static BOOL MFDRV_CreatePenIndirect(PHYSDEV dev, HPEN hPen, LOGPEN16 *logpen)
 {
     int index;
     char buffer[sizeof(METARECORD) - 2 + sizeof(*logpen)];
@@ -230,7 +231,7 @@ HPEN MFDRV_SelectPen( PHYSDEV dev, HPEN hpen )
 {
     LOGPEN16 logpen;
 
-    if (!GetObject16( hpen, sizeof(logpen), &logpen )) return 0;
+    if (!GetObject16( HPEN_16(hpen), sizeof(logpen), &logpen )) return 0;
     if (MFDRV_CreatePenIndirect( dev, hpen, &logpen )) return hpen;
     return 0;
 }
diff --git a/dlls/gdi/win16drv/font.c b/dlls/gdi/win16drv/font.c
index e60b937dfe54284a9eb412fd153a1d1e352d6ea0..9c0d1a2113942d4dd43f5a61a9f3af91db8601a6 100644
--- a/dlls/gdi/win16drv/font.c
+++ b/dlls/gdi/win16drv/font.c
@@ -21,6 +21,7 @@
 
 #include <string.h>
 #include "winnls.h"
+#include "wownt32.h"
 #include "wine/winbase16.h"
 #include "win16drv/win16drv.h"
 #include "gdi.h"
@@ -147,7 +148,7 @@ HFONT WIN16DRV_SelectFont( PHYSDEV dev, HFONT hfont)
     DC *dc = physDev->dc;
     int	nSize;
 
-    if (!GetObject16( hfont, sizeof(physDev->lf), &physDev->lf ))
+    if (!GetObject16( HFONT_16(hfont), sizeof(physDev->lf), &physDev->lf ))
         return HGDI_ERROR;
 
     TRACE("WIN16DRV_FONT_SelectObject %s h=%d\n",
@@ -213,7 +214,7 @@ HFONT WIN16DRV_SelectFont( PHYSDEV dev, HFONT hfont)
            physDev->tm.tmMaxCharWidth,
            physDev->tm.tmWeight);
 
-    return TRUE; /* We'll use a device font */
+    return (HFONT)1; /* We'll use a device font */
 }
 
 /***********************************************************************
diff --git a/dlls/gdi/win16drv/graphics.c b/dlls/gdi/win16drv/graphics.c
index 78c06d920e6ffc04facfe8fa5025d11ec2ee52db..de5b32c4a11005ccbee51b50ef86ac568b142436 100644
--- a/dlls/gdi/win16drv/graphics.c
+++ b/dlls/gdi/win16drv/graphics.c
@@ -21,6 +21,7 @@
 #include <stdio.h>
 
 #include "win16drv/win16drv.h"
+#include "wownt32.h"
 #include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(win16drv);
@@ -40,7 +41,7 @@ WIN16DRV_LineTo( PHYSDEV dev, INT x, INT y )
     points[0].y = dc->CursPosY;
     points[1].x = x;
     points[1].y = y;
-    LPtoDP16( physDev->hdc, points, 2 );
+    LPtoDP16( HDC_16(physDev->hdc), points, 2 );
 
     bRet = PRTDRV_Output(physDev->segptrPDEVICE,
                          OS_POLYLINE, 2, points,
@@ -72,7 +73,7 @@ WIN16DRV_Rectangle(PHYSDEV dev, INT left, INT top, INT right, INT bottom)
     points[0].y = top;
     points[1].x = right;
     points[1].y = bottom;
-    LPtoDP16( physDev->hdc, points, 2 );
+    LPtoDP16( HDC_16(physDev->hdc), points, 2 );
 
     bRet = PRTDRV_Output(physDev->segptrPDEVICE,
                            OS_RECTANGLE, 2, points,
@@ -109,7 +110,7 @@ WIN16DRV_Polygon(PHYSDEV dev, const POINT* pt, INT count )
       points[i].x = pt[i].x;
       points[i].y = pt[i].y;
     }
-    LPtoDP16( physDev->hdc, points, count-1 );
+    LPtoDP16( HDC_16(physDev->hdc), points, count-1 );
     points[count-1].x = points[0].x;
     points[count-1].y = points[0].y;
     bRet = PRTDRV_Output(physDev->segptrPDEVICE,
@@ -144,7 +145,7 @@ WIN16DRV_Polyline(PHYSDEV dev, const POINT* pt, INT count )
       points[i].x = pt[i].x;
       points[i].y = pt[i].y;
     }
-    LPtoDP16( physDev->hdc, points, count );
+    LPtoDP16( HDC_16(physDev->hdc), points, count );
     bRet = PRTDRV_Output(physDev->segptrPDEVICE,
                          OS_POLYLINE, count, points,
                          physDev->PenInfo,
@@ -174,7 +175,7 @@ WIN16DRV_Ellipse(PHYSDEV dev, INT left, INT top, INT right, INT bottom)
     points[0].y = top;
     points[1].x = right;
     points[1].y = bottom;
-    LPtoDP16( physDev->hdc, points, 2 );
+    LPtoDP16( HDC_16(physDev->hdc), points, 2 );
 
     bRet = PRTDRV_Output(physDev->segptrPDEVICE,
                          OS_ELLIPSE, 2, points,
diff --git a/dlls/gdi/win16drv/objects.c b/dlls/gdi/win16drv/objects.c
index cf951406130afc001990e74ede2099b4271221d7..3d7e07610643dcab2d1f5dac9d894f3b44b9d144 100644
--- a/dlls/gdi/win16drv/objects.c
+++ b/dlls/gdi/win16drv/objects.c
@@ -24,6 +24,7 @@
 #include <stdio.h>
 
 #include "win16drv/win16drv.h"
+#include "wownt32.h"
 
 #include "wine/debug.h"
 
@@ -49,7 +50,7 @@ HBRUSH WIN16DRV_SelectBrush( PHYSDEV dev, HBRUSH hbrush )
     int          nSize;
     LOGBRUSH16 lBrush16;
 
-    if (!GetObject16( hbrush, sizeof(lBrush16), &lBrush16 )) return 0;
+    if (!GetObject16( HBRUSH_16(hbrush), sizeof(lBrush16), &lBrush16 )) return 0;
 
     if ( physDev->BrushInfo )
     {
@@ -79,7 +80,7 @@ HPEN WIN16DRV_SelectPen( PHYSDEV dev, HPEN hpen )
     int          nSize;
     LOGPEN16     lPen16;
 
-    if (!GetObject16( hpen, sizeof(lPen16), &lPen16 )) return 0;
+    if (!GetObject16( HPEN_16(hpen), sizeof(lPen16), &lPen16 )) return 0;
 
     if ( physDev->PenInfo )
     {
diff --git a/dlls/gdi/wing.c b/dlls/gdi/wing.c
index a581c488d48cdc7fb5dafbaca2da88a6bc57ece5..7a5a88e83ca20165ccbbc1ccda4be32891ae7376 100644
--- a/dlls/gdi/wing.c
+++ b/dlls/gdi/wing.c
@@ -25,6 +25,7 @@
 #include "wine/debug.h"
 #include "palette.h"
 #include "windef.h"
+#include "wownt32.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(wing);
 
@@ -99,7 +100,8 @@ HBITMAP16 WINAPI WinGCreateBitmap16(HDC16 hdc, BITMAPINFO *bmpi,
  */
 SEGPTR WINAPI WinGGetDIBPointer16(HBITMAP16 hWinGBitmap, BITMAPINFO* bmpi)
 {
-    BITMAPOBJ* bmp = (BITMAPOBJ *) GDI_GetObjPtr( hWinGBitmap, BITMAP_MAGIC );
+    BITMAPOBJ* bmp = (BITMAPOBJ *) GDI_GetObjPtr( HBITMAP_32(hWinGBitmap),
+						  BITMAP_MAGIC );
     SEGPTR res = 0;
 
     TRACE("(%d,%p)\n", hWinGBitmap, bmpi);
@@ -108,7 +110,7 @@ SEGPTR WINAPI WinGGetDIBPointer16(HBITMAP16 hWinGBitmap, BITMAPINFO* bmpi)
     if (bmpi) FIXME(": Todo - implement setting BITMAPINFO\n");
 
     res = bmp->segptr_bits;
-    GDI_ReleaseObj( hWinGBitmap );
+    GDI_ReleaseObj( HBITMAP_32(hWinGBitmap) );
     return res;
 }
 
@@ -137,10 +139,10 @@ UINT16 WINAPI WinGGetDIBColorTable16(HDC16 hdc, UINT16 start, UINT16 num,
  */
 HPALETTE16 WINAPI WinGCreateHalfTonePalette16(void)
 {
-    HDC hdc = CreateCompatibleDC(0);
+    HDC16 hdc = CreateCompatibleDC16(0);
     HPALETTE16 ret = CreateHalftonePalette16(hdc);
     TRACE("(void)\n");
-    DeleteDC(hdc);
+    DeleteDC16(hdc);
     return ret;
 }
 
diff --git a/graphics/mapping.c b/graphics/mapping.c
index 3b2f44ae258074ec9b1f7c08aeac70ff8a26ef3d..92e5210952138a3d1676aae81b35469845da933f 100644
--- a/graphics/mapping.c
+++ b/graphics/mapping.c
@@ -19,6 +19,7 @@
  */
 
 #include "gdi.h"
+#include "wownt32.h"
 #include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(gdi);
@@ -53,7 +54,7 @@ void MAPPING_FixIsotropic( DC * dc )
  */
 BOOL16 WINAPI DPtoLP16( HDC16 hdc, LPPOINT16 points, INT16 count )
 {
-    DC * dc = DC_GetDCPtr( hdc );
+    DC * dc = DC_GetDCPtr( HDC_32(hdc) );
     if (!dc) return FALSE;
 
     while (count--)
@@ -62,7 +63,7 @@ BOOL16 WINAPI DPtoLP16( HDC16 hdc, LPPOINT16 points, INT16 count )
         points->y = MulDiv( points->y - dc->vportOrgY, dc->wndExtY, dc->vportExtY ) + dc->wndOrgY;
         points++;
     }
-    GDI_ReleaseObj( hdc );
+    GDI_ReleaseObj( HDC_32(hdc) );
     return TRUE;
 }
 
@@ -100,7 +101,7 @@ BOOL WINAPI DPtoLP( HDC hdc, LPPOINT points, INT count )
  */
 BOOL16 WINAPI LPtoDP16( HDC16 hdc, LPPOINT16 points, INT16 count )
 {
-    DC * dc = DC_GetDCPtr( hdc );
+    DC * dc = DC_GetDCPtr( HDC_32(hdc) );
     if (!dc) return FALSE;
 
     while (count--)
@@ -109,7 +110,7 @@ BOOL16 WINAPI LPtoDP16( HDC16 hdc, LPPOINT16 points, INT16 count )
         points->y = MulDiv( points->y - dc->wndOrgY, dc->vportExtY, dc->wndExtY ) + dc->vportOrgY;
         points++;
     }
-    GDI_ReleaseObj( hdc );
+    GDI_ReleaseObj( HDC_32(hdc) );
     return TRUE;
 }
 
diff --git a/objects/bitmap.c b/objects/bitmap.c
index 46080a8b4aa7b47d20f64976e328115372470677..60f05d6bfa875aee4ac08362aac2092e33b0598b 100644
--- a/objects/bitmap.c
+++ b/objects/bitmap.c
@@ -122,7 +122,8 @@ HBITMAP WINAPI CreateBitmap( INT width, INT height, UINT planes,
     if (width < 0) width = -width;
 
       /* Create the BITMAPOBJ */
-    if (!(bmp = GDI_AllocObject( sizeof(BITMAPOBJ), BITMAP_MAGIC, &hbitmap, &bitmap_funcs )))
+    if (!(bmp = GDI_AllocObject( sizeof(BITMAPOBJ), BITMAP_MAGIC,
+				 (HGDIOBJ *)&hbitmap, &bitmap_funcs )))
         return 0;
 
     TRACE("%dx%d, %d colors returning %08x\n", width, height,
diff --git a/objects/brush.c b/objects/brush.c
index 4f268fda16d7b3055be37dce24f3a55e80670ced..0af1611bd4326d1f03d455d04fca4e9a9553ef20 100644
--- a/objects/brush.c
+++ b/objects/brush.c
@@ -26,6 +26,7 @@
 #include "wingdi.h"
 #include "wine/wingdi16.h"
 #include "bitmap.h"
+#include "wownt32.h"
 #include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(gdi);
@@ -93,7 +94,8 @@ HBRUSH WINAPI CreateBrushIndirect( const LOGBRUSH * brush )
     BRUSHOBJ * ptr;
     HBRUSH hbrush;
 
-    if (!(ptr = GDI_AllocObject( sizeof(BRUSHOBJ), BRUSH_MAGIC, &hbrush, &brush_funcs ))) return 0;
+    if (!(ptr = GDI_AllocObject( sizeof(BRUSHOBJ), BRUSH_MAGIC,
+				 (HGDIOBJ *)&hbrush, &brush_funcs ))) return 0;
     ptr->logbrush.lbStyle = brush->lbStyle;
     ptr->logbrush.lbColor = brush->lbColor;
     ptr->logbrush.lbHatch = brush->lbHatch;
@@ -372,7 +374,7 @@ BOOL16 WINAPI SetSolidBrush16(HBRUSH16 hBrush, COLORREF newColor )
     BOOL16 res = FALSE;
 
     TRACE("(hBrush %04x, newColor %08lx)\n", hBrush, (DWORD)newColor);
-    if (!(brushPtr = (BRUSHOBJ *) GDI_GetObjPtr( hBrush, BRUSH_MAGIC )))
+    if (!(brushPtr = (BRUSHOBJ *) GDI_GetObjPtr( HBRUSH_32(hBrush), BRUSH_MAGIC )))
 	return FALSE;
 
     if (brushPtr->logbrush.lbStyle == BS_SOLID)
@@ -381,6 +383,6 @@ BOOL16 WINAPI SetSolidBrush16(HBRUSH16 hBrush, COLORREF newColor )
 	res = TRUE;
     }
 
-     GDI_ReleaseObj( hBrush );
+     GDI_ReleaseObj( HBRUSH_32(hBrush) );
      return res;
 }
diff --git a/objects/dcvalues.c b/objects/dcvalues.c
index be31f4c64889ee0692b80c7af9439fbbe85cd430..6cad06e50189e29d5720223ee186554bef6715ab 100644
--- a/objects/dcvalues.c
+++ b/objects/dcvalues.c
@@ -22,6 +22,7 @@
 
 #include "winbase.h"
 #include "winerror.h"
+#include "wownt32.h"
 
 #include "gdi.h"
 
@@ -403,11 +404,11 @@ BOOL WINAPI GetWindowOrgEx( HDC hdc, LPPOINT pt )
 HRGN16 WINAPI InquireVisRgn16( HDC16 hdc )
 {
     HRGN16 ret = 0;
-    DC * dc = DC_GetDCPtr( hdc );
+    DC * dc = DC_GetDCPtr( HDC_32(hdc) );
     if (dc)
     {
-        ret = dc->hVisRgn;
-        GDI_ReleaseObj( hdc );
+        ret = HRGN_16(dc->hVisRgn);
+        GDI_ReleaseObj( HDC_32(hdc) );
     }
     return ret;
 }
@@ -419,11 +420,11 @@ HRGN16 WINAPI InquireVisRgn16( HDC16 hdc )
 HRGN16 WINAPI GetClipRgn16( HDC16 hdc )
 {
     HRGN16 ret = 0;
-    DC * dc = DC_GetDCPtr( hdc );
+    DC * dc = DC_GetDCPtr( HDC_32(hdc) );
     if (dc)
     {
-        ret = dc->hClipRgn;
-        GDI_ReleaseObj( hdc );
+        ret = HRGN_16(dc->hClipRgn);
+        GDI_ReleaseObj( HDC_32(hdc) );
     }
     return ret;
 }
diff --git a/objects/dib.c b/objects/dib.c
index 4a293f43c7b47cb628a7606838d614f79546567f..4b17fd051cda839902cd11fc86731dabddeb88db 100644
--- a/objects/dib.c
+++ b/objects/dib.c
@@ -25,6 +25,7 @@
 #include "bitmap.h"
 #include "selectors.h"
 #include "gdi.h"
+#include "wownt32.h"
 #include "wine/debug.h"
 #include "palette.h"
 
@@ -835,7 +836,7 @@ HBITMAP16 WINAPI CreateDIBSection16 (HDC16 hdc, BITMAPINFO *bmi, UINT16 usage,
     LPVOID bits32;
     HBITMAP hbitmap;
 
-    hbitmap = CreateDIBSection( hdc, bmi, usage, &bits32, section, offset );
+    hbitmap = CreateDIBSection( HDC_32(hdc), bmi, usage, &bits32, section, offset );
     if (hbitmap)
     {
         BITMAPOBJ *bmp = (BITMAPOBJ *) GDI_GetObjPtr(hbitmap, BITMAP_MAGIC);
@@ -863,7 +864,7 @@ HBITMAP16 WINAPI CreateDIBSection16 (HDC16 hdc, BITMAPINFO *bmi, UINT16 usage,
         }
         if (bmp) GDI_ReleaseObj( hbitmap );
     }
-    return hbitmap;
+    return HBITMAP_16(hbitmap);
 }
 
 /***********************************************************************
diff --git a/objects/enhmetafile.c b/objects/enhmetafile.c
index 0aebc27f89e50e2820eed1836098dfa8424b8b2b..8d935b7815e22cb33b2597a0a5d635f6a3b185e9 100644
--- a/objects/enhmetafile.c
+++ b/objects/enhmetafile.c
@@ -60,7 +60,8 @@ HENHMETAFILE EMF_Create_HENHMETAFILE(ENHMETAHEADER *emh, BOOL on_disk )
 {
     HENHMETAFILE hmf = 0;
     ENHMETAFILEOBJ *metaObj = GDI_AllocObject( sizeof(ENHMETAFILEOBJ),
-                                               ENHMETAFILE_MAGIC, &hmf, NULL );
+                                               ENHMETAFILE_MAGIC,
+					       (HGDIOBJ *)&hmf, NULL );
     if (metaObj)
     {
         metaObj->emh = emh;
diff --git a/objects/font.c b/objects/font.c
index 281ed56088b903eaca3e260614cc9c88f4303801..82019a938ea61fee3a9596695696133dd00ffa76 100644
--- a/objects/font.c
+++ b/objects/font.c
@@ -27,6 +27,7 @@
 #include <assert.h>
 #include "winerror.h"
 #include "winnls.h"
+#include "wownt32.h"
 #include "wine/unicode.h"
 #include "font.h"
 #include "wine/debug.h"
@@ -313,7 +314,8 @@ HFONT WINAPI CreateFontIndirectW( const LOGFONTW *plf )
     if (plf)
     {
         FONTOBJ* fontPtr;
-	if ((fontPtr = GDI_AllocObject( sizeof(FONTOBJ), FONT_MAGIC, &hFont, &font_funcs )))
+	if ((fontPtr = GDI_AllocObject( sizeof(FONTOBJ), FONT_MAGIC,
+					(HGDIOBJ *)&hFont, &font_funcs )))
 	{
 	    memcpy( &fontPtr->logfont, plf, sizeof(LOGFONTW) );
 
@@ -589,10 +591,10 @@ INT16 WINAPI EnumFontFamiliesEx16( HDC16 hDC, LPLOGFONT16 plf,
 {
     fontEnum16 fe16;
     INT16	retVal = 0;
-    DC* 	dc = DC_GetDCPtr( hDC );
+    DC* 	dc = DC_GetDCPtr( HDC_32(hDC) );
 
     if (!dc) return 0;
-    fe16.hdc = hDC;
+    fe16.hdc = HDC_32(hDC);
     fe16.dc = dc;
     fe16.physDev = dc->physDev;
 
diff --git a/objects/metafile.c b/objects/metafile.c
index 4ade939d3c5ffee462d3cb9df7a205ae9c6dd431..2af7bea1031ec90c5c32908e9cd94fc88559a844 100644
--- a/objects/metafile.c
+++ b/objects/metafile.c
@@ -52,6 +52,7 @@
 #include "wine/wingdi16.h"
 #include "bitmap.h"
 #include "global.h"
+#include "wownt32.h"
 #include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(metafile);
@@ -109,7 +110,8 @@ static int MF_AddHandle(HANDLETABLE *ht, UINT htlen, HGDIOBJ hobj)
 HMETAFILE MF_Create_HMETAFILE(METAHEADER *mh)
 {
     HMETAFILE hmf = 0;
-    METAFILEOBJ *metaObj = GDI_AllocObject( sizeof(METAFILEOBJ), METAFILE_MAGIC, &hmf, NULL );
+    METAFILEOBJ *metaObj = GDI_AllocObject( sizeof(METAFILEOBJ), METAFILE_MAGIC,
+					    (HGDIOBJ *)&hmf, NULL );
     if (metaObj)
     {
     metaObj->mh = mh;
@@ -593,7 +595,7 @@ BOOL16 WINAPI PlayMetaFile16( HDC16 hdc, HMETAFILE16 hmf )
 {
     BOOL16 ret;
     METAHEADER *mh = MF_GetMetaHeader16( hmf );
-    ret = MF_PlayMetaFile( hdc, mh );
+    ret = MF_PlayMetaFile( HDC_32(hdc), mh );
     MF_ReleaseMetaHeader16( hmf );
     return ret;
 }
@@ -618,12 +620,13 @@ BOOL WINAPI PlayMetaFile(
  *            EnumMetaFile   (GDI.175)
  *
  */
-BOOL16 WINAPI EnumMetaFile16( HDC16 hdc, HMETAFILE16 hmf,
+BOOL16 WINAPI EnumMetaFile16( HDC16 hdc16, HMETAFILE16 hmf,
 			      MFENUMPROC16 lpEnumFunc, LPARAM lpData )
 {
     METAHEADER *mh = MF_GetMetaHeader16(hmf);
     METARECORD *mr;
     HANDLETABLE16 *ht;
+    HDC hdc = HDC_32(hdc16);
     HGLOBAL16 hHT;
     SEGPTR spht;
     unsigned int offset = 0;
@@ -664,7 +667,7 @@ BOOL16 WINAPI EnumMetaFile16( HDC16 hdc, HMETAFILE16 hmf,
     {
 	mr = (METARECORD *)((char *)mh + offset);
 
-        if (!MF_CallTo16_word_wllwl( lpEnumFunc, hdc, spht,
+        if (!MF_CallTo16_word_wllwl( lpEnumFunc, hdc16, spht,
                                   MAKESEGPTR( seg + (HIWORD(offset) << __AHSHIFT), LOWORD(offset) ),
                                      mh->mtNoObjects, (LONG)lpData ))
 	{
diff --git a/objects/palette.c b/objects/palette.c
index 0ba7472dfd62e7b1e253c1505e67a89052409071..ce4e60e76cbd7b98e41c31f022ca4b3929b21dc5 100644
--- a/objects/palette.c
+++ b/objects/palette.c
@@ -29,6 +29,7 @@
 #include "winbase.h"
 #include "windef.h"
 #include "wingdi.h"
+#include "wownt32.h"
 #include "wine/winuser16.h"
 #include "gdi.h"
 #include "palette.h"
@@ -159,7 +160,8 @@ HPALETTE WINAPI CreatePalette(
     size = sizeof(LOGPALETTE) + (palette->palNumEntries - 1) * sizeof(PALETTEENTRY);
 
     if (!(palettePtr = GDI_AllocObject( size + sizeof(int*) +sizeof(GDIOBJHDR),
-                                        PALETTE_MAGIC, &hpalette, &palette_funcs ))) return 0;
+                                        PALETTE_MAGIC, (HGDIOBJ *)&hpalette,
+					&palette_funcs ))) return 0;
     memcpy( &palettePtr->logpalette, palette, size );
     PALETTE_ValidateFlags(palettePtr->logpalette.palPalEntry,
 			  palettePtr->logpalette.palNumEntries);
@@ -723,10 +725,10 @@ UINT16 WINAPI RealizeDefaultPalette16( HDC16 hdc )
 
     TRACE("%04x\n", hdc );
 
-    if (!(dc = DC_GetDCPtr( hdc ))) return 0;
+    if (!(dc = DC_GetDCPtr( HDC_32(hdc) ))) return 0;
 
     if (dc->funcs->pRealizeDefaultPalette) ret = dc->funcs->pRealizeDefaultPalette( dc->physDev );
-    GDI_ReleaseObj( hdc );
+    GDI_ReleaseObj( HDC_32(hdc) );
     return ret;
 }
 
@@ -735,11 +737,11 @@ UINT16 WINAPI RealizeDefaultPalette16( HDC16 hdc )
  */
 BOOL16 WINAPI IsDCCurrentPalette16(HDC16 hDC)
 {
-    DC *dc = DC_GetDCPtr( hDC );
+    DC *dc = DC_GetDCPtr( HDC_32(hDC) );
     if (dc)
     {
       BOOL bRet = dc->hPalette == hPrimaryPalette;
-      GDI_ReleaseObj( hDC );
+      GDI_ReleaseObj( HDC_32(hDC) );
       return bRet;
     }
     return FALSE;
diff --git a/objects/pen.c b/objects/pen.c
index 83b53df5c5ba78a31f5e4854a4ff183fd627cc9a..d117964c6b5b648e9f478e144a1aa58090065d7b 100644
--- a/objects/pen.c
+++ b/objects/pen.c
@@ -79,7 +79,8 @@ HPEN WINAPI CreatePenIndirect( const LOGPEN * pen )
     PENOBJ * penPtr;
     HPEN hpen;
 
-    if (!(penPtr = GDI_AllocObject( sizeof(PENOBJ), PEN_MAGIC, &hpen, &pen_funcs ))) return 0;
+    if (!(penPtr = GDI_AllocObject( sizeof(PENOBJ), PEN_MAGIC, (HGDIOBJ *)&hpen,
+				    &pen_funcs ))) return 0;
     penPtr->logpen.lopnStyle = pen->lopnStyle;
     penPtr->logpen.lopnWidth = pen->lopnWidth;
     penPtr->logpen.lopnColor = pen->lopnColor;
@@ -106,7 +107,8 @@ HPEN WINAPI ExtCreatePen( DWORD style, DWORD width,
 	if (brush->lbHatch)
 	    FIXME("Hatches not implemented\n");
 
-    if (!(penPtr = GDI_AllocObject( sizeof(PENOBJ), PEN_MAGIC, &hpen, &pen_funcs ))) return 0;
+    if (!(penPtr = GDI_AllocObject( sizeof(PENOBJ), PEN_MAGIC, (HGDIOBJ *)&hpen,
+				    &pen_funcs ))) return 0;
     penPtr->logpen.lopnStyle = style & ~PS_TYPE_MASK;
 
     /* PS_USERSTYLE workaround */
diff --git a/objects/region.c b/objects/region.c
index 2f582d7cb76fa94cb2c54432f30a20b39a37101b..4dff7b6fada973cee750a614dcece30e0841360c 100644
--- a/objects/region.c
+++ b/objects/region.c
@@ -513,7 +513,8 @@ static HRGN REGION_CreateRegion( INT n )
     HRGN hrgn;
     RGNOBJ *obj;
 
-    if(!(obj = GDI_AllocObject( sizeof(RGNOBJ), REGION_MAGIC, &hrgn, &region_funcs ))) return 0;
+    if(!(obj = GDI_AllocObject( sizeof(RGNOBJ), REGION_MAGIC, (HGDIOBJ *)&hrgn,
+				&region_funcs ))) return 0;
     if(!(obj->rgn = REGION_AllocWineRegion(n))) {
         GDI_FreeObject( hrgn, obj );
         return 0;