diff --git a/aleksis/core/templates/search/search.html b/aleksis/core/templates/search/search.html
index caff1cc6f62f30c67dcb0e2fe082dfa08db389a8..514661df42edecac7ca223c1c41fe4dae440b5ee 100644
--- a/aleksis/core/templates/search/search.html
+++ b/aleksis/core/templates/search/search.html
@@ -27,7 +27,7 @@
 
     {% if query %}
       <div class="collection">
-        {% for result in page.object_list %}
+        {% for result in page_obj.object_list %}
           <a href="{{ result.object.get_absolute_url|default:"#" }}" class="collection-item">
             <i class="material-icons left">{{ result.object.icon_ }}</i>
             {{ result.object }}
@@ -41,11 +41,11 @@
         {% endfor %}
       </div>
 
-      {% if page.has_other_pages %}
+      {% if page_obj.has_other_pages %}
         <ul class="pagination">
-          {% if page.has_previous %}
+          {% if page_obj.has_previous %}
             <li class="waves-effect">
-              <a href="?q={{ query }}&amp;page={{ page.previous_page_number }}">
+              <a href="?q={{ query }}&amp;page={{ page_obj.previous_page_number }}">
                 <i class="material-icons">chevron_left</i>
               </a>
             </li>
@@ -55,8 +55,8 @@
             </li>
           {% endif %}
 
-          {% for page_num in page.paginator.page_range %}
-            {% if page.number == page_num %}
+          {% for page_num in page_obj.paginator.page_range %}
+            {% if page_obj.number == page_num %}
               <li class="active">
                 <a href="#">{{ page_num }}</a>
               </li>
@@ -67,9 +67,9 @@
             {% endif %}
           {% endfor %}
 
-          {% if page.has_next %}
+          {% if page_obj.has_next %}
             <li class="waves-effect">
-              <a href="?q={{ query }}&amp;page={{ page.next_page_number }}">
+              <a href="?q={{ query }}&amp;page={{ page_obj.next_page_number }}">
                 <i class="material-icons">chevron_right</i>
               </a>
             </li>
diff --git a/aleksis/core/urls.py b/aleksis/core/urls.py
index 9ccf5aebff5c5fd36947626584cd6287dad5a3c7..b39115d4ea09c0e602997d09daf3560e1348deb1 100644
--- a/aleksis/core/urls.py
+++ b/aleksis/core/urls.py
@@ -80,7 +80,7 @@ urlpatterns = [
     path("announcement/edit/<int:id_>/", views.announcement_form, name="edit_announcement"),
     path("announcement/delete/<int:id_>/", views.delete_announcement, name="delete_announcement"),
     path("search/searchbar/", views.searchbar_snippets, name="searchbar_snippets"),
-    path("search/", views.PermissionSearchView(), name="haystack_search"),
+    path("search/", views.PermissionSearchView.as_view(), name="haystack_search"),
     path("maintenance-mode/", include("maintenance_mode.urls")),
     path("impersonate/", include("impersonate.urls")),
     path(
diff --git a/aleksis/core/views.py b/aleksis/core/views.py
index 78775e0725c23533272e93dc28bf9f4a4c89bdf6..5dd11a398e08937ab2c6e904c2b0cf468d9b6198 100644
--- a/aleksis/core/views.py
+++ b/aleksis/core/views.py
@@ -26,7 +26,7 @@ from dynamic_preferences.forms import preference_form_builder
 from guardian.shortcuts import get_objects_for_user
 from haystack.inputs import AutoQuery
 from haystack.query import SearchQuerySet
-from haystack.views import SearchView
+from haystack.generic_views import SearchView
 from health_check.views import MainView
 from oauth2_provider.models import Application
 from reversion import set_user
@@ -569,12 +569,6 @@ class PermissionSearchView(PermissionRequiredMixin, SearchView):
 
     permission_required = "core.search"
 
-    def create_response(self):
-        context = self.get_context()
-        if not self.has_permission():
-            return self.handle_no_permission()
-        return render(self.request, self.template, context)
-
 
 @never_cache
 def preferences(