diff --git a/smash/web/api_views/subject.py b/smash/web/api_views/subject.py
index 946b45b25de13468f0322604072b172b1fa9581a..7e04327593454621d23ffe3c42818551e65aa5fd 100644
--- a/smash/web/api_views/subject.py
+++ b/smash/web/api_views/subject.py
@@ -67,8 +67,9 @@ def get_subject_columns(request, subject_list_type):
     add_column(result, "First name", "first_name", subject_columns, "string_filter")
     add_column(result, "Last name", "last_name", subject_columns, "string_filter")
     add_column(result, "Date of birth", "date_born", subject_columns, None)
-    add_column(result, "Contact on", "datetime_contact_reminder", study_subject_columns, None)
+    add_column(result, "Contact on", "datetime_contact_reminder", study_subject_columns, None, study.columns)
     add_column(result, "Last contact attempt", "last_contact_attempt", study_subject_list, None)
+    add_column(result, "Referred by", "referral", study_subject_columns, "string_filter", study.columns)
     add_column(result, "Location", "default_location", study_subject_columns, "location_filter", study.columns)
     add_column(result, "Deceased", "dead", subject_columns, "yes_no_filter")
     add_column(result, "Resigned", "resigned", study_subject_columns, "yes_no_filter", study.columns)
@@ -118,6 +119,8 @@ def get_subjects_order(subjects_to_be_ordered, order_column, order_direction):
         result = subjects_to_be_ordered.order_by(order_direction + 'subject__last_name')
     elif order_column == "nd_number":
         result = subjects_to_be_ordered.order_by(order_direction + 'nd_number')
+    elif order_column == "referral":
+        result = subjects_to_be_ordered.order_by(order_direction + 'referral')
     elif order_column == "screening_number":
         result = subjects_to_be_ordered.order_by(order_direction + 'screening_number')
     elif order_column == "default_location":
@@ -226,6 +229,8 @@ def get_subjects_filtered(subjects_to_be_filtered, filters):
             result = result.filter(subject__last_name__icontains=value)
         elif column == "nd_number":
             result = result.filter(nd_number__icontains=value)
+        elif column == "referral":
+            result = result.filter(referral__icontains=value)
         elif column == "screening_number":
             result = result.filter(screening_number__icontains=value)
         elif column == "dead":
@@ -370,6 +375,7 @@ def serialize_subject(study_subject):
         "last_contact_attempt": last_contact_attempt_string,
         "nd_number": study_subject.nd_number,
         "screening_number": study_subject.screening_number,
+        "referral": study_subject.referral,
         "default_location": location,
         "dead": get_yes_no(study_subject.subject.dead),
         "resigned": get_yes_no(study_subject.resigned),
diff --git a/smash/web/tests/api_views/test_subject.py b/smash/web/tests/api_views/test_subject.py
index 71f3adc756e5c49e2cd25ceba76ad23e3aacdc78..c16d85bb63849d34ba62fdc22b294a6b3303fd90 100644
--- a/smash/web/tests/api_views/test_subject.py
+++ b/smash/web/tests/api_views/test_subject.py
@@ -229,6 +229,17 @@ class TestApi(TestCase):
 
         self.check_subject_ordered("last_name", [subject, subject2])
 
+    def test_subjects_sort_referral(self):
+        subject = self.study_subject
+        subject.referral = "XXX"
+        subject.save()
+
+        subject2 = create_study_subject(2)
+        subject2.referral = "YYY"
+        subject2.save()
+
+        self.check_subject_ordered("referral", [subject, subject2])
+
     def test_subjects_sort_dead(self):
         study_subject = self.study_subject
         study_subject.subject.dead = True