diff --git a/src/d_netcmd.c b/src/d_netcmd.c
index a77ea0dd5072efaba6516db71bbbc8c8a7db661c..60f03f137aad69ce99fbf63bb06dec7cb04f79bf 100644
--- a/src/d_netcmd.c
+++ b/src/d_netcmd.c
@@ -3629,7 +3629,7 @@ static void PointLimit_OnChange(void)
 static void NumLaps_OnChange(void)
 {
 	// Just don't be verbose
-	if (gametype == GT_RACE)
+	if ((gametyperules & (GTR_RACE|GTR_LIVES)) == GTR_RACE)
 		CONS_Printf(M_GetText("Number of laps set to %d\n"), cv_numlaps.value);
 }
 
@@ -4608,7 +4608,7 @@ static void Command_ShowTime_f(void)
 
 static void BaseNumLaps_OnChange(void)
 {
-	if (gametype == GT_RACE)
+	if ((gametyperules & (GTR_RACE|GTR_LIVES)) == GTR_RACE)
 	{
 		if (cv_basenumlaps.value)
 			CONS_Printf(M_GetText("Number of laps will be changed to map defaults next round.\n"));
diff --git a/src/p_setup.c b/src/p_setup.c
index 7b4c6773b07a0bef06905839fbfc62317744881a..1bb67c9b8ee1d0496e0eee6ad0f9b9ca8263d5b8 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -3374,7 +3374,7 @@ static void P_InitGametype(void)
 
 	if (G_TagGametype())
 		P_InitTagGametype();
-	else if (gametype == GT_RACE && server)
+	else if (((gametyperules & (GTR_RACE|GTR_LIVES)) == GTR_RACE) && server)
 		CV_StealthSetValue(&cv_numlaps,
 		(cv_basenumlaps.value)
 			? cv_basenumlaps.value
diff --git a/src/p_spec.c b/src/p_spec.c
index d9bbab246ea4b8327666e0695f14776aa2ba86b8..15c88927ee343dbaba9fa2700c1159382b9c1198 100644
--- a/src/p_spec.c
+++ b/src/p_spec.c
@@ -4991,7 +4991,7 @@ DoneSection2:
 			break;
 
 		case 10: // Finish Line
-			if (gametype == GT_RACE && !player->exiting)
+			if (((gametyperules & (GTR_RACE|GTR_LIVES)) == GTR_RACE) && !player->exiting)
 			{
 				if (player->starpostnum == numstarposts) // Must have touched all the starposts
 				{
@@ -6483,7 +6483,7 @@ void P_SpawnSpecials(boolean fromnetsave)
 		switch(GETSECSPECIAL(sector->special, 4))
 		{
 			case 10: // Circuit finish line
-				if (gametype == GT_RACE)
+				if ((gametyperules & (GTR_RACE|GTR_LIVES)) == GTR_RACE)
 					circuitmap = true;
 				break;
 		}
diff --git a/src/st_stuff.c b/src/st_stuff.c
index cb5c0fbc11864662c40db14cebca5c05f5d23b2e..6bc5b452c288553a7b892768840d3a6981da2580 100644
--- a/src/st_stuff.c
+++ b/src/st_stuff.c
@@ -2688,7 +2688,7 @@ static void ST_overlayDrawer(void)
 		&& (netgame || multiplayer)
 		&& (cv_cooplives.value == 0))
 	;
-	else if ((G_GametypeUsesLives() || gametype == GT_RACE) && stplyr->lives <= 0 && !(hu_showscores && (netgame || multiplayer)))
+	else if ((G_GametypeUsesLives() || ((gametyperules & (GTR_RACE|GTR_LIVES)) == GTR_RACE)) && stplyr->lives <= 0 && !(hu_showscores && (netgame || multiplayer)))
 	{
 		INT32 i = MAXPLAYERS;
 		INT32 deadtimer = stplyr->spectator ? TICRATE : (stplyr->deadtimer-(TICRATE<<1));