diff --git a/overcooked_simulator/counters.py b/overcooked_simulator/counters.py
index c51e40e3edadac99743e4cc96b74b3b4b983a657..46dcda1e1b86dce50a00b7ae8140693d28cb688b 100644
--- a/overcooked_simulator/counters.py
+++ b/overcooked_simulator/counters.py
@@ -1,5 +1,7 @@
 import numpy as np
 
+from overcooked_simulator.game_items import CuttableItem
+
 
 class Counter:
     """Simple class for a counter at a specified position (center of counter). Can hold things on top."""
@@ -53,3 +55,44 @@ class Counter:
 
     def __repr__(self):
         return f"Counter(pos:{str(self.pos)},holds:{self.occupied_by})"
+
+
+class CuttingBoard(Counter):
+    def __init__(self, pos):
+        self.progressing = False
+        super().__init__(pos)
+
+    def progress(self):
+        """Called by environment step function for time progression"""
+        if self.progressing:
+            if isinstance(self.occupied_by, CuttableItem):
+                self.occupied_by.progress()
+
+    def start_progress(self):
+        self.progressing = True
+
+    def pause_progress(self):
+        self.progressing = False
+
+    def drop_off(self, item):
+        if self.occupied_by is None:
+            self.occupied_by = item
+
+    def can_drop_off(self, item):
+        return self.occupied_by is None
+
+    def pick_up(self):
+        return_to_player = self.occupied_by
+        self.occupied_by = None
+        return return_to_player
+
+    def interact_start(self):
+        print("START")
+        self.start_progress()
+
+    def interact_stop(self):
+        print("STOP")
+        self.pause_progress()
+
+    def __repr__(self):
+        return f"CuttingBoard({self.occupied_by})"
diff --git a/overcooked_simulator/game_items.py b/overcooked_simulator/game_items.py
index 8dfb402a612f7490c1a75bc9468322b010289453..cd784132a96dde24ca1858afc91fd53ddfc555b4 100644
--- a/overcooked_simulator/game_items.py
+++ b/overcooked_simulator/game_items.py
@@ -1,6 +1,42 @@
 class HoldableItem:
+    """Base class for game items which can be held by a player."""
+
     pass
 
 
-class Tomato(HoldableItem):
+class ProgressibleItem(HoldableItem):
+    """Class for items which need to be processed (cut, cooked, ...)"""
+
+    def __init__(self, steps_needed):
+        self.progressed_steps = 0
+        self.steps_needed = steps_needed
+        self.finished = False
+        super().__init__()
+
+    def progress(self):
+        """Progresses the item process as long as it is not finished."""
+        print("PROGRESSING ITEM")
+        if self.progressed_steps >= self.steps_needed:
+            self.finished = True
+            self.progressed_steps = 0
+        if not self.finished:
+            self.progressed_steps += 1
+
+    def __repr__(self):
+        if self.finished:
+            return "CutTomato"
+        else:
+            return f"{self.__class__.__name__}({int(self.progressed_steps / self.steps_needed * 100)}%)"
+
+
+class CuttableItem(ProgressibleItem):
+    """Class of item which can be processed by the cutting board."""
+
     pass
+
+
+class Tomato(CuttableItem):
+    """Item class representing a tomato. Can be cut on the cutting board"""
+
+    def __init__(self):
+        super().__init__(steps_needed=1500)
diff --git a/overcooked_simulator/layouts/basic.layout b/overcooked_simulator/layouts/basic.layout
index 82524fc6037ce7d9a7a11667bd290819986fa268..beb5fc01cf72d2bb19013bbfa5e0ed89cde2e76f 100644
--- a/overcooked_simulator/layouts/basic.layout
+++ b/overcooked_simulator/layouts/basic.layout
@@ -7,5 +7,5 @@ ECEEEEEEEEE
 ECEEEEEEEEE
 ECEEEEEEECE
 ECEEEEEEECE
-ECCCCCCCCCE
+ECCBBCCCCCE
 EEEEEEEEEEE
diff --git a/overcooked_simulator/main.py b/overcooked_simulator/main.py
index 393255aa8756aabbeda18e8dfedfc2cb3c241754..48b34e3cd092a685a904d3bfb4b7e26883aef00f 100644
--- a/overcooked_simulator/main.py
+++ b/overcooked_simulator/main.py
@@ -8,7 +8,7 @@ from overcooked_simulator.simulation_runner import Simulator
 
 
 def main():
-    simulator = Simulator(Path("overcooked_simulator/layouts/basic.layout"), 300)
+    simulator = Simulator(Path("overcooked_simulator/layouts/basic.layout"), 600)
     simulator.register_player(Player("p1", [100, 200]))
     simulator.register_player(Player("p2", [200, 100]))
 
@@ -17,7 +17,6 @@ def main():
     gui = PyGameGUI(simulator)
 
     simulator.start()
-
     gui.start_pygame()
 
     simulator.stop()
diff --git a/overcooked_simulator/overcooked_environment.py b/overcooked_simulator/overcooked_environment.py
index 4b3d48e2d9e18ff232f52d908bf2895a1613d694..209485bfe9f1295cb607eedbe9e19d97c51afc76 100644
--- a/overcooked_simulator/overcooked_environment.py
+++ b/overcooked_simulator/overcooked_environment.py
@@ -7,7 +7,7 @@ if TYPE_CHECKING:
 from pathlib import Path
 import numpy as np
 from scipy.spatial import distance_matrix
-from overcooked_simulator.counters import Counter
+from overcooked_simulator.counters import Counter, CuttingBoard
 
 
 class Action:
@@ -65,9 +65,12 @@ class Environment:
                 if character == "C":
                     counter = Counter(np.array([current_x, current_y]))
                     counters.append(counter)
-                    current_x += self.counter_side_length
+                elif character == "B":
+                    counter = CuttingBoard(np.array([current_x, current_y]))
+                    counters.append(counter)
                 elif character == "E":
-                    current_x += self.counter_side_length
+                    pass
+                current_x += self.counter_side_length
             current_y += self.counter_side_length
         return counters
 
@@ -80,7 +83,8 @@ class Environment:
             action: The action to be performed
         """
 
-        # print("RECEIVED ACTION:", action)
+        # if action.act_type != "movement":
+        #     print("RECEIVED ACTION:", action)
 
         assert action.player in self.players.keys(), "Unknown player."
         player = self.players[action.player]
@@ -256,7 +260,9 @@ class Environment:
         """Performs a step of the environment. Affects time based events such as cooking or cutting things, orders
         and time limits.
         """
-        pass
+        for counter in self.counters:
+            if isinstance(counter, CuttingBoard):
+                counter.progress()
 
     def get_state(self):
         """Get the current state of the game environment. The state here is accessible by the current python objects.
diff --git a/overcooked_simulator/player.py b/overcooked_simulator/player.py
index 4920f0dcbd52573b13a757af2101783ae7cc5578..28f812bd291b9db13f214419933a496146f9ea16 100644
--- a/overcooked_simulator/player.py
+++ b/overcooked_simulator/player.py
@@ -75,15 +75,6 @@ class Player:
             counter.drop_off(self.holding)
             self.holding = None
 
-    def interact(self, counter: Counter):
-        """Performs the interact-action with the counter. Handles logic of starting processes
-        like for e.g. cutting onions. TODO holding the button vs pressing once?
-
-        Args:
-            counter: The counter to interact with.
-        """
-        pass
-
     def perform_interact_hold_start(self, counter: Counter):
         """Starts an interaction with the counter. Should be called for a
         keydown event, for holding down a key on the keyboard.