diff --git a/src/p_savenetrb.c b/src/p_savenetrb.c
index 3a6d057a9fbc25ab7870a248f234b123d9cbdbab..95622ba8860dd180db25e26b49752e90ba122ee1 100755
--- a/src/p_savenetrb.c
+++ b/src/p_savenetrb.c
@@ -5451,7 +5451,7 @@ static inline boolean P_NetUnArchiveMisc(boolean reloading)
 	// if (!P_LoadLevel(true, reloading))
 	// 	return false;
 
-	if ((!reloading || (gamemap != oldMap)) && !P_LoadLevel(false, reloading))
+	if ((!reloading || (gamemap != oldMap)))
 		return false;
 
 	// get the time
@@ -5800,7 +5800,7 @@ void P_SaveGameState(savestate_t* savestate)
 
     if (savestate->buffer == NULL)
 	{
-		savestate->buffer = Z_Malloc(10 * 1024 * 1024, PU_LEVEL, NULL); //ten megabytes?
+		savestate->buffer = Z_Malloc(10 * 1024 * 1024, PU_STATIC, NULL); //ten megabytes?
 	}
 
     save_p = savestate->buffer;
diff --git a/src/p_setup.c b/src/p_setup.c
index 89296c05c50d3c85fa991ea3495a208640243640..5ac4dc06b71cdd6d60db62188b6ac4b21fee8904 100755
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -3980,8 +3980,8 @@ static void P_InitGametype(void)
 boolean P_LoadLevel(boolean fromnetsave, boolean reloadinggamestate)
 {
 	//prevent loading a level when in a simulation
-	if (issimulation)
-		return true;
+	// if (issimulation)
+	// 	return true;
 
 	// use gamemap to get map number.
 	// 99% of the things already did, so.
@@ -4154,6 +4154,7 @@ boolean P_LoadLevel(boolean fromnetsave, boolean reloadinggamestate)
 	Patch_FreeTag(PU_PATCH_LOWPRIORITY);
 	Patch_FreeTag(PU_PATCH_ROTATED);
 	Z_FreeTags(PU_LEVEL, PU_PURGELEVEL - 1);
+	InvalidateSavestates();
 
 	P_InitThinkers();
 	P_InitCachedActions();