diff --git a/journals/views.py b/journals/views.py
index 56b8bddb0079fdc57bfa08d5353537e71170fd25..5fb0e5dcf9cd1900a686a246241afc9a2cce7640 100644
--- a/journals/views.py
+++ b/journals/views.py
@@ -792,11 +792,13 @@ def publication_add_topic(request, doi_label):
 @permission_required('scipost.can_manage_ontology', return_403=True)
 def publication_remove_topic(request, doi_label, slug):
     """
-    Remove the Topic from the Publication.
+    Remove the Topic from the Publication, and from all associated Submissions.
     """
     publication = get_object_or_404(Publication, doi_label=doi_label)
     topic = get_object_or_404(Topic, slug=slug)
     publication.topics.remove(topic)
+    for sub in publication.accepted_submission.thread:
+        sub.topics.remove(topic)
     messages.success(request, 'Successfully removed Topic')
     return redirect(reverse('scipost:publication_detail',
                             kwargs={'doi_label': publication.doi_label}))
diff --git a/ontology/templates/ontology/_topic_card.html b/ontology/templates/ontology/_topic_card.html
index 337fd04950b91ed2fe116f3c9ee96f56d2964896..ff13e915346e10b09ce3f1a77ce86aa1069bf9d1 100644
--- a/ontology/templates/ontology/_topic_card.html
+++ b/ontology/templates/ontology/_topic_card.html
@@ -99,15 +99,20 @@
       </div>
       <div class="card">
 	<div class="card-header">
-	  Submissions
+	  Submissions (unpublished only)
 	</div>
 	<div class="card-body">
 	  <ul>
 	    {% for sub in topic.submission_set.public_newest %}
+	    {% if not sub.publication and not sub.publication.is_published %}
 	    <li>
 	      <a href="{{ sub.get_absolute_url }}">{{ sub.title }}</a>
 	      <br>by {{ sub.author_list }}
+	      <br>(submitted {{ sub.submission_date|date:"Y-m-d" }} to {{ sub.get_submitted_to_journal_display }})
 	    </li>
+	    {% else %}
+	    <li>No Submission found</li>
+	    {% endif %}
 	    {% empty %}
 	    <li>No Submission found</li>
 	    {% endfor %}
diff --git a/submissions/forms.py b/submissions/forms.py
index 760caedcc777698782d07ac08c64c4c3f944f579..b9cdc971b8963c3926a960484b04e1723a2f05a3 100644
--- a/submissions/forms.py
+++ b/submissions/forms.py
@@ -397,6 +397,9 @@ class RequestSubmissionForm(SubmissionChecks, forms.ModelForm):
         Submission.objects.filter(id=self.last_submission.id).update(
             is_current=False, open_for_reporting=False, status=STATUS_RESUBMITTED)
 
+        # Copy Topics
+        submission.topics.add(*self.last_submission.topics.all())
+
         # Open for comment and reporting and copy EIC info
         Submission.objects.filter(id=submission.id).update(
             open_for_reporting=True,
diff --git a/submissions/templates/partials/submissions/submission_topics_card.html b/submissions/templates/partials/submissions/submission_topics_card.html
new file mode 100644
index 0000000000000000000000000000000000000000..0a9309ea82e56d1982dc3e5e5cfbd8020b587859
--- /dev/null
+++ b/submissions/templates/partials/submissions/submission_topics_card.html
@@ -0,0 +1,35 @@
+{% load user_groups %}
+
+{% is_scipost_admin request.user as is_scipost_admin %}
+{% is_edcol_admin request.user as is_edcol_admin %}
+
+{% if submission.topics.all or is_scipost_admin or is_edcol_admin %}
+<div class="card">
+  <div class="card-header">
+    <a href="{% url 'ontology:ontology' %}">Ontology</a>/<a href="{% url 'ontology:topics' %}">Topics</a>
+  </div>
+  <div class="card-body">
+    <ul class="list-inline mb-0">
+      {% for topic in submission.topics.all %}
+      <li class="list-inline-item p-1"><a href="{% url 'ontology:topic_details' slug=topic.slug %}">{{ topic }}</a>{% if perms.scipost.can_manage_ontology %} <a href="{% url 'submissions:submission_remove_topic' identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr slug=topic.slug %}"><i class="fa fa-times-circle text-danger"></i></a>{% endif %}</li>
+      {% empty %}
+      <li class="list-inline-item">No Topic has yet been associated to this Submission</li>
+      {% endfor %}
+    </ul>
+    {% if perms.scipost.can_manage_ontology %}
+    <ul class="list-inline">
+      <li class="list-inline-item">
+	<form class="form-inline" action="{% url 'submissions:submission_add_topic' identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr %}" method="post">
+	  <ul class="list-inline">
+	    <li class="list-inline-item">Add an existing Topic:</li>
+	    <li class="list-inline-item">{% csrf_token %}{{ select_topic_form }}</li>
+	    <li class="list-inline-item"><input class="btn btn-outline-secondary" type="submit" value="Link"></li>
+	  </ul>
+	</form>
+      </li>
+      <li class="list-inline-item p-2">Can't find the Topic you need? <a href="{% url 'ontology:topic_create' %}" target="_blank">Create it</a> (opens in new window)</li>
+    </ul>
+    {% endif %}
+  </div>
+</div>
+{% endif %}
diff --git a/submissions/templates/submissions/submission_detail.html b/submissions/templates/submissions/submission_detail.html
index f1cd3d7542af3e47e71033667d9d623087d25305..a343545a4cec455804c116484c9d342bf59ee2c0 100644
--- a/submissions/templates/submissions/submission_detail.html
+++ b/submissions/templates/submissions/submission_detail.html
@@ -66,8 +66,9 @@
 
         {% include 'partials/submissions/submission_status.html' with submission=submission %}
 
-        <br>
-        <br>
+	<br/>
+	{% include 'partials/submissions/submission_topics_card.html' with submission=submission %}
+
         {% if submission.author_comments %}
             <h3>Author comments upon resubmission</h3>
             <div class="blockquote">
@@ -213,3 +214,9 @@
 {% endif %}
 
 {% endblock content %}
+
+
+{% block footer_script %}
+{{ block.super }}
+{{ select_topic_form.media }}
+{% endblock footer_script %}
diff --git a/submissions/urls.py b/submissions/urls.py
index 4c4d6c387a56a7c7d51b8cf2344439f648361700..57711856f0e8f01895dce1c5fb10285626125496 100644
--- a/submissions/urls.py
+++ b/submissions/urls.py
@@ -33,6 +33,14 @@ urlpatterns = [
     url(r'^{regex}/reports/pdf$'.format(regex=SUBMISSIONS_COMPLETE_REGEX),
         views.submission_refereeing_package_pdf, name='refereeing_package_pdf'),
 
+    # Topics
+    url(r'^submission_add_topic/{regex}/'.format(regex=SUBMISSIONS_COMPLETE_REGEX),
+        views.submission_add_topic,
+        name='submission_add_topic'),
+    url(r'^submission_remove_topic/{regex}/(?P<slug>[-\w]+)/'.format(regex=SUBMISSIONS_COMPLETE_REGEX),
+        views.submission_remove_topic,
+        name='submission_remove_topic'),
+
     # Editorial Administration
     url(r'^admin/treated$', views.treated_submissions_list, name='treated_submissions_list'),
     url(r'^admin/{regex}/prescreening$'.format(regex=SUBMISSIONS_COMPLETE_REGEX),
diff --git a/submissions/views.py b/submissions/views.py
index ad850a1aadde0a76911ff8294ed57a3930c3f38d..86026817e5f689e45c4793fd79a7586ce6a15077 100644
--- a/submissions/views.py
+++ b/submissions/views.py
@@ -44,6 +44,8 @@ from colleges.permissions import fellowship_required, fellowship_or_admin_requir
 from comments.forms import CommentForm
 from journals.models import Journal
 from mails.views import MailEditingSubView
+from ontology.models import Topic
+from ontology.forms import SelectTopicForm
 from production.forms import ProofsDecisionForm
 from profiles.models import Profile
 from scipost.forms import RemarkForm
@@ -237,7 +239,8 @@ def submission_detail(request, identifier_w_vn_nr):
     """Public detail page of Submission."""
     submission = get_object_or_404(Submission, preprint__identifier_w_vn_nr=identifier_w_vn_nr)
     context = {
-        'can_read_editorial_information': False
+        'can_read_editorial_information': False,
+        'select_topic_form': SelectTopicForm(),
     }
 
     # Check if Contributor is author of the Submission
@@ -514,6 +517,50 @@ def add_remark(request, identifier_w_vn_nr):
     return redirect(reverse('submissions:pool', args=(identifier_w_vn_nr,)))
 
 
+@permission_required('scipost.can_manage_ontology', raise_exception=True)
+def submission_add_topic(request, identifier_w_vn_nr):
+    """
+    Add a predefined Topic to an existing Submission object.
+    This also adds the Topic to all Submissions predating this one,
+    and to any existing associated Publication object.
+    """
+    submission = get_object_or_404(Submission,
+                                   preprint__identifier_w_vn_nr=identifier_w_vn_nr)
+    select_topic_form = SelectTopicForm(request.POST or None)
+    if select_topic_form.is_valid():
+        submission.topics.add(select_topic_form.cleaned_data['topic'])
+        for sub in submission.get_other_versions():
+            sub.topics.add(select_topic_form.cleaned_data['topic'])
+        try:
+            if submission.publication:
+                submission.publication.topics.add(select_topic_form.cleaned_data['topic'])
+        except:
+            pass
+        messages.success(request, 'Successfully linked Topic to this Submission')
+    return submission_detail(request, identifier_w_vn_nr)
+
+
+@permission_required('scipost.can_manage_ontology', raise_exception=True)
+def submission_remove_topic(request, identifier_w_vn_nr, slug):
+    """
+    Remove the Topic from the Submission, from all associated Submissions
+    and from any existing associated Publication object.
+    """
+    submission = get_object_or_404(Submission,
+                                   preprint__identifier_w_vn_nr=identifier_w_vn_nr)
+    topic = get_object_or_404(Topic, slug=slug)
+    submission.topics.remove(topic)
+    for sub in submission.get_other_versions():
+        sub.topics.remove(topic)
+    try:
+        if submission.publication:
+            submission.publication.topics.remove(topic)
+    except:
+        pass
+    messages.success(request, 'Successfully removed Topic')
+    return submission_detail(request, identifier_w_vn_nr)
+
+
 @login_required
 @permission_required('scipost.can_assign_submissions', raise_exception=True)
 def assign_submission(request, identifier_w_vn_nr):