diff --git a/src/d_main.c b/src/d_main.c
index cef0c52c725aee99588e717e0537e3c497efa9b0..bbd209dc58d0850f112dcdf5abb0fa3cc5604832 100644
--- a/src/d_main.c
+++ b/src/d_main.c
@@ -302,7 +302,7 @@ static void D_Display(void)
 		if (rendermode != render_none)
 		{
 			// Fade to black first
-			if (gamestate != GS_LEVEL // fades to black on its own timing, always
+			if (!(gamestate == GS_LEVEL || (gamestate == GS_TITLESCREEN && titlemapinaction)) // fades to black on its own timing, always
 			 && wipedefs[wipedefindex] != UINT8_MAX)
 			{
 				F_WipeStartScreen();
diff --git a/src/f_finale.c b/src/f_finale.c
index d164529bdd7cc0c75d1820312ed1cdfae6cd42fd..a107c785a3948dffc9c700bebe3012586b8c2f15 100644
--- a/src/f_finale.c
+++ b/src/f_finale.c
@@ -1427,6 +1427,7 @@ void F_StartTitleScreen(void)
 
 	if (titlemap)
 	{
+		gamestate_t prevwipegamestate = wipegamestate;
 		titlemapinaction = true;
 		gamemap = titlemap;
 
@@ -1437,6 +1438,8 @@ void F_StartTitleScreen(void)
 		players[displayplayer].playerstate = PST_DEAD; // Don't spawn the player in dummy (I'm still a filthy cheater)
 		camera.subsector = NULL; // toast is filthy too
 		//CON_ClearHUD();
+
+		wipegamestate = prevwipegamestate;
 	}
 	else
 	{