diff --git a/aleksis/apps/alsijil/models.py b/aleksis/apps/alsijil/models.py
index cf692d4607e804aad67e0141ecab2c789c0281cf..848c6696161dbc04a847e6f0e9b42758d3a60ba5 100644
--- a/aleksis/apps/alsijil/models.py
+++ b/aleksis/apps/alsijil/models.py
@@ -177,9 +177,11 @@ class Documentation(CalendarEvent):
                         not request.user.has_perm(
                             "alsijil.edit_participation_status_for_documentation_rule", doc
                         )
-                        and not doc.participations.filter(
-                            person__pk=request.user.person.pk, absence_reason__isnull=False
-                        ).exists()
+                        and not [
+                            d
+                            for d in doc.participations.all()
+                            if d.absence_reason and d.person_id == request.user.person.id
+                        ]
                     )
                     or (
                         absences_exist
diff --git a/aleksis/apps/alsijil/schema/__init__.py b/aleksis/apps/alsijil/schema/__init__.py
index ceb9bbd4bd9e1593f7dd19a21795dd5192ad2ee3..fb2b1427e62393a63e33362460cf2a59f22de143 100644
--- a/aleksis/apps/alsijil/schema/__init__.py
+++ b/aleksis/apps/alsijil/schema/__init__.py
@@ -1,6 +1,5 @@
 from datetime import datetime
 
-from django.core.exceptions import PermissionDenied
 from django.db.models import BooleanField, ExpressionWrapper, Q
 
 import graphene
@@ -76,7 +75,13 @@ class Query(graphene.ObjectType):
 
     def resolve_documentations_by_course_id(root, info, course_id, **kwargs):
         documentations = Documentation.objects.filter(
-            Q(course__pk=course_id) | Q(amends__course__pk=course_id)
+            pk__in=Documentation.objects.filter(course_id=course_id)
+            .values_list("id", flat=True)
+            .union(
+                Documentation.objects.filter(amends__course_id=course_id).values_list(
+                    "id", flat=True
+                )
+            )
         )
         return documentations
 
@@ -112,7 +117,7 @@ class Query(graphene.ObjectType):
                 )
             )
         ):
-            raise PermissionDenied()
+            return []
 
         # Find all LessonEvents for all Lessons of this Course in this date range
         event_params = {
@@ -150,16 +155,22 @@ class Query(graphene.ObjectType):
         if person:
             person = Person.objects.get(pk=person)
             if not info.context.user.has_perm("core.view_person_rule", person):
-                raise PermissionDenied()
+                return []
         elif has_person(info.context.user):
             person = info.context.user.person
         else:
-            raise PermissionDenied()
+            return []
 
         return (
             Group.objects.for_current_school_term_or_all()
-            .filter(Q(members=person) | Q(owners=person) | Q(parent_groups__owners=person))
-            .distinct()
+            .filter(
+                pk__in=Group.objects.filter(members=person)
+                .values_list("id", flat=True)
+                .union(Group.objects.filter(owners=person).values_list("id", flat=True))
+                .union(
+                    Group.objects.filter(parent_groups__owners=person).values_list("id", flat=True)
+                )
+            )
             .annotate(
                 is_priority=ExpressionWrapper(
                     Q(group_type=get_site_preferences()["alsijil__group_type_priority_coursebook"]),
@@ -174,20 +185,24 @@ class Query(graphene.ObjectType):
         if person:
             person = Person.objects.get(pk=person)
             if not info.context.user.has_perm("core.view_person_rule", person):
-                raise PermissionDenied()
+                return []
         elif has_person(info.context.user):
             person = info.context.user.person
         else:
-            raise PermissionDenied()
+            return []
         return Course.objects.filter(
-            (
-                Q(teachers=person)
-                | Q(groups__members=person)
-                | Q(groups__owners=person)
-                | Q(groups__parent_groups__owners=person)
+            pk__in=(
+                Course.objects.filter(teachers=person)
+                .values_list("id", flat=True)
+                .union(Course.objects.filter(groups__members=person).values_list("id", flat=True))
+                .union(Course.objects.filter(groups__owners=person).values_list("id", flat=True))
+                .union(
+                    Course.objects.filter(groups__parent_groups__owners=person).values_list(
+                        "id", flat=True
+                    )
+                )
             )
-            & Q(groups__in=Group.objects.for_current_school_term_or_all())
-        ).distinct()
+        ).filter(groups__in=Group.objects.for_current_school_term_or_all())
 
     @staticmethod
     def resolve_absence_creation_persons(root, info, **kwargs):