diff --git a/inc/config.h b/inc/config.h
index f0b8275..3a33eaf 100644
--- a/inc/config.h
+++ b/inc/config.h
@@ -104,6 +104,7 @@ typedef struct CNCDDRAWCONFIG
     BOOL mgs_hack;
     BOOL tlc_hack;
     BOOL homm_hack;
+    BOOL carma95_hack;
 
 } CNCDDRAWCONFIG;
 
diff --git a/src/config.c b/src/config.c
index d9e2fc3..110ac17 100644
--- a/src/config.c
+++ b/src/config.c
@@ -114,6 +114,7 @@ void cfg_load()
     GET_BOOL(g_config.mgs_hack, "mgs_hack", FALSE);
     GET_BOOL(g_config.tlc_hack, "tlc_hack", FALSE);
     GET_BOOL(g_config.homm_hack, "homm_hack", FALSE);
+    GET_BOOL(g_config.homm_hack, "carma95_hack", FALSE);
 
     GameHandlesClose = GameHandlesClose || g_config.infantryhack;
 
@@ -510,11 +511,13 @@ static void cfg_create_ini()
             "[CARMA95]\n"
             "noactivateapp=true\n"
             "flipclear=true\n"
+            "carma95_hack=true\n"
             "\n"
             "; Carmageddon\n"
             "[CARM95]\n"
             "noactivateapp=true\n"
             "flipclear=true\n"
+            "carma95_hack=true\n"
             "\n"
             "; Carmageddon 2\n"
             "[Carma2_SW]\n"
diff --git a/src/ddsurface.c b/src/ddsurface.c
index b6913ed..c392ef9 100644
--- a/src/ddsurface.c
+++ b/src/ddsurface.c
@@ -755,8 +755,16 @@ HRESULT dds_EnumAttachedSurfaces(
 
     if (This->backbuffer)
     {
-        dds_GetSurfaceDesc(This->backbuffer, (LPDDSURFACEDESC)&desc);
-        lpEnumSurfacesCallback((LPDIRECTDRAWSURFACE)This->backbuffer, (LPDDSURFACEDESC)&desc, lpContext);
+        if (g_config.carma95_hack && g_ddraw.height == 200)
+        {
+            dds_GetSurfaceDesc(This, (LPDDSURFACEDESC)&desc);
+            lpEnumSurfacesCallback((LPDIRECTDRAWSURFACE)This, (LPDDSURFACEDESC)&desc, lpContext);
+        }
+        else
+        {
+            dds_GetSurfaceDesc(This->backbuffer, (LPDDSURFACEDESC)&desc);
+            lpEnumSurfacesCallback((LPDIRECTDRAWSURFACE)This->backbuffer, (LPDDSURFACEDESC)&desc, lpContext);
+        }
     }
 
     return DD_OK;
@@ -766,7 +774,7 @@ HRESULT dds_Flip(IDirectDrawSurfaceImpl* This, IDirectDrawSurfaceImpl* lpDDSurfa
 {
     dbg_dump_dds_flip_flags(dwFlags);
 
-    if (This->backbuffer && !This->skip_flip)
+    if (This->backbuffer && !This->skip_flip && !(g_config.carma95_hack && g_ddraw.height == 200))
     {
         EnterCriticalSection(&g_ddraw.cs);
         IDirectDrawSurfaceImpl* backbuffer = lpDDSurfaceTargetOverride ? lpDDSurfaceTargetOverride : This->backbuffer;