diff --git a/inc/dd.h b/inc/dd.h
index 9ee8049..fe8a902 100644
--- a/inc/dd.h
+++ b/inc/dd.h
@@ -158,6 +158,7 @@ typedef struct CNCDDRAW
     DWORD minfps_tick_len;
     DWORD gui_thread_id;
     BOOL show_driver_warning;
+    BOOL windowed_hack;
 
     struct
     {
diff --git a/src/dd.c b/src/dd.c
index 1be2ec9..fb3adf0 100644
--- a/src/dd.c
+++ b/src/dd.c
@@ -161,7 +161,8 @@ HRESULT dd_EnumDisplayModes(
         }
     }
 
-    if ((g_ddraw.bpp && g_config.resolutions == RESLIST_NORMAL) || g_config.resolutions == RESLIST_FULL)
+    if (((g_ddraw.bpp && !g_ddraw.windowed_hack) && g_config.resolutions == RESLIST_NORMAL) || 
+        g_config.resolutions == RESLIST_FULL)
     {
         TRACE("     g_ddraw.bpp=%u\n", g_ddraw.bpp);
 
@@ -1498,12 +1499,18 @@ HRESULT dd_SetCooperativeLevel(HWND hwnd, DWORD dwFlags)
         }
         else if (!g_ddraw.width)
         {
+            g_ddraw.windowed_hack = TRUE;
+
             RECT rc = { 0 };
             real_GetClientRect(hwnd, &rc);
 
             dd_SetDisplayMode(rc.right, rc.bottom, 16, 0);
         }
     }
+    else
+    {
+        g_ddraw.windowed_hack = FALSE;
+    }
 
     return DD_OK;
 }