diff --git a/aleksis/apps/alsijil/model_extensions.py b/aleksis/apps/alsijil/model_extensions.py
index 63096efa56ad136538bd5cd197c011eb00687edb..24a8ebcac5e6602f805335196641e53c86c0c8c3 100644
--- a/aleksis/apps/alsijil/model_extensions.py
+++ b/aleksis/apps/alsijil/model_extensions.py
@@ -1,5 +1,5 @@
 from datetime import date
-from typing import Dict, Optional, Union
+from typing import Dict, Optional, Union, Iterator
 
 from django.db.models import Exists, OuterRef, QuerySet
 from django.utils.translation import gettext as _
@@ -186,11 +186,12 @@ def get_or_create_lesson_documentation(
 
 
 @LessonPeriod.method
-def get_absences(self, week: Optional[CalendarWeek] = None) -> QuerySet:
+def get_absences(self, week: Optional[CalendarWeek] = None) -> Iterator:
     """Get all personal notes of absent persons for this lesson."""
     if not week:
         week = self.week
-    return self.personal_notes.filter(week=week.week, year=week.year, absent=True)
+
+    return filter(lambda p: p.week == week.week and p.year == week.year and p.absent, self.personal_notes.all())
 
 
 @LessonPeriod.method
@@ -230,7 +231,7 @@ def get_extra_marks(
         week = self.week
 
     stats = {}
-    for extra_mark in ExtraMark.objects.all():
+    for extra_mark in ExtraMark.all:
         qs = self.personal_notes.filter(
             week=week.week, year=week.year, extra_marks=extra_mark
         )
diff --git a/aleksis/apps/alsijil/models.py b/aleksis/apps/alsijil/models.py
index e64bac1afd260f3571c17bfa6b2c639c03d5b915..fe9d60e42e882fe418be6f263a3bc01e25663308 100644
--- a/aleksis/apps/alsijil/models.py
+++ b/aleksis/apps/alsijil/models.py
@@ -1,4 +1,6 @@
+from cache_memoize import cache_memoize
 from django.db import models
+from django.utils.decorators import classproperty
 from django.utils.formats import date_format
 from django.utils.translation import gettext_lazy as _
 
@@ -207,6 +209,11 @@ class ExtraMark(ExtensibleModel):
     def count_label(self):
         return f"{self.short_name}_count"
 
+    @classproperty
+    @cache_memoize(3600)
+    def all(cls):
+        return cls.objects.all()
+
     class Meta:
         ordering = ["short_name"]
         verbose_name = _("Extra mark")