diff --git a/db_schema.sql b/db_schema.sql
index 44ac919a500b8b2dfb18350d02c58c20aa7efd71..02d4ef16b667866c9247d789ee5446523c313f30 100644
--- a/db_schema.sql
+++ b/db_schema.sql
@@ -62,7 +62,8 @@ CREATE TABLE IF NOT EXISTS `courses_data` (
   `internal` text NOT NULL DEFAULT '',
   `responsible` text NOT NULL DEFAULT '',
   `feed_url` text NOT NULL DEFAULT '',
-  `external` INTEGER NOT NULL DEFAULT 0
+  `external` INTEGER NOT NULL DEFAULT 0,
+  `coursechapters` INTEGER NOT NULL DEFAULT 0
 );
 CREATE TABLE IF NOT EXISTS `filesizes` (
   `path` varchar(255) NOT NULL PRIMARY KEY,
diff --git a/edit.py b/edit.py
index 87659edfa56019c4d0ff2a6f34c0360368956fba..e12116f1c02d39c9c67d8d03c962eebf17c7e170 100644
--- a/edit.py
+++ b/edit.py
@@ -25,7 +25,8 @@ editable_tables = {
 			'responsible':	{'type': 'shortstring'},
 			'deleted':	{'type': 'boolean'},
 			'description':	{'type': 'text'},
-			'external':	{'type': 'boolean', 'description': 'Soll die Veranstaltung nicht im Drehplan angezeigt werden?'}},
+			'external':	{'type': 'boolean', 'description': 'Soll die Veranstaltung nicht im Drehplan angezeigt werden?'},
+			'coursechapters':	{'type': 'boolean', 'description': 'Sollen auf der Kursseite die Kapitelmarker der Videos angezeigt werden?'}},
 		'creationtime_fields': ['created_by', 'time_created', 'time_updated'] },
 	'lectures': {
 		'table': 'lectures_data',
diff --git a/server.py b/server.py
index 0c4de2ebbb24c32ea2b8ed656913cd9a80dea616..16bca01b99fda3d99a1690f66879e0ffc19e8ce1 100644
--- a/server.py
+++ b/server.py
@@ -237,8 +237,11 @@ def course(id=None, handle=None):
 			JOIN formats ON formats.keywords = "hls"
 			WHERE streams.active AND (? OR streams.visible) AND lectures.course_id = ?
 			''', ismod(), course['id'])
+	chapters = []
+	if course['coursechapters']:
+		chapters = query('SELECT chapters.* FROM chapters JOIN lectures ON lectures.id = chapters.lecture_id WHERE lectures.course_id = ? AND NOT chapters.deleted AND chapters.visible ORDER BY time ASC', course['id'])
 	videos += genlive(livestreams)
-	return render_template('course.html', course=course, lectures=lectures, videos=videos)
+	return render_template('course.html', course=course, lectures=lectures, videos=videos, chapters=chapters)
 
 @app.route('/faq')
 @register_navbar('FAQ', icon='question-sign')
diff --git a/templates/course.html b/templates/course.html
index a9175a0d95dc54dc110fa90bb608ca1bc140f64e..1437b4cd639732d000ab4aed5cbe57c2ee089669 100644
--- a/templates/course.html
+++ b/templates/course.html
@@ -43,6 +43,7 @@
 					<tr><td>Gelistet:</td><td>{{ moderator_checkbox(['courses',course.id,'listed'], course.listed) }}</td></tr>
 					<tr><td>Nicht im Drehplan:</td><td>{{ moderator_checkbox(['courses',course.id,'external'], course.external) }}</td></tr>
 					<tr><td>Videos downloadbar:</td><td>{{ moderator_checkbox(['courses',course.id,'downloadable'], course.downloadable) }}</td></tr>
+					<tr><td>Kapitel auf Kursseite:</td><td>{{ moderator_checkbox(['courses',course.id,'coursechapters'], course.coursechapters) }}</td></tr>
 					<tr><td>Short:</td><td>{{ moderator_editor(['courses',course.id,'short'], course.short) }}</td></tr>
 					<tr><td>Handle:</td><td>{{ moderator_editor(['courses',course.id,'handle'], course.handle) }}</td></tr>
 					<tr><td>Thema:</td><td>{{ moderator_editor(['courses',course.id,'subject'], course.subject) }}</td></tr>
@@ -93,7 +94,7 @@
 	</div>
 	<ul class="list-group lectureslist">
 		{% for l in lectures %}
-			{{ lecture_list_item(l,videos|selectattr('lecture_id','equalto',l.id)|list,global_permissions)}}
+			{{ lecture_list_item(l,videos|selectattr('lecture_id','equalto',l.id)|list,global_permissions,chapters=chapters|selectattr('lecture_id','equalto',l.id))}}
 		{% endfor %}
 	</ul>
 </div>
diff --git a/templates/macros.html b/templates/macros.html
index ab1a2c9b3815ffda6154be50b5a5ed8d91e21aa2..0ec91ee0a50438f287e275dede7508f72b2a8a00 100644
--- a/templates/macros.html
+++ b/templates/macros.html
@@ -204,7 +204,7 @@ $('#embedcodebtn').popover(
 </script>
 {% endmacro %}
 
-{% macro lecture_list_item(lecture,videos,global_permissions) %}
+{% macro lecture_list_item(lecture,videos,global_permissions,chapters=[]) %}
 <li class="list-group-item{% if lecture.norecording %} text-muted{% endif %}" id="lecture-{{lecture.id}}">
 	<div class="row">
 		{% if ismod() or (videos|length > 0)  %}
@@ -228,6 +228,9 @@ $('#embedcodebtn').popover(
 			</ul>
 			<ul class="list-unstyled col-sm-3 col-xs-12">
 				<li>{{ moderator_editor(['lectures',lecture.id,'comment'], lecture.comment) }}</li>
+				{% for chapter in chapters %}
+				<li><span class="glyphicon glyphicon-play"></span> <a href="{{url_for('lecture', course=lecture.course.handle, id=lecture.id, t=chapter.time)}}">{{chapter.text}}</a></li>
+				{% endfor %}
 				{% if  ismod() %}
 				<li>{{ moderator_editor(['lectures',lecture.id,'internal'], lecture.internal) }}</li>
 				<li>Sichtbar: {{ moderator_checkbox(['lectures',lecture.id,'visible'], lecture.visible) }}</li>