diff --git a/windows/winpos.c b/windows/winpos.c
index 590cf211e4b862c8d3634f6ded257cf61834340f..62a6e743b4701decc18e6054eae0dfb787e4f5d1 100644
--- a/windows/winpos.c
+++ b/windows/winpos.c
@@ -1593,6 +1593,9 @@ BOOL WINPOS_SetActiveWindow( HWND hWnd, BOOL fMouse, BOOL fChangeFocus)
         /* check if something happened during message processing
          * (global active queue may have changed)
          */
+	if (hActiveQueue==0)
+	  goto CLEANUP;
+
         pTempActiveQueue = QUEUE_Lock( hActiveQueue );
         hwndActive = PERQDATA_GetActiveWnd( pTempActiveQueue->pQData );
         QUEUE_Unlock( pTempActiveQueue );
@@ -1637,7 +1640,8 @@ BOOL WINPOS_SetActiveWindow( HWND hWnd, BOOL fMouse, BOOL fChangeFocus)
     {
         WND **list, **ppWnd;
 
-        if ((list = WIN_BuildWinArray( WIN_GetDesktop(), 0, NULL )))
+        if ( (hNewActiveQueue!=0) && 
+	     (list = WIN_BuildWinArray( WIN_GetDesktop(), 0, NULL )))
         {
             for (ppWnd = list; *ppWnd; ppWnd++)
             {
@@ -1652,7 +1656,8 @@ BOOL WINPOS_SetActiveWindow( HWND hWnd, BOOL fMouse, BOOL fChangeFocus)
 
 	hActiveQueue = hNewActiveQueue;
 
-        if ((list = WIN_BuildWinArray( WIN_GetDesktop(), 0, NULL )))
+        if ( (hOldActiveQueue!=0) &&
+	     (list = WIN_BuildWinArray( WIN_GetDesktop(), 0, NULL )))
         {
             for (ppWnd = list; *ppWnd; ppWnd++)
             {