diff --git a/src/d_enet.c b/src/d_enet.c
index 736262e16e5b50cb717a8cfa43c8097038f32d53..f6656dabe0260722a7c05d5d224dc419e522ef3c 100644
--- a/src/d_enet.c
+++ b/src/d_enet.c
@@ -676,12 +676,15 @@ static void Net_SendMove(void)
 {
 	ENetPacket *packet;
 	UINT8 *buf = net_buffer;
+	boolean reliable = false;
 
 	if (!netgame || server || !addedtogame || !players[consoleplayer].mo)
 		return;
 
 	// only update once a second unless buttons changed.
-	if (lastMove+TICRATE < I_GetTime() && !memcmp(&lastCmd, &players[consoleplayer].cmd, sizeof(ticcmd_t)))
+	if (memcmp(&lastCmd, &players[consoleplayer].cmd, sizeof(ticcmd_t)))
+		reliable = true;
+	if (lastMove+TICRATE < I_GetTime() && !reliable)
 		return;
 	lastMove = I_GetTime();
 	G_CopyTiccmd(&lastCmd, &players[consoleplayer].cmd, 1);
@@ -696,7 +699,7 @@ static void Net_SendMove(void)
 	WRITEFIXED(buf, players[consoleplayer].mo->y);
 	WRITEFIXED(buf, players[consoleplayer].mo->z);
 
-	packet = enet_packet_create(net_buffer, buf-net_buffer, 0);
+	packet = enet_packet_create(net_buffer, buf-net_buffer, reliable ? ENET_PACKET_FLAG_RELIABLE : 0);
 	enet_peer_send(nodetopeer[servernode], CHANNEL_MOVE, packet);
 }