diff --git a/src/p_setup.c b/src/p_setup.c
index 851231c423dbd77ba1df777e7de2edb6015faf00..0eafda9da5014f5d98145656d264c3229dcfff87 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -7913,6 +7913,24 @@ boolean P_LoadLevel(boolean fromnetsave, boolean reloadinggamestate)
 	if (!P_LoadMapFromFile())
 		return false;
 
+	if (!demoplayback)
+	{
+		clientGamedata->mapvisited[gamemap-1] |= MV_VISITED;
+		serverGamedata->mapvisited[gamemap-1] |= MV_VISITED;
+
+		M_SilentUpdateUnlockablesAndEmblems(serverGamedata);
+
+		if (M_UpdateUnlockablesAndExtraEmblems(clientGamedata))
+		{
+			S_StartSound(NULL, sfx_s3k68);
+			G_SaveGameData(clientGamedata);
+		}
+		else if (!reloadinggamestate)
+		{
+			G_SaveGameData(clientGamedata);
+		}
+	}
+
 	// init anything that P_SpawnSlopes/P_LoadThings needs to know
 	P_InitSpecials();
 
@@ -7971,24 +7989,6 @@ boolean P_LoadLevel(boolean fromnetsave, boolean reloadinggamestate)
 	nextmapoverride = 0;
 	skipstats = 0;
 
-	if (!demoplayback)
-	{
-		clientGamedata->mapvisited[gamemap-1] |= MV_VISITED;
-		serverGamedata->mapvisited[gamemap-1] |= MV_VISITED;
-
-		M_SilentUpdateUnlockablesAndEmblems(serverGamedata);
-
-		if (M_UpdateUnlockablesAndExtraEmblems(clientGamedata))
-		{
-			S_StartSound(NULL, sfx_s3k68);
-			G_SaveGameData(clientGamedata);
-		}
-		else if (!reloadinggamestate)
-		{
-			G_SaveGameData(clientGamedata);
-		}
-	}
-
 	levelloading = false;
 
 	P_RunCachedActions();