diff --git a/SciPost_v1/settings/base.py b/SciPost_v1/settings/base.py
index 6bbf98dffecc06f1664e6a5ee1cc0fcfc0ccc8be..7758de6ee883377b474cd745ca936f0a56bade95 100644
--- a/SciPost_v1/settings/base.py
+++ b/SciPost_v1/settings/base.py
@@ -156,7 +156,6 @@ TEMPLATES = [
                 'django.template.context_processors.media',
                 'django.contrib.auth.context_processors.auth',
                 'django.contrib.messages.context_processors.messages',
-                'scipost.context_processors.searchform',
             ],
         },
     },
diff --git a/SciPost_v1/settings/local_jorran.py b/SciPost_v1/settings/local_jorran.py
index 1eef068e824bdaaa5e51f1b16a15cf80cee2b724..12dcdcfa68b6054fae82ccda1936723bab419563 100644
--- a/SciPost_v1/settings/local_jorran.py
+++ b/SciPost_v1/settings/local_jorran.py
@@ -3,6 +3,15 @@ from .base import *
 # THE MAIN THING HERE
 DEBUG = True
 
+# Debug toolbar settings
+INSTALLED_APPS += (
+    'debug_toolbar',
+)
+MIDDLEWARE_CLASSES += (
+    'debug_toolbar.middleware.DebugToolbarMiddleware',
+)
+INTERNAL_IPS = ['127.0.0.1', '::1']
+
 # Static and media
 STATIC_ROOT = '/Users/jorranwit/Develop/SciPost/scipost_v1/local_files/static/'
 MEDIA_ROOT = '/Users/jorranwit/Develop/SciPost/scipost_v1/local_files/media/'
diff --git a/SciPost_v1/urls.py b/SciPost_v1/urls.py
index 9391da29315f2d285bc84dc132c7e7dafa617cb8..11c640116c6bffe41466958b01638c47d83103c9 100644
--- a/SciPost_v1/urls.py
+++ b/SciPost_v1/urls.py
@@ -33,3 +33,9 @@ urlpatterns = [
     url(r'^thesis/', include('theses.urls', namespace="theses")),
     url(r'^news/', include('news.urls', namespace="news")),
 ]
+
+if settings.DEBUG:
+    import debug_toolbar
+    urlpatterns += [
+        url(r'^__debug__/', include(debug_toolbar.urls)),
+    ]
diff --git a/commentaries/views.py b/commentaries/views.py
index 640100a7c22436864ce3aab1e7b49e76f10a0c67..e103063d5ff6074d4a37aa0137a51efb166697cd 100644
--- a/commentaries/views.py
+++ b/commentaries/views.py
@@ -282,7 +282,9 @@ class CommentaryListView(ListView):
         context = super().get_context_data(**kwargs)
 
         # Get newest comments
-        context['comment_list'] = Comment.objects.vetted().order_by('-date_submitted')[:10]
+        context['comment_list'] = Comment.objects.vetted().select_related(
+                                  'author__user', 'submission', 'commentary').order_by(
+                                  '-date_submitted')[:10]
 
         # Form into the context!
         context['form'] = self.form
diff --git a/requirements.txt b/requirements.txt
index 4e1cfb752935824e29985016edb1fd1bbd4c30e8..a5406b89e2df28e0fe9829ed55487fbc1455a010 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -3,6 +3,7 @@ Babel==2.3.4
 Django==1.10.3
 django-countries==4.0
 django-crispy-forms==1.6.1
+django-debug-toolbar==1.7
 django-extensions==1.7.6
 django-filter==1.0.0
 django-guardian==1.4.6
diff --git a/scipost/context_processors.py b/scipost/context_processors.py
deleted file mode 100644
index 19c0fbf686bb62fb3d3908d1f0a370bc9f23165b..0000000000000000000000000000000000000000
--- a/scipost/context_processors.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from .forms import SearchForm
-
-
-def searchform(request):
-    return {'search_form': SearchForm()}
diff --git a/scipost/forms.py b/scipost/forms.py
index 04f36192dbf87b171561b533c64707c7afffa624..b1fb349c3b77db8289ca530b3eb26ea3b02409e3 100644
--- a/scipost/forms.py
+++ b/scipost/forms.py
@@ -210,9 +210,7 @@ class RemarkForm(forms.Form):
 
 
 class SearchForm(forms.Form):
-    query = forms.CharField(max_length=100, label='',
-                            widget=forms.TextInput(attrs={
-                                'class': 'form-control mr-0 mb-2 mr-lg-2 mb-lg-0'}))
+    q = forms.CharField(max_length=100)
 
 
 class EmailGroupMembersForm(forms.Form):
diff --git a/scipost/models.py b/scipost/models.py
index 4bde7f7afa12b3095ad0c2aff68273a00ba6db5a..119cd4ca97bba8bcb05694673499dc7ba9965a07 100644
--- a/scipost/models.py
+++ b/scipost/models.py
@@ -428,220 +428,6 @@ class PrecookedEmail(models.Model):
         return self.email_subject
 
 
-#####################################
-# Virtual General Meetings, Motions #
-#####################################
-
-# class VGM(models.Model):
-#     """
-#     Each year, a Virtual General Meeting is held during which operations at
-#     SciPost are discussed. A VGM can be attended by Administrators,
-#     Advisory Board members and Editorial Fellows.
-#     """
-#     start_date = models.DateField()
-#     end_date = models.DateField()
-#     information = models.TextField(default='')
-#
-#     def __str__(self):
-#         return 'From %s to %s' % (self.start_date.strftime('%Y-%m-%d'),
-#                                   self.end_date.strftime('%Y-%m-%d'))
-#
-#
-# class Feedback(models.Model):
-#     """
-#     Feedback, suggestion or criticism on any aspect of SciPost.
-#     """
-#     VGM = models.ForeignKey(VGM, blank=True, null=True)
-#     by = models.ForeignKey(Contributor)
-#     date = models.DateField()
-#     feedback = models.TextField()
-#
-#     def __str__(self):
-#         return '%s: %s' % (self.by, self.feedback[:50])
-#
-#     def as_li(self):
-#         html = ('<div class="Feedback">'
-#                 '<h3><em>by {{ by }}</em></h3>'
-#                 '<p>{{ feedback|linebreaks }}</p>'
-#                 '</div>')
-#         context = Context({
-#             'feedback': self.feedback,
-#             'by': '%s %s' % (self.by.user.first_name,
-#                              self.by.user.last_name)})
-#         template = Template(html)
-#         return template.render(context)
-#
-#
-# class Nomination(models.Model):
-#     """
-#     Nomination to an Editorial Fellowship.
-#     """
-#     VGM = models.ForeignKey(VGM, blank=True, null=True)
-#     by = models.ForeignKey(Contributor)
-#     date = models.DateField()
-#     first_name = models.CharField(max_length=30, default='')
-#     last_name = models.CharField(max_length=30, default='')
-#     discipline = models.CharField(max_length=20, choices=SCIPOST_DISCIPLINES,
-#                                   default='physics', verbose_name='Main discipline')
-#     expertises = ChoiceArrayField(
-#         models.CharField(max_length=10, choices=SCIPOST_SUBJECT_AREAS),
-#         blank=True, null=True)
-#     webpage = models.URLField(default='')
-#     nr_A = models.PositiveIntegerField(default=0)
-#     in_agreement = models.ManyToManyField(Contributor,
-#                                           related_name='in_agreement_with_nomination', blank=True)
-#     nr_N = models.PositiveIntegerField(default=0)
-#     in_notsure = models.ManyToManyField(Contributor,
-#                                         related_name='in_notsure_with_nomination', blank=True)
-#     nr_D = models.PositiveIntegerField(default=0)
-#     in_disagreement = models.ManyToManyField(Contributor,
-#                                              related_name='in_disagreement_with_nomination',
-#                                              blank=True)
-#     voting_deadline = models.DateTimeField('voting deadline', default=timezone.now)
-#     accepted = models.NullBooleanField()
-#
-#     def __str__(self):
-#         return '%s %s (nominated by %s)' % (self.first_name,
-#                                             self.last_name,
-#                                             self.by)
-#
-#     def as_li(self):
-#         html = ('<div class="Nomination" id="nomination_id{{ nomination_id }}" '
-#                 'style="background-color: #eeeeee;">'
-#                 '<div class="row">'
-#                 '<div class="col-4">'
-#                 '<h3><em> {{ name }}</em></h3>'
-#                 '<p>Nominated by {{ proposer }}</p>'
-#                 '</div>'
-#                 '<div class="col-4">'
-#                 '<p><a href="{{ webpage }}">Webpage</a></p>'
-#                 '<p>Discipline: {{ discipline }}</p></div>'
-#                 '<div class="col-4"><p>expertise:<ul>')
-#         for exp in self.expertises:
-#             html += '<li>%s</li>' % subject_areas_dict[exp]
-#         html += '</ul></div></div></div>'
-#         context = Context({
-#             'nomination_id': self.id,
-#             'proposer': '%s %s' % (self.by.user.first_name,
-#                                    self.by.user.last_name),
-#             'name': self.first_name + ' ' + self.last_name,
-#             'discipline': disciplines_dict[self.discipline],
-#             'webpage': self.webpage,
-#         })
-#         template = Template(html)
-#         return template.render(context)
-#
-#     def votes_as_ul(self):
-#         template = Template('''
-#         <ul class="opinionsDisplay">
-#         <li style="background-color: #000099">Agree {{ nr_A }}</li>
-#         <li style="background-color: #555555">Abstain {{ nr_N }}</li>
-#         <li style="background-color: #990000">Disagree {{ nr_D }}</li>
-#         </ul>
-#         ''')
-#         context = Context({'nr_A': self.nr_A, 'nr_N': self.nr_N, 'nr_D': self.nr_D})
-#         return template.render(context)
-#
-#     def update_votes(self, contributor_id, vote):
-#         contributor = get_object_or_404(Contributor, pk=contributor_id)
-#         self.in_agreement.remove(contributor)
-#         self.in_notsure.remove(contributor)
-#         self.in_disagreement.remove(contributor)
-#         if vote == 'A':
-#             self.in_agreement.add(contributor)
-#         elif vote == 'N':
-#             self.in_notsure.add(contributor)
-#         elif vote == 'D':
-#             self.in_disagreement.add(contributor)
-#         self.nr_A = self.in_agreement.count()
-#         self.nr_N = self.in_notsure.count()
-#         self.nr_D = self.in_disagreement.count()
-#         self.save()
-#
-#
-# MOTION_CATEGORIES = (
-#     ('ByLawAmend', 'Amendments to by-laws'),
-#     ('Workflow', 'Editorial workflow improvements'),
-#     ('General', 'General'),
-# )
-# motion_categories_dict = dict(MOTION_CATEGORIES)
-#
-#
-# class Motion(models.Model):
-#     """
-#     Motion instances are put forward to the Advisory Board and Editorial College
-#     and detail suggested changes to rules, procedures etc.
-#     They are meant to be voted on at the annual VGM.
-#     """
-#     category = models.CharField(max_length=10, choices=MOTION_CATEGORIES,
-#                                 default='General')
-#     VGM = models.ForeignKey(VGM, blank=True, null=True)
-#     background = models.TextField()
-#     motion = models.TextField()
-#     put_forward_by = models.ForeignKey(Contributor)
-#     date = models.DateField()
-#     nr_A = models.PositiveIntegerField(default=0)
-#     in_agreement = models.ManyToManyField(Contributor,
-#                                           related_name='in_agreement_with_motion', blank=True)
-#     nr_N = models.PositiveIntegerField(default=0)
-#     in_notsure = models.ManyToManyField(Contributor,
-#                                         related_name='in_notsure_with_motion', blank=True)
-#     nr_D = models.PositiveIntegerField(default=0)
-#     in_disagreement = models.ManyToManyField(Contributor,
-#                                              related_name='in_disagreement_with_motion',
-#                                              blank=True)
-#     voting_deadline = models.DateTimeField('voting deadline', default=timezone.now)
-#     accepted = models.NullBooleanField()
-#
-#     def __str__(self):
-#         return self.motion[:32]
-#
-#     def as_li(self):
-#         html = ('<div class="Motion" id="motion_id{{ motion_id }}">'
-#                 '<h3><em>Motion {{ motion_id }}, put forward by {{ proposer }}</em></h3>'
-#                 '<h3>Background:</h3><p>{{ background|linebreaks }}</p>'
-#                 '<h3>Motion:</h3>'
-#                 '<div class="flex-container"><div class="flex-greybox">'
-#                 '<p style="background-color: #eeeeee;">{{ motion|linebreaks }}</p>'
-#                 '</div></div>'
-#                 '</div>')
-#         context = Context({
-#             'motion_id': self.id,
-#             'proposer': '%s %s' % (self.put_forward_by.user.first_name,
-#                                    self.put_forward_by.user.last_name),
-#             'background': self.background,
-#             'motion': self.motion, })
-#         template = Template(html)
-#         return template.render(context)
-#
-#     def votes_as_ul(self):
-#         template = Template('''
-#         <ul class="opinionsDisplay">
-#         <li style="background-color: #000099">Agree {{ nr_A }}</li>
-#         <li style="background-color: #555555">Abstain {{ nr_N }}</li>
-#         <li style="background-color: #990000">Disagree {{ nr_D }}</li>
-#         </ul>
-#         ''')
-#         context = Context({'nr_A': self.nr_A, 'nr_N': self.nr_N, 'nr_D': self.nr_D})
-#         return template.render(context)
-#
-#     def update_votes(self, contributor_id, vote):
-#         contributor = get_object_or_404(Contributor, pk=contributor_id)
-#         self.in_agreement.remove(contributor)
-#         self.in_notsure.remove(contributor)
-#         self.in_disagreement.remove(contributor)
-#         if vote == 'A':
-#             self.in_agreement.add(contributor)
-#         elif vote == 'N':
-#             self.in_notsure.add(contributor)
-#         elif vote == 'D':
-#             self.in_disagreement.add(contributor)
-#         self.nr_A = self.in_agreement.count()
-#         self.nr_N = self.in_notsure.count()
-#         self.nr_D = self.in_disagreement.count()
-#         self.save()
-
-
 #########
 # Lists #
 #########
diff --git a/scipost/templates/scipost/navbar.html b/scipost/templates/scipost/navbar.html
index 04cce9fedff90383eb8df8bf20fd99d4fdc1d979..29161549ed69fbbefbb3dd886868c413b44f1f65 100644
--- a/scipost/templates/scipost/navbar.html
+++ b/scipost/templates/scipost/navbar.html
@@ -38,9 +38,8 @@
       {% endif %}
 
     </ul>
-    <form action="{% url 'scipost:search' %}" method="post" class="form-inline">
-        {% csrf_token %}
-        {{ search_form }}
+    <form action="{% url 'scipost:search' %}" method="get" class="form-inline">
+        <input class="form-control mr-0 mb-2 mr-lg-2 mb-lg-0" id="id_q" maxlength="100" name="q" type="text" required="">
       <button class="btn btn-primary" type="submit">Search</button>
     </form>
   </div>
diff --git a/scipost/templates/scipost/personal_page.html b/scipost/templates/scipost/personal_page.html
index 151c11eb9e901a98ddaf2ab62aa65d523e5e31aa..2506e6f5f49f8fddd69695fc4e08fee6b2a39079 100644
--- a/scipost/templates/scipost/personal_page.html
+++ b/scipost/templates/scipost/personal_page.html
@@ -87,7 +87,7 @@
 
 {% block content %}
 
-{% if not request.user|is_in_group:'Registered Contributors' %}
+{% if 'Registered Contributors' not in user_groups %}
 <div class="row">
     <div class="col-12">
       <hr class="hr12">
@@ -110,7 +110,7 @@
     <div class="col-12">
         <ul class="personalTabMenu">
             <li><a class="TabItem" id="AccountTab">Account</a></li>
-            {% if request.user|is_in_group:'Editorial Administrators' or request.user|is_in_group:'Advisory Board' or request.user|is_in_group:'Editorial College' or request.user|is_in_group:'Vetting Editors' or request.user|is_in_group:'Ambassadors' or request.user|is_in_group:'Junior Ambassadors' %}
+            {% if 'Editorial Administrators' not in user_groups or 'Advisory Board' not in user_groups or 'Editorial College' not in user_groups or 'Vetting Editors' not in user_groups or 'Ambassadors' not in user_groups or 'Junior Ambassadors' not in user_groups %}
                 <li><a class="TabItem" id="EdActionTab">Editorial Actions</a></li>
             {% endif %}
             <li><a class="TabItem" id="RefereeingTab">Refereeing</a></li>
@@ -119,13 +119,13 @@
             <li><a class="TabItem" id="ThesesTab">Theses</a></li>
             <li><a class="TabItem" id="CommentsTab">Comments</a></li>
             <li><a class="TabItem" id="AuthorRepliesTab">Author Replies</a></li>
-            {% if request.user|is_in_group:'Testers' %}
+            {% if 'Testers' in user_groups %}
                 <li><a class="TabItem" id="ListsTab">Lists</a></li>
             {% endif %}
-            {% if request.user|is_in_group:'Testers' %}
+            {% if 'Testers' in user_groups %}
                 <li><a class="TabItem" id="TeamsTab">Teams</a></li>
             {% endif %}
-            {% if request.user|is_in_group:'Testers' %}
+            {% if 'Testers' in user_groups %}
                 <li><a class="TabItem" id="GraphsTab">Graphs</a></li>
             {% endif %}
         </ul>
@@ -160,31 +160,31 @@
             {% endif %}
         </div>
         <div class="col-md-6">
-            {% if request.user|is_in_group:'SciPost Administrators' %}
+            {% if 'SciPost Administrators' in user_groups %}
                 <h3>You are a SciPost Administrator.</h3>
             {% endif %}
-            {% if request.user|is_in_group:'Editorial Administrators' %}
+            {% if 'Editorial Administrators' in user_groups %}
                 <h3>You are a SciPost Editorial Administrator.</h3>
             {% endif %}
-            {% if request.user|is_in_group:'Advisory Board' %}
+            {% if 'Advisory Board' in user_groups %}
                 <h3>You are a member of the Advisory Board.</h3>
             {% endif %}
-            {% if request.user|is_in_group:'Editorial College' %}
+            {% if 'Editorial College' in user_groups %}
                 <h3>You are a member of the Editorial College.</h3>
             {% endif %}
-            {% if request.user|is_in_group:'Vetting Editors' %}
+            {% if 'Vetting Editors' in user_groups %}
                 <h3>You are a SciPost Vetting Editor.</h3>
             {% endif %}
-            {% if request.user|is_in_group:'Registered Contributors' %}
+            {% if 'Registered Contributors' in user_groups %}
                 <h3>You are a Registered Contributor.</h3>
             {% endif %}
-            {% if request.user|is_in_group:'Testers' %}
+            {% if 'Testers' in user_groups %}
                 <h3>You are a SciPost Tester.</h3>
             {% endif %}
-            {% if request.user|is_in_group:'Ambassadors' %}
+            {% if 'Ambassadors' in user_groups %}
                 <h3>You are a SciPost Ambassador.</h3>
             {% endif %}
-            {% if request.user|is_in_group:'Junior Ambassadors' %}
+            {% if 'Junior Ambassadors' in user_groups %}
                 <h3>You are a SciPost Junior Ambassador.</h3>
             {% endif %}
 
@@ -239,7 +239,7 @@
 </div>
 
 
-{% if request.user|is_in_group:'SciPost Administrators' or request.user|is_in_group:'Editorial Administrators' or request.user|is_in_group:'Editorial College' or request.user|is_in_group:'Vetting Editors' or request.user|is_in_group:'Ambassadors' or request.user|is_in_group:'Junior Ambassadors' %}
+{% if 'SciPost Administrators' in user_groups or 'Editorial Administrators' in user_groups or 'Editorial College' in user_groups or 'Vetting Editors' in user_groups or 'Ambassadors' in user_groups or 'Junior Ambassadors' in user_groups %}
 <div class="TabSection" id="EdActions">
 
     <div class="row">
@@ -251,7 +251,7 @@
     </div>
 
     <div class="row">
-        {% if request.user|is_in_group:'SciPost Administrators' or request.user|is_in_group:'Advisory Board' or request.user|is_in_group:'Ambassadors' or request.user|is_in_group:'Junior Ambassadors' %}
+        {% if 'SciPost Administrators' in user_groups or 'Advisory Board' in user_groups or 'Ambassadors' in user_groups or 'Junior Ambassadors' in user_groups %}
         <div class="col-md-4">
             <h3>Registration actions</h3>
             <ul>
@@ -315,7 +315,7 @@
             {% endif %}
         </div>
 
-        {% if request.user|is_in_group:'Editorial Administrators' or request.user|is_in_group:'Editorial College' %}
+        {% if 'Editorial Administrators' in user_groups or 'Editorial College' in user_groups %}
         <div class="col-md-4">
             <h3>Info</h3>
             <ul>
@@ -380,7 +380,7 @@
             {% for task in pending_ref_tasks %}
                 <li>{{ task.submission }}, due {{ task.submission.reporting_deadline }}. &nbsp;
                     <a href="{% url 'submissions:submit_report' arxiv_identifier_w_vn_nr=task.submission.arxiv_identifier_w_vn_nr %}">Submit your Report</a> &nbsp;
-                    <a href="{% url 'submissions:communication' arxiv_identifier_w_vn_nr=task.submission.arxiv_identifier_w_vn_nr comtype='RtoE' referee_id=request.user.contributor.id %}">Write to the Editor-in-charge</a>.
+                    <a href="{% url 'submissions:communication' arxiv_identifier_w_vn_nr=task.submission.arxiv_identifier_w_vn_nr comtype='RtoE' referee_id=contributor.user.contributor.id %}">Write to the Editor-in-charge</a>.
                 </li>
             {% endfor %}
             </ul>
@@ -411,7 +411,7 @@
             <ul class="mt-3">
                 {% for sub in own_submissions %}
                     {{ sub.header_as_li_for_authors }}
-                    {% if request.user.contributor == sub.submitted_by %}
+                    {% if contributor.user.contributor == sub.submitted_by %}
                         <p><a href="{% url 'submissions:communication' arxiv_identifier_w_vn_nr=sub.arxiv_identifier_w_vn_nr comtype='AtoE' %}">Write to the Editor-in-charge</a>.</p>
                     {% endif %}
                 {% endfor %}
diff --git a/scipost/templates/scipost/search.html b/scipost/templates/scipost/search.html
index 050dbafd542fae2959975c7f27117d6c7cece837..911e4686ed965a1f8a4ebb054ac3e25b8a0adcaa 100644
--- a/scipost/templates/scipost/search.html
+++ b/scipost/templates/scipost/search.html
@@ -2,125 +2,171 @@
 
 {% block pagetitle %}: list{% endblock pagetitle %}
 
-{% block headsup %}
-
-{% endblock headsup %}
-
-{% block bodysup %}
-
-
-<section>
-  <h1>Search results</h1>
-
-  {% if publication_search_list or commentary_search_list or submission_search_list or thesislink_search_list or comment_search_link %}
-  {% else %}
-  <p>Your search query did not return any result.</p>
-  {% endif %}
-
-  {% if publication_search_list %}
-  <br />
-  <hr class="hr12">
-  <h3>Publications:</h3>
-
-  <ul>
-    {% for publication in publication_search_list %}
-    {{ publication.header_as_li }}
-    {% endfor %}
-  </ul>
-
-  <div class="pagination">
-    <span class="step-links">
-      {% if publication_search_list.has_previous %}
-      <a href="?publication_search_list_page={{ publication_search_list.previous_page_number }}">previous</a>
-      {% endif %}
-      <span class="current">
-	Page {{ publication_search_list.number }} of {{ publication_search_list.paginator.num_pages }}.
-      </span>
-      {% if publication_search_list.has_next %}
-      <a href="?publication_search_list_page={{ publication_search_list.next_page_number }}">next</a>
-      {% endif %}
-    </span>
-  </div>
-
-  {% endif %}
-
-
-  {% if commentary_search_list %}
-  <br />
-  <hr class="hr12">
-  <h3>Commentaries:</h3>
-
-  <ul>
-    {% for commentary in commentary_search_list %}
-    {{ commentary.header_as_li }}
-    {% endfor %}
-  </ul>
-
-  <div class="pagination">
-    <span class="step-links">
-      {% if commentary_search_list.has_previous %}
-      <a href="?commentary_search_list_page={{ commentary_search_list.previous_page_number }}">previous</a>
-      {% endif %}
-      <span class="current">
-	Page {{ commentary_search_list.number }} of {{ commentary_search_list.paginator.num_pages }}.
-      </span>
-      {% if commentary_search_list.has_next %}
-      <a href="?commentary_search_list_page={{ commentary_search_list.next_page_number }}">next</a>
-      {% endif %}
-    </span>
-  </div>
-
-  {% endif %}
-
-
-  {% if submission_search_list %}
-  <br />
-  <hr class="hr12">
-  <h3>Submissions:</h3>
-  <ul>
-    {% for submission in submission_search_list %}
-    {{ submission.header_as_li }}
-    {% endfor %}
-  </ul>
-
-  <div class="pagination">
-    <span class="step-links">
-      {% if submission_search_list.has_previous %}
-      <a href="?submission_search_list_page={{ submission_search_list.previous_page_number }}">previous</a>
-      {% endif %}
-      <span class="current">
-	Page {{ submission_search_list.number }} of {{ submission_search_list.paginator.num_pages }}
-      </span>
-      {% if submission_search_list.has_next %}
-      <a href="?submission_search_list_page={{ submission_search_list.next_page_number }}">next</a>
-      {% endif %}
-    </span>
-  </div>
-
-  {% endif %}
-
-  {% if thesislink_search_list %}
-  <br />
-  <hr class="hr12">
-  <h3>Theses:</h3>
-  <ul>
-    {% for thesislink in thesislink_search_list %}
-        {% include 'theses/_thesislink_header_as_li.html' with thesislink=thesislink %}
-    {% endfor %}
-  </ul>
-  {% endif %}
-
-  {% if comment_search_list %}
-  <br />
-  <hr class="hr12">
-  <h3>Comments:</h3>
-  <ul>
-    {% for comment in comment_search_list %}
-    {{ comment.header_as_li }}
-    {% endfor %}
-  </ul>
-  {% endif %}
-
-</section>
-
-{% endblock bodysup %}
+{% block content %}
+
+<div class="row">
+    <div class="col-12">
+        <h1>Search results{% if search_term %}: <small><i>{{ search_term }}</i></small>{% endif %}</h1>
+        {% if not publication_search_list and not commentary_search_list and not submission_search_list and not thesislink_search_list and not comment_search_link and not comment_search_list %}
+            <p>Your search query did not return any result.</p>
+        {% endif %}
+    </div>
+</div>
+
+{% if publication_search_list %}
+<hr>
+<div class="row">
+    <div class="col-12">
+        <div class="panel">
+            <h2>Publications</h2>
+        </div>
+    </div>
+</div>
+
+<div class="row">
+    <div class="col-12">
+        {% for publication in publication_search_list %}
+            {{ publication.header_as_li }}
+        {% endfor %}
+    </div>
+</div>
+
+<div class="row">
+    <div class="col-12">
+          <div class="pagination">
+            <span class="step-links">
+              {% if publication_search_list.has_previous %}
+              <a href="?publication_search_list_page={{ publication_search_list.previous_page_number }}">previous</a>
+              {% endif %}
+              <span class="current">
+        	Page {{ publication_search_list.number }} of {{ publication_search_list.paginator.num_pages }}.
+              </span>
+              {% if publication_search_list.has_next %}
+              <a href="?publication_search_list_page={{ publication_search_list.next_page_number }}">next</a>
+              {% endif %}
+            </span>
+          </div>
+
+    </div>
+</div>
+{% endif %}
+
+
+{% if commentary_search_list %}
+<hr>
+<div class="row">
+    <div class="col-12">
+        <div class="panel">
+            <h2>Commentaries</h2>
+        </div>
+    </div>
+</div>
+<div class="row">
+    <div class="col-12">
+        <ul>
+            {% for commentary in commentary_search_list %}
+                {{ commentary.header_as_li }}
+            {% endfor %}
+        </ul>
+    </div>
+</div>
+
+<div class="row">
+    <div class="col-12">
+          <div class="pagination">
+            <span class="step-links">
+              {% if commentary_search_list.has_previous %}
+              <a href="?commentary_search_list_page={{ commentary_search_list.previous_page_number }}">previous</a>
+              {% endif %}
+              <span class="current">
+        	Page {{ commentary_search_list.number }} of {{ commentary_search_list.paginator.num_pages }}.
+              </span>
+              {% if commentary_search_list.has_next %}
+              <a href="?commentary_search_list_page={{ commentary_search_list.next_page_number }}">next</a>
+              {% endif %}
+            </span>
+          </div>
+
+    </div>
+</div>
+{% endif %}
+
+
+{% if submission_search_list %}
+<hr>
+<div class="row">
+    <div class="col-12">
+        <div class="panel">
+            <h2>Submissions</h2>
+        </div>
+    </div>
+</div>
+<div class="row">
+    <div class="col-12">
+        <ul>
+            {% for submission in submission_search_list %}
+            {{ submission.header_as_li }}
+            {% endfor %}
+        </ul>
+    </div>
+</div>
+
+<div class="row">
+    <div class="col-12">
+      <div class="pagination">
+        <span class="step-links">
+          {% if submission_search_list.has_previous %}
+          <a href="?submission_search_list_page={{ submission_search_list.previous_page_number }}">previous</a>
+          {% endif %}
+          <span class="current">
+    	Page {{ submission_search_list.number }} of {{ submission_search_list.paginator.num_pages }}
+          </span>
+          {% if submission_search_list.has_next %}
+          <a href="?submission_search_list_page={{ submission_search_list.next_page_number }}">next</a>
+          {% endif %}
+        </span>
+      </div>
+    </div>
+</div>
+{% endif %}
+
+{% if thesislink_search_list %}
+<hr>
+<div class="row">
+    <div class="col-12">
+        <div class="panel">
+            <h2>Theses</h2>
+        </div>
+    </div>
+</div>
+<div class="row">
+    <div class="col-12">
+          <ul>
+            {% for thesislink in thesislink_search_list %}
+                {% include 'theses/_thesislink_header_as_li.html' with thesislink=thesislink %}
+            {% endfor %}
+          </ul>
+          {% endif %}
+
+          {% if comment_search_list %}
+          <div class="row">
+              <div class="col-12">
+                  <div class="panel">
+                      <h2>Comments</h2>
+                  </div>
+              </div>
+          </div>
+          <div class="row">
+              <div class="col-12">
+                  <ul>
+                    {% for comment in comment_search_list %}
+                        {{ comment.header_as_li }}
+                    {% endfor %}
+                  </ul>
+              </div>
+          </div>
+          {% endif %}
+    </div>
+</div>
+
+{% endblock content %}
diff --git a/scipost/templatetags/scipost_extras.py b/scipost/templatetags/scipost_extras.py
index 3a34f87e76bc8559d8943d360f43469a14860f95..40863a5f2d987024c06caeb3c480f2477293a174 100644
--- a/scipost/templatetags/scipost_extras.py
+++ b/scipost/templatetags/scipost_extras.py
@@ -21,8 +21,7 @@ def sort_by(queryset, order):
 
 @register.filter(name='is_in_group')
 def is_in_group(user, group_name):
-    group = Group.objects.get(name=group_name)
-    return True if group in user.groups.all() else False
+    return user.groups.filter(name=group_name).exists()
 
 
 @register.filter(name='associated_contributors')
diff --git a/scipost/views.py b/scipost/views.py
index b9a114a8d8bcc5a83b3f35f3826d56bd722ce073..295f62b52a930e54af13098bbcc530adb54e488e 100644
--- a/scipost/views.py
+++ b/scipost/views.py
@@ -153,17 +153,15 @@ def documentsSearchResults(query):
 
 def search(request):
     """ For the global search form in navbar """
-    if request.method == 'POST':
-        form = SearchForm(request.POST)
-        if form.is_valid():
-            context = documentsSearchResults(form.cleaned_data['query'])
-            request.session['query'] = form.cleaned_data['query']
-        else:
-            context = {}
+    form = SearchForm(request.GET or None)
+    context = {}
+    if form.is_valid():
+        context = documentsSearchResults(form.cleaned_data['q'])
+        request.session['query'] = form.cleaned_data['q']
+        context['search_term'] = form.cleaned_data['q']
     elif 'query' in request.session:
-            context = documentsSearchResults(request.session['query'])
-    else:
-        context = {}
+        context = documentsSearchResults(request.session['query'])
+        context['search_term'] = request.session['query']
 
     if 'publication_search_queryset' in context:
         publication_search_list_paginator = Paginator(context['publication_search_queryset'], 10)
@@ -937,137 +935,135 @@ def mark_unavailable_period(request):
     return redirect('scipost:personal_page')
 
 
+@login_required
 def personal_page(request):
     """
     The Personal Page is the main view for accessing user functions.
     """
-    if request.user.is_authenticated():
-        contributor = Contributor.objects.get(user=request.user)
-
-        # Compile the unavailability periods:
-        now = timezone.now()
-        unavailabilities = UnavailabilityPeriod.objects.filter(
-            contributor=contributor).exclude(end__lt=now).order_by('start')
-        unavailability_form = UnavailabilityPeriodForm()
-
-        # if an editor, count the number of actions required:
-        nr_reg_to_vet = 0
-        nr_reg_awaiting_validation = 0
-        nr_submissions_to_assign = 0
-        nr_recommendations_to_prepare_for_voting = 0
-        if is_SP_Admin(request.user):
-            intwodays = now + timezone.timedelta(days=2)
-
-            # count the number of pending registration requests
-            nr_reg_to_vet = Contributor.objects.filter(user__is_active=True, status=0).count()
-            nr_reg_awaiting_validation = Contributor.objects.filter(
-                user__is_active=False, key_expires__gte=now,
-                key_expires__lte=intwodays, status=0).count()
-            nr_submissions_to_assign = Submission.objects.filter(status__in=['unassigned']).count()
-            nr_recommendations_to_prepare_for_voting = EICRecommendation.objects.filter(
-                submission__status__in=['voting_in_preparation']).count()
-        nr_assignments_to_consider = 0
-        active_assignments = None
-        nr_reports_to_vet = 0
-        if is_MEC(request.user):
-            nr_assignments_to_consider = (EditorialAssignment.objects
-                                          .filter(to=contributor, accepted=None, deprecated=False)
+    contributor = Contributor.objects.select_related('user').get(user=request.user)
+    user_groups = contributor.user.groups.values_list('name', flat=True)
+
+    # Compile the unavailability periods:
+    now = timezone.now()
+    unavailabilities = UnavailabilityPeriod.objects.filter(
+        contributor=contributor).exclude(end__lt=now).order_by('start')
+    unavailability_form = UnavailabilityPeriodForm()
+
+    # if an editor, count the number of actions required:
+    nr_reg_to_vet = 0
+    nr_reg_awaiting_validation = 0
+    nr_submissions_to_assign = 0
+    nr_recommendations_to_prepare_for_voting = 0
+    if is_SP_Admin(contributor.user):
+        intwodays = now + timezone.timedelta(days=2)
+
+        # count the number of pending registration requests
+        nr_reg_to_vet = Contributor.objects.filter(user__is_active=True, status=0).count()
+        nr_reg_awaiting_validation = Contributor.objects.filter(
+            user__is_active=False, key_expires__gte=now,
+            key_expires__lte=intwodays, status=0).count()
+        nr_submissions_to_assign = Submission.objects.filter(status__in=['unassigned']).count()
+        nr_recommendations_to_prepare_for_voting = EICRecommendation.objects.filter(
+            submission__status__in=['voting_in_preparation']).count()
+    nr_assignments_to_consider = 0
+    active_assignments = None
+    nr_reports_to_vet = 0
+    if is_MEC(contributor.user):
+        nr_assignments_to_consider = (EditorialAssignment.objects
+                                      .filter(to=contributor, accepted=None, deprecated=False)
+                                      .count())
+        active_assignments = EditorialAssignment.objects.filter(
+            to=contributor, accepted=True, completed=False)
+        nr_reports_to_vet = Report.objects.filter(
+            status=0, submission__editor_in_charge=contributor).count()
+    nr_commentary_page_requests_to_vet = 0
+    nr_comments_to_vet = 0
+    nr_thesislink_requests_to_vet = 0
+    nr_authorship_claims_to_vet = 0
+    if is_VE(request.user):
+        nr_commentary_page_requests_to_vet = Commentary.objects.filter(vetted=False).count()
+        nr_comments_to_vet = Comment.objects.filter(status=0).count()
+        nr_thesislink_requests_to_vet = ThesisLink.objects.filter(vetted=False).count()
+        nr_authorship_claims_to_vet = AuthorshipClaim.objects.filter(status='0').count()
+    nr_ref_inv_to_consider = RefereeInvitation.objects.filter(
+        referee=contributor, accepted=None, cancelled=False).count()
+    pending_ref_tasks = RefereeInvitation.objects.filter(
+        referee=contributor, accepted=True, fulfilled=False)
+    # Verify if there exist objects authored by this contributor,
+    # whose authorship hasn't been claimed yet
+    own_submissions = (Submission.objects
+                       .filter(authors__in=[contributor], is_current=True)
+                       .order_by('-submission_date'))
+    own_commentaries = (Commentary.objects
+                        .filter(authors__in=[contributor])
+                        .order_by('-latest_activity'))
+    own_thesislinks = ThesisLink.objects.filter(author_as_cont__in=[contributor])
+    nr_submission_authorships_to_claim = (Submission.objects.filter(
+        author_list__contains=contributor.user.last_name)
+                                          .exclude(authors__in=[contributor])
+                                          .exclude(authors_claims__in=[contributor])
+                                          .exclude(authors_false_claims__in=[contributor])
                                           .count())
-            active_assignments = EditorialAssignment.objects.filter(
-                to=contributor, accepted=True, completed=False)
-            nr_reports_to_vet = Report.objects.filter(
-                status=0, submission__editor_in_charge=contributor).count()
-        nr_commentary_page_requests_to_vet = 0
-        nr_comments_to_vet = 0
-        nr_thesislink_requests_to_vet = 0
-        nr_authorship_claims_to_vet = 0
-        if is_VE(request.user):
-            nr_commentary_page_requests_to_vet = Commentary.objects.filter(vetted=False).count()
-            nr_comments_to_vet = Comment.objects.filter(status=0).count()
-            nr_thesislink_requests_to_vet = ThesisLink.objects.filter(vetted=False).count()
-            nr_authorship_claims_to_vet = AuthorshipClaim.objects.filter(status='0').count()
-        nr_ref_inv_to_consider = RefereeInvitation.objects.filter(
-            referee=contributor, accepted=None, cancelled=False).count()
-        pending_ref_tasks = RefereeInvitation.objects.filter(
-            referee=contributor, accepted=True, fulfilled=False)
-        # Verify if there exist objects authored by this contributor,
-        # whose authorship hasn't been claimed yet
-        own_submissions = (Submission.objects
-                           .filter(authors__in=[contributor], is_current=True)
-                           .order_by('-submission_date'))
-        own_commentaries = (Commentary.objects
-                            .filter(authors__in=[contributor])
-                            .order_by('-latest_activity'))
-        own_thesislinks = ThesisLink.objects.filter(author_as_cont__in=[contributor])
-        nr_submission_authorships_to_claim = (Submission.objects.filter(
-            author_list__contains=contributor.user.last_name)
-                                              .exclude(authors__in=[contributor])
-                                              .exclude(authors_claims__in=[contributor])
-                                              .exclude(authors_false_claims__in=[contributor])
-                                              .count())
-        nr_commentary_authorships_to_claim = (Commentary.objects.filter(
-            author_list__contains=contributor.user.last_name)
-                                              .exclude(authors__in=[contributor])
-                                              .exclude(authors_claims__in=[contributor])
-                                              .exclude(authors_false_claims__in=[contributor])
-                                              .count())
-        nr_thesis_authorships_to_claim = (ThesisLink.objects.filter(
-            author__contains=contributor.user.last_name)
-                                          .exclude(author_as_cont__in=[contributor])
-                                          .exclude(author_claims__in=[contributor])
-                                          .exclude(author_false_claims__in=[contributor])
+    nr_commentary_authorships_to_claim = (Commentary.objects.filter(
+        author_list__contains=contributor.user.last_name)
+                                          .exclude(authors__in=[contributor])
+                                          .exclude(authors_claims__in=[contributor])
+                                          .exclude(authors_false_claims__in=[contributor])
                                           .count())
-        own_comments = (Comment.objects
-                        .filter(author=contributor, is_author_reply=False)
-                        .order_by('-date_submitted'))
-        own_authorreplies = (Comment.objects
-                             .filter(author=contributor, is_author_reply=True)
-                             .order_by('-date_submitted'))
-        lists_owned = List.objects.filter(owner=contributor)
-        lists = List.objects.filter(teams_with_access__members__in=[contributor])
-        teams_led = Team.objects.filter(leader=contributor)
-        teams = Team.objects.filter(members__in=[contributor])
-        graphs_owned = Graph.objects.filter(owner=contributor)
-        graphs_private = Graph.objects.filter(Q(teams_with_access__leader=contributor)
-                                              | Q(teams_with_access__members__in=[contributor]))
-        appellation = title_dict[contributor.title] + ' ' + contributor.user.last_name
-        context = {
-            'contributor': contributor,
-            'appellation': appellation,
-            'unavailabilities': unavailabilities,
-            'unavailability_form': unavailability_form,
-            'nr_reg_to_vet': nr_reg_to_vet,
-            'nr_reg_awaiting_validation': nr_reg_awaiting_validation,
-            'nr_commentary_page_requests_to_vet': nr_commentary_page_requests_to_vet,
-            'nr_comments_to_vet': nr_comments_to_vet,
-            'nr_thesislink_requests_to_vet': nr_thesislink_requests_to_vet,
-            'nr_authorship_claims_to_vet': nr_authorship_claims_to_vet,
-            'nr_reports_to_vet': nr_reports_to_vet,
-            'nr_submissions_to_assign': nr_submissions_to_assign,
-            'nr_recommendations_to_prepare_for_voting': nr_recommendations_to_prepare_for_voting,
-            'nr_assignments_to_consider': nr_assignments_to_consider,
-            'active_assignments': active_assignments,
-            'nr_submission_authorships_to_claim': nr_submission_authorships_to_claim,
-            'nr_commentary_authorships_to_claim': nr_commentary_authorships_to_claim,
-            'nr_thesis_authorships_to_claim': nr_thesis_authorships_to_claim,
-            'nr_ref_inv_to_consider': nr_ref_inv_to_consider,
-            'pending_ref_tasks': pending_ref_tasks,
-            'own_submissions': own_submissions,
-            'own_commentaries': own_commentaries,
-            'own_thesislinks': own_thesislinks,
-            'own_comments': own_comments, 'own_authorreplies': own_authorreplies,
-            'lists_owned': lists_owned,
-            'lists': lists,
-            'teams_led': teams_led,
-            'teams': teams,
-            'graphs_owned': graphs_owned,
-            'graphs_private': graphs_private,
-        }
-        return render(request, 'scipost/personal_page.html', context)
-    else:
-        form = AuthenticationForm()
-        context = {'form': form}
-        return render(request, 'scipost/login.html', context)
+    nr_thesis_authorships_to_claim = (ThesisLink.objects.filter(
+        author__contains=contributor.user.last_name)
+                                      .exclude(author_as_cont__in=[contributor])
+                                      .exclude(author_claims__in=[contributor])
+                                      .exclude(author_false_claims__in=[contributor])
+                                      .count())
+    own_comments = (Comment.objects.select_related('author', 'submission')
+                    .filter(author=contributor, is_author_reply=False)
+                    .order_by('-date_submitted'))
+    own_authorreplies = (Comment.objects
+                         .filter(author=contributor, is_author_reply=True)
+                         .order_by('-date_submitted'))
+    lists_owned = List.objects.filter(owner=contributor)
+    lists = List.objects.filter(teams_with_access__members__in=[contributor])
+    teams_led = Team.objects.select_related('leader__user').filter(leader=contributor)
+    teams = Team.objects.select_related('leader__user').filter(members__in=[contributor])
+    graphs_owned = Graph.objects.filter(owner=contributor)
+    graphs_private = Graph.objects.filter(Q(teams_with_access__leader=contributor)
+                                          | Q(teams_with_access__members__in=[contributor]))
+    appellation = title_dict[contributor.title] + ' ' + contributor.user.last_name
+    context = {
+        'contributor': contributor,
+        'user_groups': user_groups,
+        'appellation': appellation,
+        'unavailabilities': unavailabilities,
+        'unavailability_form': unavailability_form,
+        'nr_reg_to_vet': nr_reg_to_vet,
+        'nr_reg_awaiting_validation': nr_reg_awaiting_validation,
+        'nr_commentary_page_requests_to_vet': nr_commentary_page_requests_to_vet,
+        'nr_comments_to_vet': nr_comments_to_vet,
+        'nr_thesislink_requests_to_vet': nr_thesislink_requests_to_vet,
+        'nr_authorship_claims_to_vet': nr_authorship_claims_to_vet,
+        'nr_reports_to_vet': nr_reports_to_vet,
+        'nr_submissions_to_assign': nr_submissions_to_assign,
+        'nr_recommendations_to_prepare_for_voting': nr_recommendations_to_prepare_for_voting,
+        'nr_assignments_to_consider': nr_assignments_to_consider,
+        'active_assignments': active_assignments,
+        'nr_submission_authorships_to_claim': nr_submission_authorships_to_claim,
+        'nr_commentary_authorships_to_claim': nr_commentary_authorships_to_claim,
+        'nr_thesis_authorships_to_claim': nr_thesis_authorships_to_claim,
+        'nr_ref_inv_to_consider': nr_ref_inv_to_consider,
+        'pending_ref_tasks': pending_ref_tasks,
+        'own_submissions': own_submissions,
+        'own_commentaries': own_commentaries,
+        'own_thesislinks': own_thesislinks,
+        'own_comments': own_comments, 'own_authorreplies': own_authorreplies,
+        'lists_owned': lists_owned,
+        'lists': lists,
+        'teams_led': teams_led,
+        'teams': teams,
+        'graphs_owned': graphs_owned,
+        'graphs_private': graphs_private,
+    }
+    return render(request, 'scipost/personal_page.html', context)
 
 
 @login_required
diff --git a/submissions/models.py b/submissions/models.py
index 8ca56af4a8d1d553d10b49041712a5eee45a5a53..7aea9adab2567057eb7c7753c025fa62f2e26c4b 100644
--- a/submissions/models.py
+++ b/submissions/models.py
@@ -634,7 +634,7 @@ class Report(models.Model):
     # -3: rejected (not useful)
     # -4: rejected (not academic in style)
     status = models.SmallIntegerField(default=0)
-    submission = models.ForeignKey(Submission, on_delete=models.CASCADE)
+    submission = models.ForeignKey(Submission, related_name='reports', on_delete=models.CASCADE)
     vetted_by = models.ForeignKey(Contributor, related_name="report_vetted_by",
                                   blank=True, null=True, on_delete=models.CASCADE)
     # `invited' filled from RefereeInvitation objects at moment of report submission
diff --git a/submissions/templatetags/submissions_extras.py b/submissions/templatetags/submissions_extras.py
index 7460a3c30745b62cf6f7ce4f29aff1f7bc5ab83b..b2b785c0357b7be546be77fe2a3eb0d1761022da 100644
--- a/submissions/templatetags/submissions_extras.py
+++ b/submissions/templatetags/submissions_extras.py
@@ -73,7 +73,7 @@ def required_actions(submission):
         todo.append('The refereeing deadline has passed. Please either extend it, '
                     'or formulate your Editorial Recommendation if at least '
                     'one Report has been received.')
-    reports = submission.report_set.all()
+    reports = submission.reports.all()
     for report in reports:
         if report.status == 0:
             todo.append('The Report from %s has been delivered but is not yet vetted. '
diff --git a/submissions/views.py b/submissions/views.py
index 2681da5f9dfafd7d11f42ee3bb6f18a085af8dc5..553e344673c0f4b4ddcf79b1c25bf4d19b2c8cc3 100644
--- a/submissions/views.py
+++ b/submissions/views.py
@@ -271,7 +271,10 @@ def submission_detail_wo_vn_nr(request, arxiv_identifier_wo_vn_nr):
 
 
 def submission_detail(request, arxiv_identifier_w_vn_nr):
-    submission = get_object_or_404(Submission, arxiv_identifier_w_vn_nr=arxiv_identifier_w_vn_nr)
+    submission = get_object_or_404(Submission.objects.select_related(
+                    'editor_in_charge', 'publication__in_issue__in_volume__in_journal'
+                    ).prefetch_related('authors'),
+                    arxiv_identifier_w_vn_nr=arxiv_identifier_w_vn_nr)
     try:
         is_author = request.user.contributor in submission.authors.all()
     except AttributeError:
@@ -288,7 +291,7 @@ def submission_detail(request, arxiv_identifier_w_vn_nr):
 
     form = CommentForm()
 
-    reports = submission.report_set.all()
+    reports = submission.reports.prefetch_related('reports')
     try:
         author_replies = Comment.objects.filter(submission=submission,
                                                 is_author_reply=True,