diff --git a/hypha/apply/dashboard/templates/dashboard/reviewer_dashboard.html b/hypha/apply/dashboard/templates/dashboard/reviewer_dashboard.html
index cb7979fcf906538f714e9002a8bde01a23598b4c..d7695db4c72bcb189e26197ecb9b4871004cbd9d 100644
--- a/hypha/apply/dashboard/templates/dashboard/reviewer_dashboard.html
+++ b/hypha/apply/dashboard/templates/dashboard/reviewer_dashboard.html
@@ -20,20 +20,22 @@
 <div class="wrapper wrapper--large wrapper--inner-space-medium">
 
     <div class="wrapper wrapper--bottom-space">
-        {% include "dashboard/includes/waiting-for-review.html" with in_review_count=in_review_count my_review=my_review display_more=display_more active_statuses_filter=active_statuses_filter %}
+        {% include "dashboard/includes/waiting-for-review.html" with in_review_count=awaiting_reviews.count my_review=awaiting_reviews.table display_more=awaiting_reviews.display_more active_statuses_filter=awaiting_reviews.active_statuses_filter %}
     </div>
 
     <div class="wrapper wrapper--bottom-space">
-        {% if my_reviewed.data %}
-            {% include "funds/includes/table_filter_and_search.html" with filter_form=filter_form search_term=search_term use_search=True use_batch_actions=False heading="Your previous reviews" %}
-            {% render_table my_reviewed %}
+        {% if my_reviewed.table.data %}
+            <div class="wrapper wrapper--bottom-space">
 
-            {% if display_more_reviewed %}
-                <div class="all-submissions-table__more">
-                    <a href="{% url 'apply:submissions:list' %}">Show all</a>
-                </div>
-            {% endif %}
+                {% include "funds/includes/table_filter_and_search.html" with filter=my_reviewed.filterset filter_action=my_reviewed.url search_term=search_term search_action=my_reviewed.url use_search=True use_batch_actions=False heading="Your previous reviews" %}
+                {% render_table my_reviewed.table %}
 
+                {% if my_reviewed.display_more %}
+                    <div class="all-submissions-table__more">
+                        <a href="{{ my_reviewed.url }}?reviewers={{ request.user.pk }}">Show all</a>
+                    </div>
+                {% endif %}
+            </div>
         {% endif %}
     </div>
 
diff --git a/hypha/apply/dashboard/views.py b/hypha/apply/dashboard/views.py
index 9ed14ac5fbf034544e7d86b1176afd423bf33626..2e8598c34a4a20e743b47dbfc846af0db2dbf71c 100644
--- a/hypha/apply/dashboard/views.py
+++ b/hypha/apply/dashboard/views.py
@@ -23,27 +23,62 @@ from hypha.apply.projects.tables import (
 from hypha.apply.utils.views import ViewDispatcher
 
 
+class MySubmissionContextMixin:
+    def get_context_data(self, **kwargs):
+        submissions = ApplicationSubmission.objects.all().for_table(self.request.user)
+        my_submissions = submissions.filter(
+            user=self.request.user
+        ).active().current().select_related('draft_revision')
+        my_submissions = [
+            submission.from_draft() for submission in my_submissions
+        ]
+
+        my_inactive_submissions = submissions.filter(user=self.request.user).inactive().current()
+        my_inactive_submissions_table = ReviewerSubmissionsTable(
+            my_inactive_submissions, prefix='my-submissions-'
+        )
+
+        return super().get_context_data(
+            my_submissions=my_submissions,
+            my_inactive_submissions=my_inactive_submissions_table,
+            **kwargs,
+        )
+
+
 class AdminDashboardView(TemplateView):
     template_name = 'dashboard/dashboard.html'
 
     def get_context_data(self, **kwargs):
+        context = super().get_context_data(**kwargs)
         submissions = ApplicationSubmission.objects.all().for_table(self.request.user)
 
-        extra_context = {
-            'active_payment_requests': self.get_my_active_payment_requests(self.request.user),
-            'awaiting_reviews': self.get_my_awaiting_reviews(self.request.user, submissions),
-            'my_reviewed': self.get_my_reviewed(self.request, submissions),
-            'projects': self.get_my_projects(self.request),
-            'projects_to_approve': self.get_my_projects_to_approve(self.request.user),
-            'rounds': self.get_rounds(self.request.user),
-            'my_flagged': self.get_my_flagged(self.request, submissions),
+        context.update({
+            'active_payment_requests': self.active_payment_requests(),
+            'awaiting_reviews': self.awaiting_reviews(submissions),
+            'my_reviewed': self.my_reviewed(submissions),
+            'projects': self.projects(),
+            'projects_to_approve': self.projects_to_approve(),
+            'rounds': self.rounds(),
+            'my_flagged': self.my_flagged(submissions),
+        })
+
+        return context
+
+    def awaiting_reviews(self, submissions):
+        submissions = submissions.in_review_for(self.request.user).order_by('-submit_time')
+        count = submissions.count()
+
+        limit = 5
+        return {
+            'active_statuses_filter': ''.join(f'&status={status}' for status in review_filter_for_user(self.request.user)),
+            'count': count,
+            'display_more': count > limit,
+            'table': SummarySubmissionsTableWithRole(submissions[:limit], prefix='my-review-'),
         }
-        current_context = super().get_context_data(**kwargs)
-        return {**current_context, **extra_context}
 
-    def get_my_active_payment_requests(self, user):
+    def active_payment_requests(self):
         payment_requests = PaymentRequest.objects.filter(
-            project__lead=user,
+            project__lead=self.request.user,
         ).in_progress()
 
         return {
@@ -51,10 +86,11 @@ class AdminDashboardView(TemplateView):
             'table': PaymentRequestsDashboardTable(payment_requests),
         }
 
-    def get_my_projects(self, request):
-        projects = Project.objects.filter(lead=request.user).for_table()
+    def projects(self):
+        projects = Project.objects.filter(lead=self.request.user).for_table()
 
-        filterset = ProjectListFilter(data=request.GET or None, request=request, queryset=projects)
+        filterset = ProjectListFilter(
+            data=self.request.GET or None, request=self.request, queryset=projects)
 
         limit = 10
 
@@ -66,8 +102,8 @@ class AdminDashboardView(TemplateView):
             'url': reverse('apply:projects:all'),
         }
 
-    def get_my_projects_to_approve(self, user):
-        if not user.is_approver:
+    def projects_to_approve(self):
+        if not self.request.user.is_approver:
             return {
                 'count': None,
                 'table': None,
@@ -80,56 +116,41 @@ class AdminDashboardView(TemplateView):
             'table': ProjectsDashboardTable(data=to_approve),
         }
 
-    def get_my_awaiting_reviews(self, user, qs):
-        """Staff reviewer's current to-review submissions."""
-        qs = qs.in_review_for(user).order_by('-submit_time')
-        count = qs.count()
-
-        limit = 5
-        return {
-            'active_statuses_filter': ''.join(f'&status={status}' for status in review_filter_for_user(user)),
-            'count': count,
-            'display_more': count > limit,
-            'table': SummarySubmissionsTableWithRole(qs[:limit], prefix='my-review-'),
-        }
-
-    def get_my_reviewed(self, request, qs):
+    def my_reviewed(self, submissions):
         """Staff reviewer's reviewed submissions for 'Previous reviews' block"""
-        qs = qs.reviewed_by(request.user).order_by('-submit_time')
-
-        filterset = SubmissionFilterAndSearch(data=request.GET or None, request=request, queryset=qs)
+        submissions = submissions.reviewed_by(self.request.user).order_by('-submit_time')
 
         limit = 5
         return {
-            'filterset': filterset,
-            'table': SummarySubmissionsTable(qs[:limit], prefix='my-reviewed-'),
-            'display_more': qs.count() > limit,
+            'filterset': SubmissionFilterAndSearch(
+                data=self.request.GET or None, request=self.request, queryset=submissions),
+            'table': SummarySubmissionsTableWithRole(submissions[:limit], prefix='my-review-'),
+            'display_more': submissions.count() > limit,
             'url': reverse('funds:submissions:list'),
         }
 
-    def get_rounds(self, user):
+    def rounds(self):
         limit = 6
-        qs = (RoundsAndLabs.objects.with_progress()
-                                   .active()
-                                   .order_by('-end_date')
-                                   .by_lead(user))
+        rounds = RoundsAndLabs.objects.with_progress().active().order_by('-end_date').by_lead(
+            self.request.user)
         return {
-            'closed': qs.closed()[:limit],
-            'open': qs.open()[:limit],
+            'closed': rounds.closed()[:limit],
+            'open': rounds.open()[:limit],
         }
 
-    def get_my_flagged(self, request, qs):
-        qs = qs.flagged_by(request.user).order_by('-submit_time')
+    def my_flagged(self, submissions):
+        submissions = submissions.flagged_by(self.request.user).order_by('-submit_time')
         row_attrs = dict({'data-flag-type': 'user'}, **SummarySubmissionsTable._meta.row_attrs)
 
         limit = 5
         return {
-            'table': SummarySubmissionsTable(qs[:limit], prefix='my-flagged-', attrs={'class': 'all-submissions-table flagged-table'}, row_attrs=row_attrs),
-            'display_more': qs.count() > limit,
+            'table': SummarySubmissionsTable(submissions[:limit], prefix='my-flagged-', attrs={'class': 'all-submissions-table flagged-table'}, row_attrs=row_attrs),
+            'display_more': submissions.count() > limit,
         }
 
 
-class ReviewerDashboardView(TemplateView):
+class ReviewerDashboardView(MySubmissionContextMixin, TemplateView):
+    template_name = 'dashboard/reviewer_dashboard.html'
 
     def get(self, request, *args, **kwargs):
         # redirect to submissions list when we use the filter to search for something
@@ -139,175 +160,96 @@ class ReviewerDashboardView(TemplateView):
                 query_str += key + '=' + value + '&'
             return HttpResponseRedirect(reverse_lazy('funds:submissions:list') + query_str)
 
-        qs = ApplicationSubmission.objects.all().for_table(self.request.user)
+        context = self.get_context_data(**kwargs)
+        return render(request, self.template_name, context)
 
-        # Reviewer's current to-review submissions
-        my_review_qs, my_review, display_more = self.get_my_reviews(request.user, qs)
+    def awaiting_reviews(self, submissions):
+        submissions = submissions.in_review_for(self.request.user).order_by('-submit_time')
+        count = submissions.count()
 
-        # Reviewer's reviewed submissions and filters for 'Previous reviews' block
-        filterset, my_reviewed_qs, my_reviewed, display_more_reviewed = self.get_my_reviewed(request, qs)
-
-        # Filter for all active statuses.
-        active_statuses_filter = ''.join(f'&status={status}' for status in review_filter_for_user(request.user))
-
-        # Applications by reviewer
-        my_submissions, my_inactive_submissions = self.get_my_submissions(request, qs)
-
-        context = {
-            'my_review': my_review,
-            'in_review_count': my_review_qs.count(),
-            'display_more': display_more,
-            'my_reviewed': my_reviewed,
-            'display_more_reviewed': display_more_reviewed,
-            'filter': filterset,
-            'active_statuses_filter': active_statuses_filter,
-            'my_submissions': my_submissions,
-            'my_inactive_submissions': my_inactive_submissions,
+        limit = 5
+        return {
+            'active_statuses_filter': ''.join(f'&status={status}' for status in review_filter_for_user(self.request.user)),
+            'count': count,
+            'display_more': count > limit,
+            'table': ReviewerSubmissionsTable(submissions[:limit], prefix='my-review-'),
         }
 
-        return render(request, 'dashboard/reviewer_dashboard.html', context)
+    def my_reviewed(self, submissions):
+        """Staff reviewer's reviewed submissions for 'Previous reviews' block"""
+        submissions = submissions.reviewed_by(self.request.user).order_by('-submit_time')
 
-    def get_my_reviews(self, user, qs):
         limit = 5
-        my_review_qs = qs.in_review_for(user).order_by('-submit_time')
-        my_review_table = ReviewerSubmissionsTable(my_review_qs[:limit], prefix='my-review-')
-        display_more = (my_review_qs.count() > limit)
-
-        return my_review_qs, my_review_table, display_more
-
-    def get_my_reviewed(self, request, qs):
-        # Replicating django_filters.views.FilterView
-        my_reviewed_qs = qs.reviewed_by(request.user).order_by('-submit_time')
-
-        kwargs = {
-            'data': request.GET or None,
-            'request': request,
-            'queryset': my_reviewed_qs,
+        return {
+            'filterset': SubmissionReviewerFilterAndSearch(
+                data=self.request.GET or None, request=self.request, queryset=submissions),
+            'table': ReviewerSubmissionsTable(submissions[:limit], prefix='my-review-'),
+            'display_more': submissions.count() > limit,
+            'url': reverse('funds:submissions:list'),
         }
-        filterset = SubmissionReviewerFilterAndSearch(**kwargs)
-        my_reviewed_qs = filterset.qs
-
-        limit = 5
-        my_reviewed_table = ReviewerSubmissionsTable(my_reviewed_qs[:limit], prefix='my-reviewed-')
-        display_more_reviewed = (my_reviewed_qs.count() > limit)
-
-        return filterset, my_reviewed_qs, my_reviewed_table, display_more_reviewed
-
-    def get_my_submissions(self, request, qs):
-        my_submissions = qs.filter(
-            user=request.user
-        ).active().current().select_related('draft_revision')
-        my_submissions = [
-            submission.from_draft() for submission in my_submissions
-        ]
-
-        my_inactive_submissions_qs = qs.filter(user=self.request.user).inactive().current()
-        my_inactive_submissions_table = ReviewerSubmissionsTable(
-            my_inactive_submissions_qs, prefix='my-submissions-'
-        )
-        return my_submissions, my_inactive_submissions_table
 
     def get_context_data(self, **kwargs):
-        kwargs = super().get_context_data(**kwargs)
-        search_term = self.request.GET.get('query')
-        kwargs.update(
-            search_term=search_term,
-        )
-
-        return super().get_context_data(**kwargs)
+        context = super().get_context_data(**kwargs)
+        submissions = ApplicationSubmission.objects.all().for_table(self.request.user)
 
+        context.update({
+            'awaiting_reviews': self.awaiting_reviews(submissions),
+            'my_reviewed': self.my_reviewed(submissions)
+        })
 
-class PartnerDashboardView(TemplateView):
-    template_name = 'dashboard/partner_dashboard.html'
+        return context
 
-    def get_partner_submissions(self, user, qs):
-        partner_submissions_qs = qs.partner_for(user).order_by('-submit_time')
-        partner_submissions_table = SubmissionsTable(partner_submissions_qs, prefix='my-partnered-')
 
-        return partner_submissions_qs, partner_submissions_table
+class PartnerDashboardView(MySubmissionContextMixin, TemplateView):
+    template_name = 'dashboard/partner_dashboard.html'
 
-    def get_my_submissions(self, request, qs):
-        my_submissions = qs.filter(
-            user=request.user
-        ).active().current().select_related('draft_revision')
-        my_submissions = [
-            submission.from_draft() for submission in my_submissions
-        ]
+    def get_partner_submissions(self, user, submissions):
+        partner_submissions = submissions.partner_for(user).order_by('-submit_time')
+        partner_submissions_table = SubmissionsTable(partner_submissions, prefix='my-partnered-')
 
-        my_inactive_submissions_qs = qs.filter(user=self.request.user).inactive().current()
-        my_inactive_submissions_table = ReviewerSubmissionsTable(
-            my_inactive_submissions_qs, prefix='my-submissions-'
-        )
-        return my_submissions, my_inactive_submissions_table
+        return partner_submissions, partner_submissions_table
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
-        qs = ApplicationSubmission.objects.all().for_table(self.request.user)
+        submissions = ApplicationSubmission.objects.all().for_table(self.request.user)
 
         # Submissions in which user added as partner
-        partner_submissions_qs, partner_submissions = self.get_partner_submissions(self.request.user, qs)
-
-        # Applications by partner
-        my_submissions, my_inactive_submissions = self.get_my_submissions(self.request, qs)
+        partner_submissions, partner_submissions_table = self.get_partner_submissions(self.request.user, submissions)
 
         context.update({
-            'partner_submissions': partner_submissions,
-            'partner_submissions_count': partner_submissions_qs.count(),
-            'my_submissions': my_submissions,
-            'my_inactive_submissions': my_inactive_submissions,
+            'partner_submissions': partner_submissions_table,
+            'partner_submissions_count': partner_submissions.count(),
         })
 
         return context
 
 
-class CommunityDashboardView(TemplateView):
+class CommunityDashboardView(MySubmissionContextMixin, TemplateView):
     template_name = 'dashboard/community_dashboard.html'
 
-    def get_my_community_review(self, user, qs):
-        my_community_review_qs = qs.in_community_review(user).order_by('-submit_time')
-        my_community_review_table = ReviewerSubmissionsTable(my_community_review_qs, prefix='my-community-review-')
-
-        return my_community_review_qs, my_community_review_table
+    def get_my_community_review(self, user, submissions):
+        my_community_review = submissions.in_community_review(user).order_by('-submit_time')
+        my_community_review_table = ReviewerSubmissionsTable(my_community_review, prefix='my-community-review-')
 
-    def get_my_reviewed(self, request, qs):
-        my_reviewed_qs = qs.reviewed_by(request.user).order_by('-submit_time')
-        my_reviewed_table = ReviewerSubmissionsTable(my_reviewed_qs, prefix='my-reviewed-')
+        return my_community_review, my_community_review_table
 
-        return my_reviewed_qs, my_reviewed_table
-
-    def get_my_submissions(self, request, qs):
-        my_submissions = qs.filter(
-            user=request.user
-        ).active().current().select_related('draft_revision')
-        my_submissions = [
-            submission.from_draft() for submission in my_submissions
-        ]
-
-        my_inactive_submissions_qs = qs.filter(user=self.request.user).inactive().current()
-        my_inactive_submissions_table = ReviewerSubmissionsTable(
-            my_inactive_submissions_qs, prefix='my-submissions-'
-        )
-        return my_submissions, my_inactive_submissions_table
+    def get_my_reviewed(self, request, submissions):
+        return ReviewerSubmissionsTable(submissions.reviewed_by(request.user).order_by('-submit_time'), prefix='my-reviewed-')
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
-        qs = ApplicationSubmission.objects.all().for_table(self.request.user)
+        submissions = ApplicationSubmission.objects.all().for_table(self.request.user)
 
         # Submissions in community review phase
-        my_community_review_qs, my_community_review = self.get_my_community_review(self.request.user, qs)
+        my_community_review, my_community_review = self.get_my_community_review(self.request.user, submissions)
 
         # Partner's reviewed submissions
-        my_reviewed_qs, my_reviewed = self.get_my_reviewed(self.request, qs)
-
-        # Applications by partner
-        my_submissions, my_inactive_submissions = self.get_my_submissions(self.request, qs)
+        my_reviewed = self.get_my_reviewed(self.request, submissions)
 
         context.update({
             'my_community_review': my_community_review,
-            'my_community_review_count': my_community_review_qs.count(),
-            'my_reviewed': my_reviewed,
-            'my_submissions': my_submissions,
-            'my_inactive_submissions': my_inactive_submissions,
+            'my_community_review_count': my_community_review.count(),
+            'my_reviewed': my_reviewed
         })
 
         return context