diff --git a/src/f_finale.c b/src/f_finale.c
index 55efd8a14cc3d658ddb640e07e23e2ab59c699ed..91c0298fe500744a47f5e3d7e30990737197d49e 100644
--- a/src/f_finale.c
+++ b/src/f_finale.c
@@ -492,6 +492,8 @@ void F_StartIntro(void)
 	"\x80\n\xA9\xD2\xD2"
 	"\"All right, then\xAF... \xD2\xD2\xA7let's go!\"\n#");
 
+	boolean from_title = gamestate == GS_TITLESCREEN;
+
 	G_SetGamestate(GS_INTRO);
 	gameaction = ga_nothing;
 	paused = false;
@@ -500,8 +502,19 @@ void F_StartIntro(void)
 	TitleCard_Stop();
 
 	intro_scenenum = 0;
+	intro_curtime = 0;
 	finalecount = animtimer = skullAnimCounter = stoptimer = 0;
 	timetonext = introscenetime[intro_scenenum];
+
+	if (from_title)
+	{
+		wipe_t wipe = {0};
+		wipe.style = F_WipeGetStyle(wipe.flags);
+		wipe.type = wipedefs[wipe_intro_toblack];
+		wipe.drawmenuontop = false;
+		wipe.holdframes = 35;
+		F_StartWipeParametrized(&wipe);
+	}
 }
 
 //