diff --git a/src/command.c b/src/command.c
index a15471c8304ee5b0b3cc084aa64aa7dc7e1f9925..f77fb5a4d528714ca226f4c7d0256e4949aa9ec7 100644
--- a/src/command.c
+++ b/src/command.c
@@ -1180,7 +1180,10 @@ finish:
 		CONS_Printf(M_GetText("%s set to %s\n"), var->name, var->string);
 		var->flags &= ~CV_SHOWMODIFONETIME;
 	}
-	DEBFILE(va("%s set to %s\n", var->name, var->string));
+	else // display message in debug file only
+	{
+		DEBFILE(va("%s set to %s\n", var->name, var->string));
+	}
 	var->flags |= CV_MODIFIED;
 	// raise 'on change' code
 #ifdef HAVE_BLUA
diff --git a/src/d_clisrv.c b/src/d_clisrv.c
index c6a544f4aaa388eb6caebc42262d611021b7498e..b8c6ee69338c6ad00216dd7af2ce6ffbc403e4d0 100644
--- a/src/d_clisrv.c
+++ b/src/d_clisrv.c
@@ -4115,7 +4115,10 @@ static INT16 Consistancy(void)
 
 #ifdef MOBJCONSISTANCY
 	if (!thinkercap.next)
+	{
+		DEBFILE(va("Consistancy = %u\n", ret));
 		return ret;
+	}
 	for (th = thinkercap.next; th != &thinkercap; th = th->next)
 	{
 		if (th->function.acp1 != (actionf_p1)P_MobjThinker)
@@ -4184,6 +4187,8 @@ static INT16 Consistancy(void)
 	}
 #endif
 
+	DEBFILE(va("Consistancy = %u\n", (ret & 0xFFFF)));
+
 	return (INT16)(ret & 0xFFFF);
 }
 
diff --git a/src/d_net.c b/src/d_net.c
index 50b6c8cf692f35561e8ad4a5695775895c603345..4b14e1751a3a1a93457599095b316eb9334c9191 100644
--- a/src/d_net.c
+++ b/src/d_net.c
@@ -1028,6 +1028,7 @@ boolean HSendPacket(INT32 node, boolean reliable, UINT8 acknum, size_t packetlen
 #endif
 			return false;
 		}
+		netbuffer->ack = netbuffer->ackreturn = 0; // don't hold over values from last packet sent/received
 		M_Memcpy(&reboundstore[rebound_head], netbuffer,
 			doomcom->datalength);
 		reboundsize[rebound_head] = doomcom->datalength;
diff --git a/src/p_saveg.c b/src/p_saveg.c
index 75f7b3e514e53cb250b40f1969f7b02a3b4d5126..d1ec8e5abfc5aad9cc973265e709723489b2a2c0 100644
--- a/src/p_saveg.c
+++ b/src/p_saveg.c
@@ -1653,12 +1653,18 @@ static inline void SaveWhatThinker(const thinker_t *th, const UINT8 type)
 static void P_NetArchiveThinkers(void)
 {
 	const thinker_t *th;
+	UINT32 numsaved = 0;
 
 	WRITEUINT32(save_p, ARCHIVEBLOCK_THINKERS);
 
 	// save off the current thinkers
 	for (th = thinkercap.next; th != &thinkercap; th = th->next)
 	{
+		if (!(th->function.acp1 == (actionf_p1)P_RemoveThinkerDelayed
+		 || th->function.acp1 == (actionf_p1)P_RainThinker
+		 || th->function.acp1 == (actionf_p1)P_SnowThinker))
+			numsaved++;
+
 		if (th->function.acp1 == (actionf_p1)P_MobjThinker)
 		{
 			SaveMobjThinker(th, tc_mobj);
@@ -1846,6 +1852,8 @@ static void P_NetArchiveThinkers(void)
 #endif
 	}
 
+	CONS_Debug(DBG_NETPLAY, "%u thinkers saved\n", numsaved);
+
 	WRITEUINT8(save_p, tc_end);
 }
 
@@ -2610,6 +2618,7 @@ static void P_NetUnArchiveThinkers(void)
 	UINT8 tclass;
 	UINT8 restoreNum = false;
 	UINT32 i;
+	UINT32 numloaded = 0;
 
 	if (READUINT32(save_p) != ARCHIVEBLOCK_THINKERS)
 		I_Error("Bad $$$.sav at archive block Thinkers");
@@ -2643,6 +2652,7 @@ static void P_NetUnArchiveThinkers(void)
 
 		if (tclass == tc_end)
 			break; // leave the saved thinker reading loop
+		numloaded++;
 
 		switch (tclass)
 		{
@@ -2794,6 +2804,8 @@ static void P_NetUnArchiveThinkers(void)
 		}
 	}
 
+	CONS_Debug(DBG_NETPLAY, "%u thinkers loaded\n", numloaded);
+
 	if (restoreNum)
 	{
 		executor_t *delay = NULL;