diff --git a/lib/branding.dart b/lib/branding.dart
index 85b2fa72f121b7283f3221a137e051e03235ebde..cfdb250ecb7114490bf29a63358448687b70c636 100644
--- a/lib/branding.dart
+++ b/lib/branding.dart
@@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
 const appName = 'Better Untis';
 // final scheme = ColorScheme.fromSwatch(primarySwatch: Colors.blue);
 final scheme = ColorScheme.fromSeed(seedColor: Colors.pink);
+const passedTimeOverlayColor = Colors.black26;
 
 final theme = ThemeData(
   colorScheme: scheme,
diff --git a/lib/timetable/time_indicator.dart b/lib/timetable/time_indicator.dart
index 3c84b8fd223ac89798e5a495273a125e02fa1799..b370ba3f86805f1d8ad31a81f995d724aca0d1af 100644
--- a/lib/timetable/time_indicator.dart
+++ b/lib/timetable/time_indicator.dart
@@ -1,29 +1,41 @@
+import 'dart:math';
+
 import 'package:flutter/material.dart';
 
+import '../branding.dart';
 import '../untis/lesson.dart';
 import 'lesson.dart';
 
 class TimeIndicator extends StatefulWidget {
-  const TimeIndicator({super.key});
+  static const double indicatorHeightPx = 2;
+  final int progressInMinutes;
+
+  const TimeIndicator({super.key, required this.progressInMinutes});
 
   @override
   State<TimeIndicator> createState() => _TimeIndicatorState();
 }
 
 class _TimeIndicatorState extends State<TimeIndicator> {
+  int get clampedMinutes =>
+      min(widget.progressInMinutes, UntisLesson.endOfDay.inMinutes);
+
   double get yPosition =>
-      LessonWidget.zoom *
-      (TimeOfDay.now().inMinutes - UntisLesson.startOfDay.inMinutes);
+      LessonWidget.zoom * (clampedMinutes - UntisLesson.startOfDay.inMinutes);
 
   @override
   Widget build(BuildContext context) {
-    return Transform.translate(
-      offset: Offset(0, yPosition),
-      child: Container(
-        width: double.infinity,
-        height: 2,
-        color: Theme.of(context).colorScheme.primaryContainer,
-      ),
+    return Column(
+      children: [
+        Container(
+          color: passedTimeOverlayColor,
+          height: max(0, yPosition - TimeIndicator.indicatorHeightPx),
+        ),
+        Container(
+          height: TimeIndicator.indicatorHeightPx,
+          color: Theme.of(context).colorScheme.primaryContainer,
+        ),
+      ],
     );
   }
 }
diff --git a/lib/timetable/timetable.dart b/lib/timetable/timetable.dart
index 56e2be365c10f9433ad3fdf774fb02a7e91c68b2..a2356e9bca550997d0e8e86a2bc8cbe2f18fd143 100644
--- a/lib/timetable/timetable.dart
+++ b/lib/timetable/timetable.dart
@@ -68,7 +68,8 @@ class _TimetableState extends State<Timetable> {
   }
 
   DateTime getDateAtWeekdayIndex(int index) {
-    final monday = DateTime.now().atStartOfWeek();
+    final dateInWeek = widget.data?.date ?? DateTime.now();
+    final monday = dateInWeek.atStartOfWeek();
 
     return monday.add(Duration(days: index));
   }
diff --git a/lib/timetable/weekday_content.dart b/lib/timetable/weekday_content.dart
index 3e5f75e35af6a8ae6df15df11740976bafd402d7..5754a3e24fdab69cab7346113bc520bc6e29fbdf 100644
--- a/lib/timetable/weekday_content.dart
+++ b/lib/timetable/weekday_content.dart
@@ -1,5 +1,3 @@
-import 'dart:math';
-
 import 'package:flutter/material.dart';
 
 import '../context.dart';
@@ -15,11 +13,8 @@ class WeekdayContent extends StatelessWidget {
   final List<FloatingLesson> floatingLessons;
   final AppContext appContext;
 
-  int get latestLessonEnd =>
-      lessons.isEmpty ? 0 : lessons.map((e) => e.endMinutes).reduce(max);
-
-  bool get showTimeIndicator =>
-      date.atStartOfDay() == DateTime.now().atStartOfDay();
+  int get progressInMinutes =>
+      DateTime.now().difference(date.atStartOfDay()).inMinutes;
 
   WeekdayContent({
     super.key,
@@ -38,7 +33,9 @@ class WeekdayContent extends StatelessWidget {
   @override
   Widget build(BuildContext context) {
     return SizedBox(
-      height: latestLessonEnd * LessonWidget.zoom,
+      height:
+          (UntisLesson.endOfDay.inMinutes - UntisLesson.startOfDay.inMinutes) *
+              LessonWidget.zoom,
       child: Stack(
         children: [
           ...floatingLessons.map((lesson) => LessonWidget(
@@ -46,7 +43,11 @@ class WeekdayContent extends StatelessWidget {
                 floatingLesson: lesson,
                 appContext: appContext,
               )),
-          if (showTimeIndicator) const TimeIndicator(),
+          IgnorePointer(
+            child: TimeIndicator(
+              progressInMinutes: progressInMinutes,
+            ),
+          ),
         ],
       ),
     );
diff --git a/lib/untis/lesson.dart b/lib/untis/lesson.dart
index a37d04626bd7d472a979532be5c1400b5a027fc5..9513bd89ba120246f104df7a4506c532bbc4375e 100644
--- a/lib/untis/lesson.dart
+++ b/lib/untis/lesson.dart
@@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
 import '../util/serializable.dart';
 import 'element.dart';
 import 'lecture.dart';
+import 'period.dart';
 import 'room.dart';
 import 'teacher.dart';
 
@@ -55,7 +56,8 @@ class Lesson {
 }
 
 class UntisLesson extends Lesson with UntisMixin {
-  static const startOfDay = TimeOfDay(hour: 8, minute: 0);
+  static final startOfDay = Period.defaultPeriods.first.start;
+  static final endOfDay = Period.defaultPeriods.last.end;
 
   @override
   final Json json;