diff --git a/biscuit/apps/alsijil/views.py b/biscuit/apps/alsijil/views.py
index 8f27bb203500723dc43afbdbca33e3e3b1023da5..a71a4c462da233c51d9c5c2523cd7982684fafa5 100644
--- a/biscuit/apps/alsijil/views.py
+++ b/biscuit/apps/alsijil/views.py
@@ -12,7 +12,7 @@ from django.utils.translation import ugettext as _
 from django.views.decorators.cache import cache_page
 
 from biscuit.apps.chronos.models import LessonPeriod, Room, TimePeriod
-from biscuit.apps.chronos.util import CalendarWeek, current_lesson_periods
+from biscuit.apps.chronos.util import CalendarWeek
 from biscuit.core.models import Group, Person
 
 from .forms import LessonDocumentationForm, PersonalNoteFormSet, SelectForm
@@ -29,8 +29,7 @@ def lesson(request: HttpRequest, year: Optional[int] = None, week: Optional[int]
         wanted_week = CalendarWeek(year=year, week=week)
     else:
         # Determine current lesson by current date and time
-        lesson_period = current_lesson_periods().filter(
-            Q(substitutions__teachers=request.user.person) | Q(lesson__teachers=request.user.person)).first()
+        lesson_period = LessonPeriod.objects.at_time().filter_teacher(request.user.person).first()
         wanted_week = CalendarWeek()
 
         if lesson_period:
@@ -104,39 +103,13 @@ def week_view(request: HttpRequest, year: Optional[int] = None, week: Optional[i
                 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}
-        )
-
-    teacher = None
-    group = None
-    room = None
+        ).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
-        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']))
+        lesson_periods = lesson_periods.filter_from_query(request.GET)
     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))
+        lesson_periods = lesson_periods.filter_group(group)
     else:
         lesson_periods = None
 
@@ -173,9 +146,6 @@ def week_view(request: HttpRequest, year: Optional[int] = None, week: Optional[i
 
     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
@@ -200,16 +170,10 @@ def full_register_group(request: HttpRequest, id_: int) -> HttpResponse:
             ~Q(topic__exact=''),
             lesson_period=OuterRef('pk'),
         ))
-    ).filter(
-        lesson__date_start__gte=group.school.current_term.date_start,
-        lesson__date_end__lte=group.school.current_term.date_end
-    ).select_related(
-        'lesson', 'lesson__subject', 'period', 'room'
-    ).prefetch_related(
-        'lesson__groups', 'lesson__teachers', 'substitutions', 'documentations'
-    ).filter(
-        Q(lesson__groups=group) | Q(lesson__groups__parent_groups=group)
-    ).distinct()
+    ).within_dates(
+        group.school.current_term.date_start,
+        group.school.current_term.date_end
+    ).filter_group(group).distinct()
 
     weeks = CalendarWeek.weeks_within(group.school.current_term.date_start, group.school.current_term.date_end)
     periods_by_day = {}