diff --git a/commentaries/admin.py b/commentaries/admin.py
index 80f638be8c0bcd1ca9b9141c8a12e1022be9924b..93aee6375bdb1b36584042765d5e5220d7d1ca0e 100644
--- a/commentaries/admin.py
+++ b/commentaries/admin.py
@@ -1,12 +1,32 @@
 from django.contrib import admin
 
+from django import forms
+
 from commentaries.models import Commentary
 
+from scipost.models import Contributor
+
+
+class CommentaryAdminForm(forms.ModelForm):
+    authors = forms.ModelMultipleChoiceField(
+        required=False,
+        queryset=Contributor.objects.order_by('user__last_name'))
+    authors_claims = forms.ModelMultipleChoiceField(
+        required=False,
+        queryset=Contributor.objects.order_by('user__last_name'))
+    authors_false_claims = forms.ModelMultipleChoiceField(
+        required=False,
+        queryset=Contributor.objects.order_by('user__last_name'))
+
+    class Meta:
+        model = Commentary
+        fields = '__all__'
+
 
 class CommentaryAdmin(admin.ModelAdmin):
     search_fields = ['author_list', 'pub_abstract']
     list_display = ('__str__', 'vetted', 'latest_activity',)
     date_hierarchy = 'latest_activity'
-
+    form = CommentaryAdminForm
 
 admin.site.register(Commentary, CommentaryAdmin)
diff --git a/journals/admin.py b/journals/admin.py
index 48f9f4ee5a90149ca010e5fe22edf9d85e75f7c6..8c82762bbe9cb7df533f9aec127ecb2ca1328fe7 100644
--- a/journals/admin.py
+++ b/journals/admin.py
@@ -1,7 +1,17 @@
 from django.contrib import admin, messages
+from django import forms
 
-from journals.models import Journal, Volume, Issue, Publication, Deposit
+from journals.models import UnregisteredAuthor, Journal, Volume, Issue, Publication, Deposit
 
+from scipost.models import Contributor
+from submissions.models import Submission
+
+
+class UnregisteredAuthorAdmin(admin.ModelAdmin):
+    search_fields = ['last_name']
+    ordering = ['last_name']
+
+admin.site.register(UnregisteredAuthor, UnregisteredAuthorAdmin)
 
 
 class JournalAdmin(admin.ModelAdmin):
@@ -26,12 +36,29 @@ class IssueAdmin(admin.ModelAdmin):
 admin.site.register(Issue, IssueAdmin)
 
 
+class PublicationAdminForm(forms.ModelForm):
+    accepted_submission = forms.ModelChoiceField(
+        queryset=Submission.objects.order_by('-arxiv_identifier_w_vn_nr'))
+    authors = forms.ModelMultipleChoiceField(
+        queryset=Contributor.objects.order_by('user__last_name'))
+    authors_claims = forms.ModelMultipleChoiceField(
+        required=False,
+        queryset=Contributor.objects.order_by('user__last_name'))
+    authors_false_claims = forms.ModelMultipleChoiceField(
+        required=False,
+        queryset=Contributor.objects.order_by('user__last_name'))
+
+    class Meta:
+        model = Publication
+        fields = '__all__'
+
+
 class PublicationAdmin(admin.ModelAdmin):
     search_fields = ['title', 'author_list']
     list_display = ['title', 'author_list', 'in_issue', 'doi_string', 'publication_date']
     date_hierarchy = 'publication_date'
     list_filter = ['in_issue']
-
+    form = PublicationAdminForm
 
 admin.site.register(Publication, PublicationAdmin)
 
diff --git a/journals/utils.py b/journals/utils.py
index bda96d34647ef5620842afed9113749834afe348..b1e7630d7fc7656e2a559f33977dedad3b42f3ba 100644
--- a/journals/utils.py
+++ b/journals/utils.py
@@ -22,6 +22,8 @@ class JournalUtils(object):
                       + cls.publication.citation() + '.'
                       '\n\nThe publication page is located at the permanent link '
                       'https://scipost.org/' + cls.publication.doi_label + '.'
+                      '\n\nThe permanent DOI for your publication is 10.21468/'
+                      + cls.publication.doi_label + '.'
                       '\n\nTo facilitate dissemination of your paper, we greatly encourage '
                       'you to update the arXiv Journal-ref with this information.'
                       '\n\nWe warmly congratulate you on this achievement and thank you '
diff --git a/production/admin.py b/production/admin.py
index 41ae12e06e49ec6a43fc034ed520b5708e3b2ff0..64b634398caf4f31004b7488a98a5615c673a8a9 100644
--- a/production/admin.py
+++ b/production/admin.py
@@ -1,7 +1,39 @@
 from django.contrib import admin
 
+from django import forms
+
 from .models import ProductionStream, ProductionEvent
 
+from submissions.models import Submission
+
+
+class ProductionStreamAdminForm(forms.ModelForm):
+    submission = forms.ModelChoiceField(
+        queryset=Submission.objects.order_by('-arxiv_identifier_w_vn_nr'))
+
+    class Meta:
+        model = ProductionStream
+        fields = '__all__'
+
+class ProductionStreamAdmin(admin.ModelAdmin):
+    search_fields = ['submission']
+    list_display = ['submission', 'opened', 'status']
+    form = ProductionStreamAdminForm
+
+admin.site.register(ProductionStream, ProductionStreamAdmin)
+
+
+class ProductionEventAdminForm(forms.ModelForm):
+    stream = forms.ModelChoiceField(
+        queryset=ProductionStream.objects.order_by('-submission.arxiv_identifier_w_vn_nr'))
+
+    class Meta:
+        model = ProductionEvent
+        fields = '__all__'
+
+class ProductionEventAdmin(admin.ModelAdmin):
+    search_field = ['stream', 'event', 'comment', 'noted_by']
+    list_display = ['stream', 'event', 'noted_on', 'noted_by']
+    form = ProductionEventAdminForm
 
-admin.site.register(ProductionStream)
-admin.site.register(ProductionEvent)
+admin.site.register(ProductionEvent, ProductionEventAdmin)
diff --git a/production/constants.py b/production/constants.py
index 0a0b7ec8a445d3f04da78430cf52f28a55930147..ce9caee48c34a9a78db9235df621d04550b13e91 100644
--- a/production/constants.py
+++ b/production/constants.py
@@ -17,4 +17,5 @@ PRODUCTION_EVENTS = (
     ('proofs_returned_by_authors', 'Proofs returned by Authors'),
     ('corrections_implemented', 'Corrections implemented'),
     ('authors_have_accepted_proofs', 'Authors have accepted proofs'),
+    ('paper_published', 'Paper has been published'),
 )
diff --git a/production/migrations/0004_auto_20170528_1526.py b/production/migrations/0004_auto_20170528_1526.py
new file mode 100644
index 0000000000000000000000000000000000000000..c901494033b5772f07bfead5252165f5974d65fb
--- /dev/null
+++ b/production/migrations/0004_auto_20170528_1526.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-05-28 13:26
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('production', '0003_auto_20170522_1021'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='productionevent',
+            name='event',
+            field=models.CharField(choices=[('assigned_to_supervisor', 'Assigned by EdAdmin to Supervisor'), ('message_edadmin_to_supervisor', 'Message from EdAdmin to Supervisor'), ('message_supervisor_to_edadmin', 'Message from Supervisor to EdAdmin'), ('officer_tasked_with_proof_production', 'Supervisor tasked officer with proofs production'), ('message_supervisor_to_officer', 'Message from Supervisor to Officer'), ('message_officer_to_supervisor', 'Message from Officer to Supervisor'), ('proofs_produced', 'Proofs have been produced'), ('proofs_checked_by_supervisor', 'Proofs have been checked by Supervisor'), ('proofs_sent_to_authors', 'Proofs sent to Authors'), ('proofs_returned_by_authors', 'Proofs returned by Authors'), ('corrections_implemented', 'Corrections implemented'), ('authors_have_accepted_proofs', 'Authors have accepted proofs'), ('paper_published', 'Paper has been published')], max_length=64),
+        ),
+    ]
diff --git a/production/migrations/0005_productionstream_status.py b/production/migrations/0005_productionstream_status.py
new file mode 100644
index 0000000000000000000000000000000000000000..81236c4f5629b772eab6d7018fb29ccb699d4aca
--- /dev/null
+++ b/production/migrations/0005_productionstream_status.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-05-28 13:33
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('production', '0004_auto_20170528_1526'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='productionstream',
+            name='status',
+            field=models.CharField(choices=[('ongoing', 'Ongoing'), ('completed', 'Completed')], default='ongoing', max_length=32),
+        ),
+    ]
diff --git a/production/migrations/0006_productionstream_closed.py b/production/migrations/0006_productionstream_closed.py
new file mode 100644
index 0000000000000000000000000000000000000000..214570de6029880b899ad87f70c15b062fab2514
--- /dev/null
+++ b/production/migrations/0006_productionstream_closed.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-05-28 13:41
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.utils.timezone
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('production', '0005_productionstream_status'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='productionstream',
+            name='closed',
+            field=models.DateTimeField(default=django.utils.timezone.now),
+        ),
+    ]
diff --git a/production/models.py b/production/models.py
index c2cb30209aa2153f2c6b3e2365ce3e1dd6fd2b95..8cd82781cdff1ae47ddb738ef3ecebe2aa3d6eef 100644
--- a/production/models.py
+++ b/production/models.py
@@ -1,7 +1,7 @@
 from django.db import models
 from django.utils import timezone
 
-from .constants import PRODUCTION_EVENTS
+from .constants import PRODUCTION_STREAM_STATUS, PRODUCTION_EVENTS
 
 from scipost.models import Contributor
 
@@ -13,6 +13,9 @@ from scipost.models import Contributor
 class ProductionStream(models.Model):
     submission = models.OneToOneField('submissions.Submission', on_delete=models.CASCADE)
     opened = models.DateTimeField()
+    closed = models.DateTimeField(default=timezone.now)
+    status = models.CharField(max_length=32,
+                              choices=PRODUCTION_STREAM_STATUS, default='ongoing')
 
     def __str__(self):
         return str(self.submission)
diff --git a/production/templates/production/_production_stream_card.html b/production/templates/production/_production_stream_card.html
index fda086794d4c0faa5efcdf4bbc80d314b7dc2a26..c39436c5c30b365de02d699b205fcafdc0d38806 100644
--- a/production/templates/production/_production_stream_card.html
+++ b/production/templates/production/_production_stream_card.html
@@ -17,7 +17,11 @@
       {% if stream.total_duration %}
       <h3>Total duration for this stream: {{ stream.total_duration|duration }}</h3>
       {% endif %}
+      {% if perms.scipost.can_publish_accepted_submission %}
+      <h3><a href="{% url 'production:mark_as_completed' stream_id=stream.id %}">Mark this stream as completed</a></h3>
+      {% endif %}
     </div>
+    {% if form %}
     <div class="col-5">
       <h3>Add an event to this production stream:</h3>
       <form action="{% url 'production:add_event' stream_id=stream.id %}" method="post">
@@ -26,4 +30,6 @@
 	<input type="submit" name="submit" value="Submit">
       </form>
     </div>
+    {% endif %}
+  </div>
 </div>
diff --git a/production/templates/production/completed.html b/production/templates/production/completed.html
new file mode 100644
index 0000000000000000000000000000000000000000..1cd7059cd206c97570a179c2e4c623619db68dd4
--- /dev/null
+++ b/production/templates/production/completed.html
@@ -0,0 +1,21 @@
+{% extends 'scipost/base.html' %}
+
+{% load bootstrap %}
+
+{% block content %}
+
+<div class="row">
+  <div class="col-12">
+    <h3>Completed production streams</h3>
+    <ul class="list-group list-group-flush">
+      {% for stream in streams %}
+      <li class="list-group-item">
+	{% include 'production/_production_stream_card.html' with stream=stream %}
+      </li>
+      <hr/>
+      {% endfor %}
+    </ul>
+  </div>
+</div>
+
+{% endblock content %}
diff --git a/production/urls.py b/production/urls.py
index 11007074f3a47e420c14b81f62009486dab8f23c..3ff66bdb86cc57bdd8a1bf8a79cf9457a0a60f14 100644
--- a/production/urls.py
+++ b/production/urls.py
@@ -4,6 +4,9 @@ from production import views as production_views
 
 urlpatterns = [
     url(r'^$', production_views.production, name='production'),
+    url(r'^completed$', production_views.completed, name='completed'),
     url(r'^add_event/(?P<stream_id>[0-9]+)$',
         production_views.add_event, name='add_event'),
+    url(r'^mark_as_completed/(?P<stream_id>[0-9]+)$',
+        production_views.mark_as_completed, name='mark_as_completed'),
 ]
diff --git a/production/views.py b/production/views.py
index 4093d7751d30398ce87f78f36b3482b1b5dae76f..52363947aa75203c2957cd7a5a1cb920553275ad 100644
--- a/production/views.py
+++ b/production/views.py
@@ -21,18 +21,25 @@ def production(request):
     Overview page for the production process.
     All papers with accepted but not yet published status are included here.
     """
-    accepted_submissions = Submission.objects.filter(
-        status='accepted').order_by('latest_activity')
-    streams = ProductionStream.objects.all().order_by('opened')
+    streams = ProductionStream.objects.filter(status='ongoing').order_by('opened')
     prodevent_form = ProductionEventForm()
     context = {
-        'accepted_submissions': accepted_submissions,
         'streams': streams,
         'prodevent_form': prodevent_form,
     }
     return render(request, 'production/production.html', context)
 
 
+@permission_required('scipost.can_view_production', return_403=True)
+def completed(request):
+    """
+    Overview page for closed production streams.
+    """
+    streams = ProductionStream.objects.filter(status='completed').order_by('-opened')
+    context = {'streams': streams,}
+    return render(request, 'production/completed.html', context)
+
+
 @permission_required('scipost.can_view_production', return_403=True)
 @transaction.atomic
 def add_event(request, stream_id):
@@ -57,6 +64,16 @@ def add_event(request, stream_id):
         return render(request, 'scipost/error.html', {'errormessage': errormessage})
 
 
+@permission_required('scipost.can_view_production', return_403=True)
+@transaction.atomic
+def mark_as_completed(request, stream_id):
+    stream = get_object_or_404(ProductionStream, pk=stream_id)
+    stream.status = 'completed'
+    stream.closed = timezone.now()
+    stream.save()
+    return redirect(reverse('production:production'))
+
+
 def upload_proofs(request):
     """
     TODO
diff --git a/scipost/admin.py b/scipost/admin.py
index 2f137a42295438e82e056a70de4a15d600104ca4..5db931f3ef878d4e7cd3e23cd82a5ed1e2964acb 100644
--- a/scipost/admin.py
+++ b/scipost/admin.py
@@ -1,6 +1,7 @@
 import datetime
 
 from django.contrib import admin
+from django import forms
 
 from django.contrib.auth.admin import UserAdmin
 from django.contrib.auth.models import User, Permission
@@ -12,6 +13,9 @@ from scipost.models import Contributor, Remark,\
                            AuthorshipClaim, PrecookedEmail,\
                            EditorialCollege, EditorialCollegeFellowship
 
+from journals.models import Publication
+from submissions.models import Submission
+
 
 class ContributorInline(admin.StackedInline):
     model = Contributor
@@ -80,30 +84,62 @@ def get_remark_type(remark):
         return 'Recommendation'
     return ''
 
+class RemarkAdminForm(forms.ModelForm):
+    submission = forms.ModelChoiceField(
+        required=False,
+        queryset=Submission.objects.order_by('-arxiv_identifier_w_vn_nr'))
+
+    class Meta:
+        model = Remark
+        fields = '__all__'
 
 class RemarkAdmin(admin.ModelAdmin):
     search_fields = ['contributor', 'remark']
     list_display = [remark_text, 'contributor', 'date', get_remark_type]
     date_hierarchy = 'date'
     list_filter = [RemarkTypeListFilter]
-
+    form = RemarkAdminForm
 
 admin.site.register(Remark, RemarkAdmin)
 
 
+class DraftInvitationAdminForm(forms.ModelForm):
+    cited_in_submission = forms.ModelChoiceField(
+        required=False,
+        queryset=Submission.objects.order_by('-arxiv_identifier_w_vn_nr'))
+    cited_in_publication = forms.ModelChoiceField(
+        required=False,
+        queryset=Publication.objects.order_by('-publication_date'))
+
+    class Meta:
+        model = DraftInvitation
+        fields = '__all__'
+
 class DraftInvitationAdmin(admin.ModelAdmin):
     search_fields = ['first_name', 'last_name', 'email', 'processed']
-
+    form = DraftInvitationAdminForm
 
 admin.site.register(DraftInvitation, DraftInvitationAdmin)
 
 
+class RegistrationInvitationAdminForm(forms.ModelForm):
+    cited_in_submission = forms.ModelChoiceField(
+        required=False,
+        queryset=Submission.objects.order_by('-arxiv_identifier_w_vn_nr'))
+    cited_in_publication = forms.ModelChoiceField(
+        required=False,
+        queryset=Publication.objects.order_by('-publication_date'))
+
+    class Meta:
+        model = RegistrationInvitation
+        fields = '__all__'
+
 class RegistrationInvitationAdmin(admin.ModelAdmin):
     search_fields = ['first_name', 'last_name', 'email', 'invitation_key']
     list_display = ['__str__', 'invitation_type', 'invited_by', 'responded']
     list_filter = ['invitation_type', 'message_style', 'responded', 'declined']
     date_hierarchy = 'date_sent'
-
+    form = RegistrationInvitationAdminForm
 
 admin.site.register(RegistrationInvitation, RegistrationInvitationAdmin)
 
diff --git a/scipost/templates/scipost/personal_page.html b/scipost/templates/scipost/personal_page.html
index 6f3c572d5f36abdf5f2296792252f41fb2af432a..04decd986cf50c0916fe695ee7a0acdcb963de38 100644
--- a/scipost/templates/scipost/personal_page.html
+++ b/scipost/templates/scipost/personal_page.html
@@ -34,10 +34,15 @@
                         <a href="#account" class="nav-link active" data-toggle="tab">Account</a>
                       </li>
                       {% if 'SciPost Administrators' in user_groups or 'Editorial Administrators' in user_groups or 'Editorial College' in user_groups or 'Advisory Board' in user_groups or 'Vetting Editors' in user_groups or 'Ambassadors' in user_groups or 'Junior Ambassadors' in user_groups %}
-                          <li class="nav-item btn btn-secondary">
-                            <a href="#editorial-actions" class="nav-link" data-toggle="tab">Editorial Actions</a>
-                          </li>
-                      {% endif %}
+                      <li class="nav-item btn btn-secondary">
+                        <a href="#editorial-actions" class="nav-link" data-toggle="tab">Editorial Actions</a>
+                      </li>
+		      {% endif %}
+		      {% if perms.scipost.can_view_production %}
+		      <li class="nav-item btn btn-secondary">
+			<a href="#production" class="nav-link" data-toggle="tab">Production</a>
+		      </li>
+		      {% endif %}
                       {% if perms.scipost.can_referee %}
                           <li class="nav-item btn btn-secondary">
                             {% with pending_count=pending_ref_tasks|length %}
@@ -310,6 +315,30 @@
             </div><!-- End tab -->
         {% endif %}
 
+	    {% if perms.scipost.can_view_production %}
+	    <!-- Tab: Production -->
+	    <div class="tab-pane" id="production" role="tabpanel">
+	      <div class="row">
+		<div class="col-12">
+		  <div class="card card-grey">
+		    <div class="card-block">
+		      <h2 class="card-title mb-0">Production Tasks</h2>
+		    </div>
+		  </div>
+		</div>
+	      </div>
+	      <div class="row">
+		<div class="col-md-4">
+		  <h3>Production workflow</h3>
+		  <ul>
+		    <li><a href="{% url 'production:production' %}">Go to the production page</a></li>
+		    <li><a href="{% url 'production:completed' %}">View completed streams</a></li>
+		  </ul>
+		</div>
+	      </div>
+	    </div>
+	    {% endif %}
+
         {% if perms.scipost.can_referee %}
             <!-- Tab: Refereeing -->
             <div class="tab-pane" id="refereeing" role="tabpanel">
diff --git a/submissions/admin.py b/submissions/admin.py
index c0d1156527056afdba29f1656ff3e712246e7afd..10fa602e0f82a198e68d393f362720d504addee9 100644
--- a/submissions/admin.py
+++ b/submissions/admin.py
@@ -1,34 +1,68 @@
 from django.contrib import admin
+from django import forms
 
 from guardian.admin import GuardedModelAdmin
 
 from submissions.models import *
 
+from scipost.models import Contributor
+
 
 def submission_short_title(obj):
     return obj.submission.title[:30]
 
 
+class SubmissionAdminForm(forms.ModelForm):
+    authors = forms.ModelMultipleChoiceField(
+        required=False,
+        queryset=Contributor.objects.order_by('user__last_name'))
+    authors_claims = forms.ModelMultipleChoiceField(
+        required=False,
+        queryset=Contributor.objects.order_by('user__last_name'))
+    authors_false_claims = forms.ModelMultipleChoiceField(
+        required=False,
+        queryset=Contributor.objects.order_by('user__last_name'))
+
+    class Meta:
+        model = Submission
+        fields = '__all__'
+
 class SubmissionAdmin(GuardedModelAdmin):
     search_fields = ['submitted_by__user__last_name', 'title', 'author_list', 'abstract']
     list_display = ('title', 'author_list', 'status', 'submission_date', 'publication',)
     date_hierarchy = 'submission_date'
     list_filter = ('status', 'discipline', 'submission_type', )
-
+    form = SubmissionAdminForm
 
 admin.site.register(Submission, SubmissionAdmin)
 
 
+class EditorialAssignmentAdminForm(forms.ModelForm):
+    submission = forms.ModelChoiceField(
+        queryset=Submission.objects.order_by('-arxiv_identifier_w_vn_nr'))
+
+    class Meta:
+        model = EditorialAssignment
+        fields = '__all__'
+
 class EditorialAssignmentAdmin(admin.ModelAdmin):
     search_fields = ['submission__title', 'submission__author_list', 'to__user__last_name']
     list_display = ('to', submission_short_title, 'accepted', 'completed', 'date_created',)
     date_hierarchy = 'date_created'
     list_filter = ('accepted', 'deprecated', 'completed', )
-
+    form = EditorialAssignmentAdminForm
 
 admin.site.register(EditorialAssignment, EditorialAssignmentAdmin)
 
 
+class RefereeInvitationAdminForm(forms.ModelForm):
+    submission = forms.ModelChoiceField(
+        queryset=Submission.objects.order_by('-arxiv_identifier_w_vn_nr'))
+
+    class Meta:
+        model = RefereeInvitation
+        fields = '__all__'
+
 class RefereeInvitationAdmin(admin.ModelAdmin):
     search_fields = ['submission__title', 'submission__author_list',
                      'referee__user__last_name',
@@ -36,18 +70,26 @@ class RefereeInvitationAdmin(admin.ModelAdmin):
     list_display = ('__str__', 'accepted', )
     list_filter = ('accepted', 'fulfilled', 'cancelled',)
     date_hierarchy = 'date_invited'
-
+    form = RefereeInvitationAdminForm
 
 admin.site.register(RefereeInvitation, RefereeInvitationAdmin)
 
 
+class ReportAdminForm(forms.ModelForm):
+    submission = forms.ModelChoiceField(
+        queryset=Submission.objects.order_by('-arxiv_identifier_w_vn_nr'))
+
+    class Meta:
+        model = Report
+        fields = '__all__'
+
 class ReportAdmin(admin.ModelAdmin):
     search_fields = ['author__user__last_name', 'submission']
     list_display = ('author', 'status', submission_short_title, 'date_submitted', )
     list_display_links = ('author',)
     date_hierarchy = 'date_submitted'
     list_filter = ('status',)
-
+    form = ReportAdminForm
 
 admin.site.register(Report, ReportAdmin)
 
@@ -59,8 +101,37 @@ class EditorialCommunicationAdmin(admin.ModelAdmin):
 admin.site.register(EditorialCommunication, EditorialCommunicationAdmin)
 
 
+class EICRecommendationAdminForm(forms.ModelForm):
+    submission = forms.ModelChoiceField(
+        queryset=Submission.objects.order_by('-arxiv_identifier_w_vn_nr'))
+    eligible_to_vote = forms.ModelMultipleChoiceField(
+        required=False,
+        queryset=Contributor.objects.filter(
+            user__groups__name__in=['Editorial College'],
+        ).order_by('user__last_name'))
+    voted_for = forms.ModelMultipleChoiceField(
+        required=False,
+        queryset=Contributor.objects.filter(
+            user__groups__name__in=['Editorial College'],
+        ).order_by('user__last_name'))
+    voted_against = forms.ModelMultipleChoiceField(
+        required=False,
+        queryset=Contributor.objects.filter(
+            user__groups__name__in=['Editorial College'],
+        ).order_by('user__last_name'))
+    voted_abstain = forms.ModelMultipleChoiceField(
+        required=False,
+        queryset=Contributor.objects.filter(
+            user__groups__name__in=['Editorial College'],
+        ).order_by('user__last_name'))
+
+    class Meta:
+        model = EICRecommendation
+        fields = '__all__'
+
+
 class EICRecommendationAdmin(admin.ModelAdmin):
     search_fields = ['submission__title']
-
+    form = EICRecommendationAdminForm
 
 admin.site.register(EICRecommendation, EICRecommendationAdmin)
diff --git a/submissions/forms.py b/submissions/forms.py
index 71632fa47b2e7cbff6d728ad29ae18fc1a242166..4b6fdcc8425010d118d279a7838a8b4a3b3c336b 100644
--- a/submissions/forms.py
+++ b/submissions/forms.py
@@ -56,6 +56,11 @@ class SubmissionChecks:
             if kwargs['initial'].get('is_resubmission', None):
                 self.is_resubmission = kwargs['initial']['is_resubmission'] in ('True', True)
 
+        # `is_resubmission` property if data is coming from (POST) request
+        if kwargs.get('data', None):
+            if kwargs['data'].get('is_resubmission', None):
+                self.is_resubmission = kwargs['data']['is_resubmission'] in ('True', True)
+
     def _submission_already_exists(self, identifier):
         if Submission.objects.filter(arxiv_identifier_w_vn_nr=identifier).exists():
             error_message = 'This preprint version has already been submitted to SciPost.'
@@ -88,7 +93,7 @@ class SubmissionChecks:
         identifiers = self.identifier_into_parts(identifier)
         submission = (Submission.objects
                       .filter(arxiv_identifier_wo_vn_nr=identifiers['arxiv_identifier_wo_vn_nr'])
-                      .order_by('-arxiv_vn_nr').last())
+                      .order_by('arxiv_vn_nr').last())
 
         # If submissions are found; check their statuses
         if submission:
diff --git a/submissions/models.py b/submissions/models.py
index 9e697af3908fdf117f182ae6a0f26c337a9c900b..6bf5ae9c6c7b1b9378efa71e54f26a7a8074ee88 100644
--- a/submissions/models.py
+++ b/submissions/models.py
@@ -156,7 +156,7 @@ class Submission(ArxivCallable, models.Model):
     def count_obtained_reports(self):
         return self.reports.filter(status=1, invited__isnull=False).count()
 
-    def count_refused_resports(self):
+    def count_refused_reports(self):
         return self.reports.filter(status__lte=-1).count()
 
     def count_awaiting_vetting(self):
diff --git a/submissions/templates/submissions/_submission_refereeing_status.html b/submissions/templates/submissions/_submission_refereeing_status.html
index 94e9ba3cbd35ab3eccca9bcba9e3fc9c4d9585d7..50066b96f9b564b3e9d18b1dc24d191c56e922f6 100644
--- a/submissions/templates/submissions/_submission_refereeing_status.html
+++ b/submissions/templates/submissions/_submission_refereeing_status.html
@@ -1,6 +1,6 @@
 {% if submission.refereeing_cycle != 'direct_rec' %}
     <div class="card-block">
         <p class="card-text">Nr referees invited: {{submission.referee_invitations.count}} <span>[{{submission.count_accepted_invitations}} acccepted / {{submission.count_declined_invitations}} declined / {{submission.count_pending_invitations}} response pending]</span></p>
-        <p class="card-text">Nr reports obtained: {{submission.count_obtained_reports}} [{{submission.count_invited_reports}} invited / {{submission.count_contrib_reports}} contributed], nr refused: {{submission.count_refused_resports}}, nr awaiting vetting: {{submission.count_awaiting_vetting}}</p>
+        <p class="card-text">Nr reports obtained: {{submission.count_obtained_reports}} [{{submission.count_invited_reports}} invited / {{submission.count_contrib_reports}} contributed], nr refused: {{submission.count_refused_reports}}, nr awaiting vetting: {{submission.count_awaiting_vetting}}</p>
     </div>
 {% endif %}
diff --git a/submissions/views.py b/submissions/views.py
index 56fc14ca6c9a17d72555f191f449c9b4eea76942..a3764b96f5a4e937c229c7f4026b76b3739b9952 100644
--- a/submissions/views.py
+++ b/submissions/views.py
@@ -6,7 +6,7 @@ from django.contrib.auth.decorators import login_required, permission_required
 from django.contrib.auth.models import Group
 from django.core.urlresolvers import reverse, reverse_lazy
 from django.db import transaction
-from django.http import Http404
+from django.http import Http404, HttpResponseRedirect
 from django.shortcuts import get_object_or_404, render, redirect
 from django.template import Template, Context
 from django.utils import timezone
@@ -75,10 +75,9 @@ class RequestSubmission(CreateView):
             # Send emails
             SubmissionUtils.load({'submission': submission})
             SubmissionUtils.send_authors_submission_ack_email()
-        return super().form_valid(form)
+        return HttpResponseRedirect(self.success_url)
 
     def form_invalid(self, form):
-        # r = form.errors
         for error_messages in form.errors.values():
             messages.warning(self.request, *error_messages)
         return super().form_invalid(form)
diff --git a/theses/admin.py b/theses/admin.py
index 61338e88abe0453a93254d180c9dbeff4dd463b7..762043c8deb4a77bade074668e87e1417f9c3db0 100644
--- a/theses/admin.py
+++ b/theses/admin.py
@@ -1,9 +1,29 @@
 from django.contrib import admin
 
+from django import forms
+
 from theses.models import *
 
+from scipost.models import Contributor
+
+
+class ThesisLinkAdminForm(forms.ModelForm):
+    author_claims = forms.ModelMultipleChoiceField(
+        required=False,
+        queryset=Contributor.objects.order_by('user__last_name'))
+    author_false_claims = forms.ModelMultipleChoiceField(
+        required=False,
+        queryset=Contributor.objects.order_by('user__last_name'))
+    supervisor_as_cont = forms.ModelMultipleChoiceField(
+        required=False,
+        queryset=Contributor.objects.order_by('user__last_name'))
+
+    class Meta:
+        model = ThesisLink
+        fields = '__all__'
 
 class ThesisLinkAdmin(admin.ModelAdmin):
     search_fields = ['requested_by__user__username', 'author', 'title']
+    form = ThesisLinkAdminForm
 
 admin.site.register(ThesisLink, ThesisLinkAdmin)
diff --git a/virtualmeetings/admin.py b/virtualmeetings/admin.py
index c831a447b58b6d95edd086fda5750bbfc5e315c6..6baf0995ccc27f01638926563db60ed849deebda 100644
--- a/virtualmeetings/admin.py
+++ b/virtualmeetings/admin.py
@@ -1,7 +1,11 @@
 from django.contrib import admin
 
+from django import forms
+
 from .models import VGM, Feedback, Nomination, Motion
 
+from scipost.models import Contributor
+
 
 class VGMAdmin(admin.ModelAdmin):
     search_fields = ['start_date']
@@ -17,15 +21,57 @@ class FeedbackAdmin(admin.ModelAdmin):
 admin.site.register(Feedback, FeedbackAdmin)
 
 
+class NominationAdminForm(forms.ModelForm):
+    in_agreement = forms.ModelMultipleChoiceField(
+        required=False,
+        queryset=Contributor.objects.filter(
+            user__groups__name__in=['Editorial College'],
+        ).order_by('user__last_name'))
+    in_notsure = forms.ModelMultipleChoiceField(
+        required=False,
+        queryset=Contributor.objects.filter(
+            user__groups__name__in=['Editorial College'],
+        ).order_by('user__last_name'))
+    in_disagreement = forms.ModelMultipleChoiceField(
+        required=False,
+        queryset=Contributor.objects.filter(
+            user__groups__name__in=['Editorial College'],
+        ).order_by('user__last_name'))
+
+    class Meta:
+        model = Nomination
+        fields = '__all__'
+
 class NominationAdmin(admin.ModelAdmin):
     search_fields = ['last_name', 'first_name', 'by']
-
+    form = NominationAdminForm
 
 admin.site.register(Nomination, NominationAdmin)
 
 
+class MotionAdminForm(forms.ModelForm):
+    in_agreement = forms.ModelMultipleChoiceField(
+        required=False,
+        queryset=Contributor.objects.filter(
+            user__groups__name__in=['Editorial College'],
+        ).order_by('user__last_name'))
+    in_notsure = forms.ModelMultipleChoiceField(
+        required=False,
+        queryset=Contributor.objects.filter(
+            user__groups__name__in=['Editorial College'],
+        ).order_by('user__last_name'))
+    in_disagreement = forms.ModelMultipleChoiceField(
+        required=False,
+        queryset=Contributor.objects.filter(
+            user__groups__name__in=['Editorial College'],
+        ).order_by('user__last_name'))
+
+    class Meta:
+        model = Motion
+        fields = '__all__'
+
 class MotionAdmin(admin.ModelAdmin):
     search_fields = ['background', 'motion', 'put_forward_by']
-
+    form = MotionAdminForm
 
 admin.site.register(Motion, MotionAdmin)