diff --git a/src/render_gdi.c b/src/render_gdi.c
index e2e8ef0..fd78f80 100644
--- a/src/render_gdi.c
+++ b/src/render_gdi.c
@@ -74,7 +74,7 @@ DWORD WINAPI gdi_render_main(void)
 
             if (g_ddraw->fixchilds)
             {
-                g_ddraw->child_window_exists = FALSE;
+                g_ddraw->child_window_exists = g_ddraw->bnet_active && GetSystemMetrics(SM_CMONITORS) > 1;
                 EnumChildWindows(g_ddraw->hwnd, util_enum_child_proc, (LPARAM)g_ddraw->primary);
             }
 
@@ -97,20 +97,39 @@ DWORD WINAPI gdi_render_main(void)
 
             if (g_ddraw->bnet_active)
             {
-                StretchDIBits(
-                    g_ddraw->render.hdc,
-                    g_ddraw->render.viewport.x,
-                    g_ddraw->render.viewport.y,
-                    g_ddraw->render.viewport.width,
-                    g_ddraw->render.viewport.height,
-                    0,
-                    0,
-                    g_ddraw->width,
-                    g_ddraw->height,
-                    g_ddraw->primary->bnet_surface,
-                    g_ddraw->primary->bmi,
-                    DIB_RGB_COLORS,
-                    SRCCOPY);
+                if (GetSystemMetrics(SM_CMONITORS) == 1)
+                {
+                    StretchDIBits(
+                        g_ddraw->render.hdc,
+                        g_ddraw->render.viewport.x,
+                        g_ddraw->render.viewport.y,
+                        g_ddraw->render.viewport.width,
+                        g_ddraw->render.viewport.height,
+                        0,
+                        0,
+                        g_ddraw->width,
+                        g_ddraw->height,
+                        g_ddraw->primary->bnet_surface,
+                        g_ddraw->primary->bmi,
+                        DIB_RGB_COLORS,
+                        SRCCOPY);
+                }
+                else
+                {
+                    SetDIBitsToDevice(
+                        g_ddraw->render.hdc,
+                        0,
+                        0,
+                        g_ddraw->width,
+                        g_ddraw->height,
+                        0,
+                        0,
+                        0,
+                        g_ddraw->height,
+                        g_ddraw->primary->bnet_surface,
+                        g_ddraw->primary->bmi,
+                        DIB_RGB_COLORS);
+                }
             }
             else if (upscale_hack)
             {
diff --git a/src/render_ogl.c b/src/render_ogl.c
index f267a97..60d87cd 100644
--- a/src/render_ogl.c
+++ b/src/render_ogl.c
@@ -676,7 +676,7 @@ static void ogl_render()
 
             if (g_ddraw->fixchilds)
             {
-                g_ddraw->child_window_exists = FALSE;
+                g_ddraw->child_window_exists = g_ddraw->bnet_active && GetSystemMetrics(SM_CMONITORS) > 1;
                 EnumChildWindows(g_ddraw->hwnd, util_enum_child_proc, (LPARAM)g_ddraw->primary);
 
                 if (g_ddraw->render.width != g_ddraw->width || g_ddraw->render.height != g_ddraw->height)
diff --git a/src/winapi_hooks.c b/src/winapi_hooks.c
index 438eb04..5c7a91e 100644
--- a/src/winapi_hooks.c
+++ b/src/winapi_hooks.c
@@ -650,8 +650,9 @@ HWND WINAPI fake_CreateWindowExA(
 
             if (!g_ddraw->windowed && !g_ddraw->bnet_was_fullscreen)
             {
-                if (g_ddraw->render.mode.dmPelsWidth != 640 ||
-                    g_ddraw->render.mode.dmPelsHeight != 480)
+                if ((g_ddraw->render.mode.dmPelsWidth != 640 ||
+                    g_ddraw->render.mode.dmPelsHeight != 480) &&
+                    GetSystemMetrics(SM_CMONITORS) == 1)
                 {
                     memcpy(&g_ddraw->bnet_mode, &g_ddraw->render.mode, sizeof(DEVMODE));
 
@@ -709,6 +710,11 @@ HWND WINAPI fake_CreateWindowExA(
             X += align_x;
             Y += align_y;
         }
+        else if (GetSystemMetrics(SM_CMONITORS) > 1)
+        {
+            X += min(g_ddraw->render.width / 2 - 640 / 2, added_width);
+            Y += min(g_ddraw->render.height / 2 - 480 / 2, added_height);
+        }
 
         X += pt.x;
         Y += pt.y;