diff --git a/aleksis/apps/chronos/schema/__init__.py b/aleksis/apps/chronos/schema/__init__.py
index 542aff57fc132f506a58cbafa1b57c43fd34c94f..898de1e363af867398d64e2f09998aa5afe9342e 100644
--- a/aleksis/apps/chronos/schema/__init__.py
+++ b/aleksis/apps/chronos/schema/__init__.py
@@ -1,4 +1,5 @@
 import graphene
+import graphene_django_optimizer
 from graphene_django import DjangoObjectType
 
 from aleksis.core.models import Group, Person, Room
@@ -10,7 +11,10 @@ from aleksis.core.schema.base import (
 from aleksis.core.schema.group import GroupType
 from aleksis.core.schema.person import PersonType
 from aleksis.core.schema.room import RoomType
-from aleksis.core.util.core_helpers import get_site_preferences, has_person
+from aleksis.core.util.core_helpers import (
+    get_site_preferences,
+    has_person,
+)
 
 from ..models import LessonEvent
 from ..util.build import build_substitutions_list
@@ -238,17 +242,19 @@ class Query(graphene.ObjectType):
     timetable_days = graphene.List(graphene.Int)
 
     def resolve_timetable_teachers(self, info, **kwargs):
-        return get_teachers(info.context.user)
+        return graphene_django_optimizer.query(get_teachers(info.context.user), info)
 
     def resolve_timetable_groups(self, info, **kwargs):
-        return get_groups(info.context.user)
+        return graphene_django_optimizer.query(
+            get_groups(info.context.user, request=info.context), info
+        )
 
     def resolve_timetable_rooms(self, info, **kwargs):
-        return get_rooms(info.context.user)
+        return graphene_django_optimizer.query(get_rooms(info.context.user), info)
 
     def resolve_available_timetables(self, info, **kwargs):
         all_timetables = []
-        for group in get_groups(info.context.user):
+        for group in get_groups(info.context.user, request=info.context):
             all_timetables.append(
                 TimetableObjectType(
                     id=group.id,
diff --git a/aleksis/apps/chronos/util/build.py b/aleksis/apps/chronos/util/build.py
index 66168ce2496758b6525c98fb31afbd5c686a84b5..a84e4800040897a99e5be03b2318b9e1c4a8e854 100644
--- a/aleksis/apps/chronos/util/build.py
+++ b/aleksis/apps/chronos/util/build.py
@@ -37,7 +37,6 @@ def build_substitutions_list(wanted_day: date) -> tuple[list[dict], set[Person],
         params={"amending": True},
         with_reference_object=True,
     )
-    print(supervision_events)
 
     for supervision_event in supervision_events:
         affected_teachers.update(supervision_event["REFERENCE_OBJECT"].teachers.all())
diff --git a/aleksis/apps/chronos/util/chronos_helpers.py b/aleksis/apps/chronos/util/chronos_helpers.py
index 70688e8e585200a6709be110d9770d64f33e971d..851db2b1d7f8f1434ad2d2be1420be786983897d 100644
--- a/aleksis/apps/chronos/util/chronos_helpers.py
+++ b/aleksis/apps/chronos/util/chronos_helpers.py
@@ -8,8 +8,8 @@ from django.shortcuts import get_object_or_404
 from guardian.shortcuts import get_objects_for_user
 
 from aleksis.apps.cursus.models import Course
-from aleksis.core.models import Announcement, Group, Person, Room
-from aleksis.core.util.core_helpers import get_site_preferences
+from aleksis.core.models import Announcement, Group, Person, Room, SchoolTerm
+from aleksis.core.util.core_helpers import get_active_school_term, get_site_preferences
 
 from ..managers import TimetableType
 from .build import build_substitutions_list
@@ -63,10 +63,12 @@ def get_teachers(user: "User"):
     return teachers
 
 
-def get_groups(user: "User"):
+def get_groups(user: "User", request=None):
     """Get the groups whose timetables are allowed to be seen by current user."""
 
-    groups = Group.objects.for_current_school_term_or_all()
+    school_term = get_active_school_term(request) if request is not None else SchoolTerm.current
+
+    groups = Group.objects.for_school_term(school_term)
 
     group_types = get_site_preferences()["chronos__group_types_timetables"]