diff --git a/jobs.py b/jobs.py
index 0341017121fc03553c82b89e9d115c64819f5248..12f7ce93018ad483451c03cf765fe047e4675e5b 100644
--- a/jobs.py
+++ b/jobs.py
@@ -34,6 +34,14 @@ def jobs_overview():
 	jobs = query('SELECT * FROM jobs WHERE (type like ?) AND (worker like ? OR (worker IS NULL AND ? = "%")) AND (state like ?) ORDER BY `time_created` DESC LIMIT ? OFFSET ?', filter['type'], filter['worker'], filter['worker'], filter['state'], pagesize, page*pagesize)
 	return render_template('jobs_overview.html',worker=worker,jobs=jobs, filter_values=filter_values, filter=filter, page=page, pagesize=pagesize, pagecount=pagecount)
 
+@app.route('/internal/jobs/action/<action>')
+@mod_required
+@csrf_protect
+def jobs_action(action):
+	if action == 'clear_failed':
+		query('UPDATE jobs SET state="deleted" WHERE state="failed"')
+	return redirect(request.values.get('ref', url_for('jobs_overview')))
+
 def jobs_api_token_required(func):
 	@wraps(func)
 	def decorator(*args, **kwargs):
diff --git a/templates/jobs_overview.html b/templates/jobs_overview.html
index 161aa6cb79f6f1a480f2e366148fc129115037b1..835bcbe12ab8fb386ba5dea6de8533423a3394e3 100644
--- a/templates/jobs_overview.html
+++ b/templates/jobs_overview.html
@@ -34,9 +34,11 @@
 	</div>
 	<div class="panel panel-default">
 		<div class="panel-heading">
-				<h1 class="panel-title">
-					Jobs
-				</h1>
+			<h1 class="panel-title">
+				Jobs
+				<a class="btn btn-default">Job(s) erzeugen</a>
+				<a class="btn btn-default" href="{{url_for('jobs_action', action='clear_failed', ref=request.url)}}" >Alle fehlgeschlagenen Jobs löschen</a>
+			</h1>
 		</div>
 		<div class="panel-collapse collapse in">
 			<div class="panel-body">