diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py
index ea9f02bcf5266b7d5ff651094fe5a770c3620b82..f2172e9c78cf02662c121f73d12c3babc8e04a7e 100644
--- a/aleksis/apps/chronos/models.py
+++ b/aleksis/apps/chronos/models.py
@@ -1404,6 +1404,16 @@ class LessonEvent(CalendarEvent):
         null=True,
     )
 
+    cancelled = models.BooleanField(
+        default=False,
+        verbose_name=_("Cancelled"),
+    )
+
+    comment = models.TextField(
+        verbose_name=_("Comment"),
+        blank=True,
+    )
+
     @property
     def all_members(self: "LessonEvent") -> list[Person]:
         return list(itertools.chain(*[list(g.members.all()) for g in self.groups.all()]))
@@ -1463,15 +1473,25 @@ class LessonEvent(CalendarEvent):
         """Get the location of the event."""
         return ", ".join([r.name for r in reference_object.rooms.all()])
 
+    @classmethod
+    def value_status(cls, reference_object: "LessonEvent") -> str:
+        """Get the status of the event."""
+        if reference_object.cancelled:
+            return "CANCELLED"
+        return "CONFIRMED"
+
     @classmethod
     def get_objects(cls, request) -> Iterable:
         """Return all objects that should be included in the calendar."""
-        return (
-            super()
-            .get_objects(request)
-            .filter(Q(teachers=request.user.person) | Q(groups__members=request.user.person))
-            .distinct()
-        )
+        objs = super().get_objects(request)
+        amended = objs.filter(
+            Q(teachers=request.user.person) | Q(groups__members=request.user.person)
+        ).values_list("amended_by__pk", flat=True)
+        return objs.filter(
+            Q(teachers=request.user.person)
+            | Q(groups__members=request.user.person)
+            | Q(pk__in=amended)
+        ).distinct()
 
     class Meta:
         verbose_name = _("Lesson Event")