diff --git a/inc/main.h b/inc/main.h
index e936fd6..d5ca136 100644
--- a/inc/main.h
+++ b/inc/main.h
@@ -116,6 +116,7 @@ typedef struct IDirectDrawImpl
     DWORD ticklength;
     BOOL altenter;
     BOOL hidecursor;
+    BOOL limitTicksOnBltOrFlip;
     
 } IDirectDrawImpl;
 
diff --git a/src/surface.c b/src/surface.c
index e736012..f96bc85 100644
--- a/src/surface.c
+++ b/src/surface.c
@@ -445,7 +445,10 @@ HRESULT __stdcall ddraw_surface_Blt(IDirectDrawSurfaceImpl *This, LPRECT lpDestR
         }
 
         if (ddraw->ticklength > 0)
+        {
+            ddraw->limitTicksOnBltOrFlip = TRUE;
             LimitGameTicks();
+        }
     }
 
     return DD_OK;
@@ -688,7 +691,10 @@ HRESULT __stdcall ddraw_surface_Flip(IDirectDrawSurfaceImpl *This, LPDIRECTDRAWS
         */
 
         if (ddraw->ticklength > 0)
+        {
+            ddraw->limitTicksOnBltOrFlip = TRUE;
             LimitGameTicks();
+        }
     }
 
     return DD_OK;
@@ -955,6 +961,8 @@ HRESULT __stdcall ddraw_surface_Unlock(IDirectDrawSurfaceImpl *This, LPVOID lpRe
         InterlockedExchange(&ddraw->render.surfaceUpdated, TRUE);
         ReleaseSemaphore(ddraw->render.sem, 1, NULL);
 
+        if (ddraw->ticklength > 0 && !ddraw->limitTicksOnBltOrFlip)
+            LimitGameTicks();
     }
 
     return DD_OK;