diff --git a/core/tests/data_factories.py b/core/tests/data_factories.py
deleted file mode 100644
index 438b9955bbac5bf243ae7bf5c4715084f084cb7a..0000000000000000000000000000000000000000
--- a/core/tests/data_factories.py
+++ /dev/null
@@ -1,252 +0,0 @@
-""" A set of factory methods that make testing easier. Each method creates all
-reuired subfields if not provided by via kwargs. """
-
-from core.models import (ExamType, Feedback, Reviewer, Student, Submission,
-                         SubmissionType, Tutor, UserAccount)
-
-# These methods are meant to be used to provide data to insert into the test
-# database
-
-
-def make_test_data(**kwargs):
-    if 'exam'in kwargs:
-        ExamType.objects.get_or_create(module_reference=kwargs['exam']['module_reference'],
-                                       defaults={
-                                           'total_score': kwargs['exam'].get('total_score', 100),
-                                           'pass_score': kwargs['exam'].get('pass_score', 50),
-                                       })
-    if 'submission_types' in kwargs:
-        for submission_type in kwargs['submission_types']:
-            SubmissionType.objects.get_or_create(name=submission_type['name'], defaults=submission_type)
-    if 'users' in kwargs:
-        for user in kwargs['users']:
-            (user_object, _) = UserAccount.objects.get_or_create(username=user['username'], defaults=user)
-            user_object.set_password(user.get('password', 'p'))
-            user_object.save()
-    if 'students' in kwargs:
-        for student in kwargs['students']:
-            Student.objects.get_or_create(
-                user=UserAccount.objects.get_or_create(username=student['user'])[0],
-                defaults={
-                    'exam': ExamType.objects.get(module_reference=student['exam'])
-                }
-            )
-    if 'tutors' in kwargs:
-        for tutor in kwargs['tutors']:
-            Tutor.objects.get_or_create(user=UserAccount.objects.get_or_create(username=tutor['user'])[0])
-    if 'reviewers' in kwargs:
-        for reviewer in kwargs['reviewers']:
-            Reviewer.objects.get_or_create(
-                user=UserAccount.objects.get_or_create(username=reviewer['user'])[0])
-    if 'submissions' in kwargs:
-        for submission in kwargs['submissions']:
-            submission_type, _ = SubmissionType.objects.get_or_create(
-                name=submission.get('type', 'Auto generated type'))
-            student, _ = Student.objects.get_or_create(user=UserAccount.objects.get(
-                username=submission.get('user', 'default_user')
-            ))
-            submission_object, _ = Submission.objects.get_or_create(
-                type=submission_type, student=student, defaults={
-                'seen_by_student': submission.get('seen_by_student', False),
-                'text': submission.get('text', ''),
-            })
-            if 'feedback' in submission:
-                feedback = submission['feedback']
-                text = feedback.get('text', 'Verrrryyy bad!')
-                score = feedback.get('score', 0)
-                tutor = UserAccount.objects.get(username=feedback['of_tutor']).get_associated_user()
-                Feedback.objects.get_or_create(of_submission=submission_object, defaults={
-                    'text': text,
-                    'score': score,
-                    'of_tutor': tutor,
-                })
-    if 'feedback' in kwargs:
-        for feedback in kwargs['feedback']:
-            text = feedback.get('text', 'Verrrryyy bad!')
-            score = feedback.get('score', 0)
-            submission = UserAccount.objects.get(username=feedback['student']).submissions.get(
-                type=SubmissionType.objects.get(feedback['submission_type'])
-            )
-            tutor = UserAccount.objects.get(username=feedback['of_tutor']).get_associated_user()
-            Feedback.objects.get_or_create(of_submission=submission, defaults={
-                'text': text,
-                'score': score,
-                'of_tutor': tutor,
-            })
-
-
-def init_test_instance():
-    make_test_data(
-        exam={
-            'module_reference': 'Test Exam 01',
-            'total_score': 100,
-            'pass_score': 60,
-        },
-        submission_types=[
-            {
-                'name': '01. Sort this or that',
-                'full_score': 35,
-                'description': 'Very complicated',
-                'solution': 'Trivial!'
-            },
-            {
-                'name': '02. Merge this or that or maybe even this',
-                'full_score': 35,
-                'description': 'Very complicated',
-                'solution': 'Trivial!'
-            },
-            {
-                'name': '03. This one exists for the sole purpose to test',
-                'full_score': 30,
-                'description': 'Very complicated',
-                'solution': 'Trivial!'
-            }
-        ],
-        users=[
-            {
-                'username': 'student01',
-                'password': 'p',
-                'fullname': 'Normal Student'
-            },
-            {
-                'username': 'tutor01'
-            },
-            {
-                'username': 'reviewer01'
-            }
-        ],
-        students=[{
-                'user': 'student01',
-                'exam': 'Test Exam 01',
-            }],
-        tutors=[{
-            'user': 'tutor01'
-        }],
-        reviewers=[{
-            'user': 'reviewer01'
-        }],
-        submissions=[
-            {
-                'text': 'function blabl\n'
-                        '   on multi lines\n'
-                        '       for blabla in bla:\n'
-                        '   arrrgh\n'
-                        '       asasxasx\n'
-                        '           lorem ipsum und so\n',
-                'type': '01. Sort this or that',
-                'user': 'student01',
-                'feedback': {
-                    'text': 'Not good!',
-                    'score': 5,
-                    'of_tutor': 'tutor01',
-                }
-            },
-            {
-                'text': 'function blabl\n'
-                        '   on multi lines\n'
-                        '       for blabla in bla:\n'
-                        '   arrrgh\n'
-                        '       asasxasx\n'
-                        '           lorem ipsum und so\n',
-                'type': '02. Merge this or that or maybe even this',
-                'user': 'student01',
-                'feedback': {
-                    'text': 'A little bit better!',
-                    'score': 10,
-                    'of_tutor': 'tutor01',
-                },
-            },
-            {
-                'text': 'function blabl\n'
-                        '   on multi lines\n'
-                        '       for blabla in bla:\n'
-                        '   arrrgh\n'
-                        '       asasxasx\n'
-                        '           lorem ipsum und so\n',
-                'type': '03. This one exists for the sole purpose to test',
-                'user': 'student01',
-                'feedback': {
-                    'text': 'Awesome!',
-                    'score': 30,
-                    'of_tutor': 'tutor01',
-                },
-            },
-        ],
-    )
-
-
-def make_user(username='user01',
-              password='p',
-              fullname='us er01',
-              is_admin=False):
-    user = UserAccount.objects.create(username=username,
-                                      fullname=fullname,
-                                      is_admin=is_admin)
-    user.set_password(password)
-    user.save()
-    return user
-
-
-def make_exam(module_reference='TestExam B.Inf.0042',
-              total_score=42,
-              pass_score=21,
-              **kwargs):
-    return ExamType.objects.create(module_reference=module_reference,
-                                   total_score=total_score,
-                                   pass_score=pass_score, **kwargs)
-
-
-def make_submission_type(name='problem01',
-                         full_score=10,
-                         description='Very hard',
-                         solution='Impossible!'):
-    return SubmissionType.objects.create(name=name,
-                                         full_score=full_score,
-                                         description=description,
-                                         solution=solution)
-
-
-def make_student(user=None, exam=None):
-    if user is None:
-        user = make_user()
-    if exam is None:
-        exam = make_exam()
-    return Student.objects.create(user=user, exam=exam)
-
-
-def make_tutor(user=None):
-    if user is None:
-        user = make_user()
-    return Tutor.objects.create(user=user)
-
-
-def make_reviewer(user=None):
-    if user is None:
-        user = make_user()
-    return Reviewer.objects.create(user=user)
-
-
-def make_submission(type=None, student=None, text='Too hard for me ;-('):
-    if type is None:
-        type = make_submission_type()
-    if student is None:
-        student = make_student()
-    return Submission.objects.create(text=text, type=type, student=student)
-
-
-def make_feedback(of_tutor, of_submission=None, text='Very bad!', score=3):
-    if of_submission is None:
-        of_submission = make_submission()
-    return Feedback.objects.create(of_tutor=of_tutor,
-                                   of_submission=of_submission,
-                                   text=text,
-                                   score=score)
-
-
-def make_minimal_exam():
-    # also creates default examType, submissionType and student
-    submission = make_submission()
-
-    tutor = make_tutor(user=make_user(username='tutor01'))
-    feedback = make_feedback(of_tutor=tutor, of_submission=submission)
-    return submission, tutor, feedback
diff --git a/core/tests/test_student_page.py b/core/tests/test_student_page.py
index 930163ad8c94ebb906210976e06f6de8253c3b14..698bd3b5c8a516d545dfa7570c9967cf9c408ff8 100644
--- a/core/tests/test_student_page.py
+++ b/core/tests/test_student_page.py
@@ -2,9 +2,9 @@ from django.urls import reverse
 from rest_framework.test import (APIRequestFactory, APITestCase,
                                  force_authenticate)
 
-from core.models import Reviewer, SubmissionType
-from core.tests import data_factories
+from core.models import SubmissionType
 from core.views import StudentSelfApiViewSet
+from util.factories import make_test_data
 
 
 class StudentPageTests(APITestCase):
@@ -14,11 +14,47 @@ class StudentPageTests(APITestCase):
         cls.factory = APIRequestFactory()
 
     def setUp(self):
-        self.submission, self.tutor, self.feedback = \
-            data_factories.make_minimal_exam()
-        self.student = self.submission.student
-        self.reviewer = Reviewer.objects.create(
-            user=data_factories.make_user(username='reviewer'))
+        self.test_data = make_test_data(data_dict={
+            'exams': [{
+                'module_reference': 'TestExam B.Inf.0042',
+                'total_score': 42,
+                'pass_score': 21
+            }],
+            'submission_types': [{
+                'name': 'problem01',
+                'full_score': 10,
+                'description': 'Very hard',
+                'solution': 'Impossible!'
+            }],
+            'students': [{
+                'username': 'user01',
+                'fullname': 'us er01',
+                'exam': 'TestExam B.Inf.0042'
+            }],
+            'tutors': [{
+                'username': 'tutor01'
+            }],
+            'reviewers': [{
+               'username': 'reviewer'
+            }],
+            'submissions': [{
+                'user': 'user01',
+                'type': 'problem01',
+                'text': 'Too hard for me ;-(',
+                'feedback': {
+                    'of_tutor': 'tutor01',
+                    'text': 'Very bad!',
+                    'score': 3
+                }
+            }]
+        })
+
+        self.student = self.test_data['students'][0]
+        self.tutor = self.test_data['tutors'][0]
+        self.reviewer = self.test_data['reviewers'][0]
+        self.submission = self.test_data['submissions'][0]
+        self.feedback = self.submission.feedback
+
         self.request = self.factory.get(reverse('student_page-list'))
         self.view = StudentSelfApiViewSet.as_view({'get': 'retrieve'})
 
diff --git a/core/tests/test_student_reviewer_viewset.py b/core/tests/test_student_reviewer_viewset.py
index cf30b662f022b649f6b33b302e737c9b5ea9cab3..d486641ce9bcb6a9e936988ca2b4a5bd5d10e4fd 100644
--- a/core/tests/test_student_reviewer_viewset.py
+++ b/core/tests/test_student_reviewer_viewset.py
@@ -3,9 +3,8 @@ from rest_framework import status
 from rest_framework.test import (APIRequestFactory, APITestCase,
                                  force_authenticate)
 
-from core.tests import data_factories
 from core.views import StudentReviewerApiViewSet
-from util.factories import GradyUserFactory
+from util.factories import make_test_data
 
 
 class StudentPageTests(APITestCase):
@@ -13,12 +12,46 @@ class StudentPageTests(APITestCase):
     @classmethod
     def setUpTestData(cls):
         cls.factory = APIRequestFactory()
-        cls.user_factory = GradyUserFactory()
 
     def setUp(self):
-        self.submission, _, _ = data_factories.make_minimal_exam()
-        self.student = self.submission.student
-        self.reviewer = self.user_factory.make_reviewer(username='reviewer')
+        self.test_data = make_test_data(data_dict={
+            'exams': [{
+                'module_reference': 'TestExam B.Inf.0042',
+                'total_score': 42,
+                'pass_score': 21
+            }],
+            'submission_types': [{
+                'name': 'problem01',
+                'full_score': 10,
+                'description': 'Very hard',
+                'solution': 'Impossible!'
+            }],
+            'students': [{
+                'username': 'user01',
+                'fullname': 'us er01',
+                'exam': 'TestExam B.Inf.0042'
+            }],
+            'tutors': [{
+                'username': 'tutor'
+            }],
+            'reviewers': [{
+                'username': 'reviewer'
+            }],
+            'submissions': [{
+                'user': 'user01',
+                'type': 'problem01',
+                'text': 'Too hard for me ;-(',
+                'feedback': {
+                    'score': 3,
+                    'of_tutor': 'tutor'
+                }
+            }]
+        })
+
+        self.student = self.test_data['students'][0]
+        self.reviewer = self.test_data['reviewers'][0]
+        self.submission = self.test_data['submissions'][0]
+
         self.request = self.factory.get(reverse('student-list'))
         self.view = StudentReviewerApiViewSet.as_view({'get': 'list'})
 
diff --git a/util/factories.py b/util/factories.py
index 969f60f97053e6614c7e72a42fd4fbf810953783..5b6f71575d7b426e5b8dc95048ffccb84034b3bb 100644
--- a/util/factories.py
+++ b/util/factories.py
@@ -139,7 +139,7 @@ def make_tutors(tutors=[], **kwargs):
 
 
 def make_reviewers(reviewers=[], **kwargs):
-    return [GradyUserFactory().make_tutor(**reviewer)
+    return [GradyUserFactory().make_reviewer(**reviewer)
             for reviewer in reviewers]
 
 
@@ -150,7 +150,7 @@ def make_feedback(feedback, submission_object):
         of_submission=submission_object,
         of_tutor=tutor,
         defaults={
-            'text': feedback['text'],
+            'text': feedback.get('text', ''),
             'score': feedback['score']
         })[0]
 
@@ -269,5 +269,5 @@ def init_test_instance():
                         'of_tutor': 'tutor01',
                     },
                 },
-            ],}
+            ]}
     )