diff --git a/src/d_main.c b/src/d_main.c
index 9cfd694e72b3746dbc512f940cefd5c8bdf2e2ca..6aeaf61e528e0bb22303c2dac1acb07505ef1963 100644
--- a/src/d_main.c
+++ b/src/d_main.c
@@ -778,7 +778,7 @@ void D_SRB2Loop(void)
 				debugload--;
 #endif
 
-		interp = R_UsingFrameInterpolation();
+		interp = R_UsingFrameInterpolation() && !dedicated;
 		doDisplay = screenUpdate = false;
 		ticked = false;
 
@@ -891,10 +891,15 @@ void D_SRB2Loop(void)
 
 		// Fully completed frame made.
 		frameEnd = I_GetFrameTime();
-		if (!singletics)
+		if (!singletics && !dedicated)
 		{
 			I_FrameCapSleep(frameEnd);
 		}
+		else if (dedicated)
+		{
+			// Preserve the pre-interp sleeping behavior for dedicated mode
+			I_Sleep();
+		}
 
 		// I_FinishUpdate is now here instead of D_Display,
 		// because it synchronizes it more closely with the frame counter.