diff --git a/win32ss/user/ntuser/winpos.c b/win32ss/user/ntuser/winpos.c
index 39dbc0c755..e4b730df87 100644
--- a/win32ss/user/ntuser/winpos.c
+++ b/win32ss/user/ntuser/winpos.c
@@ -1971,19 +1971,34 @@ co_WinPosSetWindowPos(
       {
          CopyRgn = NULL;
       }
-#if 0
-      /////// Fixes NoPopup tests but breaks msg_paint tests.
+
       if ( !PosChanged && (WinPos.flags & SWP_FRAMECHANGED) && VisBefore)
       {
          PWND Parent = Window->spwndParent;
          ERR("SWP_FRAMECHANGED no chg\n");
          if ( !(Window->style & WS_CHILD) && (Parent) && (Parent->style & WS_CLIPCHILDREN))
          {
+            HDC hdc;
+            HRGN DcRgn = NtGdiCreateRectRgn(0, 0, 0, 0);
+            PREGION DcRgnObj = REGION_LockRgn(DcRgn);
+
             ERR("SWP_FRAMECHANGED Parent WS_CLIPCHILDREN\n");
-            //IntInvalidateWindows( Window, VisBefore, /*RDW_ERASE |*/ RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN);
+
+            IntGdiCombineRgn(DcRgnObj, VisBefore, NULL, RGN_COPY);
+            REGION_UnlockRgn(DcRgnObj);
+
+            hdc = UserGetDCEx( Window,
+                               DcRgn,
+                               DCX_WINDOW|DCX_CACHE|DCX_INTERSECTRGN|DCX_CLIPSIBLINGS|DCX_KEEPCLIPRGN);
+
+            NC_DoNCPaint(Window, hdc, -1); // Force full redraw of nonclient area.
+
+            UserReleaseDC(Window, hdc, FALSE);
+            IntValidateParent(Window, DcRgnObj);
+            GreDeleteObject(DcRgn);
          }
       }
-#endif
+
       /* We need to redraw what wasn't visible before */
       if (VisAfter != NULL)
       {
