diff --git a/submissions/exceptions.py b/submissions/exceptions.py
index 0e8794a8cc841af0df2896138ce2ec0209ee0c7e..a6e26c2d6c946fec39d3b402415bd0110e63378a 100644
--- a/submissions/exceptions.py
+++ b/submissions/exceptions.py
@@ -1,4 +1,4 @@
-class CycleUpdateDeadlineError(Exception):
+class BaseCustomException(Exception):
     def __init__(self, name):
         self.name = name
 
@@ -6,9 +6,9 @@ class CycleUpdateDeadlineError(Exception):
         return self.name
 
 
-class InvalidReportVettingValue(Exception):
-    def __init__(self, name):
-        self.name = name
+class CycleUpdateDeadlineError(BaseCustomException):
+    pass
 
-    def __str__(self):
-        return self.name
+
+class InvalidReportVettingValue(BaseCustomException):
+    pass
diff --git a/submissions/forms.py b/submissions/forms.py
index 7f2d39772f1086f15e09c39ef36facb7bda4cb61..8500b892e96a1fd3ae9eb414c0aa7e99111cbb32 100644
--- a/submissions/forms.py
+++ b/submissions/forms.py
@@ -420,6 +420,17 @@ class ReportForm(forms.ModelForm):
                   'recommendation', 'remarks_for_editors', 'anonymous']
 
     def __init__(self, *args, **kwargs):
+        if kwargs.get('instance'):
+            if kwargs['instance'].is_followup_report:
+                # Prefill data from latest report in the series
+                latest_report = kwargs['instance'].latest_report_from_series()
+                kwargs.update({
+                    'initial': {
+                        'qualification': latest_report.qualification,
+                        'anonymous': latest_report.anonymous
+                    }
+                })
+
         super(ReportForm, self).__init__(*args, **kwargs)
         self.fields['strengths'].widget.attrs.update({
             'placeholder': ('Give a point-by-point '
@@ -440,7 +451,28 @@ class ReportForm(forms.ModelForm):
             'cols': 100
         })
 
-    def save(self, submission, current_contributor):
+        # If the Report is not a followup: Explicitly assign more fields as being required!
+        if not self.instance.is_followup_report:
+            required_fields = [
+                'strengths',
+                'weaknesses',
+                'requested_changes',
+                'validity',
+                'significance',
+                'originality',
+                'clarity',
+                'formatting',
+                'grammar'
+            ]
+            for field in required_fields:
+                self.fields[field].required = True
+
+        # Let user know the field is required!
+        for field in self.fields:
+            if self.fields[field].required:
+                self.fields[field].label += ' *'
+
+    def save(self, submission):
         """
         Update meta data if ModelForm is submitted (non-draft).
         Possibly overwrite the default status if user asks for saving as draft.
@@ -448,7 +480,6 @@ class ReportForm(forms.ModelForm):
         report = super().save(commit=False)
 
         report.submission = submission
-        report.author = current_contributor
         report.date_submitted = timezone.now()
 
         # Save with right status asked by user
@@ -458,7 +489,7 @@ class ReportForm(forms.ModelForm):
             report.status = STATUS_UNVETTED
 
             # Update invitation and report meta data if exist
-            invitation = submission.referee_invitations.filter(referee=current_contributor).first()
+            invitation = submission.referee_invitations.filter(referee=report.author).first()
             if invitation:
                 invitation.fulfilled = True
                 invitation.save()
@@ -466,7 +497,7 @@ class ReportForm(forms.ModelForm):
 
             # Check if report author if the report is being flagged on the submission
             if submission.referees_flagged:
-                if current_contributor.user.last_name in submission.referees_flagged:
+                if report.author.user.last_name in submission.referees_flagged:
                     report.flagged = True
         report.save()
         return report
diff --git a/submissions/managers.py b/submissions/managers.py
index 7e8a148b350b085842210c73263aba07e4e7832c..4af4e221c2c9c30bbc3a861bdf5b166c1538aa39 100644
--- a/submissions/managers.py
+++ b/submissions/managers.py
@@ -129,3 +129,6 @@ class ReportManager(models.Manager):
 
     def in_draft(self):
         return self.filter(status=STATUS_DRAFT)
+
+    def non_draft(self):
+        return self.exclude(status=STATUS_DRAFT)
diff --git a/submissions/templates/submissions/submit_report.html b/submissions/templates/submissions/submit_report.html
index 63f80e447b69a04de026d1a51db389b58df83e29..fb4029c449a0df7ba6ebd109247bdb01de5e6255 100644
--- a/submissions/templates/submissions/submit_report.html
+++ b/submissions/templates/submissions/submit_report.html
@@ -81,13 +81,20 @@
         <div class="col-12">
             <div class="card card-grey">
                 <div class="card-block">
-                    <h1>Your report:</h1>
-                    <p class="mb-0">A preview of text areas will appear below as you type (you can use LaTeX \$...\$ for in-text equations or \ [ ... \ ] for on-line equations).</p>
+                    <h1>Your {% if form.instance.is_followup_report %}followup {% endif %}report:</h1>
+                    <p>A preview of text areas will appear below as you type (you can use LaTeX \$...\$ for in-text equations or \ [ ... \ ] for on-line equations).</p>
+                    <p class="mb-0">Any fields with an asterisk (*) are required.</p>
+                    {% if form.instance.is_followup_report %}
+                        <p class="mb-0">
+                            Because you have already submitted a Report for this Submission series, not all fields are required.
+                        </p>
+                    {% endif %}
                 </div>
             </div>
             <form action="{% url 'submissions:submit_report' arxiv_identifier_w_vn_nr=submission.arxiv_identifier_w_vn_nr %}" method="post">
                 {% csrf_token %}
                 {{ form|bootstrap:'3,9' }}
+                <p>Any fields with an asterisk (*) are required.</p>
                 <input class="btn btn-primary" type="submit" name="save_submit" value="Submit your report"/>
                 <input class="btn btn-secondary ml-2" type="submit" name="save_draft" value="Save your report as draft"/>
                 <div class="my-4">
diff --git a/submissions/utils.py b/submissions/utils.py
index 908f7f35c9a12bfd2a592b2a712b31952f468bce..385dbfc3402e25ff730686360b4f49f6561e8428 100644
--- a/submissions/utils.py
+++ b/submissions/utils.py
@@ -126,7 +126,6 @@ class BaseSubmissionCycle:
         self.submission.reporting_deadline = deadline
         self.submission.save()
 
-
     def get_required_actions(self):
         '''Return list of the submission its required actions'''
         if not self.updated_action:
diff --git a/submissions/views.py b/submissions/views.py
index dbe926c6d43fff757dc1943d7400f2fe395de3c6..9c1ac57086fefaf1db2a119e88794ebd3b95afb2 100644
--- a/submissions/views.py
+++ b/submissions/views.py
@@ -1032,6 +1032,10 @@ def submit_report(request, arxiv_identifier_w_vn_nr):
         errormessage = ('The system flagged you as a potential author of this Submission. '
                         'Please go to your personal page under the Submissions tab'
                         ' to clarify this.')
+    # if submission.reports.non_draft().filter(author=current_contributor).exists():
+    #     errormessage = ('You have already submitted a Report for this Submission. You cannot'
+    #                     ' submit an additional Report.')
+
     if errormessage:
         messages.warning(request, errormessage)
         return redirect(reverse('scipost:personal_page'))
@@ -1040,12 +1044,12 @@ def submit_report(request, arxiv_identifier_w_vn_nr):
     try:
         report_in_draft = submission.reports.in_draft().get(author=current_contributor)
     except Report.DoesNotExist:
-        report_in_draft = None
+        report_in_draft = Report(author=current_contributor, submission=submission)
     form = ReportForm(request.POST or None, instance=report_in_draft)
 
     # Check if data sent is valid
     if form.is_valid():
-        newreport = form.save(submission, current_contributor)
+        newreport = form.save(submission)
         if newreport.status == STATUS_DRAFT:
             messages.success(request, ('Your Report has been saved. '
                                        'You may carry on working on it,'