diff --git a/src/netcode/d_clisrv.c b/src/netcode/d_clisrv.c
index 7804b068f7f8d262bd7fab535539af82675bd639..bd5ec3736daa9ca33cd4595ab690cd2d433eb216 100644
--- a/src/netcode/d_clisrv.c
+++ b/src/netcode/d_clisrv.c
@@ -1275,7 +1275,7 @@ static void UpdatePingTable(void)
 	}
 }
 
-static void IdleUpdate(void)
+static void IdleUpdate(boolean updatequittime)
 {
 	INT32 i;
 	if (!server || !netgame)
@@ -1297,7 +1297,18 @@ static void IdleUpdate(void)
 			}
 		}
 		else
+		{
 			players[i].lastinputtime = 0;
+
+			if (updatequittime && players[i].quittime)
+			{
+				players[i].quittime++;
+
+				if (server && players[i].quittime >= (tic_t)FixedMul(cv_rejointimeout.value, 60 * TICRATE)
+				&& !(players[i].quittime % TICRATE))
+					SendKick(i, KICK_MSG_PLAYER_QUIT);
+			}
+		}
 	}
 }
 
@@ -1333,7 +1344,7 @@ void NetKeepAlive(void)
 
 	GetPackets();
 
-	IdleUpdate();
+	IdleUpdate(true);
 
 #ifdef MASTERSERVER
 	MasterClient_Ticker();
@@ -1455,7 +1466,7 @@ void NetUpdate(void)
 
 	GetPackets(); // get packet from client or from server
 
-	IdleUpdate();
+	IdleUpdate(false);
 
 	// The client sends the command after receiving from the server
 	// The server sends it before because this is better in single player