diff --git a/src/d_clisrv.c b/src/d_clisrv.c
index 939d53decb65a5ace59ffe670891bdf5478a0690..87e51b4473e46bfa360082401bd9d1433efe886e 100644
--- a/src/d_clisrv.c
+++ b/src/d_clisrv.c
@@ -3936,6 +3936,9 @@ FILESTAMP
 
 	while (HGetPacket())
 	{
+		if (doomcom->remotenode == -1) // ...this should have been ignored already
+			continue; // might come from PT_NODETIMEOUT somehow though
+
 		node = (SINT8)doomcom->remotenode;
 
 		if (netbuffer->packettype == PT_CLIENTJOIN && server)
@@ -3968,8 +3971,10 @@ FILESTAMP
 		if (netbuffer->packettype == PT_PLAYERINFO)
 			continue; // We do nothing with PLAYERINFO, that's for the MS browser.
 
+		if (node < 0 || node >= MAXNETNODES) // THIS SHOULDN'T EVEN BE POSSIBLE
+			; //CONS_Printf("Received packet from node %d!\n", (int)node);
 		// Packet received from someone already playing
-		if (nodeingame[node])
+		else if (nodeingame[node])
 			HandlePacketFromPlayer(node);
 		// Packet received from someone not playing
 		else
diff --git a/src/d_net.c b/src/d_net.c
index 70cdc5f1459109bf27c1c1ec507d218eaaef9768..68720f5ee54f7f9baa0903342d51eb7df3523b3e 100644
--- a/src/d_net.c
+++ b/src/d_net.c
@@ -711,6 +711,10 @@ void Net_CloseConnection(INT32 node)
 #else
 	INT32 i;
 	boolean forceclose = (node & FORCECLOSE) != 0;
+
+	if (node == -1)
+		return; // nope, just ignore it
+
 	node &= ~FORCECLOSE;
 
 	if (!node)
@@ -718,7 +722,7 @@ void Net_CloseConnection(INT32 node)
 
 	if (node < 0 || node >= MAXNETNODES) // prevent invalid nodes from crashing the game
 	{
-		CONS_Alert(CONS_WARNING, M_GetText("Net_CloseConnection: invalid node %d detected!\n"), node);
+		//CONS_Alert(CONS_WARNING, M_GetText("Net_CloseConnection: invalid node %d detected!\n"), node);
 		return;
 	}
 
@@ -1128,6 +1132,9 @@ boolean HGetPacket(void)
 			doomcom->remotenode = 0;
 
 		rebound_tail = (rebound_tail+1) % MAXREBOUND;
+
+		if (doomcom->remotenode == -1) // wait hang on what?
+			return true; // there might still be packets from others though, so don't return false
 #ifdef DEBUGFILE
 		if (debugfile)
 			DebugPrintpacket("GETLOCAL");