diff --git a/lib/pages/view_page.dart b/lib/pages/view_page.dart
index b969d9a321fe9620448655c7f825377c9819b648..bf73dcadb781ed79f8389f402ad3048717d0d746 100644
--- a/lib/pages/view_page.dart
+++ b/lib/pages/view_page.dart
@@ -42,7 +42,7 @@ class _ViewPageState extends State<ViewPage> {
   Widget build(BuildContext context) {
     return Scaffold(
       appBar: AppBar(
-        title: const Text('View Page'),
+        title: Text(widget.view.viewPageTitle),
       ),
       body: Column(
         children: [
diff --git a/lib/timetable/lesson_chip_collection.dart b/lib/timetable/lesson_chip_collection.dart
index ea55157560d976ebcca41860926219eea3ac43e4..670876b86171ce35d1e5515f1846d6ecdbdcd78a 100644
--- a/lib/timetable/lesson_chip_collection.dart
+++ b/lib/timetable/lesson_chip_collection.dart
@@ -3,10 +3,10 @@ import 'package:flutter/material.dart';
 import '../untis/element.dart';
 import 'lesson_chip.dart';
 
-class LessonChipCollection extends StatelessWidget {
+class LessonChipCollection<T extends UntisElement> extends StatelessWidget {
   final IconData icon;
-  final Iterable<UntisElement> elements;
-  final void Function(UntisElement element)? onChipTap;
+  final Iterable<T> elements;
+  final void Function(T element)? onChipTap;
 
   const LessonChipCollection(
     this.icon,
diff --git a/lib/timetable/lesson_dialog.dart b/lib/timetable/lesson_dialog.dart
index c873466ffef9fcb0be2f1256fe294e7c72981091..99f30ca62d628c4ceeb594df92e9be9f383b4ffe 100644
--- a/lib/timetable/lesson_dialog.dart
+++ b/lib/timetable/lesson_dialog.dart
@@ -85,7 +85,7 @@ class _LessonDialogState extends State<LessonDialog> {
                 child: LessonChipCollection(
               BrandingIcons.lecture,
               [lesson.lecture],
-              onChipTap: (e) => changeView(LectureView(lectureId: e.id)),
+              onChipTap: (e) => changeView(LectureView(lecture: e)),
             )),
             IconButton(
               onPressed: () {
@@ -101,7 +101,7 @@ class _LessonDialogState extends State<LessonDialog> {
           LessonChipCollection(
             BrandingIcons.room,
             lesson.rooms,
-            onChipTap: (e) => changeView(RoomView(roomId: e.id)),
+            onChipTap: (e) => changeView(RoomView(room: e)),
           ),
         ],
         const Divider(),
diff --git a/lib/views/lecture_view.dart b/lib/views/lecture_view.dart
index bcd499f453863d4196751cc42fc795ba66bcd59c..f9eeeae0150764de700ea2aaf2ba51ddd4e4dbab 100644
--- a/lib/views/lecture_view.dart
+++ b/lib/views/lecture_view.dart
@@ -1,10 +1,14 @@
 import '../untis/element_type.dart';
 
+import '../untis/lecture.dart';
 import 'single_element_view.dart';
 
 class LectureView extends SingleElementView {
-  LectureView({required int lectureId}) : super(elementId: lectureId);
+  LectureView({required Lecture lecture}) : super(element: lecture);
 
   @override
   ElementType get elementType => ElementType.lecture;
+
+  @override
+  String get viewPageTitle => element.name;
 }
diff --git a/lib/views/mixed_class_view.dart b/lib/views/mixed_class_view.dart
index 57fd7d60c3ba708c004b558290e632fbe7af8081..9d4badc7335b63f9536289af46bb18b4cad775ef 100644
--- a/lib/views/mixed_class_view.dart
+++ b/lib/views/mixed_class_view.dart
@@ -27,4 +27,7 @@ class MixedClassView extends TimetableView {
 
     return TimetableData.mergeAll(allTimetables);
   }
+
+  @override
+  String get viewPageTitle => 'Mixed Classes';
 }
diff --git a/lib/views/room_view.dart b/lib/views/room_view.dart
index 65612e14121dfa28d1fb1b03110f1a3b366f0216..f8976d9d2568fd0e808aa13a35909d9d1edd6e3e 100644
--- a/lib/views/room_view.dart
+++ b/lib/views/room_view.dart
@@ -1,10 +1,14 @@
 import '../untis/element_type.dart';
 
+import '../untis/room.dart';
 import 'single_element_view.dart';
 
 class RoomView extends SingleElementView {
-  RoomView({required int roomId}) : super(elementId: roomId);
+  RoomView({required Room room}) : super(element: room);
 
   @override
   ElementType get elementType => ElementType.room;
+
+  @override
+  String get viewPageTitle => 'Raum ${element.name}';
 }
diff --git a/lib/views/single_element_view.dart b/lib/views/single_element_view.dart
index 100bdf9aee2d46dbe23dd9d73f262f948b273957..2a2c26b9b0b3d444dbb9e510f5e9ca12f0a35c5e 100644
--- a/lib/views/single_element_view.dart
+++ b/lib/views/single_element_view.dart
@@ -7,10 +7,11 @@ import 'dart:async';
 import 'view.dart';
 
 abstract class SingleElementView<T extends UntisElement> extends TimetableView {
-  final int elementId;
+  final T element;
 
-  SingleElementView({required this.elementId});
+  SingleElementView({required this.element});
 
+  int get elementId => element.id;
   ElementType get elementType;
 
   @override
diff --git a/lib/views/teacher_view.dart b/lib/views/teacher_view.dart
index 10cfaefe6d37d385c0d26a06516bd1bd2025330f..e77c13b81d3759bd875047ca3f9b82801133b93d 100644
--- a/lib/views/teacher_view.dart
+++ b/lib/views/teacher_view.dart
@@ -1,11 +1,15 @@
 import '../untis/element_type.dart';
 
+import '../untis/teacher.dart';
 import 'single_element_view.dart';
 
 @Deprecated('Only logged in users can see teacher timetables')
 class TeacherView extends SingleElementView {
-  TeacherView({required int teacherId}) : super(elementId: teacherId);
+  TeacherView({required Teacher teacher}) : super(element: teacher);
 
   @override
   ElementType get elementType => ElementType.teacher;
+
+  @override
+  String get viewPageTitle => element.name;
 }
diff --git a/lib/views/view.dart b/lib/views/view.dart
index ae9a46418c7b8357f02fb26ab6fc6645c88cbd16..3ec36ad431df047537e95da49c1aa0d1fe63bce9 100644
--- a/lib/views/view.dart
+++ b/lib/views/view.dart
@@ -4,6 +4,8 @@ import '../untis/fetch.dart';
 import '../untis/timetable.dart';
 
 abstract class TimetableView {
+  String get viewPageTitle;
+
   FutureOr<TimetableData?> timetableOf(
     DateTime date, {
     required UntisFetch untis,