diff --git a/aleksis/apps/alsijil/util/predicates.py b/aleksis/apps/alsijil/util/predicates.py
index e537cb51c6d0c6133128c9f32de21bee16f5b777..d591cbb8adb18af3a279dba2c51e14ad2f583332 100644
--- a/aleksis/apps/alsijil/util/predicates.py
+++ b/aleksis/apps/alsijil/util/predicates.py
@@ -135,14 +135,16 @@ def has_lesson_group_object_perm(perm: str):
     """
     name = f"has_lesson_group_object_perm:{perm}"
 
+    ct = ContentType.objects.get_for_model(Group)
+    permissions = Permission.objects.filter(content_type=ct, codename=perm)
+
     @predicate(name)
     def fn(user: User, obj: LessonPeriod) -> bool:
         if hasattr(obj, "lesson"):
-            for group in obj.lesson.groups.all():
-                if check_object_permission(user, perm, group):
-                    return True
-            return False
-        return True
+            groups = obj.lesson.groups.all()
+            qs = UserObjectPermission.objects.filter(object_pk__in=groups.values_list("pk", flat=True), content_type=ct, user=user, permission__in=permissions)
+            return qs.exists()
+        return False
 
     return fn
 
@@ -154,13 +156,16 @@ def has_personal_note_group_perm(perm: str):
     """
     name = f"has_personal_note_person_or_group_perm:{perm}"
 
+    ct = ContentType.objects.get_for_model(Person)
+    permissions = Permission.objects.filter(content_type=ct, codename=perm)
+
     @predicate(name)
     def fn(user: User, obj: PersonalNote) -> bool:
         if hasattr(obj, "person"):
-            for group in obj.person.member_of.all():
-                if check_object_permission(user, perm, group):
-                    return True
-            return False
+            groups = obj.person.member_of.all()
+            qs = UserObjectPermission.objects.filter(object_pk__in=groups.values_list("pk", flat=True), content_type=ct, user=user, permission__in=permissions)
+            return qs.exists()
+        return False
 
     return fn
 
@@ -224,10 +229,10 @@ def has_any_object_absence(user: User) -> bool:
     """
     Predicate which builds a query with all the persons the given users is allowed to register an absence for.
     """
-    if get_objects_for_user(user, "core.register_absence_person", Person).exists():
-        return True
     if Person.objects.filter(member_of__owners=user.person).exists():
         return True
+    if get_objects_for_user(user, "core.register_absence_person", Person).exists():
+        return True
     if Person.objects.filter(
         member_of__in=get_objects_for_user(user, "core.register_absence_group", Group)
     ).exists():