diff --git a/lib/models/ConsultationSlot.php b/lib/models/ConsultationSlot.php
index d3d96160819302ed439e9d1db987302268080f05..8356a34bac07005c8cfefdaf9815a93e14b8c924 100644
--- a/lib/models/ConsultationSlot.php
+++ b/lib/models/ConsultationSlot.php
@@ -22,6 +22,8 @@
  */
 class ConsultationSlot extends SimpleORMap
 {
+    private const EVENT_PREFIX = 'Stud.IP-Consultation-Event#';
+
     /**
      * Configures the model.
      * @param array  $config Configuration
@@ -137,6 +139,14 @@ class ConsultationSlot extends SimpleORMap
         ]);
     }
 
+    /**
+     * Returns whether the given event is an event for a consultation slot.
+     */
+    public static function isSlotEvent(CalendarDate $event): bool
+    {
+        return str_starts_with($event->unique_id, self::EVENT_PREFIX);
+    }
+
     /**
      * Returns whether this slot is occupied (by a given user).
      *
@@ -195,10 +205,9 @@ class ConsultationSlot extends SimpleORMap
      * @param  User $user [description]
      * @return string unique event id
      */
-    protected function createEventId(User $user)
+    protected function createEventId(User $user): string
     {
-        $rand_id = md5(uniqid(self::class, true));
-        return "Termin{$rand_id}-{$user->id}";
+        return self::EVENT_PREFIX . "{$this->id}:{$user->id}";
     }
 
     /**
diff --git a/lib/models/calendar/CalendarDate.class.php b/lib/models/calendar/CalendarDate.class.php
index 7026ece1d8a2dad5d54f0b2fa4a1227c13a35ea2..89b9d3142d06a30caf5a0ebabd5defa61e84e327 100644
--- a/lib/models/calendar/CalendarDate.class.php
+++ b/lib/models/calendar/CalendarDate.class.php
@@ -189,6 +189,15 @@ class CalendarDate extends SimpleORMap implements PrivacyObject
 
     public function isWritable(string $range_id)
     {
+        if (ConsultationSlot::isSlotEvent($this)) {
+            return false;
+        }
+
+        if ($this->author_id === $range_id) {
+            //The author may always modify one of their dates:
+            return true;
+        }
+
         if (CalendarDateAssignment::exists([$range_id, $this->id])) {
             //The date is in the calendar of the user/course
             //and therefore, the user or course administrator (tutor, dozent)
diff --git a/lib/models/calendar/CalendarDateAssignment.class.php b/lib/models/calendar/CalendarDateAssignment.class.php
index bdde5caae63872532ad25d025de73d6c6da58748..8edf87f64bfe3ed8e231f8667004cc334b00011c 100644
--- a/lib/models/calendar/CalendarDateAssignment.class.php
+++ b/lib/models/calendar/CalendarDateAssignment.class.php
@@ -521,10 +521,6 @@ class CalendarDateAssignment extends SimpleORMap implements Event
 
     public function isWritable(string $user_id): bool
     {
-        if ($this->calendar_date->author_id === $user_id) {
-            //The author may always modify one of their dates:
-            return true;
-        }
         if ($this->calendar_date->isWritable($user_id)) {
             //The date is writable.
             return true;