diff --git a/encoding.py b/encoding.py
index 6a233f6731b70f143e6f9b21718d937e675d4254..562c1c24f311e81e8208fb7b706d2e2bf5abf16a 100644
--- a/encoding.py
+++ b/encoding.py
@@ -29,3 +29,43 @@ def update_video_metadata(jobid, jobtype, data, state, status):
 	modify('UPDATE videos_data SET hash = ?, file_size = ? WHERE id = ?',
 			status['hash'], status['filesize'], data['video_id'])
 
+def schedule_remux(lectureid):
+	lecture = query('SELECT * FROM lectures WHERE id = ?', lectureid)[0]
+	course = query('SELECT * FROM courses WHERE id = ?', lecture['course_id'])[0]
+	chapters = query('SELECT text, time FROM chapters WHERE lecture_id = ?', lectureid)
+	videos = query('SELECT videos.*, sources.path AS srcpath, sources.hash AS srchash FROM videos JOIN sources ON videos.source = sources.id WHERE videos.lecture_id = ?', lectureid)
+	metadata = {'title': lecture['title'], 'album': course['title'],
+		'description': lecture['comment'],
+		'date': lecture['time'].strftime('%m/%d/%Y'),
+		'artist': lecture['speaker'] if lecture['speaker'] else course['organizer']}
+	for video in videos:
+		if not video['source']:
+			continue
+		data = {'video_id': video['id'], 'path': video['path'],
+			'srcpath': video['srcpath'], 'srchash': video['srchash'],
+			'chapters': chapters, 'metadata': metadata}
+		schedule_job('remux', data)
+
+@edit_handler('chapters')
+def chapter_changed(table, column, value, id):
+	print('chapter_changed')
+	chapters = query('SELECT * FROM chapters WHERE id = ?', id)
+	if not chapters:
+		return
+	chapter = chapters[0]
+	if column in ['visible', 'deleted'] or (chapter['visible'] and not chapter['deleted']):
+		schedule_remux(chapter['lecture_id'])
+
+@edit_handler('courses')
+def course_changed(table, column, value, id):
+	if column not in ['title', 'organizer']:
+		return
+	lectures = query('SELECT * FROM lectures WHERE course_id = ?', id)
+	for lecture in lectures:
+		schedule_remux(lecture['id'])
+
+@edit_handler('lectures')
+def lecture_changed(table, column, value, id):
+	if column in ['title', 'comment', 'time', 'speaker']:
+		schedule_remux(id)
+