diff --git a/inc/main.h b/inc/main.h
index db8b773..ebdd1f8 100644
--- a/inc/main.h
+++ b/inc/main.h
@@ -132,6 +132,7 @@ typedef struct IDirectDrawImpl
     BOOL resizable;
     BOOL bnetActive;
     BOOL bnetWasFullscreen;
+    BOOL bnetWasUpscaled;
     RECT bnetWinRect;
     POINT bnetPos;
     SpeedLimiter ticksLimiter;
diff --git a/src/main.c b/src/main.c
index 470d503..eb81ed6 100644
--- a/src/main.c
+++ b/src/main.c
@@ -700,6 +700,8 @@ HRESULT __stdcall ddraw_SetDisplayMode(IDirectDrawImpl *This, DWORD width, DWORD
     ddraw->cursor.x = width / 2;
     ddraw->cursor.y = height / 2;
 
+    BOOL border = This->border;
+
     if(This->fullscreen)
     {
         This->render.width = This->mode.dmPelsWidth;
@@ -707,7 +709,7 @@ HRESULT __stdcall ddraw_SetDisplayMode(IDirectDrawImpl *This, DWORD width, DWORD
 
         if (This->windowed) //windowed-fullscreen aka borderless
         {
-            This->border = FALSE;
+            border = FALSE;
             WindowRect.left = -32000;
             WindowRect.top = -32000;
 
@@ -885,7 +887,7 @@ HRESULT __stdcall ddraw_SetDisplayMode(IDirectDrawImpl *This, DWORD width, DWORD
         MSG msg; // workaround for "Not Responding" window problem in cnc games
         PeekMessage(&msg, ddraw->hWnd, 0, 0, PM_NOREMOVE);
 
-        if (!This->border)
+        if (!border)
         {
             real_SetWindowLongA(This->hWnd, GWL_STYLE, GetWindowLong(This->hWnd, GWL_STYLE) & ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZE | WS_MAXIMIZE | WS_SYSMENU));
         }
@@ -1129,12 +1131,20 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
                     if (!ddraw->windowed)
                         ddraw->bnetWasFullscreen = FALSE;
 
-                    if (!ddraw->bnetActive && ddraw->bnetWasFullscreen)
+                    if (!ddraw->bnetActive)
                     {
-                        int ws = WindowState;
-                        ToggleFullscreen();
-                        WindowState = ws;
-                        ddraw->bnetWasFullscreen = FALSE;
+                        if (ddraw->bnetWasFullscreen)
+                        {
+                            int ws = WindowState;
+                            ToggleFullscreen();
+                            WindowState = ws;
+                            ddraw->bnetWasFullscreen = FALSE;
+                        }
+                        else if (ddraw->bnetWasUpscaled)
+                        {
+                            SetWindowRect(0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
+                            ddraw->bnetWasUpscaled = FALSE;
+                        }
                     }
 
                     return 0;
diff --git a/src/mouse.c b/src/mouse.c
index 9537f56..0b729e8 100644
--- a/src/mouse.c
+++ b/src/mouse.c
@@ -437,11 +437,11 @@ BOOL WINAPI fake_DestroyWindow(HWND hWnd)
 
             if (ddraw->windowed)
             {
-                if (!ddraw->fullscreen)
-                {
-                    ddraw->bnetPos.x = ddraw->bnetPos.y = 0;
-                    real_ClientToScreen(ddraw->hWnd, &ddraw->bnetPos);
+                ddraw->bnetPos.x = ddraw->bnetPos.y = 0;
+                real_ClientToScreen(ddraw->hWnd, &ddraw->bnetPos);
 
+                if (!ddraw->bnetWasUpscaled)
+                {
                     int width = ddraw->bnetWinRect.right - ddraw->bnetWinRect.left;
                     int height = ddraw->bnetWinRect.bottom - ddraw->bnetWinRect.top;
                     UINT flags = width != ddraw->width || height != ddraw->height ? 0 : SWP_NOMOVE;
@@ -449,10 +449,9 @@ BOOL WINAPI fake_DestroyWindow(HWND hWnd)
                     SetWindowRect(ddraw->bnetWinRect.left, ddraw->bnetWinRect.top, width, height, flags);
                 }
 
-                if (ddraw->bnetWasFullscreen)
-                {
-                    SetTimer(ddraw->hWnd, IDT_TIMER_LEAVE_BNET, 1000, (TIMERPROC)NULL);
-                }
+                ddraw->fullscreen = ddraw->bnetWasUpscaled;
+
+                SetTimer(ddraw->hWnd, IDT_TIMER_LEAVE_BNET, 1000, (TIMERPROC)NULL);
 
                 ddraw->resizable = TRUE;
             }
@@ -470,6 +469,9 @@ HWND WINAPI fake_CreateWindowExA(
     {
         if (!ddraw->bnetActive)
         {
+            ddraw->bnetWasUpscaled = ddraw->fullscreen;
+            ddraw->fullscreen = FALSE;
+
             if (!ddraw->windowed && !ddraw->bnetWasFullscreen)
             {
                 int ws = WindowState;
@@ -478,20 +480,17 @@ HWND WINAPI fake_CreateWindowExA(
                 ddraw->bnetWasFullscreen = TRUE;
             }
 
-            if (!ddraw->fullscreen)
-            {
-                real_GetClientRect(ddraw->hWnd, &ddraw->bnetWinRect);
-                MapWindowPoints(ddraw->hWnd, HWND_DESKTOP, (LPPOINT)&ddraw->bnetWinRect, 2);
+            real_GetClientRect(ddraw->hWnd, &ddraw->bnetWinRect);
+            MapWindowPoints(ddraw->hWnd, HWND_DESKTOP, (LPPOINT)&ddraw->bnetWinRect, 2);
 
-                int width = ddraw->bnetWinRect.right - ddraw->bnetWinRect.left;
-                int height = ddraw->bnetWinRect.bottom - ddraw->bnetWinRect.top;
-                int x = ddraw->bnetPos.x || ddraw->bnetPos.y ? ddraw->bnetPos.x : -32000;
-                int y = ddraw->bnetPos.x || ddraw->bnetPos.y ? ddraw->bnetPos.y : -32000;
-                UINT flags = width != ddraw->width || height != ddraw->height ? 0 : SWP_NOMOVE;
+            int width = ddraw->bnetWinRect.right - ddraw->bnetWinRect.left;
+            int height = ddraw->bnetWinRect.bottom - ddraw->bnetWinRect.top;
+            int x = ddraw->bnetPos.x || ddraw->bnetPos.y ? ddraw->bnetPos.x : -32000;
+            int y = ddraw->bnetPos.x || ddraw->bnetPos.y ? ddraw->bnetPos.y : -32000;
+            UINT flags = width != ddraw->width || height != ddraw->height ? 0 : SWP_NOMOVE;
 
-                SetWindowRect(x, y, ddraw->width, ddraw->height, flags);
-                ddraw->resizable = FALSE;
-            }
+            SetWindowRect(x, y, ddraw->width, ddraw->height, flags);
+            ddraw->resizable = FALSE;
 
             ddraw->bnetActive = TRUE;
             mouse_unlock();