diff --git a/smash/web/migrations/0101_auto_20171214_1047.py b/smash/web/migrations/0101_auto_20171214_1047.py
new file mode 100644
index 0000000000000000000000000000000000000000..26e3d5740cd5870018d7613e684fe46c0f8fdc61
--- /dev/null
+++ b/smash/web/migrations/0101_auto_20171214_1047.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.7 on 2017-12-14 10:47
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('web', '0100_auto_20171213_1140'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='study',
+            name='auto_create_follow_up',
+            field=models.BooleanField(default=True, verbose_name=b'Auto create follow up visit'),
+        ),
+        migrations.AlterField(
+            model_name='worker',
+            name='email',
+            field=models.EmailField(blank=True, max_length=254, verbose_name=b'E-mail'),
+        ),
+    ]
diff --git a/smash/web/models/study.py b/smash/web/models/study.py
index 04a8e68e01cc32d1d6b5e12be22112e720137793..4501a3be57d712de4cb3f35cf77eae8a9407c67a 100644
--- a/smash/web/models/study.py
+++ b/smash/web/models/study.py
@@ -19,6 +19,11 @@ class Study(models.Model):
         on_delete=models.CASCADE,
     )
 
+    auto_create_follow_up = models.BooleanField(
+        default=True,
+        verbose_name="Auto create follow up visit"
+    )
+
     def __str__(self):
         return "%s" % self.name
 
diff --git a/smash/web/models/visit.py b/smash/web/models/visit.py
index 2922ea8bb66ba4e71fd213edd5ff660be87f9304..f94d30ddbe876ba539a415f887e62c4848a3d474 100644
--- a/smash/web/models/visit.py
+++ b/smash/web/models/visit.py
@@ -51,7 +51,15 @@ class Visit(models.Model):
         self.is_finished = True
         self.save()
 
-        if (not self.subject.subject.dead) and (not self.subject.resigned):
+        create_follow_up = True
+        if self.subject.subject.dead:
+            create_follow_up = False
+        elif self.subject.resigned:
+            create_follow_up = False
+        elif not self.subject.study.auto_create_follow_up:
+            create_follow_up = False
+
+        if create_follow_up:
             visit_started = Visit.objects.filter(subject=self.subject).filter(visit_number=1)[0].datetime_begin
             follow_up_number = Visit.objects.filter(subject=self.subject).count() + 1
 
diff --git a/smash/web/tests/view/test_visit.py b/smash/web/tests/view/test_visit.py
index 5f430b4b07f5a09915c4f42a66c3b29667accd80..549afd5e2f4de3fd72e56824310a49c55d26fe39 100644
--- a/smash/web/tests/view/test_visit.py
+++ b/smash/web/tests/view/test_visit.py
@@ -3,12 +3,12 @@ import logging
 
 from django.urls import reverse
 
-from web.forms import VisitDetailForm, VisitAddForm
+from web.forms import VisitDetailForm
 from web.models import Visit, MailTemplate
 from web.models.constants import MAIL_TEMPLATE_CONTEXT_VISIT
 from web.tests import LoggedInTestCase
 from web.tests.functions import create_study_subject, create_visit, create_appointment, create_appointment_type, \
-    create_language, get_resource_path
+    create_language, get_resource_path, format_form_field
 from web.views.notifications import get_today_midnight_date
 
 logger = logging.getLogger(__name__)
@@ -43,11 +43,7 @@ class VisitViewTests(LoggedInTestCase):
         visit_detail_form = VisitDetailForm(instance=visit)
         form_data = {}
         for key, value in visit_detail_form.initial.items():
-            if value is not None:
-                if isinstance(value, datetime.datetime):
-                    form_data[key] = value.strftime("%Y-%m-%d")
-                else:
-                    form_data[key] = value
+            form_data[key] = format_form_field(value)
         return form_data
 
     def test_render_visit_details_with_mail_templates(self):
@@ -78,14 +74,7 @@ class VisitViewTests(LoggedInTestCase):
         visit_count = Visit.objects.all().count()
         subject = create_study_subject()
 
-        form = VisitAddForm()
-        form_data = {}
-        for key, value in form.initial.items():
-            if value is not None:
-                if isinstance(value, datetime.datetime):
-                    form_data[key] = value.strftime("%Y-%m-%d")
-                else:
-                    form_data[key] = value
+        form_data = self.create_visit_detail_form_data(None)
 
         form_data["datetime_begin"] = "2017-01-01"
         form_data["datetime_end"] = "2017-04-01"
@@ -109,6 +98,22 @@ class VisitViewTests(LoggedInTestCase):
 
         new_visit = Visit.objects.get(id=visit.id)
         self.assertTrue(new_visit.is_finished)
+        self.assertEqual(2, Visit.objects.count())
+
+    def test_mark_as_finished_with_study_no_follow_up_rule(self):
+        visit = create_visit()
+        study = visit.subject.study
+        study.auto_create_follow_up = False
+        study.save()
+
+        self.assertFalse(visit.is_finished)
+
+        response = self.client.get(reverse('web.views.visit_mark', args=[visit.id, "finished"]))
+        self.assertEqual(response.status_code, 302)
+
+        new_visit = Visit.objects.get(id=visit.id)
+        self.assertTrue(new_visit.is_finished)
+        self.assertEqual(1, Visit.objects.count())
 
     def test_visit_list(self):
         create_visit()