diff --git a/lib/fetching/timetable.dart b/lib/fetching/timetable.dart
index cc7bfa8fdd68121832af8a95229693d65e60eba4..6c31f25d85d0da5b3eb98c62b6dd1d1ccb7c7ac8 100644
--- a/lib/fetching/timetable.dart
+++ b/lib/fetching/timetable.dart
@@ -95,6 +95,7 @@ class CacheableTimetable extends Cacheable<TimetableData> {
     }
 
     return TimetableData(
+      date: date,
       lessons: timetableLessons,
       rooms: rooms.values.toSet(),
       teachers: teachers.values.toSet(),
diff --git a/lib/timetable/timetable.dart b/lib/timetable/timetable.dart
index 78f938aa1bc6a98e1f91eb52c98670b6dd7f7805..56e2be365c10f9433ad3fdf774fb02a7e91c68b2 100644
--- a/lib/timetable/timetable.dart
+++ b/lib/timetable/timetable.dart
@@ -8,6 +8,7 @@ import '../untis/lecture.dart';
 import '../untis/lesson.dart';
 import '../untis/period.dart';
 import '../untis/timetable.dart';
+import '../util/date_extension.dart';
 import '../util/listenable.dart';
 import 'period_background.dart';
 import 'weekday_content.dart';
@@ -66,17 +67,20 @@ class _TimetableState extends State<Timetable> {
         : mergeLessons(_getLessonsOfDay(index), profile.hiddenLectures);
   }
 
+  DateTime getDateAtWeekdayIndex(int index) {
+    final monday = DateTime.now().atStartOfWeek();
+
+    return monday.add(Duration(days: index));
+  }
+
   @override
   Widget build(BuildContext context) {
     return Column(
       children: [
         Row(
           children: List.generate(Timetable.weekdayCount, (index) {
-            final now = DateTime.now();
-            final currentWeekday = now.weekday;
-            final monday = now.subtract(Duration(days: currentWeekday - 1));
+            final indexedDay = getDateAtWeekdayIndex(index);
 
-            final indexedDay = monday.add(Duration(days: index));
             return Expanded(
               child: WeekdayHeader(
                 date: indexedDay,
@@ -104,12 +108,11 @@ class _TimetableState extends State<Timetable> {
                       crossAxisAlignment: CrossAxisAlignment.start,
                       children: List.generate(Timetable.weekdayCount, (index) {
                         final lessons = getMergedLessonsOfDay(index);
-                        final isCurrentDay =
-                            DateTime.now().weekday - 1 == index;
+                        final date = getDateAtWeekdayIndex(index);
 
                         return Expanded(
                           child: WeekdayContent(
-                            showTimeIndicator: isCurrentDay,
+                            date: date,
                             lessons: lessons,
                             appContext: widget.appContext,
                           ),
diff --git a/lib/timetable/weekday_content.dart b/lib/timetable/weekday_content.dart
index 8c784262fede7638b5119c6e9a2fd1cd3fca28f0..3e5f75e35af6a8ae6df15df11740976bafd402d7 100644
--- a/lib/timetable/weekday_content.dart
+++ b/lib/timetable/weekday_content.dart
@@ -3,13 +3,14 @@ import 'dart:math';
 import 'package:flutter/material.dart';
 
 import '../context.dart';
+import '../util/date_extension.dart';
 import '../util/simultaneous.dart';
 import '../untis/lesson.dart';
 import 'lesson.dart';
 import 'time_indicator.dart';
 
 class WeekdayContent extends StatelessWidget {
-  final bool showTimeIndicator;
+  final DateTime date;
   final List<Lesson> lessons;
   final List<FloatingLesson> floatingLessons;
   final AppContext appContext;
@@ -17,9 +18,12 @@ class WeekdayContent extends StatelessWidget {
   int get latestLessonEnd =>
       lessons.isEmpty ? 0 : lessons.map((e) => e.endMinutes).reduce(max);
 
+  bool get showTimeIndicator =>
+      date.atStartOfDay() == DateTime.now().atStartOfDay();
+
   WeekdayContent({
     super.key,
-    required this.showTimeIndicator,
+    required this.date,
     required this.lessons,
     required this.appContext,
   }) : floatingLessons = solveSimultaneous(
diff --git a/lib/untis/lesson.dart b/lib/untis/lesson.dart
index fd09b104d68f8299b11e6be62221cd674fad28dd..a37d04626bd7d472a979532be5c1400b5a027fc5 100644
--- a/lib/untis/lesson.dart
+++ b/lib/untis/lesson.dart
@@ -65,13 +65,10 @@ class UntisLesson extends Lesson with UntisMixin {
 
   UntisLesson(
     this.json, {
-    required Lecture lecture,
-    required Set<Room> rooms,
-    required Set<Teacher> teachers,
+    required super.lecture,
+    required super.rooms,
+    required super.teachers,
   }) : super(
-          lecture: lecture,
-          rooms: rooms,
-          teachers: teachers,
           date: _parseDate(json['date']),
           start: _parseTime(json['startTime']),
           end: _parseTime(json['endTime']),
diff --git a/lib/untis/timetable.dart b/lib/untis/timetable.dart
index c0617b84590675e329c4aea5bd5bd3c007e206af..d9bb48fc370e8e429ac04efc378d747fff8f4494 100644
--- a/lib/untis/timetable.dart
+++ b/lib/untis/timetable.dart
@@ -1,20 +1,28 @@
+import '../util/date_extension.dart';
 import 'lesson.dart';
 import 'room.dart';
 import 'teacher.dart';
 
 class TimetableData {
+  final DateTime date;
   final Set<UntisLesson> lessons;
   final Set<Teacher> teachers;
   final Set<Room> rooms;
 
   TimetableData({
+    required this.date,
     required this.lessons,
     required this.teachers,
     required this.rooms,
   });
 
   static TimetableData merge(TimetableData a, TimetableData b) {
+    if (a.date.atStartOfWeek() != b.date.atStartOfWeek()) {
+      throw StateError('Timetables are from different weeks');
+    }
+
     return TimetableData(
+      date: a.date,
       lessons: a.lessons.union(b.lessons),
       teachers: a.teachers.union(b.teachers),
       rooms: a.rooms.union(b.rooms),