diff --git a/objects/bitmap.c b/objects/bitmap.c
index 41a1248..6ef032d 100644
--- a/objects/bitmap.c
+++ b/objects/bitmap.c
@@ -25,13 +25,12 @@
 #include "wine/winbase16.h"
 #include "gdi.h"
 #include "bitmap.h"
+#include "selectors.h"
 #include "wine/debug.h"
 #include "wine/winuser16.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(bitmap);
 
-BITMAP_DRIVER *BITMAP_Driver = NULL;
-
 
 /***********************************************************************
  *           BITMAP_GetWidthBytes
@@ -426,12 +425,30 @@
     if( bmp->bitmap.bmBits )
         HeapFree( GetProcessHeap(), 0, bmp->bitmap.bmBits );
 
-    DIB_DeleteDIBSection( bmp );
+    if (bmp->dib)
+    {
+        DIBSECTION *dib = bmp->dib;
 
+        if (dib->dsBm.bmBits)
+        {
+            if (dib->dshSection)
+            {
+                SYSTEM_INFO SystemInfo;
+                GetSystemInfo( &SystemInfo );
+                UnmapViewOfFile( (char *)dib->dsBm.bmBits -
+                                 (dib->dsOffset % SystemInfo.dwAllocationGranularity) );
+            }
+            else if (!dib->dsOffset)
+                VirtualFree(dib->dsBm.bmBits, 0L, MEM_RELEASE );
+        }
+        HeapFree(GetProcessHeap(), 0, dib);
+        bmp->dib = NULL;
+        if (bmp->segptr_bits) SELECTOR_FreeBlock( SELECTOROF(bmp->segptr_bits) );
+    }
     return GDI_FreeObject( hbitmap, bmp );
 }
 
-	
+
 /***********************************************************************
  *           BITMAP_GetObject16
  */
diff --git a/objects/clipping.c b/objects/clipping.c
index ccf695b..54138dc 100644
--- a/objects/clipping.c
+++ b/objects/clipping.c
@@ -50,7 +50,7 @@
         CombineRgn( dc->hGCClipRgn, dc->hVisRgn, 0, RGN_COPY );
     else
         CombineRgn(dc->hGCClipRgn, dc->hClipRgn, dc->hVisRgn, RGN_AND);
-    if (dc->funcs->pSetDeviceClipping) dc->funcs->pSetDeviceClipping( dc );
+    if (dc->funcs->pSetDeviceClipping) dc->funcs->pSetDeviceClipping( dc->physDev );
 }
 
 
@@ -170,7 +170,7 @@
     TRACE("%04x %d,%d\n", hdc, x, y );
 
     if(dc->funcs->pOffsetClipRgn)
-        ret = dc->funcs->pOffsetClipRgn( dc, x, y );
+        ret = dc->funcs->pOffsetClipRgn( dc->physDev, x, y );
     else if (dc->hClipRgn) {
         ret = OffsetRgn( dc->hClipRgn, XLSTODS(dc,x), YLSTODS(dc,y));
 	CLIPPING_UpdateGCRegion( dc );
@@ -267,7 +267,7 @@
     TRACE("%04x %dx%d,%dx%d\n", hdc, left, top, right, bottom );
 
     if(dc->funcs->pExcludeClipRect)
-        ret = dc->funcs->pExcludeClipRect( dc, left, top, right, bottom );
+        ret = dc->funcs->pExcludeClipRect( dc->physDev, left, top, right, bottom );
     else {
         left   = XLPTODP( dc, left );
 	right  = XLPTODP( dc, right );
@@ -304,7 +304,7 @@
     TRACE("%04x %dx%d,%dx%d\n", hdc, left, top, right, bottom );
 
     if(dc->funcs->pIntersectClipRect)
-        ret = dc->funcs->pIntersectClipRect( dc, left, top, right, bottom );
+        ret = dc->funcs->pIntersectClipRect( dc->physDev, left, top, right, bottom );
     else {
         left   = XLPTODP( dc, left );
 	right  = XLPTODP( dc, right );
diff --git a/objects/dc.c b/objects/dc.c
index d49bc3d..091caef 100644
--- a/objects/dc.c
+++ b/objects/dc.c
@@ -451,7 +451,7 @@
 
     if(dc->funcs->pSaveDC)
     {
-        ret = dc->funcs->pSaveDC( dc );
+        ret = dc->funcs->pSaveDC( dc->physDev );
         GDI_ReleaseObj( hdc );
         return ret;
     }
@@ -509,7 +509,7 @@
     if(!dc) return FALSE;
     if(dc->funcs->pRestoreDC)
     {
-        success = dc->funcs->pRestoreDC( dc, level );
+        success = dc->funcs->pRestoreDC( dc->physDev, level );
         GDI_ReleaseObj( hdc );
         return success;
     }
@@ -781,7 +781,7 @@
 	SelectObject( hdc, GetStockObject(SYSTEM_FONT) );
         SelectObject( hdc, GetStockObject(DEFAULT_BITMAP) );
         funcs = dc->funcs;
-        if (dc->funcs->pDeleteDC) dc->funcs->pDeleteDC(dc);
+        if (dc->funcs->pDeleteDC) dc->funcs->pDeleteDC(dc->physDev);
     }
 
     if (dc->hClipRgn) DeleteObject( dc->hClipRgn );
@@ -847,7 +847,7 @@
 
     if ((dc = DC_GetDCPtr( hdc )))
     {
-        if (dc->funcs->pGetDeviceCaps) ret = dc->funcs->pGetDeviceCaps( dc, cap );
+        if (dc->funcs->pGetDeviceCaps) ret = dc->funcs->pGetDeviceCaps( dc->physDev, cap );
         GDI_ReleaseObj( hdc );
     }
     return ret;
@@ -870,14 +870,19 @@
 {
     COLORREF oldColor;
     DC * dc = DC_GetDCPtr( hdc );
-  
-    if (!dc) return 0x80000000;
+
+    if (!dc) return CLR_INVALID;
+    oldColor = dc->backgroundColor;
     if (dc->funcs->pSetBkColor)
-        oldColor = dc->funcs->pSetBkColor(dc, color);
-    else {
-	oldColor = dc->backgroundColor;
-	dc->backgroundColor = color;
+    {
+        color = dc->funcs->pSetBkColor(dc->physDev, color);
+        if (color == CLR_INVALID)  /* don't change it */
+        {
+            color = oldColor;
+            oldColor = CLR_INVALID;
+        }
     }
+    dc->backgroundColor = color;
     GDI_ReleaseObj( hdc );
     return oldColor;
 }
@@ -899,14 +904,19 @@
 {
     COLORREF oldColor;
     DC * dc = DC_GetDCPtr( hdc );
-  
-    if (!dc) return 0x80000000;
+
+    if (!dc) return CLR_INVALID;
+    oldColor = dc->textColor;
     if (dc->funcs->pSetTextColor)
-        oldColor = dc->funcs->pSetTextColor(dc, color);
-    else {
-	oldColor = dc->textColor;
-	dc->textColor = color;
+    {
+        color = dc->funcs->pSetTextColor(dc->physDev, color);
+        if (color == CLR_INVALID)  /* don't change it */
+        {
+            color = oldColor;
+            oldColor = CLR_INVALID;
+        }
     }
+    dc->textColor = color;
     GDI_ReleaseObj( hdc );
     return oldColor;
 }
@@ -929,7 +939,7 @@
     DC *dc = DC_GetDCPtr( hdc );
     if (!dc) return 0x0;
     if (dc->funcs->pSetTextAlign)
-        prevAlign = dc->funcs->pSetTextAlign(dc, align);
+        prevAlign = dc->funcs->pSetTextAlign(dc->physDev, align);
     else {
 	prevAlign = dc->textAlign;
 	dc->textAlign = align;
@@ -949,7 +959,7 @@
     if (!(dc = DC_GetDCPtr( hDC ))) return FALSE;
 
     lpp->x = lpp->y = 0;
-    if (dc->funcs->pGetDCOrgEx) dc->funcs->pGetDCOrgEx( dc, lpp );
+    if (dc->funcs->pGetDCOrgEx) dc->funcs->pGetDCOrgEx( dc->physDev, lpp );
     lpp->x += dc->DCOrgX;
     lpp->y += dc->DCOrgY;
     GDI_ReleaseObj( hDC );
@@ -1296,7 +1306,7 @@
     if( dc )
     {
 	if (dc->funcs->pGetDeviceGammaRamp)
-	    ret = dc->funcs->pGetDeviceGammaRamp(dc, ptr);
+	    ret = dc->funcs->pGetDeviceGammaRamp(dc->physDev, ptr);
 	GDI_ReleaseObj( hDC );
     }
     return ret;
@@ -1313,7 +1323,7 @@
     if( dc )
     {
 	if (dc->funcs->pSetDeviceGammaRamp)
-	    ret = dc->funcs->pSetDeviceGammaRamp(dc, ptr);
+	    ret = dc->funcs->pSetDeviceGammaRamp(dc->physDev, ptr);
 	GDI_ReleaseObj( hDC );
     }
     return ret;
diff --git a/objects/dcvalues.c b/objects/dcvalues.c
index 331649c..dfc0dce 100644
--- a/objects/dcvalues.c
+++ b/objects/dcvalues.c
@@ -40,7 +40,7 @@
     }
     if (!(dc = DC_GetDCPtr( hdc ))) return 0;
     if (dc->funcs->pSetBkMode)
-        ret = dc->funcs->pSetBkMode( dc, mode );
+        ret = dc->funcs->pSetBkMode( dc->physDev, mode );
     else
     {
         ret = dc->backgroundMode;
@@ -65,7 +65,7 @@
     }
     if (!(dc = DC_GetDCPtr( hdc ))) return 0;
     if (dc->funcs->pSetROP2)
-        ret = dc->funcs->pSetROP2( dc, mode );
+        ret = dc->funcs->pSetROP2( dc->physDev, mode );
     else
     {
         ret = dc->ROPmode;
@@ -90,7 +90,7 @@
     }
     if (!(dc = DC_GetDCPtr( hdc ))) return 0;
     if (dc->funcs->pSetRelAbs)
-        ret = dc->funcs->pSetRelAbs( dc, mode );
+        ret = dc->funcs->pSetRelAbs( dc->physDev, mode );
     else
     {
         ret = dc->relAbsMode;
@@ -115,7 +115,7 @@
     }
     if (!(dc = DC_GetDCPtr( hdc ))) return 0;
     if (dc->funcs->pSetPolyFillMode)
-        ret = dc->funcs->pSetPolyFillMode( dc, mode );
+        ret = dc->funcs->pSetPolyFillMode( dc->physDev, mode );
     else
     {
         ret = dc->polyFillMode;
@@ -140,7 +140,7 @@
     }
     if (!(dc = DC_GetDCPtr( hdc ))) return 0;
     if (dc->funcs->pSetStretchBltMode)
-        ret = dc->funcs->pSetStretchBltMode( dc, mode );
+        ret = dc->funcs->pSetStretchBltMode( dc->physDev, mode );
     else
     {
         ret = dc->stretchBltMode;
diff --git a/objects/dib.c b/objects/dib.c
index bbd16ce..764fbf8 100644
--- a/objects/dib.c
+++ b/objects/dib.c
@@ -173,7 +173,7 @@
 
     if(dc->funcs->pStretchDIBits)
     {
-        heightSrc = dc->funcs->pStretchDIBits(dc, xDst, yDst, widthDst,
+        heightSrc = dc->funcs->pStretchDIBits(dc->physDev, xDst, yDst, widthDst,
                                               heightDst, xSrc, ySrc, widthSrc,
                                               heightSrc, bits, info, wUsage, dwRop);
         GDI_ReleaseObj( hdc );
@@ -264,25 +264,15 @@
 		      UINT coloruse )
 {
     DC *dc;
-    BITMAPOBJ *bitmap;
-    INT result;
+    INT result = 0;
 
     /* Check parameters */
     if (!(dc = DC_GetDCUpdate( hdc ))) return 0;
 
-    if (!(bitmap = (BITMAPOBJ *) GDI_GetObjPtr( hbitmap, BITMAP_MAGIC )))
-    {
-        GDI_ReleaseObj( hdc );
-        return 0;
-    }
+    if (dc->funcs->pSetDIBits)
+        result = dc->funcs->pSetDIBits(dc->physDev, hbitmap, startscan, lines, bits, info, coloruse);
 
-    result = BITMAP_Driver->pSetDIBits(bitmap, dc, startscan, 
-				       lines, bits, info, 
-				       coloruse, hbitmap);
-
-    GDI_ReleaseObj( hbitmap );
     GDI_ReleaseObj( hdc );
-
     return result;
 }
 
@@ -314,7 +304,7 @@
     if (!(dc = DC_GetDCUpdate( hdc ))) return 0;
 
     if(dc->funcs->pSetDIBitsToDevice)
-        ret = dc->funcs->pSetDIBitsToDevice( dc, xDest, yDest, cx, cy, xSrc,
+        ret = dc->funcs->pSetDIBitsToDevice( dc->physDev, xDest, yDest, cx, cy, xSrc,
 					     ySrc, startscan, lines, bits,
 					     info, coloruse );
     else {
@@ -338,24 +328,16 @@
 /***********************************************************************
  *           SetDIBColorTable    (GDI32.@)
  */
-UINT WINAPI SetDIBColorTable( HDC hdc, UINT startpos, UINT entries,
-				  RGBQUAD *colors )
+UINT WINAPI SetDIBColorTable( HDC hdc, UINT startpos, UINT entries, RGBQUAD *colors )
 {
     DC * dc;
-    BITMAPOBJ * bmp;
-    UINT result;
+    UINT result = 0;
 
     if (!(dc = DC_GetDCUpdate( hdc ))) return 0;
 
-    if (!(bmp = (BITMAPOBJ*)GDI_GetObjPtr( dc->hBitmap, BITMAP_MAGIC )))
-    {
-        GDI_ReleaseObj( hdc );
-        return 0;
-    }
+    if (dc->funcs->pSetDIBColorTable)
+        result = dc->funcs->pSetDIBColorTable(dc->physDev, startpos, entries, colors);
 
-    result = BITMAP_Driver->pSetDIBColorTable(bmp, dc, startpos, entries, colors);
-
-    GDI_ReleaseObj( dc->hBitmap );
     GDI_ReleaseObj( hdc );
     return result;
 }
@@ -372,24 +354,16 @@
 /***********************************************************************
  *           GetDIBColorTable    (GDI32.@)
  */
-UINT WINAPI GetDIBColorTable( HDC hdc, UINT startpos, UINT entries,
-				  RGBQUAD *colors )
+UINT WINAPI GetDIBColorTable( HDC hdc, UINT startpos, UINT entries, RGBQUAD *colors )
 {
     DC * dc;
-    BITMAPOBJ * bmp;
-    UINT result;
+    UINT result = 0;
 
     if (!(dc = DC_GetDCUpdate( hdc ))) return 0;
 
-    if (!(bmp = (BITMAPOBJ*)GDI_GetObjPtr( dc->hBitmap, BITMAP_MAGIC )))
-    {
-        GDI_ReleaseObj( hdc );
-        return 0;
-    }
+    if (dc->funcs->pGetDIBColorTable)
+        result = dc->funcs->pGetDIBColorTable(dc->physDev, startpos, entries, colors);
 
-    result = BITMAP_Driver->pGetDIBColorTable(bmp, dc, startpos, entries, colors);
-
-    GDI_ReleaseObj( dc->hBitmap );
     GDI_ReleaseObj( hdc );
     return result;
 }
@@ -747,7 +721,8 @@
             }
         }
         /* Otherwise, get bits from the XImage */
-        else if(!BITMAP_Driver->pGetDIBits(bmp, dc, startscan, lines, bits, info, coloruse, hbitmap))
+        else if (!dc->funcs->pGetDIBits ||
+                 !dc->funcs->pGetDIBits(dc->physDev, hbitmap, startscan, lines, bits, info, coloruse))
         {
 	    GDI_ReleaseObj( hdc );
 	    GDI_ReleaseObj( hbitmap );
@@ -949,7 +924,7 @@
 
     if ((dc = DC_GetDCPtr( hdc )))
     {
-        hbitmap = dc->funcs->pCreateDIBSection(dc, bmi, usage, bits, section, offset, ovr_pitch);
+        hbitmap = dc->funcs->pCreateDIBSection(dc->physDev, bmi, usage, bits, section, offset, ovr_pitch);
         GDI_ReleaseObj(hdc);
     }
 
@@ -970,36 +945,6 @@
 }
 
 /***********************************************************************
- *           DIB_DeleteDIBSection
- */
-void DIB_DeleteDIBSection( BITMAPOBJ *bmp )
-{
-    if (bmp && bmp->dib)
-    {
-        DIBSECTION *dib = bmp->dib;
-
-        if (dib->dsBm.bmBits)
-        {
-            if (dib->dshSection)
-	    {
-		SYSTEM_INFO SystemInfo;
-		GetSystemInfo( &SystemInfo );
-		UnmapViewOfFile( (char *)dib->dsBm.bmBits -
-				 (dib->dsOffset % SystemInfo.dwAllocationGranularity) );
-	    }
-            else if (!dib->dsOffset)
-                VirtualFree(dib->dsBm.bmBits, 0L, MEM_RELEASE );
-        }
-
-	BITMAP_Driver->pDeleteDIBSection(bmp);
-
-        HeapFree(GetProcessHeap(), 0, dib);
-        bmp->dib = NULL;
-        if (bmp->segptr_bits) SELECTOR_FreeBlock( SELECTOROF(bmp->segptr_bits) );
-    }
-}
-
-/***********************************************************************
  *           DIB_CreateDIBFromBitmap
  *  Allocates a packed DIB and copies the bitmap data into it.
  */
diff --git a/objects/font.c b/objects/font.c
index ad0add9..924d74a 100644
--- a/objects/font.c
+++ b/objects/font.c
@@ -901,7 +901,7 @@
     DC * dc = DC_GetDCPtr( hdc );
     if (!dc) return 0;
     if (dc->funcs->pSetTextCharacterExtra)
-        prev = dc->funcs->pSetTextCharacterExtra( dc, extra );
+        prev = dc->funcs->pSetTextCharacterExtra( dc->physDev, extra );
     else
     {
         extra = (extra * dc->vportExtX + dc->wndExtX / 2) / dc->wndExtX;
@@ -931,7 +931,7 @@
     DC * dc = DC_GetDCPtr( hdc );
     if (!dc) return FALSE;
     if (dc->funcs->pSetTextJustification)
-        ret = dc->funcs->pSetTextJustification( dc, extra, breaks );
+        ret = dc->funcs->pSetTextJustification( dc->physDev, extra, breaks );
     else
     {
         extra = abs((extra * dc->vportExtX + dc->wndExtX / 2) / dc->wndExtX);
@@ -1080,7 +1080,7 @@
     if(dc->gdiFont)
         ret = WineEngGetTextExtentPoint(dc->gdiFont, str, count, size);
     else if(dc->funcs->pGetTextExtentPoint)
-        ret = dc->funcs->pGetTextExtentPoint( dc, str, count, size );
+        ret = dc->funcs->pGetTextExtentPoint( dc->physDev, str, count, size );
 
     GDI_ReleaseObj( hdc );
 
@@ -1233,7 +1233,7 @@
     if (dc->gdiFont)
         ret = WineEngGetTextMetrics(dc->gdiFont, metrics);
     else if (dc->funcs->pGetTextMetrics)
-        ret = dc->funcs->pGetTextMetrics( dc, metrics );
+        ret = dc->funcs->pGetTextMetrics( dc->physDev, metrics );
 
     if (ret)
     {
@@ -1533,7 +1533,7 @@
     if (dc->gdiFont)
         ret = WineEngGetCharWidth( dc->gdiFont, firstChar, lastChar, buffer );
     else if (dc->funcs->pGetCharWidth)
-        ret = dc->funcs->pGetCharWidth( dc, firstChar, lastChar, buffer);
+        ret = dc->funcs->pGetCharWidth( dc->physDev, firstChar, lastChar, buffer);
 
     if (ret)
     {
@@ -1607,7 +1607,7 @@
     DWORD ret = 0; 
     if(!dc) return 0;
     if(dc->funcs->pSetMapperFlags)
-        ret = dc->funcs->pSetMapperFlags( dc, dwFlag );
+        ret = dc->funcs->pSetMapperFlags( dc->physDev, dwFlag );
     else
         FIXME("(0x%04x, 0x%08lx): stub - harmless\n", hDC, dwFlag);
     GDI_ReleaseObj( hDC );
diff --git a/objects/gdiobj.c b/objects/gdiobj.c
index d285bfc..daaf99e 100644
--- a/objects/gdiobj.c
+++ b/objects/gdiobj.c
@@ -1156,8 +1156,8 @@
 	    dc->gdiFont = WineEngCreateFontInstance(hFont);
     }
 
-    if(dc->funcs->pSelectObject)
-        ret = dc->funcs->pSelectObject(dc, hFont);
+    if(dc->funcs->pSelectFont)
+        ret = dc->funcs->pSelectFont(dc->physDev, hFont);
 
     if(ret && dc->gdiFont) {
 	dc->gdiFont = 0;
@@ -1188,16 +1188,39 @@
 HGDIOBJ WINAPI SelectObject( HDC hdc, HGDIOBJ handle )
 {
     HGDIOBJ ret = 0;
-    DC * dc = DC_GetDCUpdate( hdc );
+    DC * dc = DC_GetDCPtr( hdc );
     if (!dc) return 0;
     TRACE("hdc=%04x %04x\n", hdc, handle );
 
     /* Fonts get a rather different treatment so we'll handle them
        separately */
-    if(GetObjectType(handle) == OBJ_FONT)
+    switch(GetObjectType( handle ))
+    {
+    case OBJ_BITMAP:
+        ret = dc->hBitmap;
+        if (dc->funcs->pSelectBitmap) handle = dc->funcs->pSelectBitmap( dc->physDev, handle );
+        if (handle) dc->hBitmap = handle;
+        else ret = 0;
+        break;
+    case OBJ_BRUSH:
+        ret = dc->hBrush;
+        if (dc->funcs->pSelectBrush) handle = dc->funcs->pSelectBrush( dc->physDev, handle );
+        if (handle) dc->hBrush = handle;
+        else ret = 0;
+        break;
+    case OBJ_PEN:
+        ret = dc->hPen;
+        if (dc->funcs->pSelectPen) handle = dc->funcs->pSelectPen( dc->physDev, handle );
+        if (handle) dc->hPen = handle;
+        else ret = 0;
+        break;
+    case OBJ_FONT:
         ret = FONT_SelectObject(dc, handle);
-    else if (dc->funcs->pSelectObject)
-        ret = dc->funcs->pSelectObject( dc, handle );
+        break;
+    case OBJ_REGION:
+        GDI_ReleaseObj( hdc );
+        return (HGDIOBJ)SelectClipRgn( hdc, handle );
+    }
     GDI_ReleaseObj( hdc );
 
     if (ret && ret != handle)
diff --git a/objects/text.c b/objects/text.c
index 26e3cd3..2692f71 100644
--- a/objects/text.c
+++ b/objects/text.c
@@ -169,7 +169,7 @@
     if (dc)
     {
 	if(dc->funcs->pExtTextOut)
-	    ret = dc->funcs->pExtTextOut(dc,x,y,flags,lprect,str,count,lpDx);
+	    ret = dc->funcs->pExtTextOut(dc->physDev,x,y,flags,lprect,str,count,lpDx);
 	GDI_ReleaseObj( hdc );
     }
     return ret;
