diff --git a/src/g_game.c b/src/g_game.c
index b3dffd0e6276c0d8cf0d26078d4b098a52dd599f..106682aeeefa27bc28be616d2be1ea7b4d4dd058 100644
--- a/src/g_game.c
+++ b/src/g_game.c
@@ -3843,16 +3843,19 @@ static void G_UpdateVisited(gamedata_t *data, boolean silent)
 {
 	boolean spec = G_IsSpecialStage(gamemap);
 	// Update visitation flags?
-	if (!demoplayback && (gametype == GT_COOP) // SP/RA/NiGHTS mode
+	if (!demoplayback
+		&& G_CoopGametype() // Campaign mode
 		&& !stagefailed) // Did not fail the stage
 	{
 		UINT8 earnedEmblems;
 
 		// Update visitation flags
 		data->mapvisited[gamemap-1] |= MV_BEATEN;
+
 		// eh, what the hell
 		if (ultimatemode)
 			data->mapvisited[gamemap-1] |= MV_ULTIMATE;
+
 		// may seem incorrect but IS possible in what the main game uses as mp special stages, and nummaprings will be -1 in NiGHTS
 		if (nummaprings > 0 && players[consoleplayer].rings >= nummaprings)
 		{
@@ -3860,6 +3863,7 @@ static void G_UpdateVisited(gamedata_t *data, boolean silent)
 			if (modeattacking)
 				data->mapvisited[gamemap-1] |= MV_PERFECTRA;
 		}
+
 		if (!spec)
 		{
 			// not available to special stages because they can only really be done in one order in an unmodified game, so impossible for first six and trivial for seventh
diff --git a/src/p_mobj.c b/src/p_mobj.c
index f198a1a69a56678e4605b36b091ab8dd3e5577e7..e79977c487e468ceca5cf4c1565719cc4fb1977e 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -12009,6 +12009,10 @@ static boolean P_AllowMobjSpawn(mapthing_t* mthing, mobjtype_t i)
 			return false; // You already got this token
 
 		break;
+	case MT_EMBLEM:
+		if (!G_CoopGametype())
+			return false; // Gametype's not right
+		break;
 	default:
 		break;
 	}