diff --git a/src/environment.cpp b/src/environment.cpp
index 77746c5bea1157aa759a043d72b89951e5661f5d..efcdbbd156c6287469d6f18d5ea997cee8db5e43 100644
--- a/src/environment.cpp
+++ b/src/environment.cpp
@@ -397,6 +397,11 @@ void ServerEnvironment::step(float dtime)
 			i != m_players.end(); i++)
 	{
 		Player *player = *i;
+		
+		// Ignore disconnected players
+		if(player->peer_id == 0)
+			continue;
+
 		v3f playerpos = player->getPosition();
 		
 		// Move
@@ -504,6 +509,11 @@ void ServerEnvironment::step(float dtime)
 			i != m_players.end(); i++)
 	{
 		Player *player = *i;
+		
+		// Ignore disconnected players
+		if(player->peer_id == 0)
+			continue;
+
 		v3f playerpos = player->getPosition();
 		
 		v3s16 blockpos0 = getNodeBlockPos(floatToInt(playerpos, BS));
@@ -589,6 +599,11 @@ void ServerEnvironment::step(float dtime)
 					i != m_players.end(); i++)
 			{
 				Player *player = *i;
+				
+				// Ignore disconnected players
+				if(player->peer_id == 0)
+					continue;
+
 				v3f playerpos = player->getPosition();
 				f32 d = playerpos.getDistanceFrom(objectpos);
 				if(d < to_static_max_f)