diff --git a/aleksis/apps/chronos/util/predicates.py b/aleksis/apps/chronos/util/predicates.py
index f68f508943eef3bb9e0e39e96ecec3e4251dde5d..18190d3fbdae1279799643f42aa19909a39d4feb 100644
--- a/aleksis/apps/chronos/util/predicates.py
+++ b/aleksis/apps/chronos/util/predicates.py
@@ -13,28 +13,46 @@ from .chronos_helpers import get_classes, get_rooms, get_teachers
 @predicate
 def has_timetable_perm(user: User, obj: Model) -> bool:
     """Predicate which checks whether the user is allowed to access the requested timetable."""
-    if type(obj) is Group:
-        return (
-            obj in user.person.member_of.all()
-            or user.person.primary_group == obj
-            or obj in user.person.owner_of.all()
-            or has_global_perm("chronos.view_all_group_timetables")(user)
-            or has_object_perm("core.view_group_timetable")(user, obj)
-        )
-    elif type(obj) is Person:
-        return (
-            user.person == obj
-            or has_global_perm("chronos.view_all_person_timetables")(user)
-            or has_object_perm("core.view_person_timetable")(user, obj)
-        )
-    elif type(obj) is Room:
-        return has_global_perm("chronos.view_all_room_timetables")(user) or has_object_perm(
-            "chronos.view_room_timetable"
-        )(user, obj)
+    if isinstance(obj, Group):
+        return has_group_timetable_perm(user, obj)
+    elif isinstance(obj, Person):
+        return has_person_timetable_perm(user, obj)
+    elif isinstance(obj, Room):
+        return has_room_timetable_perm(user, obj)
     else:
         return False
 
 
+@predicate
+def has_group_timetable_perm(user: User, obj: Group) -> bool:
+    """Predicate which checks whether the user is allowed to access the requested group timetable."""
+    return (
+        obj in user.person.member_of.all()
+        or user.person.primary_group == obj
+        or obj in user.person.owner_of.all()
+        or has_global_perm("chronos.view_all_group_timetables")(user)
+        or has_object_perm("core.view_group_timetable")(user, obj)
+    )
+
+
+@predicate
+def has_person_timetable_perm(user: User, obj: Person) -> bool:
+    """Predicate which checks whether the user is allowed to access the requested person timetable."""
+    return (
+        user.person == obj
+        or has_global_perm("chronos.view_all_person_timetables")(user)
+        or has_object_perm("core.view_person_timetable")(user, obj)
+    )
+
+
+@predicate
+def has_room_timetable_perm(user: User, obj: Room) -> bool:
+    """Predicate which checks whether the user is allowed to access the requested room timetable."""
+    return has_global_perm("chronos.view_all_room_timetables")(user) or has_object_perm(
+        "chronos.view_room_timetable"
+    )(user, obj)
+
+
 @predicate
 def has_any_timetable_object(user: User) -> bool:
     """Predicate which checks whether there exists a timetable that the user is allowed to access."""