diff --git a/smash/web/forms.py b/smash/web/forms.py
index 3b2d60066bc7cbd41e727477aa84e93610b24c4f..657306be52cc1b95579e8fc59c288ba75bad35ab 100644
--- a/smash/web/forms.py
+++ b/smash/web/forms.py
@@ -49,6 +49,11 @@ def validate_subject_country(self, cleaned_data):
         self.add_error('country', "Select valid country")
 
 
+def validate_subject_resign_reason(self, cleaned_data):
+    if cleaned_data['resigned'] and cleaned_data['resign_reason'] == '':
+        self.add_error('resign_reason', "Resign reason cannot be empty")
+
+
 def validate_subject_mpower_number(self, cleaned_data):
     if cleaned_data['mpower_id'] != "":
         subjects_from_db = Subject.objects.filter(mpower_id=cleaned_data['mpower_id'])
@@ -71,7 +76,7 @@ class SubjectAddForm(ModelForm):
     class Meta:
         model = Subject
         fields = '__all__'
-        exclude = ['dead', 'resigned']
+        exclude = ['dead', 'resigned', 'resign_reason']
 
     def __init__(self, *args, **kwargs):
         user = kwargs.pop('user', None)
@@ -174,6 +179,7 @@ class SubjectEditForm(ModelForm):
         validate_subject_nd_number(self, self.cleaned_data)
         validate_subject_mpower_number(self, self.cleaned_data)
         validate_subject_country(self, self.cleaned_data)
+        validate_subject_resign_reason(self, self.cleaned_data)
 
     class Meta:
         model = Subject
diff --git a/smash/web/migrations/0062_subject_resign_reason.py b/smash/web/migrations/0062_subject_resign_reason.py
new file mode 100644
index 0000000000000000000000000000000000000000..cb3ba4eb4443605f591c9a44ff5e36256513da19
--- /dev/null
+++ b/smash/web/migrations/0062_subject_resign_reason.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.7 on 2017-10-31 12:14
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('web', '0061_remove_subject_country'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='subject',
+            name='resign_reason',
+            field=models.TextField(blank=True, max_length=2000, verbose_name=b'Resign reason'),
+        ),
+    ]
diff --git a/smash/web/models/subject.py b/smash/web/models/subject.py
index e87f3ab83e3f274ec8d40845e318b8d3868bf1d1..c16e7330a7ff76ff1ff93f1816691ddd01b26f93 100644
--- a/smash/web/models/subject.py
+++ b/smash/web/models/subject.py
@@ -171,6 +171,10 @@ class Subject(models.Model):
         default=False,
         editable=True
     )
+    resign_reason = models.TextField(max_length=2000,
+                                     blank=True,
+                                     verbose_name='Resign reason'
+                                     )
 
     def __str__(self):
         return "%s %s" % (self.first_name, self.last_name)
diff --git a/smash/web/templates/subjects/edit.html b/smash/web/templates/subjects/edit.html
index ec809187f951314173831d76475bcbdf3e6b7234..609cfbe22dab89900bfeb0343eeacf2bb54dbe3c 100644
--- a/smash/web/templates/subjects/edit.html
+++ b/smash/web/templates/subjects/edit.html
@@ -154,6 +154,11 @@
             });
             var dead_was_checked = $("#id_dead").is(":checked");
             var resigned_was_checked = $("#id_resigned").is(":checked");
+            $("#id_resign_reason").prop('disabled', !resigned_was_checked);
+            $("#id_resigned").on("click", function(){
+                var checked = $("#id_resigned").is(":checked");
+                $("#id_resign_reason").prop('disabled', !checked);
+            });
             $("form").submit(function () {
                 if (confirmed) {
                     return true;
diff --git a/smash/web/tests/view/test_subjects.py b/smash/web/tests/view/test_subjects.py
index fae555669992cc0910070a1196be4faa015af6e3..834ba8d09d950625bd64d32465753c74ce3b2e9f 100644
--- a/smash/web/tests/view/test_subjects.py
+++ b/smash/web/tests/view/test_subjects.py
@@ -43,6 +43,22 @@ class SubjectsViewTests(LoggedInWithWorkerTestCase):
         self.assertEqual(response.status_code, 200)
         self.assertTrue("Add visit" in response.content)
 
+    def test_save_subject_edit_when_resigned_without_reason(self):
+        subject = create_subject()
+        form_subject = SubjectEditForm(instance=subject)
+        form_data = {}
+        for key, value in form_subject.initial.items():
+            if value is not None:
+                form_data[key] = value
+
+        form_data['dead'] = "True"
+        form_data['resigned'] = "True"
+        response = self.client.post(
+            reverse('web.views.subject_edit', kwargs={'id': subject.id}), data=form_data)
+
+        self.assertEqual(response.status_code, 200)
+        self.assertTrue("Resign reason cannot be empty" in response.content)
+
     def test_save_subject_edit(self):
         subject = create_subject()
         form_subject = SubjectEditForm(instance=subject)
@@ -53,6 +69,7 @@ class SubjectsViewTests(LoggedInWithWorkerTestCase):
 
         form_data['dead'] = "True"
         form_data['resigned'] = "True"
+        form_data['resign_reason'] = "doesn't want to participate"
         response = self.client.post(
             reverse('web.views.subject_edit', kwargs={'id': subject.id}), data=form_data)
 
diff --git a/smash/web/views/subject.py b/smash/web/views/subject.py
index 09509ef2af1e53055f848353a924845ead5c4655..dfc0c2bc0cb57991c3f49210e49a38787e3c2136 100644
--- a/smash/web/views/subject.py
+++ b/smash/web/views/subject.py
@@ -68,6 +68,8 @@ def subject_edit(request, id):
             if '_continue' in request.POST:
                 return redirect('web.views.subject_edit', id=the_subject.id)
             return redirect('web.views.subjects')
+        else:
+            messages.add_message(request, messages.ERROR, 'Invalid data. Please fix data and try again.')
     else:
         form = SubjectEditForm(instance=the_subject, was_dead=was_dead, was_resigned=was_resigned)