diff --git a/biscuit/apps/chronos/forms.py b/biscuit/apps/chronos/forms.py
index 718bfe13a05927fc956c3fac9ac42d3e081295a4..a242f060ae59e8b28bf0e064dc071f2a56f27fbc 100644
--- a/biscuit/apps/chronos/forms.py
+++ b/biscuit/apps/chronos/forms.py
@@ -10,10 +10,10 @@ from .models import Room
 class SelectForm(forms.Form):
     group = forms.ModelChoiceField(
         queryset=Group.objects.annotate(lessons_count=Count('lessons')).filter(lessons_count__gt=0),
-        label=_('Group'))
+        label=_('Group'), required=False)
     teacher = forms.ModelChoiceField(
         queryset=Person.objects.annotate(lessons_count=Count('lessons')).filter(lessons_count__gt=0),
-        label=_('Teacher'))
+        label=_('Teacher'), required=False)
     room = forms.ModelChoiceField(
         queryset=Room.objects.annotate(lessons_count=Count('lesson_periods')).filter(lessons_count__gt=0),
-        label=_('Room'))
+        label=_('Room'), required=False)
diff --git a/biscuit/apps/chronos/models.py b/biscuit/apps/chronos/models.py
index a6cb52f17fe6f0da935ca8f9a82161ddbdc2c666..16e2352040b7b33d2f5998f3db4cc675abf6975b 100644
--- a/biscuit/apps/chronos/models.py
+++ b/biscuit/apps/chronos/models.py
@@ -101,7 +101,7 @@ class LessonPeriod(models.Model):
     lesson = models.ForeignKey('Lesson', models.CASCADE)
     period = models.ForeignKey('TimePeriod', models.CASCADE)
 
-    room = models.ForeignKey('Room', models.CASCADE, null=True)
+    room = models.ForeignKey('Room', models.CASCADE, null=True, related_name='lesson_periods')
 
     def get_substitution(self, week: Optional[int] = None) -> LessonSubstitution:
         wanted_week = week or current_week()
diff --git a/biscuit/apps/chronos/views.py b/biscuit/apps/chronos/views.py
index d7c22fcc90a43657d28ca27b484f3d3429d08d55..a146181f95cc72b8747dca0e5a3e2717f4d776a7 100644
--- a/biscuit/apps/chronos/views.py
+++ b/biscuit/apps/chronos/views.py
@@ -20,17 +20,17 @@ from .util import current_week
 def timetable(request: HttpRequest) -> HttpResponse:
     context = {}
 
-    if request.GET:
-        lesson_periods = LessonPeriod.objects.all()
+    lesson_periods = LessonPeriod.objects.all()
 
+    if request.GET:
         # Incrementally filter lesson periods by GET parameters
-        if 'group' in request.GET:
+        if 'group' in request.GET and request.GET['group']:
             lesson_periods = lesson_periods.filter(
                 lesson__groups__pk=int(request.GET['group']))
-        if 'teacher' in request.GET:
+        if 'teacher' in request.GET and request.GET['teacher']:
             lesson_periods = lesson_periods.filter(
                 lesson__teachers__pk=int(request.GET['teacher']))
-        if 'room' in request.GET:
+        if 'room' in request.GET and request.GET['room']:
             lesson_periods = lesson_periods.filter(
                 room__pk=int(request.GET['room']))
     else:
@@ -48,7 +48,7 @@ def timetable(request: HttpRequest) -> HttpResponse:
                            {})[lesson_period.period.period] = lesson_period
 
     # Determine overall first and last day and period
-    min_max = TimePeriod.objects..aggregate(
+    min_max = TimePeriod.objects.aggregate(
         Min('period'), Max('period'),
         Min('weekday'), Max('weekday'))