diff --git a/smash/web/views/visit.py b/smash/web/views/visit.py
index 10f2f80cf96e3fb6237ce303131869ba124aaa95..05d0ac44e9022231b52552752d32d64f31917ecd 100644
--- a/smash/web/views/visit.py
+++ b/smash/web/views/visit.py
@@ -9,7 +9,7 @@ from web.models.study_visit_list import VISIT_LIST_GENERIC, VISIT_LIST_MISSING_A
     VISIT_LIST_UNFINISHED, VISIT_LIST_CHOICES
 from . import wrap_response
 from ..forms import VisitDetailForm, VisitAddForm, SubjectDetailForm, StudySubjectDetailForm
-from ..models import Visit, Appointment, StudySubject, MailTemplate
+from ..models import Visit, Appointment, StudySubject, MailTemplate, Worker, Provenance
 
 logger = logging.getLogger(__name__)
 
@@ -93,7 +93,17 @@ def visit_details(request, id):
 def visit_mark(request, id, as_what):
     visit = get_object_or_404(Visit, id=id)
     if as_what == 'finished':
+        worker = Worker.get_by_user(request.user)
+        p = Provenance(modified_table = Visit._meta.db_table,
+                    modified_table_id = id,
+                    modification_author = worker,
+                    previous_value = visit.is_finished,
+                    new_value = True,
+                    modification_description = 'Worker "{}" marked visit from "{}" as finished'.format(worker, visit.subject),
+                    modified_field = 'is_finished',
+            )
         visit.mark_as_finished()
+        p.save()
 
     return redirect('web.views.visit_details', id=id)