diff --git a/src/dehacked.c b/src/dehacked.c
index fff9dbee87976b290b839fee99cc7569414cc72d..250bfb4b75984bd431b67259f0900c5405f5d905 100644
--- a/src/dehacked.c
+++ b/src/dehacked.c
@@ -1573,6 +1573,13 @@ static void readlevelheader(MYFILE *f, INT32 num)
 				else
 					mapheaderinfo[num-1]->levelflags &= ~LF_MIXNIGHTSCOUNTDOWN;
 			}
+			else if (fastcmp(word, "NOTITLECARD"))
+			{
+				if (i || word2[0] == 'T' || word2[0] == 'Y')
+					mapheaderinfo[num-1]->levelflags |= LF_NOTITLECARD;
+				else
+					mapheaderinfo[num-1]->levelflags &= ~LF_NOTITLECARD;
+			}
 
 			// Individual triggers for menu flags
 			else if (fastcmp(word, "HIDDEN"))
@@ -9012,6 +9019,7 @@ struct {
 	{"LF_NOZONE",LF_NOZONE},
 	{"LF_SAVEGAME",LF_SAVEGAME},
 	{"LF_MIXNIGHTSCOUNTDOWN",LF_MIXNIGHTSCOUNTDOWN},
+	{"LF_NOTITLECARD",LF_NOTITLECARD},
 	// And map flags
 	{"LF2_HIDEINMENU",LF2_HIDEINMENU},
 	{"LF2_HIDEINSTATS",LF2_HIDEINSTATS},
diff --git a/src/doomstat.h b/src/doomstat.h
index 7d06f03e24445c868d385f6dc83002fbcb542ab2..d9c9b92acec30560d8364fa75350566d2d05dd78 100644
--- a/src/doomstat.h
+++ b/src/doomstat.h
@@ -349,6 +349,7 @@ typedef struct
 #define LF_NOZONE        16 ///< Don't include "ZONE" on level title
 #define LF_SAVEGAME      32 ///< Save the game upon loading this level
 #define LF_MIXNIGHTSCOUNTDOWN 64 ///< Play sfx_timeup instead of music change for NiGHTS countdown
+#define LF_NOTITLECARD  128 ///< Don't start the title card
 
 #define LF2_HIDEINMENU     1 ///< Hide in the multiplayer menu
 #define LF2_HIDEINSTATS    2 ///< Hide in the statistics screen
diff --git a/src/f_wipe.c b/src/f_wipe.c
index 9adbcbc02f927d5fae5d61b9f22b54880410057f..d3786c69f02b2f863be48e66166285838878a79d 100644
--- a/src/f_wipe.c
+++ b/src/f_wipe.c
@@ -375,6 +375,7 @@ void F_RunWipe(UINT8 wipetype, boolean drawMenu)
 
 		// draw level title
 		if ((WipeStageTitle && st_overlay)
+		&& !(mapheaderinfo[gamemap-1]->levelflags & LF_NOTITLECARD)
 		&& *mapheaderinfo[gamemap-1]->lvlttl != '\0')
 		{
 			ST_runTitleCard();
diff --git a/src/g_game.c b/src/g_game.c
index a4dc16b954d6ba6b1103854cb066b6ffe2fd99fe..c16c284891a3974a702859947a1dbfbe7346e1b8 100644
--- a/src/g_game.c
+++ b/src/g_game.c
@@ -1712,6 +1712,14 @@ void G_DoLoadLevel(boolean resetplayer)
 //
 void G_StartTitleCard(void)
 {
+	// The title card has been disabled for this map.
+	// Oh well.
+	if (mapheaderinfo[gamemap-1]->levelflags & LF_NOTITLECARD)
+	{
+		WipeStageTitle = false;
+		return;
+	}
+
 	// clear the hud
 	CON_ClearHUD();
 
diff --git a/src/p_setup.c b/src/p_setup.c
index fc88a5e5e4108355d7d79ff9a8f4369884258701..34a7c1437ae5b3dee1d99b4f902b39a8fca12f3b 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -3226,15 +3226,21 @@ boolean P_SetupLevel(boolean skipprecip)
 #endif
 	}
 
-	// Stage title!
+	// No render mode, stop here.
+	if (rendermode == render_none)
+		return true;
+
+	// Title card!
 	G_StartTitleCard();
 
 	// Can the title card actually run, though?
-	if (rendermode != render_none
-		&& WipeStageTitle
-		&& ranspecialwipe != 2
-		&& *mapheaderinfo[gamemap-1]->lvlttl != '\0'
-	)
+	if (!WipeStageTitle)
+		return true;
+	if (ranspecialwipe == 2)
+		return true;
+
+	// If so...
+	if ((!(mapheaderinfo[gamemap-1]->levelflags & LF_NOTITLECARD)) && (*mapheaderinfo[gamemap-1]->lvlttl != '\0'))
 		G_PreLevelTitleCard(lt_ticker, true);
 
 	return true;
diff --git a/src/st_stuff.c b/src/st_stuff.c
index 00371a6e839bc963e2eb6a97ad9c3fc02ba4a1f6..504fa3b8ee109ab0e6cea9ecca61856a5cee6a73 100644
--- a/src/st_stuff.c
+++ b/src/st_stuff.c
@@ -2539,7 +2539,7 @@ static void ST_overlayDrawer(void)
 	// Check for a valid level title
 	// If the HUD is enabled
 	// And, if Lua is running, if the HUD library has the stage title enabled
-	if (*mapheaderinfo[gamemap-1]->lvlttl != '\0' && !(hu_showscores && (netgame || multiplayer)))
+	if (!(mapheaderinfo[gamemap-1]->levelflags & LF_NOTITLECARD) && *mapheaderinfo[gamemap-1]->lvlttl != '\0' && !(hu_showscores && (netgame || multiplayer)))
 	{
 		stagetitle = true;
 		ST_preDrawTitleCard();