diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py
index 194b5fc9c4047efef384975978874102239cb64d..41172d6732c812ac6311786a86594da4650fe6d2 100644
--- a/aleksis/apps/chronos/models.py
+++ b/aleksis/apps/chronos/models.py
@@ -222,7 +222,7 @@ class LessonPeriodQuerySet(LessonDataQuerySet):
         if type_ == "teacher":
             # Teacher
 
-            return person.lesson_periods_as_teacher
+            return self.filter_teacher(person)
 
         elif type_ == "group":
             # Student
@@ -761,6 +761,18 @@ class SupervisionQuerySet(models.QuerySet):
             | Q(break_item__after_period__weekday=weekday)
         )
 
+    def filter_by_teacher(self, teacher: Union[Person, int]):
+        """ Filter for all supervisions given by a certain teacher. """
+
+        if self.count() > 0:
+            week = CalendarWeek(week=self[0]._week)
+
+            dates = [week[w] for w in range(0, 7)]
+
+            return self.filter(Q(substitutions__teacher=teacher, substitutions__date__in=dates) | Q(teacher=teacher))
+
+        return self
+
 
 class Supervision(ExtensibleModel):
     objects = models.Manager.from_queryset(SupervisionQuerySet)()
diff --git a/aleksis/apps/chronos/util/build.py b/aleksis/apps/chronos/util/build.py
index 5e9f7cefdd04cbfe31fff69786d639afaddaf0d1..ee9d87101ffae41169b90e0d20723bed44207df1 100644
--- a/aleksis/apps/chronos/util/build.py
+++ b/aleksis/apps/chronos/util/build.py
@@ -61,7 +61,7 @@ def build_timetable(
             week = CalendarWeek.from_date(date_ref)
         else:
             week = date_ref
-        supervisions = Supervision.objects.filter(teacher=obj).annotate_week(week)
+        supervisions = Supervision.objects.all().annotate_week(week).filter_by_teacher(obj)
 
         if is_person:
             supervisions.filter_by_weekday(date_ref.weekday())