diff --git a/src/p_saveg.c b/src/p_saveg.c
index 996143c0102e1cc7f7ad3523678d78ebe815b0b9..0bfb81f4e0ceaf4419501c30df4bd9b7e2f3ff5c 100644
--- a/src/p_saveg.c
+++ b/src/p_saveg.c
@@ -4078,7 +4078,7 @@ static inline boolean P_NetUnArchiveMisc(void)
 	sstimer = READINT32(save_p);
 	bluescore = READUINT32(save_p);
 	redscore = READUINT32(save_p);
-	modulothing = READUINT32(save_p);
+	modulothing = READINT32(save_p);
 
 	autobalance = READINT16(save_p);
 	teamscramble = READINT16(save_p);
diff --git a/src/p_setup.c b/src/p_setup.c
index f3468383c56d2306c29f31dba8c2adb5e6b57d75..03e3e51ff7f7f7854bbc2a61ddc76f4fe72d3baf 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -2168,6 +2168,7 @@ static void P_LevelInitStuff(void)
 
 	localaiming = 0;
 	localaiming2 = 0;
+	modulothing = 0;
 
 	// special stage tokens, emeralds, and ring total
 	tokenbits = 0;
@@ -2610,7 +2611,6 @@ boolean P_SetupLevel(boolean skipprecip)
 	boolean loadedbm = false;
 	sector_t *ss;
 	boolean chase;
-	modulothing = 0;
 
 	levelloading = true;