diff --git a/biscuit/apps/chronos/forms.py b/biscuit/apps/chronos/forms.py
new file mode 100644
index 0000000000000000000000000000000000000000..718bfe13a05927fc956c3fac9ac42d3e081295a4
--- /dev/null
+++ b/biscuit/apps/chronos/forms.py
@@ -0,0 +1,19 @@
+from django import forms
+from django.db.models import Count
+from django.utils.translation import ugettext_lazy as _
+
+from biscuit.core.models import Person, Group
+
+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'))
+    teacher = forms.ModelChoiceField(
+        queryset=Person.objects.annotate(lessons_count=Count('lessons')).filter(lessons_count__gt=0),
+        label=_('Teacher'))
+    room = forms.ModelChoiceField(
+        queryset=Room.objects.annotate(lessons_count=Count('lesson_periods')).filter(lessons_count__gt=0),
+        label=_('Room'))
diff --git a/biscuit/apps/chronos/templates/chronos/tt_week.html b/biscuit/apps/chronos/templates/chronos/tt_week.html
index 7293aa68541b51d414f45df68ae51d15dc86e750..d590d6fed85156901b966027ef771cbe21357f14 100644
--- a/biscuit/apps/chronos/templates/chronos/tt_week.html
+++ b/biscuit/apps/chronos/templates/chronos/tt_week.html
@@ -10,9 +10,13 @@
 {% block page_title %}Timetable{% endblock %}
 
 {% block content %}
- <p>
-  {{ filter_descs }}
- </p>
+ <form method="get">
+  {% csrf_token %}
+  <ul id="timetable_select_form">
+   {{ select_form.as_ul }}
+  </ul>
+  <input type="submit" value="Select" /> 
+ </form>
 
  <div class="row">
   <div class="col-sm px-0">
diff --git a/biscuit/apps/chronos/views.py b/biscuit/apps/chronos/views.py
index 1e5694ce16afd0edb8f2f8a820de83004bfc5706..c458fa5671e5932bf584d81565bbd15b012b8b59 100644
--- a/biscuit/apps/chronos/views.py
+++ b/biscuit/apps/chronos/views.py
@@ -10,6 +10,7 @@ from django.utils.translation import ugettext as _
 from biscuit.core.decorators import admin_required
 from biscuit.core.models import Group, Person
 
+from .forms import SelectForm
 from .models import LessonPeriod, TimePeriod, Room
 from .util import current_week
 
@@ -20,23 +21,16 @@ def timetable(request: HttpRequest) -> HttpResponse:
     context = {}
 
     lesson_periods = LessonPeriod.objects.all()
-    filter_descs = []
 
     if 'group' in request.GET:
         lesson_periods = lesson_periods.filter(
             lesson__groups__pk=int(request.GET['group']))
-        filter_descs.append(_('Group: %s') % Group.objects.get(
-            pk=int(request.GET['group'])))
     elif 'teacher' in request.GET:
         lesson_periods = lesson_periods.filter(
             lesson__teachers__pk=int(request.GET['teacher']))
-        filter_descs.append(_('Teacher: %s') % Person.objects.get(
-            pk=int(request.GET['teacher'])))
     elif 'room' in request.GET:
         lesson_periods = lesson_periods.filter(
             room__pk=int(request.GET['room']))
-        filter_descs.append(_('Room: %s') % Room.objects.get(
-            pk=int(request.GET['room'])))
     else:
         if request.user.person:
             if request.user.person.primary_group:
@@ -72,10 +66,13 @@ def timetable(request: HttpRequest) -> HttpResponse:
         per_day[weekday_num] = OrderedDict(
             sorted(per_day[weekday_num].items()))
 
+    # Add a form to filter the view
+    select_form = SelectForm(request.GET or None)
+
     context['lesson_periods'] = OrderedDict(sorted(per_day.items()))
-    context['filter_descs'] = ', '.join(filter_descs)
     context['periods'] = TimePeriod.get_times_dict()
     context['weekdays'] = dict(TimePeriod.WEEKDAY_CHOICES)
     context['current_week'] = current_week()
+    context['select_form'] = select_form
 
     return render(request, 'chronos/tt_week.html', context)