diff --git a/submissions/forms.py b/submissions/forms.py
index 8c2be486ee96682e43eb3e7570ab51cc09c3672e..4f229ae78c72807da4ba24d2a103e32fa8ec1533 100644
--- a/submissions/forms.py
+++ b/submissions/forms.py
@@ -518,29 +518,42 @@ class EditorialAssignmentForm(forms.ModelForm):
         label="Are you willing to take charge of this Submission?")
     refereeing_cycle = forms.ChoiceField(
         widget=forms.RadioSelect, choices=CYCLE_CHOICES, initial=CYCLE_DEFAULT)
+    refusal_reason = forms.ChoiceField(
+        choices=ASSIGNMENT_REFUSAL_REASONS)
 
     class Meta:
         model = EditorialAssignment
-        fields = ('refusal_reason',)
+        fields = ()  # Don't use the default fields options because of the ordering of fields.
 
     def __init__(self, *args, **kwargs):
         """Add related submission as argument."""
         self.submission = kwargs.pop('submission')
-        self.request = kwargs.pop('request', None)
+        self.request = kwargs.pop('request')
         super().__init__(*args, **kwargs)
         if not self.instance.id:
             del self.fields['decision']
             del self.fields['refusal_reason']
 
+    def has_accepted_invite(self):
+        """Check if invite is accepted or if voluntered to become EIC."""
+        return 'decision' not in self.cleaned_data or self.cleaned_data['decision'] == 'accept'
+
+    def is_normal_cycle(self):
+        """Check if normal refereeing cycle is chosen."""
+        return self.cleaned_data['refereeing_cycle'] == CYCLE_DEFAULT
+
     def save(self, commit=True):
         """Save Submission to EditorialAssignment."""
         self.instance.submission = self.submission
         self.instance.date_answered = timezone.now()
         self.instance.to = self.request.user.contributor
+        recommendation = super().save()  # Save already, in case it's a new recommendation.
+
+        if self.is_normal_cycle():
+            # Default Refereeing process!
 
-        if self.cleaned_data['refereeing_cycle'] == CYCLE_DEFAULT:
             deadline = timezone.now() + datetime.timedelta(days=28)
-            if self.instance.submission.submitted_to_journal == 'SciPostPhysLectNotes':
+            if recommendation.submission.submitted_to_journal == 'SciPostPhysLectNotes':
                 deadline += datetime.timedelta(days=28)
 
             # Update related Submission.
@@ -552,7 +565,9 @@ class EditorialAssignmentForm(forms.ModelForm):
                 open_for_reporting=True,
                 visible_public=True,
                 latest_activity=timezone.now())
-        elif self.cleaned_data['refereeing_cycle'] == CYCLE_DIRECT_REC:
+        else:
+            # Formulate rejection recommendation instead
+
             # Update related Submission.
             Submission.objects.filter(id=self.submission.id).update(
                 refereeing_cycle=CYCLE_DIRECT_REC,
@@ -563,15 +578,16 @@ class EditorialAssignmentForm(forms.ModelForm):
                 visible_public=False,
                 latest_activity=timezone.now())
 
-        if 'decision' not in self.cleaned_data or self.cleaned_data['decision'] == 'accept':
-            self.instance.accepted = True
-            # Deprecate old EditorialAssignments if Fellow accepts.
+        if self.has_accepted_invite():
+            # Implicitly or explicity accept the assignment and deprecate others.
+            recommendation.accepted = True
             EditorialAssignment.objects.filter(submission=self.submission, accepted=None).exclude(
-                id=self.instance.id).update(deprecated=True)
+                id=recommendation.id).update(deprecated=True)
         else:
-            self.instance.accepted = False
-            self.instance.refusal_reason = self.cleaned_data['refusal_reason']
-        return super().save(commit)
+            recommendation.accepted = False
+            recommendation.refusal_reason = self.cleaned_data['refusal_reason']
+        recommendation.save()  # Save again to register acceptance
+        return recommendation
 
 
 class ConsiderAssignmentForm(forms.Form):
diff --git a/submissions/models.py b/submissions/models.py
index 955f622105717b98623a342b29ade0d01815e1de..d174bbe7f0fe10ab70998ad05cc7acb9cd81842a 100644
--- a/submissions/models.py
+++ b/submissions/models.py
@@ -194,7 +194,7 @@ class Submission(models.Model):
     @property
     def eic_recommendation_required(self):
         """Return if Submission needs a EICRecommendation to be formulated."""
-        return self.eicrecommendations.active().exists()
+        return not self.eicrecommendations.active().exists()
 
     @property
     def revision_requested(self):
diff --git a/submissions/templates/partials/submissions/pool/submission_li.html b/submissions/templates/partials/submissions/pool/submission_li.html
index b4c72bc84c3dc66ffd815637f769f470b3a571fd..242aac59bae1ed0bca139f054f07c4ac14acd4a6 100644
--- a/submissions/templates/partials/submissions/pool/submission_li.html
+++ b/submissions/templates/partials/submissions/pool/submission_li.html
@@ -1,3 +1,5 @@
+{% load submissions_pool %}
+
 <div class="icons">
     {% include 'partials/submissions/pool/submission_tooltip.html' with submission=submission %}
 
@@ -8,7 +10,7 @@
 <div class="pool-item">
     <div class="row mb-1">
         <div class="col-md-7">
-            <a href="{% url 'submissions:pool' submission.arxiv_identifier_w_vn_nr %}">{{ submission.title }}</a><br>
+            <a href="{% url 'submissions:pool' submission.arxiv_identifier_w_vn_nr %}" data-toggle="dynamic" data-target="#container_{{ submission.id }}">{{ submission.title }}</a><br>
             <em>by {{ submission.author_list }}</em>
         </div>
         <div class="col-md-5">
@@ -58,4 +60,14 @@
         </div>
     {% endif %}
 
+    {% if submission.status == 'unassigned' %}
+        {% get_editor_invitations submission request.user as invitations %}
+        {% if invitations %}
+            <div class="border border-warning mt-1 py-1 px-2">
+                <i class="fa fa-exclamation mt-1 px-1 text-danger"></i>
+                You are asked to become Editor-in-charge of this Submission. <a href="{% url 'submissions:editorial_assignment' submission.arxiv_identifier_w_vn_nr %}">You can reply to this invitation here</a>.
+            </div>
+        {% endif %}
+    {% endif %}
+
 </div>
diff --git a/submissions/templates/submissions/pool/editorial_assignment.html b/submissions/templates/submissions/pool/editorial_assignment.html
index e619e96d7b69d4c64d390e18fc950de75f4746aa..d6b4d5a1df0056987e5fd4b914d6890b4f3c24f0 100644
--- a/submissions/templates/submissions/pool/editorial_assignment.html
+++ b/submissions/templates/submissions/pool/editorial_assignment.html
@@ -15,7 +15,11 @@
 {% block content %}
 
 <h1 class="highlight">Editorial Assignment</h1>
-<h3 class="pt-0">Can you act as Editor-in-charge?{% if form.instance.id %} (see below to accept/decline){% endif %}</h3>
+
+{% if form.instance.id %}
+    <h4 class="pt-0">We have received a Submission to SciPost for which we would like you to consider becoming Editor-in-charge.</h4>
+{% endif %}
+    <h4 class="pt-0">Can you act as Editor-in-charge?{% if form.instance.id %} (see below to accept/decline){% endif %}</h4>
 <br>
 
 <h3>Submission details</h3>
@@ -23,7 +27,7 @@
 
 <br>
 {% if form.instance.id %}
-    <h2 class="highlight">Accept or Decline this Assignment</h2>
+    <h2 class="highlight">Accept or decline this Editorial Assignment</h2>
 {% else %}
     <h2 class="highlight">Volunteer to become Editor-in-charge</h2>
 {% endif %}
@@ -32,14 +36,14 @@
 <form method="post">
     {% csrf_token %}
     {{ form|bootstrap }}
-    <p>
+    <input class="btn btn-primary" type="submit" value="Submit" />
+    <p class="border p-2 mt-3">
         <strong>Clarification</strong>
         <br>
-        If you choose the Normal refereeing cycle, you will be redirected to the Editorial Page to proceed further. The Submission will be publicly available and the authors will be informed that the refereeing process has started.
+        If you choose the <em>Normal refereeing cycle</em>, you will be redirected to the Editorial Page to proceed further. The Submission will be publicly available and the authors will be informed that the refereeing process has started.
         <br>
-        If you choose to directly formulate a Editorial Recommendation for rejection, the Submission will not become publicly available. After formulation of the Editorial Recommendation, it will put forward for voting as normal.
+        If you choose to <em>directly formulate a Editorial Recommendation for rejection</em>, the Submission will not become publicly available. After formulation of the Editorial Recommendation, it will be put forward for voting as normal.
     </p>
-    <input class="btn btn-primary" type="submit" value="Submit" />
 </form>
 
 
diff --git a/submissions/templatetags/submissions_pool.py b/submissions/templatetags/submissions_pool.py
new file mode 100644
index 0000000000000000000000000000000000000000..d27a642d7822ac9d30a2661f14b1457dac537ed1
--- /dev/null
+++ b/submissions/templatetags/submissions_pool.py
@@ -0,0 +1,17 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from django import template
+
+from ..models import EditorialAssignment
+
+register = template.Library()
+
+
+@register.simple_tag
+def get_editor_invitations(submission, user):
+    """Check if the User invited to become EIC for Submission."""
+    if not user.is_authenticated or not hasattr(user, 'contributor'):
+        return EditorialAssignment.objects.none()
+    return EditorialAssignment.objects.filter(to__user=user, submission=submission).open()
diff --git a/submissions/utils.py b/submissions/utils.py
index a96fcc8adaa5c0b01ed42c1c49c46bd30fed4941..77bd68540f193b16137541be3e62dafe90e9ffcc 100644
--- a/submissions/utils.py
+++ b/submissions/utils.py
@@ -415,6 +415,7 @@ class SubmissionUtils(BaseMailUtil):
     @classmethod
     def send_EIC_appointment_email(cls):
         """ Requires loading 'assignment' attribute. """
+        r = cls.assignment
         email_text = ('Dear ' + cls.assignment.to.get_title_display() + ' '
                       + cls.assignment.to.user.last_name
                       + ', \n\nThank you for accepting to become Editor-in-charge '
diff --git a/submissions/views.py b/submissions/views.py
index 462bca46f689e55e066cf19c6786a1370e4713a2..587d49fc93e9fec0bea78cf6cb7dd81060362627 100644
--- a/submissions/views.py
+++ b/submissions/views.py
@@ -490,22 +490,62 @@ def assign_submission(request, arxiv_identifier_w_vn_nr):
 
 @login_required
 @fellowship_required()
+@transaction.atomic
 def editorial_assignment(request, arxiv_identifier_w_vn_nr, assignment_id=None):
     """Editorial Assignment form view."""
-    submission = get_object_or_404(
-        Submission.objects.without_eic(), arxiv_identifier_w_vn_nr=arxiv_identifier_w_vn_nr)
+    submission = get_object_or_404(Submission.objects.pool_editable(request.user),
+                                   arxiv_identifier_w_vn_nr=arxiv_identifier_w_vn_nr)
+
+    # Check if Submission is still valid for a new assignment.
+    if submission.editor_in_charge:
+        messages.success(
+            request, '{} {} has already agreed to be Editor-in-charge of this Submission.'.format(
+                submission.editor_in_charge.get_title_display(),
+                submission.editor_in_charge.user.last_name))
+        return redirect('submissions:pool')
+    elif submission.status == STATUS_ASSIGNMENT_FAILED:
+        messages.success(
+            request, ('Thank you for considering.'
+                      ' This Submission has failed pre-screening and has been rejected.'))
+        return redirect('submissions:pool')
 
     if assignment_id:
         # Process existing EditorialAssignment.
         assignment = get_object_or_404(
-            EditorialAssignment.objects.open(), to=request.user.contributor, pk=assignment_id)
+            submission.editorial_assignments.open(), to=request.user.contributor, pk=assignment_id)
     else:
-        # Create new EditorialAssignment.
-        assignment = EditorialAssignment()
+        # Get or create EditorialAssignment for user.
+        try:
+            assignment = submission.editorial_assignments.open().filter(
+                to__user=request.user).first()
+        except EditorialAssignment.DoesNotExist:
+            assignment = EditorialAssignment()
 
-    form = EditorialAssignmentForm(request.POST or None, submission=submission, instance=assignment)
+    form = EditorialAssignmentForm(
+        request.POST or None, submission=submission, instance=assignment, request=request)
     if form.is_valid():
-        form.save()
+        assignment = form.save()
+        if form.has_accepted_invite():
+            # Fellow accepted to do a normal refereeing cycle.
+            SubmissionUtils.load({'assignment': assignment})
+            SubmissionUtils.send_EIC_appointment_email()
+
+            if form.is_normal_cycle():
+                # Inform authors about new status.
+                SubmissionUtils.send_author_prescreening_passed_email()
+
+            submission.add_general_event('The Editor-in-charge has been assigned.')
+            msg = 'Thank you for becoming Editor-in-charge of this submission.'
+            url = reverse('submissions:editorial_page', args=(submission.arxiv_identifier_w_vn_nr,))
+        else:
+            # Fellow declined the invitation.
+            msg = 'Thank you for considering'
+            url = reverse('submissions:pool')
+
+        # Form submitted; redirect user
+        messages.success(request, msg)
+        return redirect(url)
+
         return redirect('submissions:pool')
 
     context = {
@@ -531,85 +571,6 @@ def assignment_request(request, assignment_id):
     }))
 
 
-# @login_required
-# @fellowship_required()
-# @transaction.atomic
-# def assignment_request(request, assignment_id):
-#     """Process EditorialAssignment acceptance/rejection form or show if not submitted."""
-#     assignment = get_object_or_404(EditorialAssignment.objects.open(),
-#                                    to=request.user.contributor, pk=assignment_id)
-#
-#     errormessage = None
-#     if assignment.submission.status == STATUS_ASSIGNMENT_FAILED:
-#         # This status can be reached without assigned editor.
-#         errormessage = 'This Submission has failed pre-screening and has been rejected.'
-#     elif assignment.submission.editor_in_charge:
-#         errormessage = (assignment.submission.editor_in_charge.get_title_display() + ' ' +
-#                         assignment.submission.editor_in_charge.user.last_name +
-#                         ' has already agreed to be Editor-in-charge of this Submission.')
-#
-#     if errormessage:
-#         # Don't open the assignment.
-#         messages.warning(request, errormessage)
-#         return redirect(reverse('submissions:pool'))
-#
-#     form = ConsiderAssignmentForm(request.POST or None)
-#     if form.is_valid():
-#         assignment.date_answered = timezone.now()
-#         if form.cleaned_data['accept'] == 'True':
-            # submission = assignment.submission
-
-            # # Sign Editorial Assigment
-            # EditorialAssignment.objects.filter(id=assignment.id).update(
-            #     accepted=True, to=request.user.contributor)
-            # EditorialAssignment.objects.filter(submission=submission, accepted=None).exclude(
-            #     id=assignment.id).update(deprecated=True)
-#
-            # # Update related Submission
-            # submission = assignment.submission
-            # submission.status = STATUS_EIC_ASSIGNED
-            # submission.editor_in_charge = request.user.contributor
-            # submission.open_for_reporting = True
-            # deadline = timezone.now() + datetime.timedelta(days=28)  # for papers
-            # if submission.submitted_to_journal == 'SciPostPhysLectNotes':
-            #     deadline += datetime.timedelta(days=28)
-            # submission.reporting_deadline = deadline
-            # submission.open_for_commenting = True
-            # submission.latest_activity = timezone.now()
-            # submission.save()
-#
-#             # Send out mails
-#             SubmissionUtils.load({'assignment': assignment})
-#             SubmissionUtils.send_EIC_appointment_email()
-#             SubmissionUtils.send_author_prescreening_passed_email()
-#
-#             # Add SubmissionEvents
-#             submission.add_general_event('The Editor-in-charge has been assigned.')
-#             msg = 'Thank you for becoming Editor-in-charge of this submission.'
-#             url = reverse('submissions:editorial_page',
-#                           args=(submission.arxiv_identifier_w_vn_nr,))
-#         else:
-            # assignment.accepted = False
-            # assignment.refusal_reason = form.cleaned_data['refusal_reason']
-            # assignment.submission.status = 'unassigned'
-#
-#             # Save assignment and submission
-#             assignment.save()
-#             assignment.submission.save()
-#             msg = 'Thank you for considering'
-#             url = reverse('submissions:pool')
-#
-#         # Form submitted, redirect user
-#         messages.success(request, msg)
-#         return redirect(url)
-#
-#     context = {
-#         'assignment': assignment,
-#         'form': form
-#     }
-#     return render(request, 'submissions/pool/assignment_request.html', context)
-
-
 @login_required
 @fellowship_required()
 @transaction.atomic