diff --git a/overcooked_simulator/order.py b/overcooked_simulator/order.py
index 3d18af97497d35300ff93e9b08eee2c2d086a6d2..a5c55b3e4897fa7e1717102605ecb48a153405b8 100644
--- a/overcooked_simulator/order.py
+++ b/overcooked_simulator/order.py
@@ -53,7 +53,11 @@ class OrderGeneration:
 
     @abstractmethod
     def get_orders(
-        self, passed_time: timedelta, now: datetime, new_finished_orders: list[Order]
+        self,
+        passed_time: timedelta,
+        now: datetime,
+        new_finished_orders: list[Order],
+        expired_orders: list[Order],
     ) -> list[Order]:
         ...
 
@@ -92,9 +96,14 @@ class RandomOrderGeneration(OrderGeneration):
         )
 
     def get_orders(
-        self, passed_time: timedelta, now: datetime, new_finished_orders: list[Order]
+        self,
+        passed_time: timedelta,
+        now: datetime,
+        new_finished_orders: list[Order],
+        expired_orders: list[Order],
     ) -> list[Order]:
         self.number_cur_orders -= len(new_finished_orders)
+        self.number_cur_orders -= len(expired_orders)
         if self.kwargs.sample_on_serving:
             if new_finished_orders:
                 self.create_random_next_time_delta(now)
@@ -196,6 +205,7 @@ class OrderAndScoreManager:
         self.served_meals: list[Tuple[Item, datetime]] = []
         self.last_finished = []
         self.next_relevant_time = datetime.max
+        self.last_expired = []
 
     def update_next_relevant_time(self):
         next_relevant_time = datetime.max
@@ -255,10 +265,14 @@ class OrderAndScoreManager:
 
     def progress(self, passed_time: timedelta, now: datetime):
         new_orders = self.order_gen.get_orders(
-            passed_time=passed_time, now=now, new_finished_orders=self.last_finished
+            passed_time=passed_time,
+            now=now,
+            new_finished_orders=self.last_finished,
+            expired_orders=self.last_expired,
         )
         self.open_orders.extend(new_orders)
         self.last_finished = []
+        self.last_expired = []
         if new_orders or self.next_relevant_time <= now:
             remove_orders = []
             for index, order in enumerate(self.open_orders):
@@ -273,9 +287,11 @@ class OrderAndScoreManager:
                 for i in reversed(remove_penalties):
                     # or del order.timed_penalties[index]
                     order.timed_penalties.pop(i)
-
+            expired_orders = []
             for remove_order in reversed(remove_orders):
+                expired_orders.append(self.open_orders[remove_order])
                 del self.open_orders[remove_order]
+            self.last_expired = expired_orders
 
             self.update_next_relevant_time()