diff --git a/source/build/src/engine.cpp b/source/build/src/engine.cpp
index 66f333b6b..00b50d430 100644
--- a/source/build/src/engine.cpp
+++ b/source/build/src/engine.cpp
@@ -2611,6 +2611,7 @@ int32_t(*loadboard_replace)(const char *filename, char flags, vec3_t *dapos, int
 //       <= -4: map-text error
 int32_t engineLoadBoard(const char *filename, char flags, vec3_t *dapos, int16_t *daang, int16_t *dacursectnum)
 {
+    inputState.ClearAllInput();
     if (loadboard_replace)
         return loadboard_replace(filename, flags, dapos, daang, dacursectnum);
     int32_t i;
diff --git a/source/core/menu/menu.cpp b/source/core/menu/menu.cpp
index 56aeeb872..340287cb3 100644
--- a/source/core/menu/menu.cpp
+++ b/source/core/menu/menu.cpp
@@ -964,6 +964,7 @@ void M_ClearMenus (bool final)
 	CurrentMenu = nullptr;
 	menuactive = MENU_Off;
 	M_UnpauseSound();
+	inputState.ClearAllInput();
 	if (!final)
 	{
 		gi->MenuClosed();
diff --git a/source/games/duke/src/d_menu.cpp b/source/games/duke/src/d_menu.cpp
index 515a4f565..b7a8064bd 100644
--- a/source/games/duke/src/d_menu.cpp
+++ b/source/games/duke/src/d_menu.cpp
@@ -261,9 +261,6 @@ void GameInterface::MenuClosed()
 	auto& gm = ps[myconnectindex].gm;
 	if (gm & MODE_GAME)
 	{
-		if (gm & MODE_MENU)
-			inputState.ClearAllInput();
-
 		// The following lines are here so that you cannot close the menu when no game is running.
 		gm &= ~MODE_MENU;