diff --git a/submissions/forms.py b/submissions/forms.py
index 1e0a501abc1ecf08df0989fcf2c9a17b637b20f8..7c09ff971b437bd8bdab67c06dd3d939079d6330 100644
--- a/submissions/forms.py
+++ b/submissions/forms.py
@@ -103,17 +103,14 @@ class SubmissionService:
     Object to run checks for prefiller and submit manuscript forms.
     """
 
-    arxiv_data = {}
+    metadata = {}
 
     def __init__(self, requested_by, preprint_server, identifier=None, resubmission_of_id=None):
         self.requested_by = requested_by
         self.preprint_server = preprint_server
         self.identifier = identifier
         self.resubmission_of_id = resubmission_of_id
-
-        if self.preprint_server == 'arxiv':
-            # Do the call here to prevent multiple calls to the arXiv API in one request.
-            self._call_arxiv()
+        self._arxiv_data = None
 
     @property
     def latest_submission(self):
@@ -138,19 +135,45 @@ class SubmissionService:
                 self._latest_submission = None
         return self._latest_submission
 
+    @property
+    def arxiv_data(self):
+        if self._arxiv_data is None:
+            self._call_arxiv()
+        return self._arxiv_data
+
     def run_checks(self):
         """
         Do several pre-checks (using the arXiv API if needed).
 
         This is needed for both the prefill and submission forms.
         """
-        self.arxiv_data = {}
         self._submission_already_exists()
         self._submission_previous_version_is_valid_for_submission()
 
         if self.preprint_server == 'arxiv':
             self._submission_is_already_published()
 
+    def _call_arxiv(self):
+        """
+        Retrieve all data from the ArXiv database for `identifier`.
+        """
+        if self.preprint_server != 'arxiv':
+            # Do the call here to prevent multiple calls to the arXiv API in one request.
+            self._arxiv_data = {}
+            return
+        if not self.identifier:
+            print('crap', self.identifier)
+            return
+
+        caller = ArxivCaller(self.identifier)
+
+        if caller.is_valid:
+            self._arxiv_data = caller.data
+            self.metadata = caller.metadata
+        else:
+            error_message = 'A preprint associated to this identifier does not exist.'
+            raise forms.ValidationError(error_message)
+
     def get_latest_submission_data(self):
         """
         Return initial form data originating from earlier Submission.
@@ -277,18 +300,6 @@ class SubmissionService:
                                  'before proceeding with a resubmission.')
                 raise forms.ValidationError(error_message)
 
-    def _call_arxiv(self):
-        """
-        Retrieve all data from the ArXiv database for `identifier`.
-        """
-        caller = ArxivCaller(self.identifier)
-        if caller.is_valid:
-            self.arxiv_data = caller.data
-            self.metadata = caller.metadata
-        else:
-            error_message = 'A preprint associated to this identifier does not exist.'
-            raise forms.ValidationError(error_message)
-
     def _submission_is_already_published(self):
         """
         Check if preprint number is already registered with a DOI in the *ArXiv* database.
@@ -360,15 +371,17 @@ class SubmissionForm(forms.ModelForm):
         self.preprint_server = kwargs.pop('preprint_server', 'arxiv')
         self.resubmission_preprint = kwargs['initial'].get('resubmission', False)
 
+        data = args[0] if len(args) > 1 else kwargs.get('data', {})
+        identifier = kwargs['initial'].get('identifier_w_vn_nr', None) or data.get('identifier_w_vn_nr')
+
         self.service = SubmissionService(
             self.requested_by, self.preprint_server,
-            identifier=kwargs['initial'].get('identifier_w_vn_nr', None),
+            identifier=identifier,
             resubmission_of_id=self.resubmission_preprint)
         if self.preprint_server == 'scipost':
             kwargs['initial'] = self.service.get_latest_submission_data()
 
         super().__init__(*args, **kwargs)
-        # self.service.run_checks()
 
         if not self.preprint_server == 'arxiv':
             # No arXiv-specific data required.
@@ -418,6 +431,7 @@ class SubmissionForm(forms.ModelForm):
         cleaned_data = super().clean(*args, **kwargs)
 
         # SciPost preprints are auto-generated here.
+        self.scipost_identifier = None
         if 'identifier_w_vn_nr' not in cleaned_data:
             self.service.identifier, self.scipost_identifier = generate_new_scipost_identifier(
                 cleaned_data.get('resubmission', None))
@@ -524,11 +538,13 @@ class SubmissionIdentifierForm(forms.Form):
         self.requested_by = kwargs.pop('requested_by')
         return super().__init__(*args, **kwargs)
 
+
     def clean_identifier_w_vn_nr(self):
         """
         Do basic prechecks based on the arXiv ID only.
         """
-        identifier = self.cleaned_data['identifier_w_vn_nr']
+        identifier = self.cleaned_data.get('identifier_w_vn_nr', None)
+
         self.service = SubmissionService(self.requested_by, 'arxiv', identifier=identifier)
         self.service.run_checks()
         return identifier
diff --git a/submissions/views.py b/submissions/views.py
index e09dad4fcdf2e395dae5e7395e60b4832ebf83b1..372989d1ec82084db63453ede72174e6addf18b0 100644
--- a/submissions/views.py
+++ b/submissions/views.py
@@ -132,7 +132,7 @@ class RequestSubmissionView(LoginRequiredMixin, PermissionRequiredMixin, CreateV
                 'Your Submission will soon be handled by an Editor.')
         messages.success(self.request, text)
 
-        if form.submission_is_resubmission():
+        if form.is_resubmission():
             # Send emails
             SubmissionUtils.load({'submission': submission}, self.request)
             SubmissionUtils.send_authors_resubmission_ack_email()
@@ -154,20 +154,22 @@ class RequestSubmissionUsingArXivView(RequestSubmissionView):
     """Formview to submit a new Submission using arXiv."""
 
     def get(self, request):
-        """Redirect to the arXiv prefill form if arXiv ID is not known."""
+        """
+        Redirect to the arXiv prefill form if arXiv ID is not known.
+        """
         form = SubmissionIdentifierForm(request.GET or None, requested_by=self.request.user)
         if form.is_valid():
             # Gather data from ArXiv API if prefill form is valid
             self.initial_data = form.get_initial_submission_data()
             return super().get(request)
         else:
-            raise
+            for code, err in form.errors.items():
+                messages.warning(request, err[0])
             return redirect('submissions:prefill_using_identifier')
 
     def get_form_kwargs(self):
         """Form requires extra kwargs."""
         kwargs = super().get_form_kwargs()
-        # kwargs['use_arxiv_preprint'] = True
         kwargs['preprint_server'] = 'arxiv'
         return kwargs