diff --git a/pilab/events/reservation.py b/pilab/events/reservation.py
index ec116bf03880ee7b3163c0cbe30056ee45e46387..8f8c66753459d68f129290d54a3520db5d06cd31 100644
--- a/pilab/events/reservation.py
+++ b/pilab/events/reservation.py
@@ -1,11 +1,12 @@
 import functools
 import json
+from json import JSONEncoder
 import logging
 import threading
 import time
 import traceback
 from collections import Counter
-from datetime import datetime
+from datetime import datetime, date
 from zoneinfo import ZoneInfo
 from typing import List, Callable, Optional, Dict
 
@@ -26,9 +27,16 @@ class Reservation(BaseModel):
     endtime: datetime
     extraUsers: Optional[List[str]] = None
     reason: str
-    pass
 
 
+class DateTimeEncoder(JSONEncoder):
+    # Override the default method
+    def default(self, obj):
+        if isinstance(obj, (date, datetime)):
+            return obj.isoformat()
+        return super().default(obj)
+    
+
 def send_event(event: Reservation):
     routing_key = f"res.cube.{event.cube_id}"
     try:
@@ -43,7 +51,7 @@ def send_event(event: Reservation):
             arguments={"x-queue-type": "stream"}
         )
 
-        event_serialized = json.dumps(event.dict()).encode('utf-8')
+        event_serialized = json.dumps(event.dict(), cls=DateTimeEncoder).encode('utf-8')
 
         channel.basic_publish(
             exchange='',
@@ -212,6 +220,10 @@ class ReservationConsumer(threading.Thread):
             self.callback(reservation)
             self._channel.basic_ack(basic_deliver.delivery_tag)
             logger.debug(f"Event processed successful")
+        except TypeError as e:
+            traceback.print_exc()
+            self._channel.basic_ack(basic_deliver.delivery_tag)
+            logger.debug(f"Event format could no get parsed")
         except Exception as e:
             traceback.print_exc()
             logger.error(f"Failed to process Event; message {e}")