diff --git a/smash/web/api_views/subject.py b/smash/web/api_views/subject.py
index 3e136b4fe318957214da6817aa0effcade0770cb..541af4a22fb8ad8c0a00a52282b40596911eb579 100644
--- a/smash/web/api_views/subject.py
+++ b/smash/web/api_views/subject.py
@@ -1,5 +1,5 @@
 import logging
-
+import re
 from django.db.models import Count, Case, When, Min, Max
 from django.db.models import Q
 from django.http import JsonResponse
@@ -215,56 +215,16 @@ def get_subjects_order(subjects_to_be_ordered, order_column, order_direction, co
     elif str(order_column).startswith("visit_"):
         visit_number = get_visit_number_from_visit_x_string(order_column)
         result = order_by_visit(subjects_to_be_ordered, order_direction, visit_number)
-    elif order_column == "virus_test_1":
-        result = subjects_to_be_ordered.order_by(order_direction + 'virus_test_1')
-    elif order_column == "virus_test_2":
-        result = subjects_to_be_ordered.order_by(order_direction + 'virus_test_2')
-    elif order_column == "virus_test_3":
-        result = subjects_to_be_ordered.order_by(order_direction + 'virus_test_3')
-    elif order_column == "virus_test_4":
-        result = subjects_to_be_ordered.order_by(order_direction + 'virus_test_4')
-    elif order_column == "virus_test_5":
-        result = subjects_to_be_ordered.order_by(order_direction + 'virus_test_5')
-    elif order_column == "virus_test_1_updated":
-        result = subjects_to_be_ordered.order_by(order_direction + 'virus_test_1_updated')
-    elif order_column == "virus_test_2_updated":
-        result = subjects_to_be_ordered.order_by(order_direction + 'virus_test_2_updated')
-    elif order_column == "virus_test_3_updated":
-        result = subjects_to_be_ordered.order_by(order_direction + 'virus_test_3_updated')
-    elif order_column == "virus_test_4_updated":
-        result = subjects_to_be_ordered.order_by(order_direction + 'virus_test_4_updated')
-    elif order_column == "virus_test_5_updated":
-        result = subjects_to_be_ordered.order_by(order_direction + 'virus_test_5_updated')
-    elif order_column == "virus_test_1_collection_date":
-        result = subjects_to_be_ordered.order_by(order_direction + 'virus_test_1_collection_date')
-    elif order_column == "virus_test_2_collection_date":
-        result = subjects_to_be_ordered.order_by(order_direction + 'virus_test_2_collection_date')
-    elif order_column == "virus_test_3_collection_date":
-        result = subjects_to_be_ordered.order_by(order_direction + 'virus_test_3_collection_date')
-    elif order_column == "virus_test_4_collection_date":
-        result = subjects_to_be_ordered.order_by(order_direction + 'virus_test_4_collection_date')
-    elif order_column == "virus_test_5_collection_date":
-        result = subjects_to_be_ordered.order_by(order_direction + 'virus_test_5_collection_date')
-    elif order_column == "virus_test_1_iga_status":
-        result = subjects_to_be_ordered.order_by(order_direction + 'virus_test_1_iga_status')
-    elif order_column == "virus_test_1_igg_status":
-        result = subjects_to_be_ordered.order_by(order_direction + 'virus_test_1_igg_status')
-    elif order_column == "virus_test_2_iga_status":
-        result = subjects_to_be_ordered.order_by(order_direction + 'virus_test_2_iga_status')
-    elif order_column == "virus_test_2_igg_status":
-        result = subjects_to_be_ordered.order_by(order_direction + 'virus_test_2_igg_status')
-    elif order_column == "virus_test_3_iga_status":
-        result = subjects_to_be_ordered.order_by(order_direction + 'virus_test_3_iga_status')
-    elif order_column == "virus_test_3_igg_status":
-        result = subjects_to_be_ordered.order_by(order_direction + 'virus_test_3_igg_status')
-    elif order_column == "virus_test_4_iga_status":
-        result = subjects_to_be_ordered.order_by(order_direction + 'virus_test_4_iga_status')
-    elif order_column == "virus_test_4_igg_status":
-        result = subjects_to_be_ordered.order_by(order_direction + 'virus_test_4_igg_status')
-    elif order_column == "virus_test_5_iga_status":
-        result = subjects_to_be_ordered.order_by(order_direction + 'virus_test_5_iga_status')
-    elif order_column == "virus_test_5_igg_status":
-        result = subjects_to_be_ordered.order_by(order_direction + 'virus_test_5_igg_status')
+    elif re.search(r'^virus_test_[1-5]$',order_column):
+        result = subjects_to_be_ordered.order_by(order_direction + order_column)
+    elif re.search(r'^virus_test_[1-5]_updated$',order_column):
+        result = subjects_to_be_ordered.order_by(order_direction + order_column)
+    elif re.search(r'^virus_test_[1-5]_collection_date',order_column):
+        result = subjects_to_be_ordered.order_by(order_direction + order_column)
+    elif re.search(r'^virus_test_[1-5]_iga_status',order_column):
+        result = subjects_to_be_ordered.order_by(order_direction + order_column)
+    elif re.search(r'^virus_test_[1-5]_igg_status',order_column):
+        result = subjects_to_be_ordered.order_by(order_direction + order_column)
     else:
         logger.warn("Unknown sort column: " + str(order_column))
     return result
diff --git a/smash/web/tests/api_views/test_subject.py b/smash/web/tests/api_views/test_subject.py
index ddeb5c05cc80adc41b508dbc58a403f5c3f51082..fa26b907197d76b7bca544169553c5d3260d6f73 100644
--- a/smash/web/tests/api_views/test_subject.py
+++ b/smash/web/tests/api_views/test_subject.py
@@ -5,8 +5,9 @@ import logging
 
 from django.urls import reverse
 
-from web.api_views.subject import get_subjects_order, get_subjects_filtered, serialize_subject
-from web.models import StudySubject, Appointment, Study, Worker
+from web.api_views.subject import get_subjects_order, get_subjects_filtered, serialize_subject, get_subject_columns
+from web.importer.warning_counter import MsgCounterHandler
+from web.models import StudySubject, Appointment, Study, Worker, SubjectColumns, StudyColumns
 from web.models.constants import GLOBAL_STUDY_ID, SUBJECT_TYPE_CHOICES_PATIENT, SUBJECT_TYPE_CHOICES_CONTROL
 from web.models.study_subject_list import SUBJECT_LIST_GENERIC, SUBJECT_LIST_NO_VISIT, SUBJECT_LIST_REQUIRE_CONTACT, \
     StudySubjectList, SUBJECT_LIST_VOUCHER_EXPIRY
@@ -22,6 +23,16 @@ class TestSubjectApi(LoggedInWithWorkerTestCase):
     def setUp(self):
         super(TestSubjectApi, self).setUp()
         self.study_subject = create_study_subject()
+        self.warning_counter = MsgCounterHandler()
+        logging.getLogger('').addHandler(self.warning_counter)
+
+    def tearDown(self):
+        logging.getLogger('').removeHandler(self.warning_counter)
+
+    def get_warning_count(self):
+        if "WARNING" in self.warning_counter.level2count:
+            return self.warning_counter.level2count["WARNING"]
+        return 0
 
     def test_cities(self):
         city_name = "some city"
@@ -156,9 +167,9 @@ class TestSubjectApi(LoggedInWithWorkerTestCase):
 
     def check_subject_ordered(self, order, result):
         subjects = get_subjects_order(StudySubject.objects.all(), order, "asc")
-        if isinstance(subjects, list): #sort by screening_number returns a list instead of a queryset
+        if isinstance(subjects, list):  # sort by screening_number returns a list instead of a queryset
             self.assertEqual(len(result), len(subjects))
-        else:    
+        else:
             self.assertEqual(len(result), subjects.count())
         for index in range(len(result)):
             self.assertEqual(result[index], subjects[index])
@@ -167,7 +178,7 @@ class TestSubjectApi(LoggedInWithWorkerTestCase):
         length = len(result)
         if isinstance(subjects, list):
             self.assertEqual(len(result), len(subjects))
-        else:    
+        else:
             self.assertEqual(len(result), subjects.count())
         for index in range(length):
             self.assertEqual(result[length - index - 1], subjects[index])
@@ -641,3 +652,33 @@ class TestSubjectApi(LoggedInWithWorkerTestCase):
 
         self.check_subject_filtered([["social_security_number", "12"]], [self.study_subject])
         self.check_subject_filtered([["social_security_number", "unknown"]], [])
+
+    def test_get_subject_order_for_columns(self):
+        study = Study.objects.filter(id=GLOBAL_STUDY_ID)[0]
+        list = StudySubjectList.objects.create(study=study, type="custom",
+                                               visible_subject_columns=SubjectColumns.objects.create(),
+                                               visible_subject_study_columns=StudyColumns.objects.create())
+        for key in vars(list.visible_subject_columns):
+            if getattr(list.visible_subject_columns, key) == False:
+                setattr(list.visible_subject_columns, key, True)
+        list.visible_subject_columns.save()
+
+        for key in vars(list.visible_subject_study_columns):
+            if getattr(list.visible_subject_study_columns, key) == False:
+                setattr(list.visible_subject_study_columns, key, True)
+        list.visible_subject_study_columns.save()
+
+        for key in vars(study.columns):
+            if getattr(study.columns, key) == False:
+                setattr(study.columns, key, True)
+        study.columns.save()
+
+        available_columns = get_subject_columns(None, "custom")
+
+        temp = str(available_columns.content)
+        columns = json.loads(temp)['columns']
+        for row in columns:
+            if row['sortable']:
+                order = row['type']
+                get_subjects_order(StudySubject.objects.none(), order, "asc")
+                self.assertEqual(self.get_warning_count(), 0, msg="Sorting by \"" + order + "\" does not work")