diff --git a/src/d_main.c b/src/d_main.c
index fcff182a9816856e3622efa67fa2c40ce4a440e7..731710a9c6e377f2d58c838bdae289babe72d158 100644
--- a/src/d_main.c
+++ b/src/d_main.c
@@ -723,6 +723,7 @@ void D_SRB2Loop(void)
 	boolean ticked;
 	boolean interp;
 	boolean doDisplay = false;
+	boolean frameCap = false;
 
 	if (dedicated)
 		server = true;
@@ -803,11 +804,25 @@ void D_SRB2Loop(void)
 		doDisplay = false;
 		ticked = false;
 
-		if (!realtics && !singletics && !interp)
+		frameCap = false;
+		if (interp)
 		{
-			// Non-interp sleep
-			I_Sleep();
-			continue;
+			frameCap = D_CheckFrameCap();
+		}
+
+		if (!realtics && !singletics)
+		{
+			if (interp)
+			{
+				if (frameCap)
+					continue;
+			}
+			else
+			{
+				// Non-interp sleep
+				I_Sleep();
+				continue;
+			}
 		}
 
 #ifdef HW3SOUND
@@ -869,7 +884,7 @@ void D_SRB2Loop(void)
 			// TryRunTics needs ran if possible to prevent lagged map changes,
 			// (and if that runs, the code above needs to also run)
 			// so this is done here after TryRunTics.
-			if (D_CheckFrameCap())
+			if (frameCap)
 			{
 				continue;
 			}