diff --git a/biscuit/apps/chronos/models.py b/biscuit/apps/chronos/models.py
index ca292c56d4ed024ad6d8703963ab0a94c58f6b16..05dd51cd49a47f85acab86b4b7d929266d069d05 100644
--- a/biscuit/apps/chronos/models.py
+++ b/biscuit/apps/chronos/models.py
@@ -1,4 +1,4 @@
-from datetime import datetime
+from datetime import datetime, timedelta
 from typing import Dict, Optional, Tuple
 
 from django.core import validators
@@ -25,6 +25,18 @@ class LessonPeriodManager(models.Manager):
         )
 
 
+class LessonPeriodQuerySet(models.QuerySet):
+    ''' Overrides default QuerySet to add specific methods for lesson data. '''
+
+    def in_week(self, wanted_week: CalendarWeek):
+        return self.filter(
+            lesson__date_start__lte=wanted_week[0] + timedelta(days=1) * (models.F('period__weekday') - 1),
+            lesson__date_end__gte=wanted_week[0] + timedelta(days=1) * (models.F('period__weekday') - 1)
+        ).extra(
+            select={'_week': wanted_week.week}
+        )
+
+
 class TimePeriod(SchoolRelated):
     WEEKDAY_CHOICES = [
         (0, _('Sunday')),
@@ -160,7 +172,7 @@ class LessonSubstitution(SchoolRelated):
 
 
 class LessonPeriod(SchoolRelated):
-    objects = LessonPeriodManager()
+    objects = LessonPeriodManager.from_queryset(LessonPeriodQuerySet)()
 
     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 ec6be60b76428744e2ed115301f06a8da527aa87..cf2c293b1936b0f747a227db1945afcba7113a26 100644
--- a/biscuit/apps/chronos/views.py
+++ b/biscuit/apps/chronos/views.py
@@ -3,7 +3,6 @@ from collections import OrderedDict
 from typing import Optional
 
 from django.contrib.auth.decorators import login_required
-from django.db.models import F, Max, Min, Q
 from django.http import HttpRequest, HttpResponse
 from django.shortcuts import get_object_or_404, redirect, render
 from django.views.decorators.cache import cache_page
@@ -30,12 +29,7 @@ def timetable(request: HttpRequest, year: Optional[int] = None, week: Optional[i
     else:
         wanted_week = CalendarWeek()
 
-    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)
-    ).extra(
-        select={'_week': wanted_week.week}
-    )
+    lesson_periods = LessonPeriod.objects.in_week(wanted_week)
 
     if request.GET.get('group', None) or request.GET.get('teacher', None) or request.GET.get('room', None):
         # Incrementally filter lesson periods by GET parameters