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/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 bae70ff6fd044e7bd82edca43986b8a76f1e450f..4340413767ecf50684c1963f63327d328c3b35ef 100644
--- a/scipost/views.py
+++ b/scipost/views.py
@@ -935,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