diff --git a/biscuit/apps/chronos/models.py b/biscuit/apps/chronos/models.py
index 93eb2fd0d8909bd4a3c191bc07517609187bcb3d..ca292c56d4ed024ad6d8703963ab0a94c58f6b16 100644
--- a/biscuit/apps/chronos/models.py
+++ b/biscuit/apps/chronos/models.py
@@ -12,6 +12,19 @@ from biscuit.core.mixins import SchoolRelated
 from .util import CalendarWeek
 
 
+class LessonPeriodManager(models.Manager):
+    ''' Manager adding specific methods to lesson periods. '''
+
+    def get_queryset(self):
+        ''' Ensures all related lesson data is loaded as well. '''
+
+        return super().get_queryset().select_related(
+            'lesson', 'lesson__subject', 'period', 'room'
+        ).prefetch_related(
+            'lesson__groups', 'lesson__teachers', 'substitutions'
+        )
+
+
 class TimePeriod(SchoolRelated):
     WEEKDAY_CHOICES = [
         (0, _('Sunday')),
@@ -147,6 +160,8 @@ class LessonSubstitution(SchoolRelated):
 
 
 class LessonPeriod(SchoolRelated):
+    objects = LessonPeriodManager()
+
     lesson = models.ForeignKey('Lesson', models.CASCADE, related_name='lesson_periods')
     period = models.ForeignKey('TimePeriod', models.CASCADE, related_name='lesson_periods')
 
diff --git a/biscuit/apps/chronos/views.py b/biscuit/apps/chronos/views.py
index d35a6686e102f0d85a7a8fc9967ef369f73328d8..ec6be60b76428744e2ed115301f06a8da527aa87 100644
--- a/biscuit/apps/chronos/views.py
+++ b/biscuit/apps/chronos/views.py
@@ -33,10 +33,6 @@ def timetable(request: HttpRequest, year: Optional[int] = None, week: Optional[i
     lesson_periods = LessonPeriod.objects.filter(
         lesson__date_start__lte=wanted_week[0] + timedelta(days=1) * (F('period__weekday') - 1),
         lesson__date_end__gte=wanted_week[0] + timedelta(days=1) * (F('period__weekday') - 1)
-    ).select_related(
-        'lesson', 'lesson__subject', 'period', 'room'
-    ).prefetch_related(
-        'lesson__groups', 'lesson__teachers', 'substitutions'
     ).extra(
         select={'_week': wanted_week.week}
     )