diff --git a/sorter.py b/sorter.py
index 0a551cce0646ffccf6ccdad97ef96b67d61c405d..f7f6616bcd1bff99b083939d2aef777560067556 100644
--- a/sorter.py
+++ b/sorter.py
@@ -39,49 +39,39 @@ def update_video_metadata(jobid, jobtype, data, state, status):
 	modify('UPDATE videos_data SET hash = ?, file_size = ?, duration = ? WHERE id = ?',
 			status['hash'], status['filesize'], status['duration'], data['video_id'])
 
-def insert_video(lectureid, dbfilepath, fileformatid, hash="", filesize=-1, duration=-1):
+@app.route('/internal/jobs/add/thumbnail', methods=['GET', 'POST'])
+@mod_required
+@csrf_protect
+@handle_errors('jobs_overview', 'Zu dieser Veranstaltung existieren keine Videos!', 404, IndexError)
+def add_thumbnail_job():
+	schedule_thumbnail(request.values['lectureid'])
+	return redirect(request.values.get('ref', url_for('jobs_overview')))
+
+def insert_video(lectureid, dbfilepath, fileformatid, hash="", filesize=-1, duration=-1, sourceid=None):
 	visible = query('SELECT courses.autovisible FROM courses JOIN lectures ON lectures.course_id = courses.id WHERE lectures.id = ?', lectureid)[0]['autovisible']
 	video_id = modify('''INSERT INTO videos_data 
-		(lecture_id, visible, path, video_format, title, comment, internal, file_modified, time_created, time_updated, created_by, hash, file_size, duration)
+		(lecture_id, visible, path, video_format, title, comment, internal, file_modified, time_created, time_updated, created_by, hash, file_size, duration, source)
 		VALUES 
 		(?, ?, ?, ?, "", "", "", ?, ?, ?, ?, ?, ?, ?)''',
-		lectureid, visible, dbfilepath, fileformatid, datetime.now(), datetime.now(), datetime.now(), -1, hash, filesize, duration)
-	query('INSERT INTO sortlog (lecture_id,video_id,path,`when`) VALUES (?,?,?,?)', lectureid, video_id, dbfilepath, datetime.now())
+		lectureid, visible, dbfilepath, fileformatid, datetime.now(), datetime.now(), datetime.now(), -1, hash, filesize, duration, source)
+	if sourceid:
+		schedule_remux(lectureid, video_id)
+	else:
+		query('INSERT INTO sortlog (lecture_id,video_id,path,`when`) VALUES (?,?,?,?)', lectureid, video_id, dbfilepath, datetime.now())
+		schedule_job('probe', {'path': dbfilepath, 'lecture_id': lectureid, 'video_id': video_id, 'import-chapters': True})
 	schedule_thumbnail(lectureid)
-	schedule_job('probe', {'path': dbfilepath, 'lecture_id': lectureid, 'video_id': video_id, 'import-chapters': True})
 	video = query('SELECT videos.*, "format" AS sep, formats.* FROM videos JOIN formats ON formats.id = videos.video_format WHERE videos.id = ?', video_id)[0]
 	lecture = query('SELECT * FROM lectures WHERE id = ?', lectureid)[0]
 	course = query('SELECT * FROM courses WHERE id = ?', lecture['course_id'])[0]
 	notify_mods('new_video', course['id'], course=course, lecture=lecture, video=video)
 
-@app.route('/internal/jobs/add/thumbnail', methods=['GET', 'POST'])
-@mod_required
-@csrf_protect
-@handle_errors('jobs_overview', 'Zu dieser Veranstaltung existieren keine Videos!', 404, IndexError)
-def add_thumbnail_job():
-	schedule_thumbnail(request.values['lectureid'])
-	return redirect(request.values.get('ref', url_for('jobs_overview')))
-
 @job_handler('transcode')
 def insert_transcoded_video(jobid, jobtype, data, state, status):
 	if 'lecture_id' not in data or 'source_id' not in data or 'format_id' not in data:
 		return
 	if 'video_id' in data:
 		return
-	visible = query('SELECT courses.autovisible FROM courses JOIN lectures ON lectures.course_id = courses.id WHERE lectures.id = ?', data['lecture_id'])[0]['autovisible']
-	video_id = modify('''INSERT INTO videos_data 
-		(lecture_id, visible, path, video_format, title, comment, internal, file_modified, time_created, time_updated, created_by, hash, file_size, source, duration)
-		VALUES 
-		(?, ?, ?, ?, "", "", "", ?, ?, ?, ?, ?, ?, ?, ?)''',
-		data['lecture_id'], visible, data['output']['path'], data['format_id'],
-		datetime.now(), datetime.now(), datetime.now(), -1, status['hash'],
-		status['filesize'], data['source_id'], status['duration'])
-	schedule_remux(data['lecture_id'], video_id)
-	schedule_thumbnail(data['lecture_id'])
-	video = query('SELECT videos.*, "format" AS sep, formats.* FROM videos JOIN formats ON formats.id = videos.video_format WHERE videos.id = ?', video_id)[0]
-	lecture = query('SELECT * FROM lectures WHERE id = ?', data['lecture_id'])[0]
-	course = query('SELECT * FROM courses WHERE id = ?', lecture['course_id'])[0]
-	notify_mods('new_video', course['id'], course=course, lecture=lecture, video=video)
+	insert_video(data['lecture_id'], data['output']['path'], data['format_id'], status['hash'], status['filesize'], status['duration'], data['source_id'] )
 
 def sort_file(filename, course=None, lectures=None):
 	# filenames: <handle>-<sorter>-<format>.mp4