diff --git a/html/user/bossa_job_finished.php b/html/user/bossa_job_finished.php
new file mode 100644
index 0000000000..3ef0a82752
--- /dev/null
+++ b/html/user/bossa_job_finished.php
@@ -0,0 +1,54 @@
+.
+
+require_once("../inc/util.inc");
+require_once("../inc/bossa_db.inc");
+require_once("../inc/bossa_impl.inc");
+
+$user = get_logged_in_user();
+$inst = BossaJobInst::lookup_id(get_int('bji'));
+if (!$inst) {
+ error_page("No such job instance");
+}
+if ($inst->user_id != $user->id) {
+ error_page("Bad user ID");
+}
+if ($inst->finish_time) {
+ error_page("You already finished this job");
+}
+$job = BossaJob::lookup_id($inst->job_id);
+if (!$job) {
+ error_page("No such job");
+}
+
+$app = BossaApp::lookup_id($job->app_id);
+$file = "../inc/$app->short_name.inc";
+require_once($file);
+
+{
+ $trans = new BossaTransaction();
+
+ $now = time();
+ $inst->update("finish_time=$now, timeout=0");
+
+ BossaUser::lookup($user);
+ job_finished($job, $inst, $user);
+ show_next_job($app, $user);
+}
+
+?>