diff --git a/aleksis/apps/chronos/frontend/components/SelectTimetable.vue b/aleksis/apps/chronos/frontend/components/SelectTimetable.vue
index fb98d1f56c51d4261502df5d8ec2889e39e6445c..4f880bdc2bf7952017f7c92cd149e1cd5ad23c27 100644
--- a/aleksis/apps/chronos/frontend/components/SelectTimetable.vue
+++ b/aleksis/apps/chronos/frontend/components/SelectTimetable.vue
@@ -68,7 +68,7 @@ export default {
           class="flex-grow-1"
           :value="type.id"
         >
-          {{ type.name }}
+          {{ $t(type.name) }}
         </v-btn>
       </v-btn-toggle>
     </v-card-text>
diff --git a/aleksis/apps/chronos/frontend/components/timetableTypes.js b/aleksis/apps/chronos/frontend/components/timetableTypes.js
index 692854f18411cc2f3ed1abf35069d28c9b18e51c..2aa2ae17decbed87abea83e54627a9067db1d712 100644
--- a/aleksis/apps/chronos/frontend/components/timetableTypes.js
+++ b/aleksis/apps/chronos/frontend/components/timetableTypes.js
@@ -1,13 +1,13 @@
 export default {
   GROUP: {
-    name: "Groups",
+    name: "chronos.timetable.types.groups",
     id: "GROUP",
     icon: "mdi-account-group-outline",
   },
   TEACHER: {
-    name: "Teachers",
+    name: "chronos.timetable.types.teachers",
     id: "TEACHER",
     icon: "mdi-account-outline",
   },
-  ROOM: { name: "Rooms", id: "ROOM", icon: "mdi-door" },
+  ROOM: { name: "chronos.timetable.types.rooms", id: "ROOM", icon: "mdi-door" },
 };
diff --git a/aleksis/apps/chronos/frontend/messages/de.json b/aleksis/apps/chronos/frontend/messages/de.json
index 512498ccfae594033f7634e09bfba992233612fe..86148a7bac93fe2dfbd36568994a2c1af35e8dbe 100644
--- a/aleksis/apps/chronos/frontend/messages/de.json
+++ b/aleksis/apps/chronos/frontend/messages/de.json
@@ -12,7 +12,12 @@
       "search": "Stundenpläne suchen",
       "prev": "Vorheriger Stundenplan",
       "next": "Nächster Stundenplan",
-      "select": "Stundenplan auswählen"
+      "select": "Stundenplan auswählen",
+      "types": {
+        "groups": "Gruppen",
+        "teachers": "Lehrkräfte",
+        "rooms": "Räume"
+      }
     },
     "lessons": {
       "menu_title_daily": "Tagesstunden"
diff --git a/aleksis/apps/chronos/frontend/messages/en.json b/aleksis/apps/chronos/frontend/messages/en.json
index b995b749a1677cdfbdbfef9888f4bd427062717c..ee23c28f02b5b872222461653ea1e624eff54c5b 100644
--- a/aleksis/apps/chronos/frontend/messages/en.json
+++ b/aleksis/apps/chronos/frontend/messages/en.json
@@ -12,7 +12,12 @@
       "search": "Search Timetables",
       "prev": "Previous Timetable",
       "next": "Next Timetable",
-      "select": "Select Timetable"
+      "select": "Select Timetable",
+      "types": {
+        "groups": "Groups",
+        "teachers": "Teachers",
+        "rooms": "Rooms"
+      }
     },
     "lessons": {
       "menu_title_daily": "Daily lessons"
diff --git a/aleksis/apps/chronos/managers.py b/aleksis/apps/chronos/managers.py
index d26c4cbbc89fd4a1abd2b361e1380702f3bd30f5..12c52170720ac0eb0f7310380e6880c8e14b0000 100644
--- a/aleksis/apps/chronos/managers.py
+++ b/aleksis/apps/chronos/managers.py
@@ -916,6 +916,15 @@ class LessonEventQuerySet(PolymorphicQuerySet):
             & Q(amended_by__isnull=True)
         )
     
+    def related_to_person(self, person: Union[int, Person]):
+        amended = self.filter(
+            Q(amended_by__isnull=False)
+            & (Q(teachers=person) | Q(groups__members=person) | Q(groups__owners=person))
+        ).values_list("amended_by__pk", flat=True)
+        return self.filter(
+            Q(teachers=person) | Q(groups__members=person) | Q(groups__owners=person)
+        ).distinct()
+
     def not_amended(self):
         return self.filter(amended_by__isnull=True)
 
diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py
index 720da54ca3da9eca357d31b4e1b131a235118461..0ee5cfc92416c45339ea406e237e96590bb0da7e 100644
--- a/aleksis/apps/chronos/models.py
+++ b/aleksis/apps/chronos/models.py
@@ -8,7 +8,7 @@ from itertools import chain
 from typing import Any
 
 from django.contrib.contenttypes.models import ContentType
-from django.core.exceptions import ValidationError
+from django.core.exceptions import PermissionDenied, ValidationError
 from django.core.validators import MinValueValidator
 from django.db import models
 from django.db.models import F, Max, Min, Q
@@ -1540,12 +1540,17 @@ class LessonEvent(CalendarEvent):
     def get_objects(cls, request, params=None) -> Iterable:
         """Return all objects that should be included in the calendar."""
         objs = super().get_objects(request, params).not_instance_of(SupervisionEvent)
+
+        if not has_person(request.user):
+            raise PermissionDenied()
+
         if params:
             obj_id = int(params.get("id", 0))
             type_ = params.get("type", None)
             prefetch_absences = params.get("prefetch_absences", False)
             not_amended = params.get("not_amended", False)
             not_amending = params.get("not_amending", False)
+            own = params.get("own", False)
 
             if prefetch_absences:
                 objs = objs.prefetch_related("teachers__kolego_absences")
@@ -1556,6 +1561,12 @@ class LessonEvent(CalendarEvent):
             if not_amending:
                 objs = objs.not_amending()
 
+            if "own" in params:
+                if own:
+                    objs = objs.for_person(request.user.person)
+                else:
+                    objs = objs.related_to_person(request.user.person)
+
             if type_ and obj_id:
                 if type_ == "TEACHER":
                     return objs.for_teacher(obj_id)
@@ -1565,6 +1576,8 @@ class LessonEvent(CalendarEvent):
                     return objs.for_room(obj_id)
                 elif type_ == "COURSE":
                     return objs.for_course(obj_id)
+            elif "own" in params:
+                return objs
         return objs.for_person(request.user.person)
 
     @classmethod
diff --git a/aleksis/apps/chronos/schema/__init__.py b/aleksis/apps/chronos/schema/__init__.py
index 9fb03afece38926a9c1653bb6d094535803f4fb8..d4251761a1ddcb8b0f6c0915a7bc7cdfd8b2c7e9 100644
--- a/aleksis/apps/chronos/schema/__init__.py
+++ b/aleksis/apps/chronos/schema/__init__.py
@@ -176,9 +176,7 @@ class TimetableObjectType(graphene.ObjectType):
 class LessonEventType(DjangoObjectType):
     class Meta:
         model = LessonEvent
-        fields = (
-            "id",
-        )
+        fields = ("id",)
         filter_fields = {
             "id": ["exact", "lte", "gte"],
         }
diff --git a/aleksis/apps/chronos/util/chronos_helpers.py b/aleksis/apps/chronos/util/chronos_helpers.py
index bc88a3b98874ffc3e0ddeebc3b01acd2fbbb4559..1f299424047084ceeec346a22b9e9c1aa00127ed 100644
--- a/aleksis/apps/chronos/util/chronos_helpers.py
+++ b/aleksis/apps/chronos/util/chronos_helpers.py
@@ -106,10 +106,7 @@ def get_classes(user: "User"):
             lessons_count=Count("lesson_events"),
             child_lessons_count=Count("child_groups__lesson_events"),
         )
-        .filter(
-            Q(lessons_count__gt=0, parent_groups=None)
-            | Q(child_lessons_count__gt=0, parent_groups=None)
-        )
+        .filter(Q(lessons_count__gt=0) | Q(child_lessons_count__gt=0))
         .order_by("short_name", "name")
     )
 
diff --git a/pyproject.toml b/pyproject.toml
index aa02408ec2a8205863904e845e1e5dcdcdd5e48e..338e3c2b90c45e6c0cc5a040a4dd9124bda0cfef 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
 [tool.poetry]
 name = "AlekSIS-App-Chronos"
-version = "4.0.0.dev0"
+version = "4.0.0.dev1"
 packages = [
     { include = "aleksis" }
 ]