diff --git a/commentaries/forms.py b/commentaries/forms.py
index 1209f2d15881150e6070141bcd6439c93fbde35e..65bb327eb563968ad7218243c48cff0b970b56ad 100644
--- a/commentaries/forms.py
+++ b/commentaries/forms.py
@@ -2,6 +2,8 @@ from django import forms
 
 from .models import Commentary
 
+from scipost.models import Contributor
+
 COMMENTARY_ACTION_CHOICES = (
     (0, 'modify'),
     (1, 'accept'),
@@ -29,6 +31,8 @@ class IdentifierToQueryForm(forms.Form):
 
 
 class RequestCommentaryForm(forms.ModelForm):
+    existing_commentary = None
+
     class Meta:
         model = Commentary
         fields = ['type', 'discipline', 'domain', 'subject_area',
@@ -39,6 +43,7 @@ class RequestCommentaryForm(forms.ModelForm):
                   'pub_DOI', 'pub_abstract']
 
     def __init__(self, *args, **kwargs):
+        self.user = kwargs.pop('user', None)
         super(RequestCommentaryForm, self).__init__(*args, **kwargs)
         self.fields['metadata'].widget = forms.HiddenInput()
         self.fields['pub_date'].widget.attrs.update({'placeholder': 'Format: YYYY-MM-DD'})
@@ -47,6 +52,37 @@ class RequestCommentaryForm(forms.ModelForm):
         self.fields['pub_DOI'].widget.attrs.update({'placeholder': 'ex.: 10.21468/00.000.000000'})
         self.fields['pub_abstract'].widget.attrs.update({'cols': 100})
 
+    def clean(self, *args, **kwargs):
+        cleaned_data = super(RequestCommentaryForm, self).clean(*args, **kwargs)
+        if not cleaned_data['arxiv_identifier'] and not cleaned_data['pub_DOI']:
+            msg = ('You must provide either a DOI (for a published paper) '
+                'or an arXiv identifier (for a preprint).')
+            self.add_error('arxiv_identifier', msg)
+            self.add_error('pub_DOI', msg)
+        elif (cleaned_data['arxiv_identifier'] and
+              (Commentary.objects
+               .filter(arxiv_identifier=cleaned_data['arxiv_identifier']).exists())):
+            msg = 'There already exists a Commentary Page on this preprint, see'
+            self.existing_commentary = get_object_or_404(
+                Commentary,
+                arxiv_identifier=cleaned_data['arxiv_identifier'])
+            self.add_error('arxiv_identifier', msg)
+        elif (cleaned_data['pub_DOI'] and
+              Commentary.objects.filter(pub_DOI=cleaned_data['pub_DOI']).exists()):
+            msg = 'There already exists a Commentary Page on this publication, see'
+            self.existing_commentary = get_object_or_404(Commentary, pub_DOI=cleaned_data['pub_DOI'])
+            self.add_error('pub_DOI', msg)
+
+    def save(self, *args, **kwargs):
+        """Prefill instance before save"""
+        self.requested_by = Contributor.objects.get(user=self.user)
+        return super(RequestCommentaryForm, self).save(*args, **kwargs)
+
+    def get_existing_commentary(self):
+        """Get Commentary if found after validation"""
+        return self.existing_commentary
+
+
 class VetCommentaryForm(forms.Form):
     action_option = forms.ChoiceField(widget=forms.RadioSelect,
                                       choices=COMMENTARY_ACTION_CHOICES,
@@ -55,6 +91,7 @@ class VetCommentaryForm(forms.Form):
     email_response_field = forms.CharField(widget=forms.Textarea(
         attrs={'rows': 5, 'cols': 40}), label='Justification (optional)', required=False)
 
+
 class CommentarySearchForm(forms.Form):
     """Search for Commentary specified by user"""
     pub_author = forms.CharField(max_length=100, required=False, label="Author(s)")
diff --git a/commentaries/views.py b/commentaries/views.py
index bdd00b85af2a7fae9ac4404776003f557cb99b35..a21319d0cfad2104ca8f86379183c2a2eadc09ad 100644
--- a/commentaries/views.py
+++ b/commentaries/views.py
@@ -6,15 +6,12 @@ import requests
 from django.db.models import Q
 from django.utils import timezone
 from django.shortcuts import get_object_or_404, render
-from django.contrib.auth import authenticate, login, logout
+from django.contrib.auth import login, logout
 from django.contrib.auth.decorators import login_required, permission_required
-from django.contrib.auth.models import User
 from django.core.mail import EmailMessage
 from django.core.urlresolvers import reverse
-from django.http import HttpResponse, HttpResponseRedirect
+from django.http import HttpResponse
 from django.shortcuts import redirect
-from django.views.decorators.csrf import csrf_protect
-from django.db.models import Avg
 
 from .models import Commentary
 from .forms import RequestCommentaryForm, DOIToQueryForm, IdentifierToQueryForm
@@ -35,53 +32,48 @@ from scipost.forms import AuthenticationForm
 @login_required
 @permission_required('scipost.can_request_commentary_pages', raise_exception=True)
 def request_commentary(request):
+    form = RequestCommentaryForm(request.POST or None, user=request.user)
     if request.method == 'POST':
-        form = RequestCommentaryForm(request.POST)
         if form.is_valid():
-            errormessage = ''
-            existing_commentary = None
-            if not form.cleaned_data['arxiv_identifier'] and not form.cleaned_data['pub_DOI']:
-                errormessage = ('You must provide either a DOI (for a published paper) '
-                                'or an arXiv identifier (for a preprint).')
-            elif (form.cleaned_data['arxiv_identifier'] and
-                  (Commentary.objects
-                   .filter(arxiv_identifier=form.cleaned_data['arxiv_identifier']).exists())):
-                errormessage = 'There already exists a Commentary Page on this preprint, see'
-                existing_commentary = get_object_or_404(
-                    Commentary,
-                    arxiv_identifier=form.cleaned_data['arxiv_identifier'])
-            elif (form.cleaned_data['pub_DOI'] and
-                  Commentary.objects.filter(pub_DOI=form.cleaned_data['pub_DOI']).exists()):
-                errormessage = 'There already exists a Commentary Page on this publication, see'
-                existing_commentary = get_object_or_404(Commentary, pub_DOI=form.cleaned_data['pub_DOI'])
-            if errormessage:
-                doiform = DOIToQueryForm()
-                identifierform = IdentifierToQueryForm()
-                context = {'form': form, 'doiform': doiform, 'identifierform': identifierform,
-                           'errormessage': errormessage,
-                           'existing_commentary': existing_commentary}
-                return render(request, 'commentaries/request_commentary.html', context)
+            # errormessage = ''
+            # existing_commentary = None
+            # if not form.cleaned_data['arxiv_identifier'] and not form.cleaned_data['pub_DOI']:
+            #     errormessage = ('You must provide either a DOI (for a published paper) '
+            #                     'or an arXiv identifier (for a preprint).')
+            # elif (form.cleaned_data['arxiv_identifier'] and
+            #       (Commentary.objects
+            #        .filter(arxiv_identifier=form.cleaned_data['arxiv_identifier']).exists())):
+            #     errormessage = 'There already exists a Commentary Page on this preprint, see'
+            #     existing_commentary = get_object_or_404(
+            #         Commentary,
+            #         arxiv_identifier=form.cleaned_data['arxiv_identifier'])
+            # elif (form.cleaned_data['pub_DOI'] and
+            #       Commentary.objects.filter(pub_DOI=form.cleaned_data['pub_DOI']).exists()):
+            #     errormessage = 'There already exists a Commentary Page on this publication, see'
+            #     existing_commentary = get_object_or_404(Commentary, pub_DOI=form.cleaned_data['pub_DOI'])
 
             # Otherwise we can create the Commentary
-            contributor = Contributor.objects.get(user=request.user)
-            commentary = Commentary (
-                requested_by = contributor,
-                type = form.cleaned_data['type'],
-                discipline = form.cleaned_data['discipline'],
-                domain = form.cleaned_data['domain'],
-                subject_area = form.cleaned_data['subject_area'],
-                pub_title = form.cleaned_data['pub_title'],
-                arxiv_identifier = form.cleaned_data['arxiv_identifier'],
-                pub_DOI = form.cleaned_data['pub_DOI'],
-                metadata = form.cleaned_data['metadata'],
-                author_list = form.cleaned_data['author_list'],
-                journal = form.cleaned_data['journal'],
-                volume = form.cleaned_data['volume'],
-                pages = form.cleaned_data['pages'],
-                pub_date = form.cleaned_data['pub_date'],
-                pub_abstract = form.cleaned_data['pub_abstract'],
-                latest_activity = timezone.now(),
-                )
+            # contributor = Contributor.objects.get(user=request.user)
+            # commentary = Commentary(
+            #     requested_by = contributor,
+            #     type = form.cleaned_data['type'],
+            #     discipline = form.cleaned_data['discipline'],
+            #     domain = form.cleaned_data['domain'],
+            #     subject_area = form.cleaned_data['subject_area'],
+            #     pub_title = form.cleaned_data['pub_title'],
+            #     arxiv_identifier = form.cleaned_data['arxiv_identifier'],
+            #     pub_DOI = form.cleaned_data['pub_DOI'],
+            #     metadata = form.cleaned_data['metadata'],
+            #     author_list = form.cleaned_data['author_list'],
+            #     journal = form.cleaned_data['journal'],
+            #     volume = form.cleaned_data['volume'],
+            #     pages = form.cleaned_data['pages'],
+            #     pub_date = form.cleaned_data['pub_date'],
+            #     pub_abstract = form.cleaned_data['pub_abstract'],
+            #     latest_activity = timezone.now(),
+            #     )
+
+            commentary = form.save(commit=False)
             commentary.parse_links_into_urls()
             commentary.save()
 
@@ -91,8 +83,16 @@ def request_commentary(request):
                        'followup_link': reverse('scipost:personal_page'),
                        'followup_link_label': 'personal page'}
             return render(request, 'scipost/acknowledgement.html', context)
-    else:
-        form = RequestCommentaryForm()
+
+        else:
+            doiform = DOIToQueryForm()
+            existing_commentary = form.get_existing_commentary()
+            identifierform = IdentifierToQueryForm()
+            context = {'form': form, 'doiform': doiform, 'identifierform': identifierform,
+                       'errormessage': form.errors,
+                       'existing_commentary': existing_commentary}
+            return render(request, 'commentaries/request_commentary.html', context)
+
     doiform = DOIToQueryForm()
     identifierform = IdentifierToQueryForm()
     context = {'form': form, 'doiform': doiform, 'identifierform': identifierform}