diff --git a/smash/web/api_views/subject.py b/smash/web/api_views/subject.py
index fb81d9624b40750c5f24315112d873516b2ff3ab..c31d13903ab43b26fa7db0fd1f9c570d28e5cb5e 100644
--- a/smash/web/api_views/subject.py
+++ b/smash/web/api_views/subject.py
@@ -70,6 +70,10 @@ def get_subject_columns(request, subject_list_type):
     add_column(result, "Resigned", "resigned", study_subject_columns, "yes_no_filter", study.columns)
     add_column(result, "Endpoint Reached", "endpoint_reached", study_subject_columns, "yes_no_filter", study.columns)
     add_column(result, "Postponed", "postponed", study_subject_columns, "yes_no_filter", study.columns)
+    add_column(result, "Next of keen", "next_of_keen_name", subject_columns, "string_filter")
+    add_column(result, "Next of keen phone", "next_of_keen_phone", subject_columns, "string_filter")
+    add_column(result, "Next of keen address", "next_of_keen_address", subject_columns, "string_filter")
+    add_column(result, "Brain donation agreement", "brain_donation_agreement", study_subject_columns, "yes_no_filter", study.columns)
     add_column(result, "Excluded", "excluded", study_subject_columns, "yes_no_filter", study.columns)
     add_column(result, "Info sent", "information_sent", study_subject_columns, "yes_no_filter", study.columns)
     add_column(result, "Type", "type", study_subject_columns, "type_filter", study.columns)
@@ -113,6 +117,12 @@ def get_subjects_order(subjects_to_be_ordered, order_column, order_direction, co
         result = subjects_to_be_ordered.order_by(order_direction + 'subject__last_name')
     elif order_column == "address":
         result = subjects_to_be_ordered.order_by(order_direction + 'subject__address')
+    elif order_column == "next_of_keen_name":
+        result = subjects_to_be_ordered.order_by(order_direction + 'subject__next_of_keen_name')
+    elif order_column == "next_of_keen_phone":
+        result = subjects_to_be_ordered.order_by(order_direction + 'subject__next_of_keen_phone')
+    elif order_column == "next_of_keen_address":
+        result = subjects_to_be_ordered.order_by(order_direction + 'subject__next_of_keen_address')
     elif order_column == "nd_number":
         result = subjects_to_be_ordered.order_by(order_direction + 'nd_number')
     elif order_column == "referral":
@@ -144,6 +154,8 @@ def get_subjects_order(subjects_to_be_ordered, order_column, order_direction, co
         result = subjects_to_be_ordered.order_by(order_direction + 'subject__social_security_number')
     elif order_column == "postponed":
         result = subjects_to_be_ordered.order_by(order_direction + 'postponed')
+    elif order_column == "brain_donation_agreement":
+        result = subjects_to_be_ordered.order_by(order_direction + 'brain_donation_agreement')
     elif order_column == "excluded":
         result = subjects_to_be_ordered.order_by(order_direction + 'excluded')
     elif order_column == "type":
@@ -242,6 +254,12 @@ def get_subjects_filtered(subjects_to_be_filtered, filters):
             result = result.filter(subject__last_name__icontains=value)
         elif column == "address":
             result = result.filter(subject__address__icontains=value)
+        elif column == "next_of_keen_name":
+            result = result.filter(subject__next_of_keen_name__icontains=value)
+        elif column == "next_of_keen_phone":
+            result = result.filter(subject__next_of_keen_phone__icontains=value)
+        elif column == "next_of_keen_address":
+            result = result.filter(subject__next_of_keen_address__icontains=value)
         elif column == "nd_number":
             result = result.filter(nd_number__icontains=value)
         elif column == "referral":
@@ -254,6 +272,8 @@ def get_subjects_filtered(subjects_to_be_filtered, filters):
             result = result.filter(resigned=(value == "true"))
         elif column == "endpoint_reached":
             result = result.filter(endpoint_reached=(value == "true"))
+        elif column == "brain_donation_agreement":
+            result = result.filter(brain_donation_agreement=(value == "true"))
         elif column == "postponed":
             result = result.filter(postponed=(value == "true"))
         elif column == "excluded":
@@ -402,6 +422,9 @@ def serialize_subject(study_subject):
         "first_name": study_subject.subject.first_name,
         "last_name": study_subject.subject.last_name,
         "address": study_subject.subject.pretty_address(),
+        "next_of_keen_name": study_subject.subject.next_of_keen_name,
+        "next_of_keen_phone": study_subject.subject.next_of_keen_phone,
+        "next_of_keen_address": study_subject.subject.next_of_keen_address,
         "date_born": study_subject.subject.date_born,
         "datetime_contact_reminder": contact_reminder,
         "last_contact_attempt": last_contact_attempt_string,
@@ -414,6 +437,7 @@ def serialize_subject(study_subject):
         "resigned": bool_to_yes_no(study_subject.resigned),
         "endpoint_reached": bool_to_yes_no(study_subject.endpoint_reached),
         "postponed": bool_to_yes_no(study_subject.postponed),
+        "brain_donation_agreement": bool_to_yes_no(study_subject.brain_donation_agreement),
         "excluded": bool_to_yes_no(study_subject.excluded),
         "information_sent": bool_to_yes_no(study_subject.information_sent),
         "health_partner_first_name": health_partner_first_name,
diff --git a/smash/web/forms/study_subject_forms.py b/smash/web/forms/study_subject_forms.py
index ea2849fc6ae8ddce7b8f5ddc62d1bb7467908b8a..2bc880780226734cfa1653501960eb47bc8138b0 100644
--- a/smash/web/forms/study_subject_forms.py
+++ b/smash/web/forms/study_subject_forms.py
@@ -161,6 +161,7 @@ def prepare_study_subject_fields(fields, study):
     prepare_field(fields, study.columns, 'nd_number')
     prepare_field(fields, study.columns, 'datetime_contact_reminder')
     prepare_field(fields, study.columns, 'postponed')
+    prepare_field(fields, study.columns, 'brain_donation_agreement')
     prepare_field(fields, study.columns, 'flying_team')
     prepare_field(fields, study.columns, 'mpower_id')
     prepare_field(fields, study.columns, 'comments')
diff --git a/smash/web/migrations/0146_auto_20200320_0932.py b/smash/web/migrations/0146_auto_20200320_0932.py
new file mode 100644
index 0000000000000000000000000000000000000000..93b2487ba4a8bcf2f002110c262a83cc370d33b8
--- /dev/null
+++ b/smash/web/migrations/0146_auto_20200320_0932.py
@@ -0,0 +1,55 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.5 on 2020-03-20 09:32
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('web', '0145_add_permissions_to_existing_workers'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='studycolumns',
+            name='brain_donation_agreement',
+            field=models.BooleanField(default=False, verbose_name=b'Brain donation agreement'),
+        ),
+        migrations.AddField(
+            model_name='studysubject',
+            name='brain_donation_agreement',
+            field=models.BooleanField(default=False, verbose_name=b'Brain donation agreement'),
+        ),
+        migrations.AddField(
+            model_name='subject',
+            name='next_of_keen_address',
+            field=models.TextField(blank=True, max_length=2000, verbose_name=b'Next of keen address'),
+        ),
+        migrations.AddField(
+            model_name='subject',
+            name='next_of_keen_name',
+            field=models.CharField(blank=True, max_length=50, verbose_name=b'Next of keen'),
+        ),
+        migrations.AddField(
+            model_name='subject',
+            name='next_of_keen_phone',
+            field=models.CharField(blank=True, max_length=50, verbose_name=b'Next of keen phone'),
+        ),
+        migrations.AddField(
+            model_name='subjectcolumns',
+            name='next_of_keen_address',
+            field=models.BooleanField(default=False, max_length=1, verbose_name=b'Next of keen address'),
+        ),
+        migrations.AddField(
+            model_name='subjectcolumns',
+            name='next_of_keen_name',
+            field=models.BooleanField(default=False, max_length=1, verbose_name=b'Next of keen'),
+        ),
+        migrations.AddField(
+            model_name='subjectcolumns',
+            name='next_of_keen_phone',
+            field=models.BooleanField(default=False, max_length=1, verbose_name=b'Next of keen phone'),
+        ),
+    ]
diff --git a/smash/web/models/study_columns.py b/smash/web/models/study_columns.py
index a1b345700db1db01741b050496d1e609524c30da..7d20b3913d40a71f72fc0b70327a20084e83a158 100644
--- a/smash/web/models/study_columns.py
+++ b/smash/web/models/study_columns.py
@@ -1,8 +1,6 @@
 # coding=utf-8
 from django.db import models
 
-from web.models.constants import BOOL_CHOICES
-
 
 class StudyColumns(models.Model):
     class Meta:
@@ -81,7 +79,7 @@ class StudyColumns(models.Model):
     excluded = models.BooleanField(default=False, verbose_name='Excluded')
 
     endpoint_reached = models.BooleanField(default=True, verbose_name='Endpoint reached')
-    
+
     resign_reason = models.BooleanField(default=True, verbose_name='Endpoint reached comments')
 
     referral_letter = models.BooleanField(
@@ -117,4 +115,9 @@ class StudyColumns(models.Model):
     vouchers = models.BooleanField(
                                    default=False,
                                    verbose_name='Vouchers',
-                                   )
\ No newline at end of file
+                                   )
+
+    brain_donation_agreement = models.BooleanField(
+                                                   default=False,
+                                                   verbose_name='Brain donation agreement',
+                                                   )
diff --git a/smash/web/models/study_subject.py b/smash/web/models/study_subject.py
index a4d217784f01a67e34d2698777f743f5a2e06548..f08d450d3b0b516c9de4c943b3347eddc610aad5 100644
--- a/smash/web/models/study_subject.py
+++ b/smash/web/models/study_subject.py
@@ -164,6 +164,11 @@ class StudySubject(models.Model):
         verbose_name='PD in family',
         default=None,
     )
+    brain_donation_agreement = models.BooleanField(
+                                                   default=False,
+                                                   verbose_name='Brain donation agreement',
+                                                   )
+
     resigned = models.BooleanField(
         verbose_name='Resigned',
         default=False,
diff --git a/smash/web/models/subject.py b/smash/web/models/subject.py
index 0d0eb57f960b91551ab63e40c6c4d83026b3be3c..fa9f067db93781e5e4fb90a70a51f5eee41a339e 100644
--- a/smash/web/models/subject.py
+++ b/smash/web/models/subject.py
@@ -101,6 +101,21 @@ class Subject(models.Model):
                                 verbose_name='Country'
                                 )
 
+    next_of_keen_name = models.CharField(max_length=50,
+                                         blank=True,
+                                         verbose_name='Next of keen'
+                                         )
+
+    next_of_keen_phone = models.CharField(max_length=50,
+                                          blank=True,
+                                          verbose_name='Next of keen phone'
+                                          )
+
+    next_of_keen_address = models.TextField(max_length=2000,
+                                            blank=True,
+                                            verbose_name='Next of keen address'
+                                            )
+
     dead = models.BooleanField(
         verbose_name='Deceased',
         default=False,
diff --git a/smash/web/models/subject_columns.py b/smash/web/models/subject_columns.py
index d83847c7d6589aa98adbcd1740137fcb1a80526b..04a1869b0787f66eb61e8c76bd858419db16798f 100644
--- a/smash/web/models/subject_columns.py
+++ b/smash/web/models/subject_columns.py
@@ -83,3 +83,18 @@ class SubjectColumns(models.Model):
                                default=True,
                                verbose_name='Deceased',
                                )
+
+    next_of_keen_name = models.BooleanField(max_length=1,
+                                            default=False,
+                                            verbose_name='Next of keen',
+                                            )
+
+    next_of_keen_phone = models.BooleanField(max_length=1,
+                                             default=False,
+                                             verbose_name='Next of keen phone',
+                                             )
+
+    next_of_keen_address = models.BooleanField(max_length=1,
+                                               default=False,
+                                               verbose_name='Next of keen address',
+                                               )
diff --git a/smash/web/templates/subjects/edit.html b/smash/web/templates/subjects/edit.html
index a8fe444044085df8d4bb26c9c8203b8e2bc848c1..4fbc1ca90b4063e780d625b930c047c6f4792aef 100644
--- a/smash/web/templates/subjects/edit.html
+++ b/smash/web/templates/subjects/edit.html
@@ -204,6 +204,11 @@
                     $("#confirm-dead-resigned-mark-dialog").modal("show");
                     return false;
                 }
+                var brainDonation = $("#id_study_subject-brain_donation_agreement").is(":checked");
+                if (brainDonation && ($("#id_subject-next_of_keen_phone").val() === '' || $("#id_subject-next_of_keen_address").val() === '' || $("#id_subject-next_of_keen_name").val() === '')) {
+                    alert("Next of keen data must be entered when brain donation agreement is in place");
+                    return false;
+                }
             });
             $("#confirm-save").click(function () {
                 confirmed = true;