diff --git a/reactos/win32ss/gdi/eng/inteng.h b/reactos/win32ss/gdi/eng/inteng.h
index d4a0ec473e2..589bb8d1821 100644
--- a/reactos/win32ss/gdi/eng/inteng.h
+++ b/reactos/win32ss/gdi/eng/inteng.h
@@ -86,6 +86,7 @@ IntEngStretchBlt(SURFOBJ *DestObj,
                  SURFOBJ *Mask,
                  CLIPOBJ *ClipRegion,
                  XLATEOBJ *ColorTranslation,
+                 COLORADJUSTMENT *pca,
                  RECTL *DestRect,
                  RECTL *SourceRect,
                  POINTL *pMaskOrigin,
@@ -152,14 +153,16 @@ IntEngSetPointerShape(
    IN RECTL *prcl,
    IN FLONG fl);
 
-BOOL APIENTRY
-IntEngAlphaBlend(IN SURFOBJ *Dest,
-                 IN SURFOBJ *Source,
-                 IN CLIPOBJ *ClipRegion,
-                 IN XLATEOBJ *ColorTranslation,
-                 IN PRECTL DestRect,
-                 IN PRECTL SourceRect,
-                 IN BLENDOBJ *BlendObj);
+BOOL
+APIENTRY
+IntEngAlphaBlend(
+    _Inout_ SURFOBJ *psoDest,
+    _In_ SURFOBJ *psoSource,
+    _In_opt_ CLIPOBJ *pco,
+    _In_opt_ XLATEOBJ *pxlo,
+    _In_ RECTL *prclDest,
+    _In_ RECTL *prclSrc,
+    _In_ BLENDOBJ *pBlendObj);
 
 BOOL APIENTRY
 IntEngCopyBits(SURFOBJ *psoDest,
diff --git a/reactos/win32ss/gdi/eng/stretchblt.c b/reactos/win32ss/gdi/eng/stretchblt.c
index 7bed7d2ce17..ee0de15cfcf 100644
--- a/reactos/win32ss/gdi/eng/stretchblt.c
+++ b/reactos/win32ss/gdi/eng/stretchblt.c
@@ -169,6 +169,7 @@ EngStretchBltROP(
         InputRect.right = OutputRect.right - OutputRect.left;
         InputRect.top = 0;
         InputRect.bottom = OutputRect.bottom - OutputRect.top;
+        psoInput = NULL;
     }
 
     if (NULL != ClipRegion)
@@ -364,6 +365,7 @@ IntEngStretchBlt(SURFOBJ *psoDest,
                  SURFOBJ *MaskSurf,
                  CLIPOBJ *ClipRegion,
                  XLATEOBJ *ColorTranslation,
+                 COLORADJUSTMENT *pca,
                  RECTL *DestRect,
                  RECTL *SourceRect,
                  POINTL *pMaskOrigin,
@@ -372,7 +374,6 @@ IntEngStretchBlt(SURFOBJ *psoDest,
                  DWORD Rop4)
 {
     BOOLEAN ret;
-    COLORADJUSTMENT ca;
     POINTL MaskOrigin = {0, 0};
     SURFACE *psurfDest;
     //SURFACE *psurfSource = NULL;
@@ -383,9 +384,15 @@ IntEngStretchBlt(SURFOBJ *psoDest,
     LONG InputClWidth, InputClHeight, InputWidth, InputHeight;
 
     ASSERT(psoDest);
-    psurfDest = CONTAINING_RECORD(psoDest, SURFACE, SurfObj);
-    ASSERT(psurfDest);
+    ASSERT(psoSource);
     ASSERT(DestRect);
+    ASSERT(SourceRect);
+    ASSERT(!RECTL_bIsEmptyRect(SourceRect));
+
+    /* If no clip object is given, use trivial one */
+    if (!ClipRegion) ClipRegion = &gxcoTrivial.ClipObj;
+
+    psurfDest = CONTAINING_RECORD(psoDest, SURFACE, SurfObj);
 
     /* Sanity check */
     ASSERT(IS_VALID_ROP4(Rop4));
@@ -420,20 +427,17 @@ IntEngStretchBlt(SURFOBJ *psoDest,
         InputClippedRect.bottom = DestRect->top;
     }
 
-    if (UsesSource)
+    if (NULL == SourceRect || NULL == psoSource)
     {
-        if (NULL == SourceRect || NULL == psoSource)
-        {
-            return FALSE;
-        }
-        InputRect = *SourceRect;
+        return FALSE;
+    }
+    InputRect = *SourceRect;
 
-        if (InputRect.right < InputRect.left ||
-                InputRect.bottom < InputRect.top)
-        {
-            /* Everything clipped away, nothing to do */
-            return TRUE;
-        }
+    if (InputRect.right < InputRect.left ||
+            InputRect.bottom < InputRect.top)
+    {
+        /* Everything clipped away, nothing to do */
+        return TRUE;
     }
 
     if (ClipRegion)
@@ -473,18 +477,17 @@ IntEngStretchBlt(SURFOBJ *psoDest,
         //psurfSource = CONTAINING_RECORD(psoSource, SURFACE, SurfObj);
     }
 
-    /* Prepare color adjustment */
-
     /* Call the driver's DrvStretchBlt if available */
     if (psurfDest->flags & HOOK_STRETCHBLTROP)
     {
         /* Drv->StretchBltROP (look at http://www.osronline.com/ddkx/graphics/ddifncs_0z3b.htm ) */
         ret = GDIDEVFUNCS(psoDest).StretchBltROP(psoDest,
-                                                 (UsesSource) ? psoSource : NULL,
+                                                 psoSource,
                                                  MaskSurf,
                                                  ClipRegion,
                                                  ColorTranslation,
-                                                 &ca, BrushOrigin,
+                                                 pca,
+                                                 BrushOrigin,
                                                  &OutputRect,
                                                  &InputRect,
                                                  &MaskOrigin,
@@ -496,11 +499,11 @@ IntEngStretchBlt(SURFOBJ *psoDest,
     if (! ret)
     {
         ret = EngStretchBltROP(psoDest,
-                               (UsesSource) ? psoSource : NULL,
+                               psoSource,
                                MaskSurf,
                                ClipRegion,
                                ColorTranslation,
-                               &ca,
+                               pca,
                                BrushOrigin,
                                &OutputRect,
                                &InputRect,
@@ -536,8 +539,12 @@ NtGdiEngStretchBlt(
 
     _SEH2_TRY
     {
-        ProbeForRead(pca, sizeof(COLORADJUSTMENT), 1);
-        RtlCopyMemory(&ca,pca, sizeof(COLORADJUSTMENT));
+        if (pca)
+        {
+            ProbeForRead(pca, sizeof(COLORADJUSTMENT), 1);
+            RtlCopyMemory(&ca,pca, sizeof(COLORADJUSTMENT));
+            pca = &ca;
+        }
 
         ProbeForRead(BrushOrigin, sizeof(POINTL), 1);
         RtlCopyMemory(&lBrushOrigin, BrushOrigin, sizeof(POINTL));
@@ -558,7 +565,7 @@ NtGdiEngStretchBlt(
     }
     _SEH2_END;
 
-    return EngStretchBlt(psoDest, psoSource, Mask, ClipRegion, ColorTranslation, &ca, &lBrushOrigin, &rclDest, &rclSrc, &lMaskOrigin, Mode);
+    return EngStretchBlt(psoDest, psoSource, Mask, ClipRegion, ColorTranslation, pca, &lBrushOrigin, &rclDest, &rclSrc, &lMaskOrigin, Mode);
 }
 
 /* EOF */
diff --git a/reactos/win32ss/gdi/ntgdi/bitblt.c b/reactos/win32ss/gdi/ntgdi/bitblt.c
index 9845f02aa3e..26deeae2be5 100644
--- a/reactos/win32ss/gdi/ntgdi/bitblt.c
+++ b/reactos/win32ss/gdi/ntgdi/bitblt.c
@@ -67,7 +67,7 @@ TranslateCOLORREF(PDC pdc, COLORREF crColor)
             return index;
 
         default:
-            DPRINT("Unsupported color type %d passed\n", crColor >> 24);
+            DPRINT("Unsupported color type %u passed\n", crColor >> 24);
             crColor &= 0xFFFFFF;
     }
 
@@ -122,7 +122,7 @@ NtGdiAlphaBlend(
     ahDC[1] = hDCSrc ;
     if (!GDIOBJ_bLockMultipleObjects(2, (HGDIOBJ*)ahDC, apObj, GDIObjType_DC_TYPE))
     {
-        DPRINT1("Invalid dc handle (dest=0x%08x, src=0x%08x) passed to NtGdiAlphaBlend\n", hDCDest, hDCSrc);
+        DPRINT1("Invalid dc handle (dest=0x%p, src=0x%p) passed to NtGdiAlphaBlend\n", hDCDest, hDCSrc);
         EngSetLastError(ERROR_INVALID_HANDLE);
         return FALSE;
     }
@@ -270,7 +270,7 @@ NtGdiTransparentBlt(
     ahDC[1] = hdcSrc ;
     if (!GDIOBJ_bLockMultipleObjects(2, (HGDIOBJ*)ahDC, apObj, GDIObjType_DC_TYPE))
     {
-        DPRINT1("Invalid dc handle (dest=0x%08x, src=0x%08x) passed to NtGdiAlphaBlend\n", hdcDst, hdcSrc);
+        DPRINT1("Invalid dc handle (dest=0x%p, src=0x%p) passed to NtGdiAlphaBlend\n", hdcDst, hdcSrc);
         EngSetLastError(ERROR_INVALID_HANDLE);
         return FALSE;
     }
@@ -424,7 +424,7 @@ NtGdiMaskBlt(
     ahDC[1] = UsesSource ? hdcSrc : NULL;
     if (!GDIOBJ_bLockMultipleObjects(2, (HGDIOBJ*)ahDC, apObj, GDIObjType_DC_TYPE))
     {
-        DPRINT1("Invalid dc handle (dest=0x%08x, src=0x%08x) passed to NtGdiAlphaBlend\n", hdcDest, hdcSrc);
+        DPRINT1("Invalid dc handle (dest=0x%p, src=0x%p) passed to NtGdiAlphaBlend\n", hdcDest, hdcSrc);
         EngSetLastError(ERROR_INVALID_HANDLE);
         return FALSE;
     }
@@ -435,7 +435,7 @@ NtGdiMaskBlt(
     if (NULL == DCDest)
     {
         if(DCSrc) DC_UnlockDc(DCSrc);
-        DPRINT("Invalid destination dc handle (0x%08x) passed to NtGdiBitBlt\n", hdcDest);
+        DPRINT("Invalid destination dc handle (0x%p) passed to NtGdiBitBlt\n", hdcDest);
         return FALSE;
     }
 
@@ -487,6 +487,13 @@ NtGdiMaskBlt(
         SourceRect.right = SourcePoint.x + DestRect.right - DestRect.left;
         SourceRect.bottom = SourcePoint.y + DestRect.bottom - DestRect.top ;
     }
+    else
+    {
+        SourceRect.left = 0;
+        SourceRect.top = 0;
+        SourceRect.right = 0;
+        SourceRect.bottom = 0;
+    }
 
     /* Prepare blit */
     DC_vPrepareDCsForBlit(DCDest, DestRect, DCSrc, SourceRect);
@@ -619,7 +626,7 @@ GreStretchBltMask(
     ahDC[2] = UsesMask ? hDCMask : NULL;
     if (!GDIOBJ_bLockMultipleObjects(3, (HGDIOBJ*)ahDC, apObj, GDIObjType_DC_TYPE))
     {
-        DPRINT1("Invalid dc handle (dest=0x%08x, src=0x%08x) passed to NtGdiAlphaBlend\n", hDCDest, hDCSrc);
+        DPRINT1("Invalid dc handle (dest=0x%p, src=0x%p) passed to NtGdiAlphaBlend\n", hDCDest, hDCSrc);
         EngSetLastError(ERROR_INVALID_HANDLE);
         return FALSE;
     }
@@ -728,10 +735,11 @@ GreStretchBltMask(
 
     /* Perform the bitblt operation */
     Status = IntEngStretchBlt(&BitmapDest->SurfObj,
-                              &BitmapSrc->SurfObj,
+                              BitmapSrc ? &BitmapSrc->SurfObj : NULL,
                               BitmapMask ? &BitmapMask->SurfObj : NULL,
                               DCDest->rosdc.CombinedClip,
                               XlateObj,
+                              &DCDest->dclevel.ca,
                               &DestRect,
                               &SourceRect,
                               BitmapMask ? &MaskPoint : NULL,
diff --git a/reactos/win32ss/gdi/ntgdi/dc.h b/reactos/win32ss/gdi/ntgdi/dc.h
index 15583b29204..00323c36d0c 100644
--- a/reactos/win32ss/gdi/ntgdi/dc.h
+++ b/reactos/win32ss/gdi/ntgdi/dc.h
@@ -265,7 +265,7 @@ DC_vSelectPalette(PDC pdc, PPALETTE ppal)
     pdc->dclevel.ppal = ppal;
 }
 
-extern PBRUSH pbrDefaultBrush ;
-extern PSURFACE psurfDefaultBitmap;
+extern _Notnull_ PBRUSH pbrDefaultBrush;
+extern _Notnull_ PSURFACE psurfDefaultBitmap;
 
 #endif /* not __WIN32K_DC_H */
diff --git a/reactos/win32ss/gdi/ntgdi/dibobj.c b/reactos/win32ss/gdi/ntgdi/dibobj.c
index 6fd01ee87c0..8d4e2eefcd9 100644
--- a/reactos/win32ss/gdi/ntgdi/dibobj.c
+++ b/reactos/win32ss/gdi/ntgdi/dibobj.c
@@ -439,16 +439,15 @@ NtGdiSetDIBitsToDeviceInternal(
         EngSetLastError(ERROR_INVALID_HANDLE);
         goto Exit2;
     }
-    if (pDC->dctype == DC_TYPE_INFO)
+
+    pSurf = pDC->dclevel.pSurface;
+    if ((pDC->dctype == DC_TYPE_INFO) || !pSurf)
     {
         DC_UnlockDc(pDC);
         goto Exit2;
     }
 
-    pSurf = pDC->dclevel.pSurface;
-    if(!pSurf) pSurf = psurfDefaultBitmap;
-
-    pDestSurf = pSurf ? &pSurf->SurfObj : NULL;
+    pDestSurf = &pSurf->SurfObj;
 
     ScanLines = min(ScanLines, abs(bmi->bmiHeader.biHeight) - StartScan);
 
@@ -1175,6 +1174,7 @@ NtGdiStretchDIBitsInternal(
                                NULL,
                                pdc->rosdc.CombinedClip,
                                &exlo.xlo,
+                               &pdc->dclevel.ca,
                                &rcDst,
                                &rcSrc,
                                NULL,
@@ -1474,7 +1474,7 @@ DIB_CreateDIBSection(
     //SIZEL Size;
     HANDLE hSecure;
 
-    DPRINT("format (%ld,%ld), planes %d, bpp %d, size %ld, colors %ld (%s)\n",
+    DPRINT("format (%ld,%ld), planes %u, bpp %u, size %lu, colors %lu (%s)\n",
            bi->biWidth, bi->biHeight, bi->biPlanes, bi->biBitCount,
            bi->biSizeImage, bi->biClrUsed, usage == DIB_PAL_COLORS? "PAL" : "RGB");
 
@@ -1608,7 +1608,7 @@ DIB_CreateDIBSection(
 cleanup:
     if (!res || !bmp || !bm.bmBits)
     {
-        DPRINT("Got an error res=%08x, bmp=%p, bm.bmBits=%p\n", res, bmp, bm.bmBits);
+        DPRINT("Got an error res=%p, bmp=%p, bm.bmBits=%p\n", res, bmp, bm.bmBits);
         if (bm.bmBits)
         {
             // MmUnsecureVirtualMemory(hSecure); // FIXME: Implement this!
@@ -1677,7 +1677,7 @@ DIB_GetBitmapInfo( const BITMAPINFOHEADER *header, LONG *width,
         *size   = header->biSizeImage;
         return 1;
     }
-    DPRINT1("(%d): unknown/wrong size for header\n", header->biSize );
+    DPRINT1("(%u): unknown/wrong size for header\n", header->biSize );
     return -1;
 }
 
diff --git a/reactos/win32ss/user/ntuser/winsta.c b/reactos/win32ss/user/ntuser/winsta.c
index b2e4d54d664..7fa70dd60b0 100644
--- a/reactos/win32ss/user/ntuser/winsta.c
+++ b/reactos/win32ss/user/ntuser/winsta.c
@@ -61,19 +61,19 @@ UserCreateWinstaDirectoy()
     }
     else
     {
-        swprintf(wstrWindowStationsDir, 
-                 L"%ws\\%ld%ws", 
-                 SESSION_DIR, 
-                 Peb->SessionId, 
+        swprintf(wstrWindowStationsDir,
+                 L"%ws\\%ld%ws",
+                 SESSION_DIR,
+                 Peb->SessionId,
                  WINSTA_OBJ_DIR);
 
         RtlCreateUnicodeString( &gustrWindowStationsDir, wstrWindowStationsDir);
     }
 
-   InitializeObjectAttributes(&ObjectAttributes, 
-                              &gustrWindowStationsDir, 
-                              0, 
-                              NULL, 
+   InitializeObjectAttributes(&ObjectAttributes,
+                              &gustrWindowStationsDir,
+                              0,
+                              NULL,
                               NULL);
    Status = ZwCreateDirectoryObject(&hWinstaDir, 0, &ObjectAttributes);
    if (!NT_SUCCESS(Status))
@@ -433,7 +433,7 @@ NtUserCreateWindowStation(
       InitCursorImpl();
    }
 
-   TRACE("NtUserCreateWindowStation created object 0x%x with name %wZ handle 0x%x\n", 
+   TRACE("NtUserCreateWindowStation created object 0x%x with name %wZ handle 0x%x\n",
           WindowStation, &WindowStationObject->Name, WindowStation);
    return WindowStation;
 }
@@ -631,7 +631,7 @@ NtUserGetObjectInformation(
       Status = IntValidateDesktopHandle(
                   hObject,
                   UserMode,
-                  0, 
+                  0,
                   &DesktopObject);
       if (!NT_SUCCESS(Status))
       {