diff --git a/aleksis/apps/lesrooster/frontend/components/lesson_raster/LessonRaster.vue b/aleksis/apps/lesrooster/frontend/components/lesson_raster/LessonRaster.vue
index bc0205fe045c8ba045a7b13be511c7975158588d..0aa8dfa2b34b9071d08654f45639c88b288b0e87 100644
--- a/aleksis/apps/lesrooster/frontend/components/lesson_raster/LessonRaster.vue
+++ b/aleksis/apps/lesrooster/frontend/components/lesson_raster/LessonRaster.vue
@@ -61,7 +61,7 @@
                 </v-list-item-icon>
                 <v-list-item-content>
                   <v-list-item-title>
-                    {{ $t("actions.copy_last_configuration") }}
+                    {{ $t("lesrooster.actions.copy_last_configuration") }}
                   </v-list-item-title>
                 </v-list-item-content>
               </v-list-item>
@@ -114,7 +114,7 @@
                     <v-icon>mdi-application-export</v-icon>
                   </v-btn>
                 </template>
-                <span v-t="'actions.copy_to_day'"></span>
+                <span v-t="'lesrooster.actions.copy_to_day'"></span>
               </v-tooltip>
             </template>
             <v-list>
diff --git a/aleksis/apps/lesrooster/frontend/components/lesson_raster/SlotCard.vue b/aleksis/apps/lesrooster/frontend/components/lesson_raster/SlotCard.vue
index f274dcee31400ae30b58e7c20966fbd422f885dd..e44147e8055fc7879229f70aa127f4f6149d7af3 100644
--- a/aleksis/apps/lesrooster/frontend/components/lesson_raster/SlotCard.vue
+++ b/aleksis/apps/lesrooster/frontend/components/lesson_raster/SlotCard.vue
@@ -85,7 +85,7 @@ export default defineComponent({
                     <v-icon>mdi-application-export</v-icon>
                   </v-btn>
                 </template>
-                <span v-t="'actions.copy_to_day'"></span>
+                <span v-t="'lesrooster.actions.copy_to_day'"></span>
               </v-tooltip>
             </template>
             <v-list>
diff --git a/aleksis/apps/lesrooster/frontend/components/supervision/Supervision.vue b/aleksis/apps/lesrooster/frontend/components/supervision/Supervision.vue
index 2a25319dab6e75a3540aa26b9b1e94517871c2fd..6ff5b3090fd92eefa625170cd5e440ac25014462 100644
--- a/aleksis/apps/lesrooster/frontend/components/supervision/Supervision.vue
+++ b/aleksis/apps/lesrooster/frontend/components/supervision/Supervision.vue
@@ -139,7 +139,7 @@ import InlineCRUDList from "aleksis.core/components/generic/InlineCRUDList.vue";
     <!--    filled-->
     <!--    v-bind="attrs('break_slot__time_grid__exact')"-->
     <!--    v-on="on('break_slot__time_grid__exact')"-->
-    <!--    :label="$t('labels.select_validity_range')"-->
+    <!--    :label="$t('lesrooster.labels.select_validity_range')"-->
     <!--    hide-details-->
     <!--  />-->
     <!--</template>-->
diff --git a/aleksis/apps/lesrooster/frontend/components/timebound_course_config/TimeboundCourseConfigRaster.vue b/aleksis/apps/lesrooster/frontend/components/timebound_course_config/TimeboundCourseConfigRaster.vue
index 8ef85cd87d535934e78950933dad314402950299..b7154db6458705b2fa964a6ef6a0dfa9f938e9a5 100644
--- a/aleksis/apps/lesrooster/frontend/components/timebound_course_config/TimeboundCourseConfigRaster.vue
+++ b/aleksis/apps/lesrooster/frontend/components/timebound_course_config/TimeboundCourseConfigRaster.vue
@@ -63,7 +63,7 @@ import SubjectChip from "aleksis.apps.cursus/components/SubjectChip.vue";
             class="d-flex justify-space-between flex-wrap align-center"
           >
             <secondary-action-button
-              i18n-key="actions.copy_last_configuration"
+              i18n-key="lesrooster.actions.copy_last_configuration"
               block
               class="mr-4"
             />
diff --git a/aleksis/apps/lesrooster/frontend/components/timetable_management/TimetableManagement.vue b/aleksis/apps/lesrooster/frontend/components/timetable_management/TimetableManagement.vue
index 81b14747d745025ad65c7584fbafb7aad3d00ed2..954b2076706a0373b1a10f409ae6e2f849c4f6a0 100644
--- a/aleksis/apps/lesrooster/frontend/components/timetable_management/TimetableManagement.vue
+++ b/aleksis/apps/lesrooster/frontend/components/timetable_management/TimetableManagement.vue
@@ -950,7 +950,7 @@ export default defineComponent({
         class="d-flex justify-space-between flex-wrap align-center"
       >
         <secondary-action-button
-          i18n-key="actions.copy_last_configuration"
+          i18n-key="lesrooster.actions.copy_last_configuration"
           block
           disabled
         />
@@ -1112,7 +1112,7 @@ export default defineComponent({
               rounded
               v-model="courseSearch"
               clearable
-              :label="$t('actions.search_courses')"
+              :label="$t('lesrooster.actions.search_courses')"
               :hint="totalLessonRatio"
               persistent-hint
             />
diff --git a/aleksis/apps/lesrooster/frontend/components/timetables/Timetable.vue b/aleksis/apps/lesrooster/frontend/components/timetables/Timetable.vue
index b0a1cbe896cc1525ea0937eb720635b4b902d74b..3a7c8a8253039cde74e64f50b2d4d90af7273eed 100644
--- a/aleksis/apps/lesrooster/frontend/components/timetables/Timetable.vue
+++ b/aleksis/apps/lesrooster/frontend/components/timetables/Timetable.vue
@@ -76,7 +76,7 @@ export default {
           <time-grid-field
             outlined
             filled
-            label="Select Validity Range"
+            :label="$t('lesrooster.labels.select_validity_range')"
             hide-details
             with-dates
             :enable-create="false"
diff --git a/aleksis/apps/lesrooster/frontend/components/timetables/timetables.graphql b/aleksis/apps/lesrooster/frontend/components/timetables/timetables.graphql
index 8e8a735ace05dadd21764b6fdf329659ca641b84..fa3c73e1e03ee94f6382d36ba000bce00059cd2f 100644
--- a/aleksis/apps/lesrooster/frontend/components/timetables/timetables.graphql
+++ b/aleksis/apps/lesrooster/frontend/components/timetables/timetables.graphql
@@ -113,17 +113,20 @@ query lessonsRoom($room: ID!, $timeGrid: ID!) {
 }
 
 query lessonsGroup($group: ID!, $timeGrid: ID!) {
-  lessonsGroup: lessonObjectsForGroup(group: $group, timeGrid: $timeGrid) {
+  lessonsGroup: lessonsForGroup(group: $group, timeGrid: $timeGrid) {
     id
-    slotStart {
-      id
-      period
-      weekday
-    }
-    slotEnd {
-      id
-      period
-      weekday
+    bundle {
+      slotStart {
+        id
+        period
+        weekday
+      }
+      slotEnd {
+        id
+        period
+        weekday
+      }
+      recurrence
     }
     subject {
       id
@@ -161,7 +164,6 @@ query lessonsGroup($group: ID!, $timeGrid: ID!) {
         shortName
       }
     }
-    recurrence
     canEdit
     canDelete
   }
diff --git a/aleksis/apps/lesrooster/frontend/components/validity_range/CopyFromTimeGridMenu.vue b/aleksis/apps/lesrooster/frontend/components/validity_range/CopyFromTimeGridMenu.vue
index 1004f59bf8ae61e3ce52d6d2d7e9e52213f1b81a..6e9d71abd6933bbdb1dea7d9bbe4559f449f135c 100644
--- a/aleksis/apps/lesrooster/frontend/components/validity_range/CopyFromTimeGridMenu.vue
+++ b/aleksis/apps/lesrooster/frontend/components/validity_range/CopyFromTimeGridMenu.vue
@@ -82,7 +82,7 @@ export default defineComponent({
       <template #activator="{ attrs, on }">
         <slot name="activator" :attrs="attrs" :on="on">
           <primary-action-button
-            i18n-key="actions.copy_last_configuration"
+            i18n-key="lesrooster.actions.copy_last_configuration"
             icon="mdi-content-copy"
           />
         </slot>
@@ -100,10 +100,10 @@ export default defineComponent({
 
     <confirm-dialog v-model="dialog" @confirm="confirm" @cancel="cancel">
       <template #title>
-        {{ $t("actions.confirm_copy_last_configuration") }}
+        {{ $t("lesrooster.actions.confirm_copy_last_configuration") }}
       </template>
       <template #text>
-        {{ $t("actions.confirm_copy_last_configuration_message") }}
+        {{ $t("lesrooster.actions.confirm_copy_last_configuration_message") }}
       </template>
     </confirm-dialog>
   </div>
diff --git a/aleksis/apps/lesrooster/frontend/messages/de.json b/aleksis/apps/lesrooster/frontend/messages/de.json
index da44980d0e3f51e4ceccff6fb30c04ee4cb04835..f64ff4b7ec7fac98867dbad94a81adad08525e7f 100644
--- a/aleksis/apps/lesrooster/frontend/messages/de.json
+++ b/aleksis/apps/lesrooster/frontend/messages/de.json
@@ -1,15 +1,15 @@
 {
-  "actions": {
-    "confirm_copy_last_configuration": "Soll wirklich eine andere Konfiguration in diesen Zeitraum übernommen werden?",
-    "confirm_copy_last_configuration_message": "Diese Aktion wird alle bestehenden Daten in diesem Zeitraum löschen. Diese Aktion kann nicht rückgängig gemacht werden.",
-    "copy_last_configuration": "Aus anderem Zeitraum übernehmen",
-    "copy_to_day": "Zu anderem Tag übernehmen",
-    "search_courses": "Kurse durchsuchen"
-  },
-  "labels": {
-    "select_validity_range": "Gültigkeitszeitraum auswählen"
-  },
   "lesrooster": {
+    "actions": {
+      "confirm_copy_last_configuration": "Soll wirklich eine andere Konfiguration in diesen Zeitraum übernommen werden?",
+      "confirm_copy_last_configuration_message": "Diese Aktion wird alle bestehenden Daten in diesem Zeitraum löschen. Diese Aktion kann nicht rückgängig gemacht werden.",
+      "copy_last_configuration": "Aus anderem Zeitraum übernehmen",
+      "copy_to_day": "Zu anderem Tag übernehmen",
+      "search_courses": "Kurse durchsuchen"
+    },
+    "labels": {
+      "select_validity_range": "Gültigkeitszeitraum auswählen"
+    },
     "break": {
       "create_item": "Pause erstellen",
       "create_items": "Pausen erstellen",
@@ -26,7 +26,7 @@
     "lesson_raster": {
       "menu_title": "Stundenraster"
     },
-    "menu_title": "Unterrichtsmanagement",
+    "menu_title": "Stundenplanung",
     "slot": {
       "confirm_delete_multiple_slots": "Wollen Sie wirklich alle Zeitfenster am {day} löschen?",
       "create_items": "Zeitfenster erstellen",
@@ -46,6 +46,10 @@
       "weekday": "Wochentag",
       "weekdays": "Wochentage"
     },
+    "timetable": {
+      "menu_title": "Reguläre Stundenpläne",
+      "print": "Drucken"
+    },
     "supervision": {
       "break_slot": "Pause",
       "create_supervision": "Aufsicht erstellen",
diff --git a/aleksis/apps/lesrooster/frontend/messages/en.json b/aleksis/apps/lesrooster/frontend/messages/en.json
index 939fd310d1c5f7544f2cb53605a20d840d0f3711..6684a6370ef29c21085fb6714f68b890cd454650 100644
--- a/aleksis/apps/lesrooster/frontend/messages/en.json
+++ b/aleksis/apps/lesrooster/frontend/messages/en.json
@@ -1,6 +1,6 @@
 {
   "lesrooster": {
-    "menu_title": "Lesson Management",
+    "menu_title": "Lesson Planning",
     "validity_range": {
       "menu_title": "Validity Ranges",
       "title": "Validity Range",
@@ -128,7 +128,7 @@
       }
     },
     "timetable": {
-      "menu_title": "Timetables",
+      "menu_title": "Regular Timetables",
       "print": "Print"
     },
     "supervision": {
@@ -140,16 +140,16 @@
       "rooms": "Rooms",
       "teachers": "Teachers",
       "subject": "Subject"
+    },
+    "actions": {
+      "copy_to_day": "Copy to another day",
+      "search_courses": "Search Courses",
+      "copy_last_configuration": "Copy from different range",
+      "confirm_copy_last_configuration": "Do you really want to copy another configuration to this range?",
+      "confirm_copy_last_configuration_message": "This will overwrite all existing data in this range. This action cannot be undone."
+    },
+    "labels": {
+      "select_validity_range": "Select Validity Range"
     }
-  },
-  "actions": {
-    "copy_to_day": "Copy to another day",
-    "search_courses": "Search Courses",
-    "copy_last_configuration": "Copy from different range",
-    "confirm_copy_last_configuration": "Do you really want to copy another configuration to this range?",
-    "confirm_copy_last_configuration_message": "This will overwrite all existing data in this range. This action cannot be undone."
-  },
-  "labels": {
-    "select_validity_range": "Select Validity Range"
   }
 }