diff --git a/flatland/envs/rail_env.py b/flatland/envs/rail_env.py
index 125f8f13b445fba6b137bcf2ed521843f84bc278..168157566c8ab3dfcd923cb0ceb8b8b412b13ceb 100644
--- a/flatland/envs/rail_env.py
+++ b/flatland/envs/rail_env.py
@@ -219,8 +219,9 @@ class RailEnv(Environment):
 
         self.valid_positions = None
 
-        # global numpy array of agents position, True means that there is an agent at that cell
-        self.agent_positions: np.ndarray = np.full((height, width), False)
+        # global numpy array of agents position, -1 means that the cell is free, otherwise the agent handle is placed
+        # inside the cell
+        self.agent_positions: np.ndarray = np.zeros((height, width), dtype=int) - 1
 
     def _seed(self, seed=None):
         self.np_random, seed = seeding.np_random(seed)
@@ -362,7 +363,7 @@ class RailEnv(Environment):
             else:
                 self._max_episode_steps = self.compute_max_episode_steps(width=self.width, height=self.height)
 
-        self.agent_positions = np.full((self.height, self.width), False)
+        self.agent_positions = np.zeros((self.height, self.width), dtype=int) - 1
 
         self.restart_agents()
 
@@ -663,7 +664,7 @@ class RailEnv(Environment):
         new_position: IntVector2D
         """
         agent.position = new_position
-        self.agent_positions[agent.position] = True
+        self.agent_positions[agent.position] = agent.handle
 
     def _move_agent_to_new_position(self, agent: EnvAgent, new_position: IntVector2D):
         """
@@ -676,8 +677,8 @@ class RailEnv(Environment):
         new_position: IntVector2D
         """
         agent.position = new_position
-        self.agent_positions[agent.old_position] = False
-        self.agent_positions[agent.position] = True
+        self.agent_positions[agent.old_position] = -1
+        self.agent_positions[agent.position] = agent.handle
 
     def _remove_agent_from_scene(self, agent: EnvAgent):
         """
@@ -688,7 +689,7 @@ class RailEnv(Environment):
         -------
         agent: EnvAgent object
         """
-        self.agent_positions[agent.position] = False
+        self.agent_positions[agent.position] = -1
         if self.remove_agents_at_target:
             agent.position = None
             agent.status = RailAgentStatus.DONE_REMOVED
@@ -753,7 +754,7 @@ class RailEnv(Environment):
             is the cell free or not?
 
         """
-        return not self.agent_positions[position]
+        return self.agent_positions[position] == -1
 
     def check_action(self, agent: EnvAgent, action: RailEnvActions):
         """