diff --git a/overcooked_simulator/game_content/layouts/basic.layout b/overcooked_simulator/game_content/layouts/basic.layout
index d26d393175a6fa636a1ecdd30791a06ffd4661de..da7352dd372718b26c43d5dce25a1c40c503cd01 100644
--- a/overcooked_simulator/game_content/layouts/basic.layout
+++ b/overcooked_simulator/game_content/layouts/basic.layout
@@ -1,11 +1,11 @@
-___________
-_CCUCTCLCC_
-_C_______C_
-_C_______C_
-_W_________
-_C_________
-_P_________
-_C_______C_
-_C_______X_
-_CCBBCCCCC_
-___________
+__________________
+_CCUCTCLCC________
+_C_______C________
+_C_______C________
+_W________________
+_C________________
+_P________________
+_C_______C________
+_C_______X________
+_CCBBCCCCC________
+__________________
diff --git a/overcooked_simulator/main.py b/overcooked_simulator/main.py
index 05d6f0c0c62a9c2ba0df540c5a8b68c15d185a11..bd969d3c22a51098abf1ac621c3f51dfd0eda762 100644
--- a/overcooked_simulator/main.py
+++ b/overcooked_simulator/main.py
@@ -1,6 +1,5 @@
 import sys
 
-import numpy as np
 import pygame
 
 from overcooked_simulator import ROOT_DIR
@@ -13,8 +12,12 @@ def main():
     simulator = Simulator(ROOT_DIR / "game_content" / "layouts" / "basic.layout", 600)
     player_one_name = "p1"
     player_two_name = "p2"
-    simulator.register_player(Player(player_one_name, np.array([350.0, 200.0])))
-    simulator.register_player(Player(player_two_name, np.array([100.0, 200.0])))
+    # simulator.register_player(Player(player_one_name, np.array([350.0, 200.0])))
+    # simulator.register_player(Player(player_two_name, np.array([100.0, 200.0])))
+    for i in range(90):
+        simulator.register_player(Player(f"p{i+3}"))
+    simulator.register_player(Player(player_one_name))
+    simulator.register_player(Player(player_two_name))
 
     # TODO maybe read the player names and keyboard keys from config file?
     keys1 = [
diff --git a/overcooked_simulator/overcooked_environment.py b/overcooked_simulator/overcooked_environment.py
index d5d8544220cfa28e3b63d5866f7136712d2168fc..35b780927a624d9cc0a4fb7adf9f75e90f456a55 100644
--- a/overcooked_simulator/overcooked_environment.py
+++ b/overcooked_simulator/overcooked_environment.py
@@ -2,6 +2,7 @@ from __future__ import annotations
 
 from typing import TYPE_CHECKING
 
+import numpy.typing as npt
 import yaml
 
 from overcooked_simulator.game_items import ItemInfo
@@ -81,7 +82,7 @@ class Environment:
             ),  # Stove with pot: U because it looks like a pot
         }
 
-        self.counters: list[Counter] = self.create_counters(self.layout_path)
+        self.counters, self.free_positions = self.create_counters(self.layout_path)
         self.score: int = 0
         self.world_width: int = 800
         self.world_height: int = 600
@@ -107,8 +108,9 @@ class Environment:
         Args:
             layout_file: Path to the layout file.
         """
-        current_y = self.counter_side_length / 2
-        counters = []
+        current_y: float = self.counter_side_length / 2
+        counters: list[Counter] = []
+        free_positions: list[npt.NDArray] = []
 
         with open(layout_file, "r") as layout_file:
             lines = layout_file.readlines()
@@ -122,9 +124,13 @@ class Environment:
                 if counter_class is not None:
                     counter = counter_class(pos)
                     counters.append(counter)
+                else:
+                    free_positions.append(np.array([current_x, current_y]))
                 current_x += self.counter_side_length
             current_y += self.counter_side_length
-        return counters
+
+
+        return counters, free_positions
 
     def perform_action(self, action: Action):
         """Performs an action of a player in the environment. Maps different types of action inputs to the
diff --git a/overcooked_simulator/player.py b/overcooked_simulator/player.py
index ce7a749737561af07bda49fe903b02a78ab269d8..b1b8afdb8378670ac3eaa8e5474bcd7560f837da 100644
--- a/overcooked_simulator/player.py
+++ b/overcooked_simulator/player.py
@@ -14,9 +14,13 @@ class Player:
 
     """
 
-    def __init__(self, name: str, pos: npt.NDArray[float]):
+    def __init__(self, name: str, pos: Optional[npt.NDArray[float]] = None):
         self.name: str = name
-        self.pos: npt.NDArray[float] = np.array(pos, dtype=float)
+        if pos is not None:
+            self.pos: npt.NDArray[float] = np.array(pos, dtype=float)
+        else:
+            self.pos = None
+
         self.holding: Optional[Item] = None
 
         self.radius: int = 18
diff --git a/overcooked_simulator/simulation_runner.py b/overcooked_simulator/simulation_runner.py
index 6c9cf367ca96478711ec0aa717bc16c22a88f0d9..dbb3d4c491b82995f19126ca414ab6ad4b5dc4ab 100644
--- a/overcooked_simulator/simulation_runner.py
+++ b/overcooked_simulator/simulation_runner.py
@@ -1,3 +1,4 @@
+import random
 import time
 from threading import Thread
 
@@ -73,6 +74,13 @@ class Simulator(Thread):
         # print(f"Added player {player.name} to the game.")
 
         self.env.players[player.name] = player
+        if player.pos is None:
+            if len(self.env.free_positions) > 0:
+                free_idx = random.randint(0, len(self.env.free_positions) - 1)
+                player.move_abs(self.env.free_positions[free_idx])
+                del self.env.free_positions[free_idx]
+            else:
+                print("No free positions left in kitchens.")
 
     def register_players(self, players: list[Player]):
         """Registers multiple players from a list
@@ -86,6 +94,13 @@ class Simulator(Thread):
 
     def run(self):
         """Starts the simulator thread. Runs in a loop until stopped."""
+
+        for p in self.env.players.values():
+            print(p.pos)
+        assert all(
+            p.pos is not None for p in self.env.players.values()
+        ), "At least one player position not initialized"
+
         overslept_in_ns = 0
 
         while not self.finished: