diff --git a/src/d_clisrv.c b/src/d_clisrv.c
index b8eb320a3d4214d610c1addec5590969049012c7..bea0623688afae32962e5b21355988fc24cf45e4 100644
--- a/src/d_clisrv.c
+++ b/src/d_clisrv.c
@@ -478,7 +478,6 @@ static boolean CL_SendJoin(void)
 		nodewaiting[servernode]++;
 		if (splitscreen || botingame)
 			nodewaiting[servernode]++;
-		net_playercount = nodewaiting[servernode];
 		return true;
 	}
 	if (server) // no need to ask yourself if you can join!
diff --git a/src/d_enet.c b/src/d_enet.c
index 14b385ff85d3e1f9e23c2256cedff9ded3e235e4..4b3b5ad57e866f55420d65a15f8a0b3f27d3b121 100644
--- a/src/d_enet.c
+++ b/src/d_enet.c
@@ -33,12 +33,16 @@ enum {
 static ENetHost *ServerHost = NULL,
 	*ClientHost = NULL;
 static ENetPeer *nodetopeer[MAXNETNODES];
-static UINT8 nodeleaving[MAXNETNODES];
 
 typedef struct PeerData_s {
 	UINT8 node;
+	UINT8 flags;
 } PeerData;
 
+enum {
+	PEER_LEAVING = 1
+};
+
 static void ServerSendMapInfo(UINT8 node);
 
 boolean Net_GetNetStat(void)
@@ -47,6 +51,15 @@ boolean Net_GetNetStat(void)
 	return false;
 }
 
+static void DisconnectNode(UINT8 node, UINT8 why)
+{
+	if (nodetopeer[node] == NULL)
+		return;
+	PeerData *pdata = nodetopeer[node]->data;
+	pdata->flags |= PEER_LEAVING;
+	enet_peer_disconnect(nodetopeer[node], why);
+}
+
 static void ServerHandlePacket(UINT8 node, DataWrap data)
 {
 	switch(data->ReadUINT8(data))
@@ -58,8 +71,7 @@ static void ServerHandlePacket(UINT8 node, DataWrap data)
 		if (version != VERSION || subversion != SUBVERSION)
 		{
 			CONS_Printf("NETWORK: Version mismatch!?\n");
-			nodeleaving[node] = true;
-			enet_peer_disconnect(nodetopeer[node], DISCONNECT_VERSION);
+			DisconnectNode(node, DISCONNECT_VERSION);
 			break;
 		}
 		char *name = data->ReadStringn(data, MAXPLAYERNAME);
@@ -157,6 +169,8 @@ void Net_AckTicker(void)
 
 			pdata = ZZ_Alloc(sizeof(*pdata));
 			pdata->node = i;
+			pdata->flags = 0;
+
 			e.peer->data = pdata;
 
 			CONS_Printf("NETWORK: Node %u connected.\n", i);
@@ -166,7 +180,7 @@ void Net_AckTicker(void)
 			if (!e.peer->data)
 				break;
 			pdata = (PeerData *)e.peer->data;
-			if (!nodeleaving[pdata->node])
+			if (!(pdata->flags & PEER_LEAVING))
 			{
 				XBOXSTATIC UINT8 buf[2];
 				buf[0] = nodetoplayer[pdata->node];
@@ -179,7 +193,6 @@ void Net_AckTicker(void)
 				}
 			}
 			net_nodecount--;
-			nodeleaving[pdata->node] = false;
 			nodetopeer[pdata->node] = NULL;
 			Z_Free(pdata);
 			e.peer->data = NULL;
@@ -325,10 +338,7 @@ void D_CloseConnection(void)
 
 void Net_CloseConnection(INT32 node)
 {
-	if (nodeleaving[node] || nodetopeer[node] == NULL)
-		return;
-	nodeleaving[node] = true;
-	enet_peer_disconnect(nodetopeer[node], 0);
+	DisconnectNode(node, 0);
 }
 
 // Client: Can I play? =3 My name is Player so-and-so!