diff --git a/scipost_django/journals/urls/general.py b/scipost_django/journals/urls/general.py
index 7c9f164e8bff183fa13080e5caa06273000923cb..83b0d91fc88c76f313c3861705bfb0905f939c45 100644
--- a/scipost_django/journals/urls/general.py
+++ b/scipost_django/journals/urls/general.py
@@ -19,6 +19,11 @@ urlpatterns = [
         journals_views.PublicationAutocompleteView.as_view(),
         name="publication-autocomplete",
     ),
+    path(
+        "own-publication-autocomplete",
+        journals_views.OwnPublicationAutocompleteView.as_view(),
+        name="own-publication-autocomplete",
+    ),
     path(
         "_hx_publication_dynsel_list",
         journals_views._hx_publication_dynsel_list,
diff --git a/scipost_django/journals/views.py b/scipost_django/journals/views.py
index 5eefbb98fa999feb2f00324839303afa330edd60..8814e5586e740ad26cb62a635bb6e14a528d9ac8 100644
--- a/scipost_django/journals/views.py
+++ b/scipost_django/journals/views.py
@@ -125,6 +125,22 @@ class PublicationAutocompleteView(autocomplete.Select2QuerySetView):
         )
 
 
+class OwnPublicationAutocompleteView(PublicationAutocompleteView):
+    """
+    View to feed the Select2 widget, specialized to user's own publications.
+    """
+
+    def get_queryset(self):
+        qs = self.request.user.contributor.profile.publications()
+        if self.q:
+            qs = qs.filter(
+                Q(title__icontains=self.q)
+                | Q(doi_label__icontains=self.q)
+                | Q(author_list__icontains=self.q)
+            )
+        return qs.order_by("-publication_date")
+
+
 def _hx_publication_dynsel_list(request):
     form = PublicationDynSelForm(request.POST or None)
     if form.is_valid():
diff --git a/scipost_django/preprints/models.py b/scipost_django/preprints/models.py
index 4d7d911dc00f5319f8c17f86b1ab35003ac114ae..2b3ae2f8540707463eaa17e7041d6d5b99e46b07 100644
--- a/scipost_django/preprints/models.py
+++ b/scipost_django/preprints/models.py
@@ -6,7 +6,6 @@ import requests
 
 from django.urls import reverse
 from django.db import models
-from django.http import Http404
 
 from common.utils import get_current_domain
 from submissions.exceptions import PreprintDocumentNotFoundError
@@ -48,7 +47,7 @@ class Preprint(models.Model):
             return self.url
         if self._file:
             return reverse("preprints:pdf", args=(self.identifier_w_vn_nr,))
-        raise Http404
+        return None
 
     def get_document(self):
         """
diff --git a/scipost_django/submissions/forms/__init__.py b/scipost_django/submissions/forms/__init__.py
index 8d26eb1440a2c0b8a6aee43ce955a07a88e55629..4f16da435f92a0c025f83dd40e03e3c0d4084e66 100644
--- a/scipost_django/submissions/forms/__init__.py
+++ b/scipost_django/submissions/forms/__init__.py
@@ -64,7 +64,7 @@ from ..regexes import CHEMRXIV_DOI_PATTERN
 
 from colleges.models import Fellowship
 from common.utils import Q_with_alternative_spellings
-from journals.models import Journal
+from journals.models import Journal, Publication
 from journals.constants import (
     PUBLISHABLE_OBJECT_TYPE_ARTICLE,
     PUBLISHABLE_OBJECT_TYPE_CODEBASE,
@@ -1137,6 +1137,18 @@ class SubmissionForm(forms.ModelForm):
         label="Specialties",
         help_text="Type to search, click to include",
     )
+    followup_of = forms.ModelMultipleChoiceField(
+        queryset=Publication.objects.all(),
+        widget=autocomplete.ModelSelect2Multiple(
+            url="/journals/own-publication-autocomplete",
+            attrs={
+                "data-html": True,
+                "data-placeholder": "Optional",
+            }
+        ),
+        required=False,
+        help_text="<strong>Does this Submission follow up on some of your earlier publications?<br>(for example: this Submission is a new codebase release for a previous Codebases publication)<br>If so, select them here.</strong>"
+    )
     preprint_server = forms.ModelChoiceField(
         queryset=PreprintServer.objects.all(), widget=forms.HiddenInput()
     )
@@ -1163,6 +1175,7 @@ class SubmissionForm(forms.ModelForm):
             "title",
             "author_list",
             "abstract",
+            "followup_of",
             "code_repository_url",
             "data_repository_url",
             "author_comments",
diff --git a/scipost_django/submissions/migrations/0139_submission_followup_of.py b/scipost_django/submissions/migrations/0139_submission_followup_of.py
new file mode 100644
index 0000000000000000000000000000000000000000..9d9b785263030046f988cd86eab4f88ba8b2e89a
--- /dev/null
+++ b/scipost_django/submissions/migrations/0139_submission_followup_of.py
@@ -0,0 +1,19 @@
+# Generated by Django 3.2.16 on 2023-01-21 15:59
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('journals', '0128_populate_submission_object_types'),
+        ('submissions', '0138_auto_20230120_2100'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='submission',
+            name='followup_of',
+            field=models.ManyToManyField(blank=True, related_name='followups', to='journals.Publication'),
+        ),
+    ]
diff --git a/scipost_django/submissions/models/submission.py b/scipost_django/submissions/models/submission.py
index 5c3ac7c30aa0b2a1ba8cedd0aa038f4f36df7fe2..4624e8cd16f998d3f70cd719375c5e0b6ae010e4 100644
--- a/scipost_django/submissions/models/submission.py
+++ b/scipost_django/submissions/models/submission.py
@@ -249,6 +249,8 @@ class Submission(models.Model):
     )
     visible_public = models.BooleanField("Is publicly visible", default=False)
     visible_pool = models.BooleanField("Is visible in the Pool", default=False)
+
+    # Link to previous Submission, or existing bundle member
     is_resubmission_of = models.ForeignKey(
         "self",
         blank=True,
@@ -257,6 +259,12 @@ class Submission(models.Model):
         related_name="successor",
     )
     thread_hash = models.UUIDField(default=uuid.uuid4)
+    followup_of = models.ManyToManyField(
+        "journals.Publication",
+        blank=True,
+        related_name="followups",
+    )
+
     refereeing_cycle = models.CharField(
         max_length=30, choices=SUBMISSION_CYCLES, default=CYCLE_DEFAULT, blank=True
     )
diff --git a/scipost_django/submissions/templates/submissions/submission_detail.html b/scipost_django/submissions/templates/submissions/submission_detail.html
index 1d0476e66956ff2765bf672ad7604640eb54884a..3f9f56faa78d2b74f32a7c0e8e7e9d11c593f3cd 100644
--- a/scipost_django/submissions/templates/submissions/submission_detail.html
+++ b/scipost_django/submissions/templates/submissions/submission_detail.html
@@ -20,7 +20,9 @@
     <meta name="citation_author" content="{{ author }}"/>
   {% endfor %}
   <meta name="citation_online_date" content="{{ submission.submission_date|date:'Y/m/d' }}"/>
-  <meta name="citation_pdf_url" content="{{ submission.preprint.citation_pdf_url }}"/>
+  {% if submission.preprint.citation_pdf_url %}
+    <meta name="citation_pdf_url" content="{{ submission.preprint.citation_pdf_url }}"/>
+  {% endif %}
 {% endblock headsup %}
 
 
diff --git a/scipost_django/submissions/templates/submissions/submission_form.html b/scipost_django/submissions/templates/submissions/submission_form.html
index 5bf9dc5e07698871dd085965f321629a7083d2ff..33d3fe2e3ff6b094f823e489e5865a52134d1925 100644
--- a/scipost_django/submissions/templates/submissions/submission_form.html
+++ b/scipost_django/submissions/templates/submissions/submission_form.html
@@ -38,21 +38,6 @@
         {% if form %}
 	  <h2>Please provide these last bits of information, and carefully check all prefilled fields</h2>
 
-	  {% if form.errors %}
-	    {% for field in form %}
-	      {% for error in field.errors %}
-		<div class="alert alert-danger">
-		  <strong>{{ field.name }} - {{ error|escape }}</strong>
-		</div>
-	      {% endfor %}
-	    {% endfor %}
-	    {% for error in form.non_field_errors %}
-	      <div class="alert alert-danger">
-		<strong>{{ error|escape }}</strong>
-	      </div>
-	    {% endfor %}
-	  {% endif %}
-
           <form class="mt-4" id="full_submission_form" method="post" enctype="multipart/form-data">
             {% csrf_token %}
             {{ form|bootstrap }}