diff --git a/biscuit/apps/alsijil/views.py b/biscuit/apps/alsijil/views.py
index ec8096f497a85fb8342fbe51f0af5fb8ef190355..fd8b87dfc5b92787aac0412d05ca35c743269c71 100644
--- a/biscuit/apps/alsijil/views.py
+++ b/biscuit/apps/alsijil/views.py
@@ -128,34 +128,77 @@ def group_week(request: HttpRequest, year: Optional[int] = None, week: Optional[
             Q(lesson__groups=group) | Q(lesson__groups__parent_groups=group)
         ).distinct()
 
-        # Aggregate all personal notes for this group and week
-        persons = Person.objects.filter(
-            is_active=True
+    elif teacher:
+        # Get all lesson periods for the selected teacher
+        lesson_periods = LessonPeriod.objects.annotate(
+            has_documentation=Exists(LessonDocumentation.objects.filter(
+                ~Q(topic__exact=''),
+                lesson_period=OuterRef('pk'),
+                week=wanted_week.week
+            ))
         ).filter(
-            Q(member_of=group) | Q(member_of__parent_groups=group)
-        ).distinct().prefetch_related(
-            'personal_notes'
-        ).annotate(
-            absences=Count('personal_notes__absent', filter=Q(
-                personal_notes__lesson_period__in=lesson_periods,
-                personal_notes__week=wanted_week.week,
-                personal_notes__absent=True
-            )),
-            unexcused=Count('personal_notes__absent', filter=Q(
-                personal_notes__lesson_period__in=lesson_periods,
-                personal_notes__week=wanted_week.week,
-                personal_notes__absent=True,
-                personal_notes__excused=False
-            )),
-            tardiness=Sum('personal_notes__late', filter=Q(
-                personal_notes__lesson_period__in=lesson_periods,
-                personal_notes__week=wanted_week.week
+            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}
+        ).filter(
+            Q(lesson__teachers=teachers)
+        ).distinct()
+
+    elif room:
+        # Get all lesson periods for the selected teacher
+        lesson_periods = LessonPeriod.objects.annotate(
+            has_documentation=Exists(LessonDocumentation.objects.filter(
+                ~Q(topic__exact=''),
+                lesson_period=OuterRef('pk'),
+                week=wanted_week.week
             ))
-        )
+        ).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}
+        ).filter(
+            Q(room=room)
+        ).distinct()
+
     else:
         lesson_periods = None
         persons = None
 
+    # Aggregate all personal notes for this group and week
+    persons = Person.objects.filter(
+        is_active=True
+    ).filter(
+        Q(member_of=group) | Q(member_of__parent_groups=group)
+    ).distinct().prefetch_related(
+        'personal_notes'
+    ).annotate(
+        absences=Count('personal_notes__absent', filter=Q(
+            personal_notes__lesson_period__in=lesson_periods,
+            personal_notes__week=wanted_week.week,
+            personal_notes__absent=True
+        )),
+        unexcused=Count('personal_notes__absent', filter=Q(
+            personal_notes__lesson_period__in=lesson_periods,
+            personal_notes__week=wanted_week.week,
+            personal_notes__absent=True,
+            personal_notes__excused=False
+        )),
+        tardiness=Sum('personal_notes__late', filter=Q(
+            personal_notes__lesson_period__in=lesson_periods,
+            personal_notes__week=wanted_week.week
+        ))
+    )
+
     # Add a form to filter the view
     select_form = SelectForm(request.GET or None)