diff --git a/src/command.c b/src/command.c
index ba0095e079b4a6be92a0e9983217d9e6432325fa..edc04bed1f6111f1c282bbfd058e71c64c8fa192 100644
--- a/src/command.c
+++ b/src/command.c
@@ -148,6 +148,20 @@ void COM_BufInsertText(const char *ptext)
 	}
 }
 
+/** Progress the wait timer and flush waiting console commands when ready.
+  */
+void
+COM_BufTicker(void)
+{
+	if (com_wait)
+	{
+		com_wait--;
+		return;
+	}
+
+	COM_BufExecute();
+}
+
 /** Flushes (executes) console commands in the buffer.
   */
 void COM_BufExecute(void)
@@ -157,12 +171,6 @@ void COM_BufExecute(void)
 	char line[1024] = "";
 	INT32 quotes;
 
-	if (com_wait)
-	{
-		com_wait--;
-		return;
-	}
-
 	while (com_text.cursize)
 	{
 		// find a '\n' or; line break
diff --git a/src/command.h b/src/command.h
index e6767825c7561c56a0b62995c4ecb66c8399d925..4682ba4a4cf4f066599f8426c04b27dc05fa966c 100644
--- a/src/command.h
+++ b/src/command.h
@@ -45,6 +45,9 @@ void COM_ImmedExecute(const char *ptext);
 // Execute commands in buffer, flush them
 void COM_BufExecute(void);
 
+// As above; and progress the wait timer.
+void COM_BufTicker(void);
+
 // setup command buffer, at game tartup
 void COM_Init(void);
 
diff --git a/src/d_clisrv.c b/src/d_clisrv.c
index a0f9f40ab6b10d583a116e1fa2a1d7e85b898300..1b0cb523f85f4cf16ee4cfab4d84326aba0678e7 100644
--- a/src/d_clisrv.c
+++ b/src/d_clisrv.c
@@ -4563,7 +4563,7 @@ void TryRunTics(tic_t realtics)
 
 	if (realtics >= 1)
 	{
-		COM_BufExecute();
+		COM_BufTicker();
 		if (mapchangepending)
 			D_MapChange(-1, 0, ultimatemode, false, 2, false, fromlevelselect); // finish the map change
 	}