diff --git a/aleksis/apps/alsijil/models.py b/aleksis/apps/alsijil/models.py
index d681e04addb79970530528058a82a4934d6d8f0f..4d2487e0ccf091c07040084401e442dcd7684b30 100644
--- a/aleksis/apps/alsijil/models.py
+++ b/aleksis/apps/alsijil/models.py
@@ -154,7 +154,9 @@ class Documentation(CalendarEvent):
                 datetime_end__gte=datetime_start,
                 amends__in=[e["REFERENCE_OBJECT"] for e in events],
             )
-            .prefetch_related("participations", "teachers")
+            .prefetch_related(
+                "participations", "teachers", "personal_notes", "personal_notes__extra_mark"
+            )
             .select_related("course", "subject")
         )
 
diff --git a/aleksis/apps/alsijil/schema/documentation.py b/aleksis/apps/alsijil/schema/documentation.py
index fe45b7fb248a59da62a95e07063e19732626dc91..93e844c5642eed9e987f32366dfb2f02e69d6346 100644
--- a/aleksis/apps/alsijil/schema/documentation.py
+++ b/aleksis/apps/alsijil/schema/documentation.py
@@ -117,6 +117,11 @@ class DocumentationType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectTyp
                     p for p in root.participations.all() if p.person == info.context.user.person
                 ]
             return []
+
+        # Annotate participations with prefetched documentation data for personal notes
+        for participation in root.participations.all():
+            participation._prefetched_documentation = root
+
         return root.participations.all()
 
 
diff --git a/aleksis/apps/alsijil/schema/participation_status.py b/aleksis/apps/alsijil/schema/participation_status.py
index 22e5820594994b2d1bb4c81ae4f5a83f615bea0b..bb0e24e0564ab5f87a3fe1a25c85f4d8c5766241 100644
--- a/aleksis/apps/alsijil/schema/participation_status.py
+++ b/aleksis/apps/alsijil/schema/participation_status.py
@@ -41,6 +41,12 @@ class ParticipationStatusType(
 
     @staticmethod
     def resolve_notes_with_extra_mark(root: ParticipationStatus, info, **kwargs):
+        if hasattr(root, "_prefetched_documentation"):
+            return [
+                p
+                for p in root._prefetched_documentation.personal_notes.all()
+                if p.person_id == root.person_id and p.extra_mark
+            ]
         return NewPersonalNote.objects.filter(
             person=root.person,
             documentation=root.related_documentation,
@@ -49,6 +55,12 @@ class ParticipationStatusType(
 
     @staticmethod
     def resolve_notes_with_note(root: ParticipationStatus, info, **kwargs):
+        if hasattr(root, "_prefetched_documentation"):
+            return [
+                p
+                for p in root._prefetched_documentation.personal_notes.all()
+                if p.person_id == root.person_id and p.note
+            ]
         return NewPersonalNote.objects.filter(
             person=root.person,
             documentation=root.related_documentation,