diff --git a/src/d_netcmd.c b/src/d_netcmd.c
index 4de166e415708528d619fd27f2a77cfadca58e38..7a8cf539f6ee330e87e1aa5ed046ee1292dca28c 100644
--- a/src/d_netcmd.c
+++ b/src/d_netcmd.c
@@ -1939,6 +1939,17 @@ static void Command_Map_f(void)
 				d = atoi(gametypename);
 				if (d >= 0 && d < NUMGAMETYPES)
 					newgametype = d;
+				else
+				{
+					CONS_Alert(CONS_ERROR,
+							"Gametype number %d is out of range. Use a number between"
+							" 0 and %d inclusive. ...Or just use the name. :v\n",
+							d,
+							NUMGAMETYPES-1);
+					Z_Free(realmapname);
+					Z_Free(mapname);
+					return;
+				}
 			}
 			else
 			{
@@ -2054,7 +2065,9 @@ static void Got_Mapcmd(UINT8 **cp, INT32 playernum)
 	lastgametype = gametype;
 	gametype = READUINT8(*cp);
 
-	if (gametype != lastgametype)
+	if (gametype < 0 || gametype >= NUMGAMETYPES)
+		gametype = lastgametype;
+	else if (gametype != lastgametype)
 		D_GameTypeChanged(lastgametype); // emulate consvar_t behavior for gametype
 
 	skipprecutscene = ((flags & (1<<2)) != 0);
diff --git a/src/p_setup.c b/src/p_setup.c
index bc082967034a409207c84482cee246b6448e44c3..e87a088d8c45d743d5b88ae07c6c0c276df5bad6 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -2805,12 +2805,12 @@ boolean P_SetupLevel(boolean skipprecip)
 		{
 			// Don't include these in the fade!
 			char tx[64];
-			V_DrawSmallString(1, 191, V_ALLOWLOWERCASE, M_GetText("Speeding off to..."));
+			V_DrawSmallString(1, 191, V_ALLOWLOWERCASE|V_TRANSLUCENT, M_GetText("Speeding off to..."));
 			snprintf(tx, 63, "%s%s%s",
 				mapheaderinfo[gamemap-1]->lvlttl,
-				(mapheaderinfo[gamemap-1]->levelflags & LF_NOZONE) ? "" : " ZONE",
-				(mapheaderinfo[gamemap-1]->actnum > 0) ? va(", Act %d",mapheaderinfo[gamemap-1]->actnum) : "");
-			V_DrawSmallString(1, 195, V_ALLOWLOWERCASE, tx);
+				(mapheaderinfo[gamemap-1]->levelflags & LF_NOZONE) ? "" : " Zone",
+				(mapheaderinfo[gamemap-1]->actnum > 0) ? va("%d",mapheaderinfo[gamemap-1]->actnum) : "");
+			V_DrawSmallString(1, 195, V_ALLOWLOWERCASE|V_TRANSLUCENT, tx);
 			I_UpdateNoVsync();
 		}
 
diff --git a/src/p_user.c b/src/p_user.c
index 79b6d7e75367b2b82422edf69bda2705558014ab..2aeb766535e2f7ea93015fef622c5a6edffa602c 100644
--- a/src/p_user.c
+++ b/src/p_user.c
@@ -4030,7 +4030,8 @@ static void P_DoFiring(player_t *player, ticcmd_t *cmd)
 	{
 		player->pflags |= PF_ATTACKDOWN;
 		mo = P_SpawnPlayerMissile(player->mo, MT_FIREBALL, 0);
-		P_InstaThrust(mo, player->mo->angle, ((mo->info->speed>>FRACBITS)*player->mo->scale) + player->speed);
+		if (mo)
+			P_InstaThrust(mo, player->mo->angle, ((mo->info->speed>>FRACBITS)*player->mo->scale) + player->speed);
 		S_StartSound(player->mo, sfx_mario7);
 		P_SetWeaponDelay(player, TICRATE); // Short delay between fireballs so you can't spam them everywhere
 		return;
@@ -4051,8 +4052,8 @@ static void P_DoFiring(player_t *player, ticcmd_t *cmd)
 
 		mo = P_SpawnPlayerMissile(player->mo, MT_THROWNBOUNCE, MF2_BOUNCERING);
 
-	if (mo)
-		mo->fuse = 3*TICRATE; // Bounce Ring time
+		if (mo)
+			mo->fuse = 3*TICRATE; // Bounce Ring time
 	}
 	// Rail ring
 	else if (player->currentweapon == WEP_RAIL && player->powers[pw_railring])
diff --git a/src/st_stuff.c b/src/st_stuff.c
index 4e8afa16a527045b592dfc5f385385c5cc35cb4a..42a89aab6b969e991ffaed75f271591c2b34c577 100644
--- a/src/st_stuff.c
+++ b/src/st_stuff.c
@@ -1335,7 +1335,7 @@ void ST_drawTitleCard(void)
 	V_DrawLevelTitle(lvlttlxpos - ttlscroll, 80, V_PERPLAYER, lvlttl);
 	if (!(mapheaderinfo[gamemap-1]->levelflags & LF_NOZONE))
 		V_DrawLevelTitle(zonexpos + ttlscroll, 104, V_PERPLAYER, M_GetText("Zone"));
-	V_DrawCenteredString(subttlxpos - ttlnumxpos, 128, V_PERPLAYER|V_ALLOWLOWERCASE, subttl);
+	V_DrawCenteredString(subttlxpos - ttlscroll, 135, V_PERPLAYER|V_ALLOWLOWERCASE, subttl);
 
 	lt_lasttic = lt_ticker;
 
diff --git a/src/strcasestr.c b/src/strcasestr.c
index 2077dc3ffa322e96c38c66536199cafebd8c0447..86c7ec5b0bc02e2519fe3b871d108a89c9514a7a 100644
--- a/src/strcasestr.c
+++ b/src/strcasestr.c
@@ -75,7 +75,7 @@ strcasestr (const char *s, const char *q)
 	if (!( (intptr_t)up|(intptr_t)lp ))
 		return 0;
 
-	if (!lp || up < lp)
+	if (!lp || ( up && up < lp ))
 	{
 		ppa = &up;
 		ppb = &lp;