diff --git a/aleksis/apps/chronos/frontend/components/Timetable.vue b/aleksis/apps/chronos/frontend/components/Timetable.vue
index 3a7471f6210136eeb59d4aa81f8fa061c0c3c56f..e7d7f47bd9eb59d5c7bc5f78157a23665e73dc2f 100644
--- a/aleksis/apps/chronos/frontend/components/Timetable.vue
+++ b/aleksis/apps/chronos/frontend/components/Timetable.vue
@@ -1,20 +1,14 @@
 <script>
 import { gqlAvailableTimetables } from "./timetables.graphql";
 import NoTimetableCard from "./NoTimetableCard.vue";
+import CalendarWithControls from "aleksis.core/components/calendar/CalendarWithControls.vue";
 
 export default {
   name: "Timetable",
-  components: { NoTimetableCard },
+  components: { NoTimetableCard, CalendarWithControls },
   apollo: {
     availableTimetables: {
       query: gqlAvailableTimetables,
-      result(data) {
-        console.log(
-          data.data.availableTimetables.map((a) => {
-            return a.id + a.name;
-          })
-        );
-      },
     },
   },
   data() {
@@ -107,7 +101,7 @@ export default {
 <template>
   <div>
     <v-row>
-      <v-col cols="3">
+      <v-col cols="2">
         <v-card>
           <v-card-text class="mb-0">
             <!-- Search field for timetables -->
@@ -178,7 +172,7 @@ export default {
           </v-data-iterator>
         </v-card>
       </v-col>
-      <v-col cols="9" class="full-height">
+      <v-col cols="10" class="full-height">
         <!-- No timetable card-->
         <no-timetable-card v-if="selectedFull == null" />
 
@@ -211,6 +205,10 @@ export default {
               </v-btn>
             </div>
           </div>
+          <calendar-with-controls
+            :calendar-feeds="[{ name: 'lesson' }]"
+            :params="{ type: selectedFull.type, id: selectedFull.objId }"
+          />
         </v-card>
       </v-col>
     </v-row>
diff --git a/aleksis/apps/chronos/frontend/components/calendar_feeds/details/LessonDetails.vue b/aleksis/apps/chronos/frontend/components/calendar_feeds/details/LessonDetails.vue
index 7448d65cbd3f83b5161d08c4a008009920857a32..93f11a92a7a5ad93a9a3f80c4b4e1393b7f63bf6 100644
--- a/aleksis/apps/chronos/frontend/components/calendar_feeds/details/LessonDetails.vue
+++ b/aleksis/apps/chronos/frontend/components/calendar_feeds/details/LessonDetails.vue
@@ -48,7 +48,7 @@
         </v-list-item-icon>
         <v-list-item-content>
           <v-list-item-title>
-            <span v-if="teachers.length === 0">{{
+            <span v-if="teachers.length === 0" class="body-2 text--secondary">{{
               $t("chronos.event.no_teacher")
             }}</span>
             <lesson-related-object-chip
diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py
index 47cbd7ba588faaf026473662319dab68c92d021c..7cc450ef1af44b75c51bb1315206f5487f8a103e 100644
--- a/aleksis/apps/chronos/models.py
+++ b/aleksis/apps/chronos/models.py
@@ -1582,9 +1582,38 @@ class LessonEvent(CalendarEvent):
         }
 
     @classmethod
-    def get_objects(cls, request) -> Iterable:
+    def get_objects(cls, request, params=None) -> Iterable:
         """Return all objects that should be included in the calendar."""
-        objs = super().get_objects(request)
+        objs = super().get_objects(request, params)
+        print(params)
+        if params:
+            obj_id = int(params.get("id", 0))
+            type = params.get("type", None)
+            print(obj_id, type)
+
+            if type and obj_id:
+                if type == "TEACHER":
+                    amended = objs.filter(
+                        Q(amended_by__isnull=False) & (Q(teachers=obj_id))
+                    ).values_list("amended_by__pk", flat=True)
+                    return objs.filter(Q(teachers=obj_id) | Q(pk__in=amended)).distinct()
+                elif type == "GROUP":
+                    amended = objs.filter(
+                        Q(amended_by__isnull=False) & (Q(groups=obj_id))
+                    ).values_list("amended_by__pk", flat=True)
+                    print(
+                        objs.filter(
+                            Q(groups=obj_id) | Q(groups__parent_groups=obj_id) | Q(pk__in=amended)
+                        ).distinct()
+                    )
+                    return objs.filter(
+                        Q(groups=obj_id) | Q(groups__parent_groups=obj_id) | Q(pk__in=amended)
+                    ).distinct()
+                elif type == "ROOM":
+                    amended = objs.filter(
+                        Q(amended_by__isnull=False) & (Q(roms=obj_id))
+                    ).values_list("amended_by__pk", flat=True)
+                    return objs.filter(Q(rooms=obj_id) | Q(pk__in=amended)).distinct()
         amended = objs.filter(
             Q(amended_by__isnull=False)
             & (Q(teachers=request.user.person) | Q(groups__members=request.user.person))