diff --git a/src/screen.c b/src/screen.c
index f043810e35eb1bb154c7bb8dc299afc6b7b3fe1b..2e3d2e0f419545492d1660e4479b3bf335edfa92 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -444,21 +444,32 @@ void SCR_ClosedCaptions(void)
 
 	for (i = 0; i < NUMCAPTIONS; i++)
 	{
-		if (closedcaptions[i].s)
-		{
-			INT32 flags = V_NOSCALESTART|V_ALLOWLOWERCASE;
-			INT32 y = vid.height-((i + 2)*10*vid.dupy);
-			char dot = ' ';
-			if (closedcaptions[i].b)
-				y -= (closedcaptions[i].b--)*vid.dupy;
-			if (closedcaptions[i].t < CAPTIONFADETICS)
-				flags |= (((CAPTIONFADETICS-closedcaptions[i].t)/2)*V_10TRANS);
-			if (closedcaptions[i].c && closedcaptions[i].c->origin)
-				dot = '\x1E';
-			else if (closedcaptions[i].s-S_sfx == sfx_None)
-				dot = '\x19';
-			V_DrawRightAlignedString(vid.width-(20*vid.dupx), y,
-			flags, va("%c [%s]", dot, (closedcaptions[i].s->caption[0] ? closedcaptions[i].s->caption : closedcaptions[i].s->name)));
-		}
+		INT32 flags, y;
+		char dot;
+		boolean music;
+
+		if (!closedcaptions[i].s)
+			continue;
+
+		if ((music = (closedcaptions[i].s-S_sfx == sfx_None)) && (closedcaptions[i].t < flashingtics) && (closedcaptions[i].t & 1))
+			continue;
+
+		flags = V_NOSCALESTART|V_ALLOWLOWERCASE;
+		y = vid.height-((i + 2)*10*vid.dupy);
+		dot = ' ';
+
+		if (closedcaptions[i].b)
+			y -= (closedcaptions[i].b--)*vid.dupy;
+
+		if (closedcaptions[i].t < CAPTIONFADETICS)
+			flags |= (((CAPTIONFADETICS-closedcaptions[i].t)/2)*V_10TRANS);
+
+		if (music)
+			dot = '\x19';
+		else if (closedcaptions[i].c && closedcaptions[i].c->origin)
+			dot = '\x1E';
+
+		V_DrawRightAlignedString(vid.width-(20*vid.dupx), y,
+		flags, va("%c [%s]", dot, (closedcaptions[i].s->caption[0] ? closedcaptions[i].s->caption : closedcaptions[i].s->name)));
 	}
 }