diff --git a/src/config.c b/src/config.c
index 9469b4d..45e4c95 100644
--- a/src/config.c
+++ b/src/config.c
@@ -394,6 +394,10 @@ static void cfg_create_ini()
             "; American Girls Dress Designer\n"
             "[Dress Designer]\n"
             "fake_mode=640x480x32\n"
+            "border=false\n"
+            "posX=0\n"
+            "posY=0\n"
+            "nonexclusive=true\n"
             "\n"
             "; Age of Wonders 2\n"
             "[AoW2]\n"
diff --git a/src/dd.c b/src/dd.c
index 9a3e4aa..d2eee80 100644
--- a/src/dd.c
+++ b/src/dd.c
@@ -546,18 +546,15 @@ HRESULT dd_RestoreDisplayMode()
         return DD_OK;
     }
 
-    if (g_ddraw.renderer != gdi_render_main)
-    {
-        EnterCriticalSection(&g_ddraw.cs);
-        g_ddraw.render.run = FALSE;
-        ReleaseSemaphore(g_ddraw.render.sem, 1, NULL);
-        LeaveCriticalSection(&g_ddraw.cs);
+    EnterCriticalSection(&g_ddraw.cs);
+    g_ddraw.render.run = FALSE;
+    ReleaseSemaphore(g_ddraw.render.sem, 1, NULL);
+    LeaveCriticalSection(&g_ddraw.cs);
 
-        if (g_ddraw.render.thread)
-        {
-            WaitForSingleObject(g_ddraw.render.thread, INFINITE);
-            g_ddraw.render.thread = NULL;
-        }
+    if (g_ddraw.render.thread)
+    {
+        WaitForSingleObject(g_ddraw.render.thread, INFINITE);
+        g_ddraw.render.thread = NULL;
     }
 
     if (!g_config.windowed)
diff --git a/src/utils.c b/src/utils.c
index c7de295..9b0ce23 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -553,9 +553,12 @@ void util_set_window_rect(int x, int y, int width, int height, UINT flags)
 
 BOOL CALLBACK util_enum_thread_wnd_proc(HWND hwnd, LPARAM lParam)
 {
+    RECT size = { 0 };
+    real_GetClientRect(hwnd, &size);
+
     LONG sytle = real_GetWindowLongA(hwnd, GWL_STYLE);
 
-    if (!g_ddraw.hwnd && !(sytle & WS_DISABLED))
+    if (!g_ddraw.hwnd && !(sytle & WS_DISABLED) && size.right > 0 && size.bottom > 0)
         g_ddraw.hwnd = hwnd;
 
 #ifdef _DEBUG
@@ -568,9 +571,6 @@ BOOL CALLBACK util_enum_thread_wnd_proc(HWND hwnd, LPARAM lParam)
     RECT pos = { 0 };
     real_GetWindowRect(hwnd, &pos);
 
-    RECT size = { 0 };
-    real_GetClientRect(hwnd, &size);
-
     LONG exsytle = real_GetWindowLongA(hwnd, GWL_EXSTYLE);
 
     TRACE(
diff --git a/src/winapi_hooks.c b/src/winapi_hooks.c
index f688ee6..9b51570 100644
--- a/src/winapi_hooks.c
+++ b/src/winapi_hooks.c
@@ -11,6 +11,7 @@
 #include "mouse.h"
 #include "wndproc.h"
 #include "render_gdi.h"
+#include "render_d3d9.h"
 #include "directinput.h"
 #include "ddsurface.h"
 #include "ddclipper.h"
@@ -1320,13 +1321,28 @@ BOOL WINAPI fake_DestroyWindow(HWND hWnd)
 {
     TRACE("DestroyWindow(hwnd=%p) - g_ddraw.hwnd=%p\n", hWnd, g_ddraw.hwnd);
 
+    if (g_ddraw.ref && hWnd && hWnd == g_ddraw.hwnd)
+    {
+        dd_RestoreDisplayMode();
+
+        if (g_ddraw.renderer == d3d9_render_main)
+        {
+            d3d9_release();
+        }
+    }
+
     BOOL result = real_DestroyWindow(hWnd);
 
-    if (result && g_ddraw.ref && hWnd == g_ddraw.hwnd)
+    if (result && g_ddraw.ref && hWnd && hWnd == g_ddraw.hwnd)
     {
         g_ddraw.hwnd = NULL;
         g_ddraw.wndproc = NULL;
         g_ddraw.render.hdc = NULL;
+
+        if (g_config.fake_mode[0])
+        {
+            dd_SetCooperativeLevel(NULL, DDSCL_NORMAL);
+        }
     }
 
     if (g_ddraw.ref && g_ddraw.hwnd != hWnd && g_ddraw.bnet_active)