diff --git a/submissions/factories.py b/submissions/factories.py
index cdf905fb56b2672019ee707381672388a939eba3..da936a2e7a8fcbe4d2d9225a6d4a83f2b4f812da 100644
--- a/submissions/factories.py
+++ b/submissions/factories.py
@@ -1,16 +1,14 @@
 import factory
-import datetime
 import pytz
 
 from django.utils import timezone
 
-from scipost.factories import ContributorFactory
 from scipost.models import Contributor
 from journals.constants import SCIPOST_JOURNALS_DOMAINS
 from common.helpers import random_arxiv_identifier_without_version_number, random_scipost_journal
 
 from .constants import STATUS_UNASSIGNED, STATUS_EIC_ASSIGNED, STATUS_RESUBMISSION_INCOMING,\
-                       STATUS_PUBLISHED
+                       STATUS_PUBLISHED, SUBMISSION_TYPE
 from .models import Submission
 
 from faker import Faker
@@ -21,7 +19,7 @@ class SubmissionFactory(factory.django.DjangoModelFactory):
         model = Submission
 
     author_list = factory.Faker('name')
-    submitted_by = factory.SubFactory(ContributorFactory)
+    submitted_by = Contributor.objects.first()
     submitted_to_journal = factory.Sequence(lambda n: random_scipost_journal())
     title = factory.lazy_attribute(lambda x: Faker().sentence())
     abstract = factory.lazy_attribute(lambda x: Faker().paragraph())
@@ -32,7 +30,8 @@ class SubmissionFactory(factory.django.DjangoModelFactory):
     abstract = Faker().paragraph()
     author_comments = Faker().paragraph()
     remarks_for_editors = Faker().paragraph()
-    submission_type = 'Letter'
+    submission_type = factory.Iterator(SUBMISSION_TYPE, getter=lambda c: c[0])
+    is_current = True
 
     @factory.post_generation
     def fill_arxiv_fields(self, create, extracted, **kwargs):
@@ -43,11 +42,13 @@ class SubmissionFactory(factory.django.DjangoModelFactory):
 
     @factory.post_generation
     def contributors(self, create, extracted, **kwargs):
-        contributors = list(Contributor.objects.order_by('?')
-                            .exclude(pk=self.submitted_by.pk).all()[:3])
+        contributors = list(Contributor.objects.order_by('?')[:4])
+
+        # Auto-add the submitter as an author
+        self.submitted_by = contributors.pop()
+
         if not create:
             return
-        # Auto-add the submitter as an author
         self.authors.add(self.submitted_by)
 
         # Add three random authors
@@ -60,11 +61,13 @@ class SubmissionFactory(factory.django.DjangoModelFactory):
         timezone.now()
         if kwargs.get('submission', False):
             self.submission_date = kwargs['submission']
-        else:
-            self.submission_date = Faker().date_time_between(start_date="-3y", end_date="now",
-                                                             tzinfo=pytz.UTC)
+            self.cycle.update_deadline()
+            return
+        self.submission_date = Faker().date_time_between(start_date="-3y", end_date="now",
+                                                         tzinfo=pytz.UTC).date()
         self.latest_activity = Faker().date_time_between(start_date=self.submission_date,
                                                          end_date="now", tzinfo=pytz.UTC)
+        self.cycle.update_deadline()
 
 
 class UnassignedSubmissionFactory(SubmissionFactory):
@@ -79,24 +82,53 @@ class EICassignedSubmissionFactory(SubmissionFactory):
     open_for_commenting = True
     open_for_reporting = True
 
-    @factory.post_generation
-    def report_dates(self, create, extracted, **kwargs):
-        self.reporting_deadline = self.latest_activity + datetime.timedelta(weeks=2)
-
     @factory.post_generation
     def eic(self, create, extracted, **kwargs):
+        '''Assign an EIC to submission.'''
         author_ids = list(self.authors.values_list('id', flat=True))
         self.editor_in_charge = (Contributor.objects.order_by('?')
                                             .exclude(pk=self.submitted_by.pk)
                                             .exclude(pk__in=author_ids).first())
 
 
-class ResubmittedScreeningSubmissionFactory(SubmissionFactory):
+class ResubmittedSubmissionFactory(SubmissionFactory):
+    '''
+    This Submission is a newer version of a Submission which is
+    already known by the SciPost database.
+    '''
     status = STATUS_RESUBMISSION_INCOMING
+    open_for_commenting = True
+    open_for_reporting = True
+    is_resubmission = True
+
+    @factory.post_generation
+    def alter_arxiv_fields(self, create, extracted, **kwargs):
+        '''Alter arxiv fields to save as version 2.'''
+        self.arxiv_identifier_w_vn_nr = '%sv2' % self.arxiv_identifier_wo_vn_nr
+        self.arxiv_vn_nr = 2
+
+    @factory.post_generation
+    def eic(self, create, extracted, **kwargs):
+        '''Assign an EIC to submission.'''
+        author_ids = list(self.authors.values_list('id', flat=True))
+        self.editor_in_charge = (Contributor.objects.order_by('?')
+                                            .exclude(pk=self.submitted_by.pk)
+                                            .exclude(pk__in=author_ids).first())
+
+    @factory.post_generation
+    def dates(self, create, extracted, **kwargs):
+        """Overwrite the parent `dates` method to skip the update_deadline call."""
+        timezone.now()
+        if kwargs.get('submission', False):
+            self.submission_date = kwargs['submission']
+            return
+        self.submission_date = Faker().date_time_between(start_date="-3y", end_date="now",
+                                                         tzinfo=pytz.UTC).date()
+        self.latest_activity = Faker().date_time_between(start_date=self.submission_date,
+                                                         end_date="now", tzinfo=pytz.UTC)
 
 
 class PublishedSubmissionFactory(SubmissionFactory):
     status = STATUS_PUBLISHED
     open_for_commenting = False
     open_for_reporting = False
-    is_current = True