diff --git a/src/console.c b/src/console.c
index 8af560b365f5bd5249b75ac3238adac86479cdab..f8fa1314a7085179a8b99be769dad3fb9b186347 100644
--- a/src/console.c
+++ b/src/console.c
@@ -613,15 +613,6 @@ void CON_Ticker(void)
 	con_tick++;
 	con_tick &= 7;
 
-	// if the menu is open then close the console.
-	if (menuactive && con_destlines)
-	{
-		consoletoggle = false;
-		con_destlines = 0;
-		CON_ClearHUD();
-		I_UpdateMouseGrab();
-	}
-
 	// console key was pushed
 	if (consoletoggle)
 	{
@@ -793,7 +784,7 @@ boolean CON_Responder(event_t *ev)
 		// check other keys only if console prompt is active
 		if (!consoleready && key < NUMINPUTS) // metzgermeister: boundary check!!
 		{
-			if (bindtable[key])
+			if (! menuactive && bindtable[key])
 			{
 				COM_BufAddText(bindtable[key]);
 				COM_BufAddText("\n");
diff --git a/src/d_main.c b/src/d_main.c
index 904ab3bf13046f37984752acf4ac34cccc648d8b..f8727433f06b8b16109efac78b768980b03b8b4b 100644
--- a/src/d_main.c
+++ b/src/d_main.c
@@ -508,13 +508,11 @@ static void D_Display(void)
 	// vid size change is now finished if it was on...
 	vid.recalc = 0;
 
-	// FIXME: draw either console or menu, not the two
-	if (gamestate != GS_TIMEATTACK)
-		CON_Drawer();
-
 	M_Drawer(); // menu is drawn even on top of everything
 	// focus lost moved to M_Drawer
 
+	CON_Drawer();
+
 	//
 	// wipe update
 	//
diff --git a/src/m_menu.c b/src/m_menu.c
index 945ce3de0bfb4e10725c7b00d4d97b42a8fa7c11..403d3a0361a11efd0975e44aae3c1af5eec9f31a 100644
--- a/src/m_menu.c
+++ b/src/m_menu.c
@@ -3153,6 +3153,9 @@ boolean M_Responder(event_t *ev)
 	if (gamestate == GS_TITLESCREEN && finalecount < TICRATE)
 		return false;
 
+	if (CON_Ready())
+		return false;
+
 	if (noFurtherInput)
 	{
 		// Ignore input after enter/escape/other buttons
@@ -3512,6 +3515,7 @@ boolean M_Responder(event_t *ev)
 			return false;
 
 		default:
+			CON_Responder(ev);
 			break;
 	}