diff --git a/aleksis/apps/chronos/apps.py b/aleksis/apps/chronos/apps.py
index 73f66b1466a2d5d9e6c3d0a3b8b0780afdeda9ac..698cc3b9b71c327d0c0022d365b3ba4a80b7dbec 100644
--- a/aleksis/apps/chronos/apps.py
+++ b/aleksis/apps/chronos/apps.py
@@ -10,10 +10,11 @@ class ChronosConfig(AppConfig):
     }
     licence = "EUPL-1.2+"
     copyright_info = (
-        ([2018, 2019, 2020], "Jonathan Weth", "wethjo@katharineum.de"),
+        ([2018, 2019, 2020, 2021], "Jonathan Weth", "wethjo@katharineum.de"),
         ([2018, 2019], "Frank Poetzsch-Heffter", "p-h@katharineum.de"),
         ([2019, 2020], "Dominik George", "dominik.george@teckids.org"),
+        ([2019, 2021], "Hangzhi Yu", "yuha@katharineum.de"),
         ([2019], "Julian Leucker", "leuckeju@katharineum.de"),
         ([2019], "Tom Teichler", "tom.teichler@teckids.org"),
-        ([2019], "Hangzhi Yu", "yuha@katharineum.de"),
+        ([2021], "Lloyd Meins", "meinsll@katharineum.de"),
     )
diff --git a/aleksis/apps/chronos/menus.py b/aleksis/apps/chronos/menus.py
index 4a07e4e87d46782bd43782725e6a54b549c3393c..89fb6d8ddb6383e71c167191abb9a428fc62f25e 100644
--- a/aleksis/apps/chronos/menus.py
+++ b/aleksis/apps/chronos/menus.py
@@ -19,7 +19,7 @@ MENUS = {
                     "validators": [
                         (
                             "aleksis.core.util.predicates.permission_validator",
-                            "chronos.view_my_timetable",
+                            "chronos.view_my_timetable_rule",
                         ),
                     ],
                 },
@@ -30,7 +30,7 @@ MENUS = {
                     "validators": [
                         (
                             "aleksis.core.util.predicates.permission_validator",
-                            "chronos.view_timetable_overview",
+                            "chronos.view_timetable_overview_rule",
                         ),
                     ],
                 },
@@ -41,7 +41,7 @@ MENUS = {
                     "validators": [
                         (
                             "aleksis.core.util.predicates.permission_validator",
-                            "chronos.view_lessons_day",
+                            "chronos.view_lessons_day_rule",
                         ),
                     ],
                 },
@@ -52,7 +52,7 @@ MENUS = {
                     "validators": [
                         (
                             "aleksis.core.util.predicates.permission_validator",
-                            "chronos.view_substitutions",
+                            "chronos.view_substitutions_rule",
                         ),
                     ],
                 },
diff --git a/aleksis/apps/chronos/rules.py b/aleksis/apps/chronos/rules.py
index 6be07872b6bb0689f90d9169aa83f3cc7016ca4f..d34a3f494ee0e3d06ef6574ac2f4ff8d4f01104b 100644
--- a/aleksis/apps/chronos/rules.py
+++ b/aleksis/apps/chronos/rules.py
@@ -14,39 +14,39 @@ from .util.predicates import has_any_timetable_object, has_room_timetable_perm,
 view_timetable_overview_predicate = has_person & (
     has_any_timetable_object | has_global_perm("chronos.view_timetable_overview")
 )
-add_perm("chronos.view_timetable_overview", view_timetable_overview_predicate)
+add_perm("chronos.view_timetable_overview_rule", view_timetable_overview_predicate)
 
 # View my timetable
-add_perm("chronos.view_my_timetable", has_person)
+add_perm("chronos.view_my_timetable_rule", has_person)
 
 # View timetable
 view_timetable_predicate = has_person & has_timetable_perm
-add_perm("chronos.view_timetable", view_timetable_predicate)
+add_perm("chronos.view_timetable_rule", view_timetable_predicate)
 
 # View all lessons per day
 view_lessons_day_predicate = has_person & has_global_perm("chronos.view_lessons_day")
-add_perm("chronos.view_lessons_day", view_lessons_day_predicate)
+add_perm("chronos.view_lessons_day_rule", view_lessons_day_predicate)
 
 # Edit substition
 edit_substitution_predicate = has_person & (
     has_global_perm("chronos.change_lessonsubstitution")
     | has_object_perm("chronos.change_lessonsubstitution")
 )
-add_perm("chronos.edit_substitution", edit_substitution_predicate)
+add_perm("chronos.edit_substitution_rule", edit_substitution_predicate)
 
 # Delete substitution
 delete_substitution_predicate = has_person & (
     has_global_perm("chronos.delete_lessonsubstitution")
     | has_object_perm("chronos.delete_lessonsubstitution")
 )
-add_perm("chronos.delete_substitution", delete_substitution_predicate)
+add_perm("chronos.delete_substitution_rule", delete_substitution_predicate)
 
 # View substitutions
 view_substitutions_predicate = has_person & (
     has_global_perm("chronos.view_lessonsubstitution")
-    | has_any_object("chronos.view_lessonsubstitution", LessonSubstitution)
+    | has_any_object("chronos.view_lessonsubstitution_rule", LessonSubstitution)
 )
-add_perm("chronos.view_substitutions", view_substitutions_predicate)
+add_perm("chronos.view_substitutions_rule", view_substitutions_predicate)
 
 # View room (timetable)
 view_room_predicate = has_person & has_room_timetable_perm
diff --git a/aleksis/apps/chronos/views.py b/aleksis/apps/chronos/views.py
index 4ddc0c73b7d8f24b5b6adc8d0a6a9aaeaf3e0d9f..67e256a352e5cedffb6290673e7b903f49e4117e 100644
--- a/aleksis/apps/chronos/views.py
+++ b/aleksis/apps/chronos/views.py
@@ -33,7 +33,7 @@ from .util.date import CalendarWeek, get_weeks_for_year
 from .util.js import date_unix
 
 
-@permission_required("chronos.view_timetable_overview")
+@permission_required("chronos.view_timetable_overview_rule")
 def all_timetables(request: HttpRequest) -> HttpResponse:
     """View all timetables for persons, groups and rooms."""
     context = {}
@@ -48,7 +48,7 @@ def all_timetables(request: HttpRequest) -> HttpResponse:
     return render(request, "chronos/all.html", context)
 
 
-@permission_required("chronos.view_my_timetable")
+@permission_required("chronos.view_my_timetable_rule")
 def my_timetable(
     request: HttpRequest,
     year: Optional[int] = None,
@@ -109,7 +109,7 @@ def my_timetable(
         return redirect("all_timetables")
 
 
-@permission_required("chronos.view_timetable", fn=get_el_by_pk)
+@permission_required("chronos.view_timetable_rule", fn=get_el_by_pk)
 def timetable(
     request: HttpRequest,
     type_: str,
@@ -195,7 +195,7 @@ def timetable(
         return render(request, "chronos/timetable.html", context)
 
 
-@permission_required("chronos.view_lessons_day")
+@permission_required("chronos.view_lessons_day_rule")
 def lessons_day(
     request: HttpRequest,
     year: Optional[int] = None,
@@ -235,7 +235,7 @@ def lessons_day(
 
 
 @never_cache
-@permission_required("chronos.edit_substitution", fn=get_substitution_by_id)
+@permission_required("chronos.edit_substitution_rule", fn=get_substitution_by_id)
 def edit_substitution(request: HttpRequest, id_: int, week: int) -> HttpResponse:
     """View a form to edit a substitution lessen."""
     context = {}
@@ -271,7 +271,7 @@ def edit_substitution(request: HttpRequest, id_: int, week: int) -> HttpResponse
     return render(request, "chronos/edit_substitution.html", context)
 
 
-@permission_required("chronos.delete_substitution", fn=get_substitution_by_id)
+@permission_required("chronos.delete_substitution_rule", fn=get_substitution_by_id)
 def delete_substitution(request: HttpRequest, id_: int, week: int) -> HttpResponse:
     """Delete a substitution lesson.
 
@@ -288,7 +288,7 @@ def delete_substitution(request: HttpRequest, id_: int, week: int) -> HttpRespon
     return redirect("lessons_day_by_date", year=date.year, month=date.month, day=date.day)
 
 
-@permission_required("chronos.view_substitutions")
+@permission_required("chronos.view_substitutions_rule")
 def substitutions(
     request: HttpRequest,
     year: Optional[int] = None,