diff --git a/windows/dce.c b/windows/dce.c
index 15ce262..34b7451 100644
--- a/windows/dce.c
+++ b/windows/dce.c
@@ -560,7 +560,7 @@
                  * WS_CLIPSIBLINGS style
 		 */
 
-		while (wndPtr->dwStyle & WS_CHILD)
+		while (wndPtr->parent)
 		{
 		    WIN_UpdateWndPtr(&wndPtr,wndPtr->parent);
 		    xoffset -= wndPtr->rectClient.left;
diff --git a/windows/dialog.c b/windows/dialog.c
index d489836..f143731 100644
--- a/windows/dialog.c
+++ b/windows/dialog.c
@@ -1994,7 +1994,7 @@
             goto END;
         }
         /* Make sure hwndCtrl is a top-level child */
-        while ((pWndCtrl->dwStyle & WS_CHILD) && (pWndCtrl->parent != pWndDlg))
+        while (pWndCtrl->parent && (pWndCtrl->parent != pWndDlg))
             WIN_UpdateWndPtr(&pWndCtrl,pWndCtrl->parent);
         if (pWndCtrl->parent != pWndDlg)
         {
diff --git a/windows/nonclient.c b/windows/nonclient.c
index f61d82e..163411b 100644
--- a/windows/nonclient.c
+++ b/windows/nonclient.c
@@ -2101,7 +2101,7 @@
 
     if (GetCapture() != hwnd) SetCapture( hwnd );    
 
-    if (wndPtr->dwStyle & WS_CHILD)
+    if (wndPtr->parent && (wndPtr->parent->hwndSelf != GetDesktopWindow()))
     {
           /* Retrieve a default cache DC (without using the window style) */
         hdc = GetDCEx( wndPtr->parent->hwndSelf, 0, DCX_CACHE );
@@ -2235,7 +2235,7 @@
 	if(!DragFullWindows)
         NC_DrawMovingFrame( hdc, &sizingRect, thickframe );
 
-    if (wndPtr->dwStyle & WS_CHILD)
+    if (wndPtr->parent && (wndPtr->parent->hwndSelf != GetDesktopWindow()))
         ReleaseDC( wndPtr->parent->hwndSelf, hdc );
     else
         ReleaseDC( 0, hdc );
@@ -2693,7 +2693,7 @@
 
     TRACE("Handling WM_SYSCOMMAND %x %ld,%ld\n", wParam, pt.x, pt.y );
 
-    if ((wndPtr->dwStyle & WS_CHILD) && (uCommand != SC_KEYMENU))
+    if (wndPtr->parent && (uCommand != SC_KEYMENU))
         ScreenToClient( wndPtr->parent->hwndSelf, &pt );
 
     switch (uCommand)
diff --git a/windows/win.c b/windows/win.c
index 9ba000e..e96504b 100644
--- a/windows/win.c
+++ b/windows/win.c
@@ -1329,11 +1329,11 @@
     {
 	if (h == hwnd)
 	{
-	    SetFocus(GetWindowLongA(hwnd,GWL_HWNDPARENT));
+	    SetFocus(GetParent(h));
 	    bFocusSet = TRUE;
 	    break;
 	}
-	h = GetWindowLongA(h,GWL_HWNDPARENT);
+	h = GetParent(h);
     }
     /* If the focus is on the window we will destroy and it has no parent,
      * set the focus to 0.
@@ -2031,9 +2031,7 @@
 		goto end;
 	case GWL_STYLE:
 	       	style.styleOld = wndPtr->dwStyle;
-		newval &= ~(WS_CHILD);	/* this bit can't be changed this way */
-		style.styleNew = newval | (style.styleOld & (WS_CHILD));
-
+		style.styleNew = newval;
 		if (wndPtr->flags & WIN_ISWIN32)
 			SendMessageA(hwnd,WM_STYLECHANGING,GWL_STYLE,(LPARAM)&style);
 		wndPtr->dwStyle = style.styleNew;
@@ -2454,9 +2452,10 @@
 BOOL WINAPI IsChild( HWND parent, HWND child )
 {
     WND * wndPtr = WIN_FindWndPtr( child );
-    while (wndPtr && (wndPtr->dwStyle & WS_CHILD))
+    while (wndPtr && wndPtr->parent)
     {
         WIN_UpdateWndPtr(&wndPtr,wndPtr->parent);
+        if (wndPtr->hwndSelf == GetDesktopWindow()) break;
         if (wndPtr->hwndSelf == parent)
         {
             WIN_ReleaseWndPtr(wndPtr);
@@ -2484,7 +2483,7 @@
 {
     BOOL retval;
     WND *wndPtr = WIN_FindWndPtr( hwnd );
-    while (wndPtr && (wndPtr->dwStyle & WS_CHILD))
+    while (wndPtr && wndPtr->parent)
     {
         if (!(wndPtr->dwStyle & WS_VISIBLE))
     {
@@ -2496,7 +2495,6 @@
     retval = (wndPtr && (wndPtr->dwStyle & WS_VISIBLE));
     WIN_ReleaseWndPtr(wndPtr);
     return retval;
-    
 }
 
 
@@ -3159,7 +3157,7 @@
  if( !(ptrQueryWnd->dwStyle & WS_MINIMIZE) ) 
    {
      tempRect = ptrQueryWnd->rectClient;
-     if(ptrQueryWnd->dwStyle & WS_CHILD)
+     if(ptrQueryWnd->parent)
         MapWindowPoints( ptrQueryWnd->parent->hwndSelf, 0,
                            (LPPOINT)&tempRect, 2 );
 
diff --git a/windows/winpos.c b/windows/winpos.c
index 192a922..09cb948 100644
--- a/windows/winpos.c
+++ b/windows/winpos.c
@@ -246,7 +246,7 @@
     if (!wndPtr) return;
     
     CONV_RECT32TO16( &wndPtr->rectWindow, rect );
-    if (wndPtr->dwStyle & WS_CHILD)
+    if (wndPtr->parent)
 	MapWindowPoints16( wndPtr->parent->hwndSelf, 0, (POINT16 *)rect, 2 );
     WIN_ReleaseWndPtr(wndPtr);
 }
@@ -261,7 +261,7 @@
     if (!wndPtr) return FALSE;
     
     *rect = wndPtr->rectWindow;
-    if (wndPtr->dwStyle & WS_CHILD)
+    if (wndPtr->parent)
 	MapWindowPoints( wndPtr->parent->hwndSelf, 0, (POINT *)rect, 2 );
     WIN_ReleaseWndPtr(wndPtr);
     return TRUE;
diff --git a/windows/x11drv/wnd.c b/windows/x11drv/wnd.c
index fbed353..524ac46 100644
--- a/windows/x11drv/wnd.c
+++ b/windows/x11drv/wnd.c
@@ -851,7 +851,8 @@
 void X11DRV_WND_PreSizeMove(WND *wndPtr)
 {
   /* Grab the server only when moving top-level windows without desktop */
-  if (!(wndPtr->dwStyle & WS_CHILD) && (X11DRV_GetXRootWindow() == DefaultRootWindow(display)))
+  if ((X11DRV_GetXRootWindow() == DefaultRootWindow(display)) &&
+      (wndPtr->parent->hwndSelf == GetDesktopWindow()))
     TSXGrabServer( display );
 }
 
@@ -860,8 +861,8 @@
  */
 void X11DRV_WND_PostSizeMove(WND *wndPtr)
 {
-  if (!(wndPtr->dwStyle & WS_CHILD) && 
-      (X11DRV_GetXRootWindow() == DefaultRootWindow(display)))
+  if ((X11DRV_GetXRootWindow() == DefaultRootWindow(display)) &&
+      (wndPtr->parent->hwndSelf == GetDesktopWindow()))
     TSXUngrabServer( display );
 }
 
