Index: win32ss/gdi/eng/alphablend.c
===================================================================
--- win32ss/gdi/eng/alphablend.c	(revision 75325)
+++ win32ss/gdi/eng/alphablend.c	(working copy)
@@ -212,7 +212,7 @@
     //ASSERT(pBlendObj);
 
     /* If no clip object is given, use trivial one */
-    if (!pco) pco = &gxcoTrivial.ClipObj;
+    if (!pco) pco = (CLIPOBJ *)&gxcoTrivial;
 
     /* Check if there is anything to draw */
     if ((pco->rclBounds.left >= pco->rclBounds.right) ||
Index: win32ss/gdi/eng/bitblt.c
===================================================================
--- win32ss/gdi/eng/bitblt.c	(revision 75325)
+++ win32ss/gdi/eng/bitblt.c	(working copy)
@@ -16,16 +16,15 @@
 {
     /* CLIPOBJ */
     {
-        {
-            0, /* iUniq */
-            {LONG_MIN, LONG_MIN, LONG_MAX, LONG_MAX}, /* rclBounds */
-            DC_TRIVIAL,    /* idCOmplexity */
-            FC_RECT,       /* iFComplexity */
-            TC_RECTANGLES, /* iMode */
-            0              /* fjOptions */
-        },
+        0, /* iUniq */
+        {LONG_MIN, LONG_MIN, LONG_MAX, LONG_MAX}, /* rclBounds */
+        DC_TRIVIAL,    /* idCOmplexity */
+        FC_RECT,       /* iFComplexity */
+        TC_RECTANGLES, /* iMode */
+        0              /* fjOptions */
     },
-    0, 0, 0
+    { 0, {0,0,0,0}, 0},
+    0, {0,0,0,0}, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
 };
 
 typedef BOOLEAN (APIENTRY *PBLTRECTFUNC)(SURFOBJ* OutputObj,
@@ -649,7 +648,7 @@
             pco = NULL;
     }
     else
-        pco = &gxcoTrivial.ClipObj;
+        pco = (CLIPOBJ *)&gxcoTrivial;
 
     if (ROP4_USES_SOURCE(Rop4))
     {
Index: win32ss/gdi/eng/clip.c
===================================================================
--- win32ss/gdi/eng/clip.c	(revision 75325)
+++ win32ss/gdi/eng/clip.c	(working copy)
@@ -157,13 +157,13 @@
 FASTCALL
 IntEngInitClipObj(XCLIPOBJ *Clip)
 {
-    Clip->Rects = &Clip->ClipObj.rclBounds;
+    Clip->Rects = &Clip->rclBounds;
 }
 
 VOID FASTCALL
 IntEngFreeClipResources(XCLIPOBJ *Clip)
 {
-    if (Clip->Rects != &Clip->ClipObj.rclBounds)
+    if (Clip->Rects != &Clip->rclBounds)
         EngFreeMem(Clip->Rects);
 }
 
@@ -183,15 +183,15 @@
         if(NewRects != NULL)
         {
             Clip->RectCount = count;
-            Clip->EnumOrder = CD_ANY;
+            Clip->iDirection = CD_ANY;
             RtlCopyMemory(NewRects, pRect, count * sizeof(RECTL));
 
-            Clip->ClipObj.iDComplexity = DC_COMPLEX;
-            Clip->ClipObj.iFComplexity = ((Clip->RectCount <= 4) ? FC_RECT4 : FC_COMPLEX);
-            Clip->ClipObj.iMode = TC_RECTANGLES;
-            Clip->ClipObj.rclBounds = *rcBounds;
+            Clip->iDComplexity = DC_COMPLEX;
+            Clip->iFComplexity = ((Clip->RectCount <= 4) ? FC_RECT4 : FC_COMPLEX);
+            Clip->iMode = TC_RECTANGLES;
+            Clip->rclBounds = *rcBounds;
 
-            if (Clip->Rects != &Clip->ClipObj.rclBounds)
+            if (Clip->Rects != &Clip->rclBounds)
                 EngFreeMem(Clip->Rects);
             Clip->Rects = NewRects;
         }
@@ -198,19 +198,19 @@
     }
     else
     {
-        Clip->EnumOrder = CD_ANY;
+        Clip->iDirection = CD_ANY;
 
-        Clip->ClipObj.iDComplexity = (((rcBounds->top == rcBounds->bottom) &&
+        Clip->iDComplexity = (((rcBounds->top == rcBounds->bottom) &&
                                      (rcBounds->left == rcBounds->right))
                                      ? DC_TRIVIAL : DC_RECT);
 
-        Clip->ClipObj.iFComplexity = FC_RECT;
-        Clip->ClipObj.iMode = TC_RECTANGLES;
-        Clip->ClipObj.rclBounds = *rcBounds;
+        Clip->iFComplexity = FC_RECT;
+        Clip->iMode = TC_RECTANGLES;
+        Clip->rclBounds = *rcBounds;
         Clip->RectCount = 1;
-        if (Clip->Rects != &Clip->ClipObj.rclBounds)
+        if (Clip->Rects != &Clip->rclBounds)
             EngFreeMem(Clip->Rects);
-        Clip->Rects = &Clip->ClipObj.rclBounds;
+        Clip->Rects = &Clip->rclBounds;
     }
 }
 
@@ -226,7 +226,7 @@
     {
         IntEngInitClipObj(Clip);
         TRACE("Created Clip Obj %p.\n", Clip);
-        return &Clip->ClipObj;
+        return (CLIPOBJ *)Clip;
     }
 
     ERR("Clip object allocation failed!\n");
@@ -241,7 +241,7 @@
 EngDeleteClip(
     _In_ _Post_ptr_invalid_ CLIPOBJ *pco)
 {
-    XCLIPOBJ* pxco = CONTAINING_RECORD(pco, XCLIPOBJ, ClipObj);
+    XCLIPOBJ* pxco = (XCLIPOBJ *)pco;
     TRACE("Deleting %p.\n", pco);
     IntEngFreeClipResources(pxco);
     EngFreeMem(pxco);
@@ -259,13 +259,15 @@
     _In_ ULONG iDirection,
     _In_ ULONG cMaxRects)
 {
-    XCLIPOBJ* Clip = CONTAINING_RECORD(pco, XCLIPOBJ, ClipObj);
+    XCLIPOBJ* Clip = (XCLIPOBJ *)pco;
     SORTCOMP CompareFunc;
 
+    Clip->bAll    = bAll;
+    Clip->iType   = iType;
     Clip->EnumPos = 0;
     Clip->EnumMax = (cMaxRects > 0) ? cMaxRects : Clip->RectCount;
 
-    if (CD_ANY != iDirection && Clip->EnumOrder != iDirection)
+    if (CD_ANY != iDirection && Clip->iDirection != iDirection)
     {
         switch (iDirection)
         {
@@ -287,7 +289,7 @@
 
             default:
                 ERR("Invalid iDirection %lu\n", iDirection);
-                iDirection = Clip->EnumOrder;
+                iDirection = Clip->iDirection;
                 CompareFunc = NULL;
                 break;
         }
@@ -297,7 +299,7 @@
             EngSort((PBYTE) Clip->Rects, sizeof(RECTL), Clip->RectCount, CompareFunc);
         }
 
-        Clip->EnumOrder = iDirection;
+        Clip->iDirection = iDirection;
     }
 
     /* Return the number of rectangles enumerated */
@@ -320,7 +322,7 @@
     _Out_bytecap_(cj) ULONG *pulEnumRects)
 {
     const RECTL* src;
-    XCLIPOBJ* Clip = CONTAINING_RECORD(pco, XCLIPOBJ, ClipObj);
+    XCLIPOBJ* Clip = (XCLIPOBJ *)pco;
     ULONG nCopy;
     ENUMRECTS* pERects = (ENUMRECTS*)pulEnumRects;
 
Index: win32ss/gdi/eng/engobjects.h
===================================================================
--- win32ss/gdi/eng/engobjects.h	(revision 75325)
+++ win32ss/gdi/eng/engobjects.h	(working copy)
@@ -39,64 +39,69 @@
 
 ---------------------------------------------------------------------------*/
 
-/* EXtended CLip and Window Region Object */
+typedef struct _RWNDOBJ {
+  PVOID   pvConsumer;
+  RECTL   rclClient;
+  SURFOBJ *psoOwner;
+} RWNDOBJ;
+
+/* EXtended CLip and Window Region Objects */
 #ifdef __cplusplus
-typedef struct _XCLIPOBJ : _WNDOBJ
+typedef struct _XCLIPOBJ : _CLIPOBJ, _RWNDOBJ
 {
 #else
 typedef struct _XCLIPOBJ
 {
-  WNDOBJ;
+  CLIPOBJ;
+  RWNDOBJ;
 #endif
-  PVOID   pClipRgn;    /* prgnRao_ or (prgnVis_ if (prgnRao_ == z)) */
+  struct _REGION *pClipRgn;    /* prgnRao_ or (prgnVis_ if (prgnRao_ == z)) */
+  //
   RECTL   rclClipRgn;
-  PVOID   pscanClipRgn; /* Ptr to regions rect buffer based on iDirection. */
+  //PVOID   pscanClipRgn; /* Ptr to regions rect buffer based on iDirection. */
+  RECTL*  Rects;
   DWORD   cScan;
   DWORD   reserved;
-  ULONG   ulBSize;
+  ULONG   EnumPos;
   LONG    lscnSize;
-  ULONG   ulObjSize;
+  ULONG   EnumMax;
   ULONG   iDirection;
-  ULONG   ulClipType;
+  ULONG   iType;
   DWORD   reserved1;
   LONG    lUpDown;
   DWORD   reserved2;
-  BOOL    bShouldDoAll;
-  DWORD   nComplexity; /* count/mode based on # of rect in regions scan. */
+  BOOL    bAll;
+  //
+  DWORD   RectCount;   /* count/mode based on # of rect in regions scan. */
   PVOID   pDDA;        /* Pointer to a large drawing structure. */
 } XCLIPOBJ, *PXCLIPOBJ;
+
 /*
-  EngCreateClip allocates XCLIPOBJ and RGNOBJ, pco->co.pClipRgn = &pco->ro.
+  EngCreateClip allocates XCLIPOBJ and REGION, pco->co.pClipRgn = &pco->ro.
   {
     XCLIPOBJ co;
-    RGNOBJ   ro;
+    REGION   ro;
   }
  */
-typedef struct _CLIPGDI {
-    union
-    {
-        CLIPOBJ ClipObj;
-        WNDOBJ WndObj;
-    };
-    /* WNDOBJ part */
+
+extern XCLIPOBJ gxcoTrivial;
+
+#ifdef __cplusplus
+typedef struct _EWNDOBJ : _XCLIPOBJ
+{
+#else
+typedef struct _EWNDOBJ
+{
+    XCLIPOBJ;
+#endif
+    /* Extended WNDOBJ part */
     HWND              Hwnd;
     WNDOBJCHANGEPROC  ChangeProc;
     FLONG             Flags;
     int               PixelFormat;
-    /* CLIPOBJ part */
-    ULONG EnumPos;
-    ULONG EnumOrder;
-    ULONG EnumMax;
-    ULONG RectCount;
-    RECTL* Rects;
-} CLIPGDI, *PCLIPGDI;
-C_ASSERT(FIELD_OFFSET(CLIPGDI, ClipObj) == FIELD_OFFSET(CLIPGDI, WndObj.coClient));
+} EWNDOBJ, *PEWNDOBJ;
 
-// HACK, until we use the original structure
-#define XCLIPOBJ CLIPGDI
 
-extern XCLIPOBJ gxcoTrivial;
-
 /*ei What is this for? */
 typedef struct _DRVFUNCTIONSGDI {
   HDEV  hdev;
Index: win32ss/gdi/eng/engwindow.c
===================================================================
--- win32ss/gdi/eng/engwindow.c	(revision 75325)
+++ win32ss/gdi/eng/engwindow.c	(working copy)
@@ -18,7 +18,7 @@
 VOID
 FASTCALL
 IntEngWndCallChangeProc(
-    _In_ XCLIPOBJ *Clip,
+    _In_ EWNDOBJ *Clip,
     _In_ FLONG   flChanged)
 {
     if (Clip->ChangeProc == NULL)
@@ -40,7 +40,7 @@
     if (flChanged == WOC_CHANGED)
         Clip->ChangeProc(NULL, flChanged);
     else
-        Clip->ChangeProc(&Clip->WndObj, flChanged);
+        Clip->ChangeProc((WNDOBJ *)Clip, flChanged);
 }
 
 /*
@@ -49,7 +49,7 @@
 BOOLEAN
 FASTCALL
 IntEngWndUpdateClipObj(
-    XCLIPOBJ* Clip,
+    EWNDOBJ* Clip,
     PWND Window)
 {
     PREGION visRgn;
@@ -61,7 +61,7 @@
     {
         if (visRgn->rdh.nCount > 0)
         {
-            IntEngUpdateClipRegion(Clip, visRgn->rdh.nCount, visRgn->Buffer, &visRgn->rdh.rcBound);
+            IntEngUpdateClipRegion((XCLIPOBJ*)Clip, visRgn->rdh.nCount, visRgn->Buffer, &visRgn->rdh.rcBound);
             TRACE("Created visible region with %lu rects\n", visRgn->rdh.nCount);
             TRACE("  BoundingRect: %d, %d  %d, %d\n",
                    visRgn->rdh.rcBound.left, visRgn->rdh.rcBound.top,
@@ -81,12 +81,12 @@
     else
     {
         /* Fall back to client rect */
-        IntEngUpdateClipRegion(Clip, 1, &Window->rcClient, &Window->rcClient);
+        IntEngUpdateClipRegion((XCLIPOBJ*)Clip, 1, &Window->rcClient, &Window->rcClient);
     }
 
     /* Update the WNDOBJ */
-    Clip->WndObj.rclClient = Window->rcClient;
-    Clip->WndObj.coClient.iUniq++;
+    Clip->rclClient = Window->rcClient;
+    Clip->iUniq++;
 
     return TRUE;
 }
@@ -100,7 +100,7 @@
     _In_    PWND  Window,
     _In_    FLONG flChanged)
 {
-    XCLIPOBJ *Clip;
+    EWNDOBJ *Clip;
 
     ASSERT_IRQL_LESS_OR_EQUAL(PASSIVE_LEVEL);
 
@@ -111,7 +111,7 @@
     }
 
     ASSERT(Clip->Hwnd == Window->head.h);
-    // if (Clip->WndObj.pvConsumer != NULL)
+    // if (Clip->pvConsumer != NULL)
     {
         /* Update the WNDOBJ */
         switch (flChanged)
@@ -149,7 +149,7 @@
     FLONG             fl,
     int               iPixelFormat)
 {
-    XCLIPOBJ *Clip = NULL;
+    EWNDOBJ *Clip = NULL;
     WNDOBJ *WndObjUser = NULL;
     PWND Window;
     BOOL calledFromUser;
@@ -176,13 +176,13 @@
     }
 
     /* Create WNDOBJ */
-    Clip = EngAllocMem(FL_ZERO_MEMORY, sizeof (XCLIPOBJ), GDITAG_WNDOBJ);
+    Clip = EngAllocMem(FL_ZERO_MEMORY, sizeof (EWNDOBJ), GDITAG_WNDOBJ);
     if (Clip == NULL)
     {
         ERR("Failed to allocate memory for a WND structure!\n");
         RETURN( NULL);
     }
-    IntEngInitClipObj(Clip);
+    IntEngInitClipObj((XCLIPOBJ*)Clip);
 
     /* Fill the clipobj */
     if (!IntEngWndUpdateClipObj(Clip, Window))
@@ -192,7 +192,7 @@
     }
 
     /* Fill user object */
-    WndObjUser = &Clip->WndObj;
+    WndObjUser = (WNDOBJ *)Clip;
     WndObjUser->psoOwner = pso;
     WndObjUser->pvConsumer = NULL;
 
@@ -233,7 +233,7 @@
 EngDeleteWnd(
     IN WNDOBJ *pwo)
 {
-    XCLIPOBJ* Clip = CONTAINING_RECORD(pwo, XCLIPOBJ, WndObj);
+    EWNDOBJ* Clip = (EWNDOBJ *)pwo;//CONTAINING_RECORD(pwo, XCLIPOBJ, WndObj);
     PWND Window;
     BOOL calledFromUser;
 
@@ -262,7 +262,7 @@
     }
 
     /* Free resources */
-    IntEngFreeClipResources(Clip);
+    IntEngFreeClipResources((XCLIPOBJ*)Clip);
     EngFreeMem(Clip);
 }
 
@@ -308,7 +308,7 @@
     IN WNDOBJ  *pwo,
     IN PVOID  pvConsumer)
 {
-    XCLIPOBJ* Clip = CONTAINING_RECORD(pwo, XCLIPOBJ, WndObj);
+    EWNDOBJ* Clip = (EWNDOBJ *)pwo;//CONTAINING_RECORD(pwo, XCLIPOBJ, WndObj);
     BOOL Hack;
 
     TRACE("WNDOBJ_vSetConsumer: pwo = 0x%p, pvConsumer = 0x%p\n", pwo, pvConsumer);
Index: win32ss/gdi/eng/gradient.c
===================================================================
--- win32ss/gdi/eng/gradient.c	(revision 75325)
+++ win32ss/gdi/eng/gradient.c	(working copy)
@@ -491,7 +491,7 @@
     if (pco == NULL)
     {
         /* Use the trivial one instead */
-        pco = &gxcoTrivial.ClipObj;
+        pco = (CLIPOBJ *)&gxcoTrivial;//.coClient;
     }
 
     switch(ulMode)
Index: win32ss/gdi/eng/stretchblt.c
===================================================================
--- win32ss/gdi/eng/stretchblt.c	(revision 75325)
+++ win32ss/gdi/eng/stretchblt.c	(working copy)
@@ -390,7 +390,7 @@
     //ASSERT(!RECTL_bIsEmptyRect(SourceRect)); // FIXME!
 
     /* If no clip object is given, use trivial one */
-    if (!ClipRegion) ClipRegion = &gxcoTrivial.ClipObj;
+    if (!ClipRegion) ClipRegion = (CLIPOBJ *)&gxcoTrivial;
 
     psurfDest = CONTAINING_RECORD(psoDest, SURFACE, SurfObj);
 
Index: win32ss/gdi/eng/transblt.c
===================================================================
--- win32ss/gdi/eng/transblt.c	(revision 75325)
+++ win32ss/gdi/eng/transblt.c	(working copy)
@@ -232,7 +232,7 @@
     ASSERT(psurfSource);
 
     /* If no clip object is given, use trivial one */
-    if (!Clip) Clip = &gxcoTrivial.ClipObj;
+    if (!Clip) Clip = (CLIPOBJ *)&gxcoTrivial;
 
     InputClippedRect = *DestRect;
     if (InputClippedRect.right < InputClippedRect.left)
Index: win32ss/gdi/ntgdi/arc.c
===================================================================
--- win32ss/gdi/ntgdi/arc.c	(revision 75325)
+++ win32ss/gdi/ntgdi/arc.c	(working copy)
@@ -8,7 +8,7 @@
  */
 #define PUTPIXEL(x,y,BrushInst)        \
   ret = ret && IntEngLineTo(&psurf->SurfObj, \
-       &dc->co.ClipObj,                         \
+       (CLIPOBJ *)&dc->co,                       \
        &BrushInst.BrushObject,                   \
        x, y, (x)+1, y,                           \
        &RectBounds,                              \
@@ -16,7 +16,7 @@
 
 #define PUTLINE(x1,y1,x2,y2,BrushInst) \
   ret = ret && IntEngLineTo(&psurf->SurfObj, \
-       &dc->co.ClipObj,                         \
+       (CLIPOBJ *)&dc->co,                       \
        &BrushInst.BrushObject,                   \
        x1, y1, x2, y2,                           \
        &RectBounds,                              \
Index: win32ss/gdi/ntgdi/bitblt.c
===================================================================
--- win32ss/gdi/ntgdi/bitblt.c	(revision 75325)
+++ win32ss/gdi/ntgdi/bitblt.c	(working copy)
@@ -130,7 +130,7 @@
     TRACE("Performing the alpha blend\n");
     bResult = IntEngAlphaBlend(&BitmapDest->SurfObj,
                                &BitmapSrc->SurfObj,
-                               &DCDest->co.ClipObj,
+                               (CLIPOBJ *)&DCDest->co,
                                &exlo.xlo,
                                &DestRect,
                                &SourceRect,
@@ -295,7 +295,7 @@
     EXLATEOBJ_vInitXlateFromDCs(&exlo, DCSrc, DCDest);
 
     Ret = IntEngTransparentBlt(&BitmapDest->SurfObj, &BitmapSrc->SurfObj,
-        &DCDest->co.ClipObj, &exlo.xlo, &rcDest, &rcSrc,
+        (CLIPOBJ *)&DCDest->co, &exlo.xlo, &rcDest, &rcSrc,
         TransparentColor, 0);
 
     EXLATEOBJ_vCleanup(&exlo);
@@ -485,12 +485,11 @@
         XlateObj = &exlo.xlo;
     }
 
-
     /* Perform the bitblt operation */
     Status = IntEngBitBlt(&BitmapDest->SurfObj,
                           BitmapSrc ? &BitmapSrc->SurfObj : NULL,
                           psurfMask ? &psurfMask->SurfObj : NULL,
-                          &DCDest->co.ClipObj,
+                          (CLIPOBJ *)&DCDest->co,
                           XlateObj,
                           &DestRect,
                           &SourcePoint,
@@ -708,7 +707,7 @@
     Status = IntEngStretchBlt(&BitmapDest->SurfObj,
                               BitmapSrc ? &BitmapSrc->SurfObj : NULL,
                               BitmapMask ? &BitmapMask->SurfObj : NULL,
-                              &DCDest->co.ClipObj,
+                              (CLIPOBJ *)&DCDest->co,
                               XlateObj,
                               &DCDest->dclevel.ca,
                               &DestRect,
@@ -848,7 +847,7 @@
     ret = IntEngBitBlt(&psurf->SurfObj,
                        NULL,
                        NULL,
-                       &pdc->co.ClipObj,
+                       (CLIPOBJ *)&pdc->co,
                        NULL,
                        &DestRect,
                        NULL,
@@ -1105,7 +1104,7 @@
     bResult = IntEngBitBlt(&pdc->dclevel.pSurface->SurfObj,
                            NULL,
                            NULL,
-                           &xcoClip.ClipObj,
+                           (CLIPOBJ *)&xcoClip,
                            NULL,
                            &prgnClip->rdh.rcBound,
                            NULL,
@@ -1210,7 +1209,7 @@
 
     /* Call the internal function */
     bRet = IntEngPaint(&pdc->dclevel.pSurface->SurfObj,
-                       &xcoClip.ClipObj,
+                       (CLIPOBJ *)&xcoClip,
                        pbo,
                        &pdc->pdcattr->ptlBrushOrigin,
                        mix);
Index: win32ss/gdi/ntgdi/dibobj.c
===================================================================
--- win32ss/gdi/ntgdi/dibobj.c	(revision 75325)
+++ win32ss/gdi/ntgdi/dibobj.c	(working copy)
@@ -635,7 +635,7 @@
     Status = IntEngBitBlt(pDestSurf,
                           pSourceSurf,
                           pMaskSurf,
-                          &pDC->co.ClipObj,
+                          (CLIPOBJ *)&pDC->co,
                           &exlo.xlo,
                           &rcDest,
                           &ptSource,
@@ -1333,7 +1333,7 @@
     bResult = IntEngStretchBlt(&psurfDst->SurfObj,
                                &psurfTmp->SurfObj,
                                NULL,
-                               &pdc->co.ClipObj,
+                               (CLIPOBJ *)&pdc->co,
                                &exlo.xlo,
                                &pdc->dclevel.ca,
                                &rcDst,
Index: win32ss/gdi/ntgdi/drawing.c
===================================================================
--- win32ss/gdi/ntgdi/drawing.c	(revision 75325)
+++ win32ss/gdi/ntgdi/drawing.c	(working copy)
@@ -1288,7 +1288,7 @@
                   &psurf->SurfObj,
                   NULL,
                   NULL,
-                  &dc->co.ClipObj,
+                  (CLIPOBJ *)&dc->co,
                   NULL,
                   &DestRect,
                   NULL,
Index: win32ss/gdi/ntgdi/fillshap.c
===================================================================
--- win32ss/gdi/ntgdi/fillshap.c	(revision 75325)
+++ win32ss/gdi/ntgdi/fillshap.c	(working copy)
@@ -115,7 +115,7 @@
 //                                 Points[1].x, Points[1].y );
 
                 ret = IntEngLineTo(&psurf->SurfObj,
-                                   &dc->co.ClipObj,
+                                   (CLIPOBJ *)&dc->co,
                                    &dc->eboLine.BrushObject,
                                    Points[i].x,          /* From */
                                    Points[i].y,
@@ -129,7 +129,7 @@
             if (ret)
             {
                 ret = IntEngLineTo(&psurf->SurfObj,
-                                   &dc->co.ClipObj,
+                                   (CLIPOBJ *)&dc->co,
                                    &dc->eboLine.BrushObject,
                                    Points[Count-1].x, /* From */
                                    Points[Count-1].y,
@@ -611,7 +611,7 @@
             ret = IntEngBitBlt(&psurf->SurfObj,
                                NULL,
                                NULL,
-                               &dc->co.ClipObj,
+                               (CLIPOBJ *)&dc->co,
                                NULL,
                                &DestRect,
                                NULL,
@@ -630,7 +630,7 @@
     {
         Mix = ROP2_TO_MIX(pdcattr->jROP2);
         ret = ret && IntEngLineTo(&psurf->SurfObj,
-                                  &dc->co.ClipObj,
+                                  (CLIPOBJ *)&dc->co,
                                   &dc->eboLine.BrushObject,
                                   DestRect.left, DestRect.top, DestRect.right, DestRect.top,
                                   &DestRect, // Bounding rectangle
@@ -637,7 +637,7 @@
                                   Mix);
 
         ret = ret && IntEngLineTo(&psurf->SurfObj,
-                                  &dc->co.ClipObj,
+                                  (CLIPOBJ *)&dc->co,
                                   &dc->eboLine.BrushObject,
                                   DestRect.right, DestRect.top, DestRect.right, DestRect.bottom,
                                   &DestRect, // Bounding rectangle
@@ -644,7 +644,7 @@
                                   Mix);
 
         ret = ret && IntEngLineTo(&psurf->SurfObj,
-                                  &dc->co.ClipObj,
+                                  (CLIPOBJ *)&dc->co,
                                   &dc->eboLine.BrushObject,
                                   DestRect.right, DestRect.bottom, DestRect.left, DestRect.bottom,
                                   &DestRect, // Bounding rectangle
@@ -651,7 +651,7 @@
                                   Mix);
 
         ret = ret && IntEngLineTo(&psurf->SurfObj,
-                                  &dc->co.ClipObj,
+                                  (CLIPOBJ *)&dc->co,
                                   &dc->eboLine.BrushObject,
                                   DestRect.left, DestRect.bottom, DestRect.left, DestRect.top,
                                   &DestRect, // Bounding rectangle
@@ -963,7 +963,7 @@
     EXLATEOBJ_vInitialize(&exlo, &gpalRGB, psurf->ppal, 0, 0, 0);
 
     bRet = IntEngGradientFill(&psurf->SurfObj,
-                             &pdc->co.ClipObj,
+                             (CLIPOBJ *)&pdc->co,
                              &exlo.xlo,
                              pVertex,
                              nVertex,
Index: win32ss/gdi/ntgdi/freetype.c
===================================================================
--- win32ss/gdi/ntgdi/freetype.c	(revision 75325)
+++ win32ss/gdi/ntgdi/freetype.c	(working copy)
@@ -5170,7 +5170,7 @@
             &psurf->SurfObj,
             NULL,
             NULL,
-            &dc->co.ClipObj,
+            (CLIPOBJ *)&dc->co,
             NULL,
             &DestRect,
             &SourcePoint,
@@ -5440,7 +5440,7 @@
                 &psurf->SurfObj,
                 NULL,
                 NULL,
-                &dc->co.ClipObj,
+                (CLIPOBJ *)&dc->co,
                 NULL,
                 &DestRect,
                 &SourcePoint,
@@ -5576,7 +5576,7 @@
                 &psurf->SurfObj,
                 NULL,
                 NULL,
-                &dc->co.ClipObj,
+                (CLIPOBJ *)&dc->co,
                 NULL,
                 &DestRect,
                 &SourcePoint,
@@ -5649,7 +5649,7 @@
             if (!IntEngMaskBlt(
                 SurfObj,
                 SourceGlyphSurf,
-                &dc->co.ClipObj,
+                (CLIPOBJ *)&dc->co,
                 &exloRGB2Dst.xlo,
                 &exloDst2RGB.xlo,
                 &DestRect,
@@ -5686,7 +5686,7 @@
             for (i = -thickness / 2; i < -thickness / 2 + thickness; ++i)
             {
                 EngLineTo(SurfObj,
-                          &dc->co.ClipObj,
+                          (CLIPOBJ *)&dc->co,
                           &dc->eboText.BrushObject,
                           (TextLeft >> 6),
                           TextTop + yoff - position + i,
@@ -5702,7 +5702,7 @@
             for (i = -thickness / 2; i < -thickness / 2 + thickness; ++i)
             {
                 EngLineTo(SurfObj,
-                          &dc->co.ClipObj,
+                          (CLIPOBJ *)&dc->co,
                           &dc->eboText.BrushObject,
                           (TextLeft >> 6),
                           TextTop + yoff - (fixAscender >> 6) / 3 + i,
Index: win32ss/gdi/ntgdi/line.c
===================================================================
--- win32ss/gdi/ntgdi/line.c	(revision 75325)
+++ win32ss/gdi/ntgdi/line.c	(working copy)
@@ -202,7 +202,7 @@
         if (!(pbrLine->flAttrs & BR_IS_NULL))
         {
             Ret = IntEngLineTo(&psurf->SurfObj,
-                               &dc->co.ClipObj,
+                               (CLIPOBJ *)&dc->co,
                                &dc->eboLine.BrushObject,
                                Points[0].x, Points[0].y,
                                Points[1].x, Points[1].y,
@@ -334,7 +334,7 @@
             }
 
             Ret = IntEngPolyline(&psurf->SurfObj,
-                                 &dc->co.ClipObj,
+                                 (CLIPOBJ *)&dc->co,
                                  &dc->eboLine.BrushObject,
                                  Points,
                                  Count,
Index: win32ss/gdi/ntgdi/polyfill.c
===================================================================
--- win32ss/gdi/ntgdi/polyfill.c	(revision 75325)
+++ win32ss/gdi/ntgdi/polyfill.c	(working copy)
@@ -417,7 +417,7 @@
 
             //DPRINT("Fill Line (%d, %d) to (%d, %d)\n",x1, ScanLine, x2, ScanLine);
             IntEngLineTo(&psurf->SurfObj,
-                         &dc->co.ClipObj,
+                         (CLIPOBJ *)&dc->co,
                          BrushObj,
                          x1,
                          ScanLine,
@@ -489,7 +489,7 @@
 
                 //DPRINT("Fill Line (%d, %d) to (%d, %d)\n",x1, ScanLine, x2, ScanLine);
                 IntEngLineTo(&psurf->SurfObj,
-                             &dc->co.ClipObj,
+                             (CLIPOBJ *)&dc->co,
                              BrushObj,
                              x1,
                              ScanLine,
@@ -514,7 +514,7 @@
 
     //DPRINT("Fill Line (%d, %d) to (%d, %d)\n",x1, ScanLine, x2, ScanLine);
     IntEngLineTo(&psurf->SurfObj,
-                 &dc->co.ClipObj,
+                 (CLIPOBJ *)&dc->co,
                  BrushObj,
                  x1,
                  ScanLine,
@@ -641,7 +641,7 @@
                 IntEngBitBlt(&psurf->SurfObj,
                              NULL,
                              NULL,
-                             &dc->co.ClipObj,
+                             (CLIPOBJ *)&dc->co,
                              NULL,
                              &LineRect,
                              NULL,
Index: win32ss/user/ntuser/cursoricon.c
===================================================================
--- win32ss/user/ntuser/cursoricon.c	(revision 75325)
+++ win32ss/user/ntuser/cursoricon.c	(working copy)
@@ -1863,7 +1863,7 @@
         /* We now have our destination surface */
         psurfDest = psurfOffScreen;
 #else
-        pdcClipObj = &pdc->co.ClipObj;
+        pdcClipObj = (CLIPOBJ *)&pdc->co;
         /* Paint the brush */
         EBRUSHOBJ_vInit(&eboFill, pbrush, psurfDest, 0x00FFFFFF, 0, NULL);
 
@@ -1894,7 +1894,7 @@
     {
         /* We directly draw to the DC */
         TRACE("Performing on screen rendering.\n");
-        pdcClipObj = &pdc->co.ClipObj;
+        pdcClipObj = (CLIPOBJ *)&pdc->co;
         // psurfOffScreen = NULL;
     }
 
Index: win32ss/user/ntuser/windc.c
===================================================================
--- win32ss/user/ntuser/windc.c	(revision 75325)
+++ win32ss/user/ntuser/windc.c	(working copy)
@@ -951,7 +951,7 @@
 HWND FASTCALL
 UserGethWnd( HDC hdc, PWNDOBJ *pwndo)
 {
-  XCLIPOBJ* Clip;
+  EWNDOBJ* Clip;
   PWND Wnd;
   HWND hWnd;
 
@@ -959,11 +959,11 @@
 
   if (hWnd && (Wnd = UserGetWindowObject(hWnd)))
   {
-     Clip = (XCLIPOBJ*)UserGetProp(Wnd, AtomWndObj, TRUE);
+     Clip = (EWNDOBJ*)UserGetProp(Wnd, AtomWndObj, TRUE);
 
      if ( Clip && Clip->Hwnd == hWnd )
      {
-        if (pwndo) *pwndo = &Clip->WndObj;
+        if (pwndo) *pwndo = (PWNDOBJ)Clip;
      }
   }
   return hWnd;
