diff --git a/biscuit/apps/alsijil/forms.py b/biscuit/apps/alsijil/forms.py
index 6a84fdbaedd87f98c85cfb09854bb908b54dbcd8..be77cd06cae20c11b602af70b6716bd2bd33bfe7 100644
--- a/biscuit/apps/alsijil/forms.py
+++ b/biscuit/apps/alsijil/forms.py
@@ -2,7 +2,8 @@ from django import forms
 from django.db.models import Count
 from django.utils.translation import ugettext_lazy as _
 
-from biscuit.core.models import Group
+from biscuit.apps.chronos.models import Room
+from biscuit.core.models import Group, Person
 
 from .models import LessonDocumentation, PersonalNote
 
@@ -33,6 +34,14 @@ class SelectForm(forms.Form):
     group = forms.ModelChoiceField(
         queryset=Group.objects.annotate(lessons_count=Count('lessons')).filter(lessons_count__gt=0),
         label=_('Group'), required=False)
+    teacher = forms.ModelChoiceField(
+        queryset=Person.objects.annotate(lessons_count=Count(
+            'lessons')).filter(lessons_count__gt=0),
+        label=_('Teacher'), required=False)
+    room = forms.ModelChoiceField(
+        queryset=Room.objects.annotate(lessons_count=Count(
+            'lesson_periods')).filter(lessons_count__gt=0),
+        label=_('Room'), required=False)
 
 
 PersonalNoteFormSet = forms.modelformset_factory(
diff --git a/biscuit/apps/alsijil/menus.py b/biscuit/apps/alsijil/menus.py
index 32c08208ee3042ed6b6cf3d967516f083cb1699c..b5389356179362399cdb1e844eb4ae715943bcb8 100644
--- a/biscuit/apps/alsijil/menus.py
+++ b/biscuit/apps/alsijil/menus.py
@@ -15,7 +15,7 @@ MENUS = {
                 },
                 {
                     'name': _('Current week'),
-                    'url': 'group_week',
+                    'url': 'week_view',
                     'validators': ['menu_generator.validators.is_authenticated']
                 }
             ]
diff --git a/biscuit/apps/alsijil/templates/alsijil/group_week.html b/biscuit/apps/alsijil/templates/alsijil/week_view.html
similarity index 97%
rename from biscuit/apps/alsijil/templates/alsijil/group_week.html
rename to biscuit/apps/alsijil/templates/alsijil/week_view.html
index 5edeec5976088075dfea04fe37ef6dace76e7311..48150c4efd39bd539d8ab5c1a195c48c445096d0 100644
--- a/biscuit/apps/alsijil/templates/alsijil/group_week.html
+++ b/biscuit/apps/alsijil/templates/alsijil/week_view.html
@@ -22,7 +22,7 @@
     {% endif %}
   </div>
 
-  {% if group %}
+  {% if group or teacher or room %}
     <div class="row">
       <div class="col-md-7">
         <div class="card">
@@ -115,7 +115,7 @@
       <div class="card-body">
         <p>
           {% blocktrans %}
-            You must select a group to see the week summary.
+            You must select a group, a teacher or a room to see the week summary.
           {% endblocktrans %}
         </p>
       </div>
diff --git a/biscuit/apps/alsijil/urls.py b/biscuit/apps/alsijil/urls.py
index a87e088bc02a1360c7ac04f753fa6d295d6f3006..14dad5414ed7c76f8beb58c472dd47d69dcb2f35 100644
--- a/biscuit/apps/alsijil/urls.py
+++ b/biscuit/apps/alsijil/urls.py
@@ -7,9 +7,9 @@ urlpatterns = [
     path('lesson', views.lesson, name='lesson'),
     path('lesson/<int:year>/<int:week>/<int:period_id>', views.lesson,
          name='lesson_by_week_and_period'),
-    path('group/week', views.group_week, name='group_week'),
-    path('group/week/<int:year>/<int:week>', views.group_week,
-         name='group_week_by_week'),
+    path('week', views.week_view, name='week_view'),
+    path('week/<int:year>/<int:week>', views.week_view,
+         name='week_view_by_week'),
     path('print/group/<int:id_>', views.full_register_group,
         name='full_register_group')
 ]
diff --git a/biscuit/apps/alsijil/views.py b/biscuit/apps/alsijil/views.py
index ec8096f497a85fb8342fbe51f0af5fb8ef190355..8f27bb203500723dc43afbdbca33e3e3b1023da5 100644
--- a/biscuit/apps/alsijil/views.py
+++ b/biscuit/apps/alsijil/views.py
@@ -11,7 +11,7 @@ from django.urls import reverse
 from django.utils.translation import ugettext as _
 from django.views.decorators.cache import cache_page
 
-from biscuit.apps.chronos.models import LessonPeriod, TimePeriod
+from biscuit.apps.chronos.models import LessonPeriod, Room, TimePeriod
 from biscuit.apps.chronos.util import CalendarWeek, current_lesson_periods
 from biscuit.core.models import Group, Person
 
@@ -90,7 +90,7 @@ def lesson(request: HttpRequest, year: Optional[int] = None, week: Optional[int]
 
 
 @login_required
-def group_week(request: HttpRequest, year: Optional[int] = None, week: Optional[int] = None) -> HttpResponse:
+def week_view(request: HttpRequest, year: Optional[int] = None, week: Optional[int] = None) -> HttpResponse:
     context = {}
 
     if year and week:
@@ -98,18 +98,7 @@ def group_week(request: HttpRequest, year: Optional[int] = None, week: Optional[
     else:
         wanted_week = CalendarWeek()
 
-    if request.GET.get('group', None):
-        # Use requested group
-        group = Group.objects.get(pk=request.GET['group'])
-    elif hasattr(request, 'user') and hasattr(request.user, 'person'):
-        # Try to select group from owned groups of user
-        group = request.user.person.owner_of.first()
-    else:
-        group = None
-
-    if group:
-        # Get all lesson periods for the selected group
-        lesson_periods = LessonPeriod.objects.annotate(
+    lesson_periods = LessonPeriod.objects.annotate(
             has_documentation=Exists(LessonDocumentation.objects.filter(
                 ~Q(topic__exact=''),
                 lesson_period=OuterRef('pk'),
@@ -124,10 +113,34 @@ def group_week(request: HttpRequest, year: Optional[int] = None, week: Optional[
             'lesson__groups', 'lesson__teachers', 'substitutions'
         ).extra(
             select={'_week': wanted_week.week}
-        ).filter(
-            Q(lesson__groups=group) | Q(lesson__groups__parent_groups=group)
-        ).distinct()
+        )
+
+    teacher = None
+    group = None
+    room = None
+
+    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
+        if 'group' in request.GET and request.GET['group']:
+            group = Group.objects.get(pk=request.GET['group'])
+            lesson_periods = lesson_periods.filter(
+                Q(lesson__groups__pk=int(request.GET['group'])) | Q(lesson__groups__parent_groups__pk=int(request.GET['group'])))
+        if 'teacher' in request.GET and request.GET['teacher']:
+            teacher = Person.objects.get(pk=request.GET['teacher'])
+            lesson_periods = lesson_periods.filter(
+                Q(substitutions__teachers__pk=int(request.GET['teacher']), substitutions__week=wanted_week.week) | Q(lesson__teachers__pk=int(request.GET['teacher'])))
+        if 'room' in request.GET and request.GET['room']:
+            room = Room.objects.get(pk=request.GET['room'])
+            lesson_periods = lesson_periods.filter(
+                room__pk=int(request.GET['room']))
+    elif hasattr(request, 'user') and hasattr(request.user, 'person'):
+        group = request.user.person.owner_of.first()
+        lesson_periods = lesson_periods.filter(
+            Q(lesson__groups=group) | Q(lesson__groups__parent_groups=group))
+    else:
+        lesson_periods = None
 
+    if lesson_periods:
         # Aggregate all personal notes for this group and week
         persons = Person.objects.filter(
             is_active=True
@@ -153,28 +166,26 @@ def group_week(request: HttpRequest, year: Optional[int] = None, week: Optional[
             ))
         )
     else:
-        lesson_periods = None
         persons = None
 
     # Add a form to filter the view
     select_form = SelectForm(request.GET or None)
 
-
-
     context['current_head'] = str(wanted_week)
     context['week'] = wanted_week
     context['group'] = group
+    context['teacher'] = teacher
+    context['room'] = room
     context['lesson_periods'] = lesson_periods
     context['persons'] = persons
     context['select_form'] = select_form
 
     week_prev = wanted_week - 1
     week_next = wanted_week + 1
-    context['url_prev'] = '%s?%s' % (reverse('group_week_by_week', args=[week_prev.year, week_prev.week]), request.GET.urlencode())
-    context['url_next'] = '%s?%s' % (reverse('group_week_by_week', args=[week_next.year, week_next.week]), request.GET.urlencode())
-
+    context['url_prev'] = '%s?%s' % (reverse('week_view_by_week', args=[week_prev.year, week_prev.week]), request.GET.urlencode())
+    context['url_next'] = '%s?%s' % (reverse('week_view_by_week', args=[week_next.year, week_next.week]), request.GET.urlencode())
 
-    return render(request, 'alsijil/group_week.html', context)
+    return render(request, 'alsijil/week_view.html', context)
 
 
 @login_required