diff --git a/AKModel/admin.py b/AKModel/admin.py
index 16fe017f6a083ce54d658b30842d9ef0558fb497..01a450cbf4b3a4c92a35e09b3085de7f596524d9 100644
--- a/AKModel/admin.py
+++ b/AKModel/admin.py
@@ -57,7 +57,7 @@ class EventAdmin(admin.ModelAdmin):
             path('<slug:slug>/status/', self.admin_site.admin_view(EventStatusView.as_view()), name="event_status"),
             path('<slug:event_slug>/requirements/', self.admin_site.admin_view(AKRequirementOverview.as_view()), name="event_requirement_overview"),
             path('<slug:event_slug>/ak-csv-export/', self.admin_site.admin_view(AKCSVExportView.as_view()), name="ak_csv_export"),
-            path('<slug:event_slug>/ak-wiki-export/', self.admin_site.admin_view(AKWikiExportView.as_view()), name="ak_wiki_export"),
+            path('<slug:slug>/ak-wiki-export/', self.admin_site.admin_view(AKWikiExportView.as_view()), name="ak_wiki_export"),
             path('<slug:event_slug>/ak-slide-export/', export_slides, name="ak_slide_export"),
             path('<slug:slug>/delete-orga-messages/', self.admin_site.admin_view(AKMessageDeleteView.as_view()),
                  name="ak_delete_orga_messages"),
diff --git a/AKModel/models.py b/AKModel/models.py
index dcb1d45775e341c91553578885f32801042f3081..ee27d4f95cfce116ad9f26729cec599099f9bb3e 100644
--- a/AKModel/models.py
+++ b/AKModel/models.py
@@ -64,6 +64,41 @@ class Event(models.Model):
             event = Event.objects.order_by('start').filter(start__gt=datetime.now()).first()
         return event
 
+    def get_categories_with_aks(self, wishes_seperately=False, filter=lambda ak: True):
+        """
+        Get AKCategories as well as a list of AKs belonging to the category for this event
+
+        :param wishes_seperately: Return wishes as individual list.
+        :type wishes_seperately: bool
+        :param filter: Optional filter predicate, only include AK in list if filter returns True
+        :type filter: (AK)->bool
+        :return: list of category-AK-list-tuples, optionally the additional list of AK wishes
+        :rtype: list[(AKCategory, list[AK])] [, list[AK]]
+        """
+        categories = self.akcategory_set.all()
+        categories_with_aks = []
+        ak_wishes = []
+
+        if wishes_seperately:
+            for category in categories:
+                ak_list = []
+                for ak in category.ak_set.all():
+                    if ak.wish:
+                        ak_wishes.append(ak)
+                    else:
+                        if filter(ak):
+                            ak_list.append(ak)
+                categories_with_aks.append((category, ak_list))
+            return categories_with_aks, ak_wishes
+        else:
+            for category in categories:
+                ak_list = []
+                for ak in category.ak_set.all():
+                    if filter(ak):
+                        ak_list.append(ak)
+                categories_with_aks.append((category, ak_list))
+            return categories_with_aks
+
 
 class AKOwner(models.Model):
     """ An AKOwner describes the person organizing/holding an AK.
diff --git a/AKModel/templates/admin/AKModel/status.html b/AKModel/templates/admin/AKModel/status.html
index dd269c83db03f118bb5f2c72447e437d8c856042..0f5369fac2d89e1d444a98f0855a2b1234148e2e 100644
--- a/AKModel/templates/admin/AKModel/status.html
+++ b/AKModel/templates/admin/AKModel/status.html
@@ -79,7 +79,7 @@
                     <a class="btn btn-success"
                        href="{% url 'admin:ak_csv_export' event_slug=event.slug %}">{% trans "Export AKs as CSV" %}</a>
                     <a class="btn btn-success"
-                       href="{% url 'admin:ak_wiki_export' event_slug=event.slug %}">{% trans "Export AKs for Wiki" %}</a>
+                       href="{% url 'admin:ak_wiki_export' slug=event.slug %}">{% trans "Export AKs for Wiki" %}</a>
                     <a class="btn btn-success"
                        href="{% url 'admin:ak_slide_export' event_slug=event.slug %}">{% trans "Export AK Slides" %}</a>
                 {% endif %}
diff --git a/AKModel/templates/admin/AKModel/wiki_export.html b/AKModel/templates/admin/AKModel/wiki_export.html
index 03512c675f3373e65eec52b634f245a8cebdb572..f3aa98000d88e66c5f7c03a181a7507d200af864 100644
--- a/AKModel/templates/admin/AKModel/wiki_export.html
+++ b/AKModel/templates/admin/AKModel/wiki_export.html
@@ -4,11 +4,9 @@
 
 {% block content %}
 
-{% regroup AKs by category as ak_list %}
-
-{% for category_aks in ak_list %}
-<h3>{{ category_aks.grouper }}</h3>
-<textarea style="width: 100%;height:30vh;">{% for ak in category_aks.list %}
+{% for category_name, ak_list in categories_with_aks %}
+<h3>{{ category_name }}</h3>
+<textarea style="width: 100%;height:30vh;" class="mb-3">{% for ak in ak_list %}
 {% verbatim %}{{{% endverbatim %}
 {{ ak.event.wiki_export_template_name }}
 | name={{ ak.name }}
diff --git a/AKModel/views.py b/AKModel/views.py
index c1926d7de07f97678e3051c6b80d82d01f5c05e5..63b0e7d2fab1d7a6c9076b6355580f7660467f14 100644
--- a/AKModel/views.py
+++ b/AKModel/views.py
@@ -10,7 +10,6 @@ from django.views.generic import TemplateView, DetailView, ListView, DeleteView,
 from rest_framework import viewsets, permissions, mixins
 from django_tex.shortcuts import render_to_pdf
 
-
 from AKModel.forms import NewEventWizardStartForm, NewEventWizardSettingsForm, NewEventWizardPrepareImportForm, \
     NewEventWizardImportForm, NewEventWizardActivateForm
 from AKModel.models import Event, AK, AKSlot, Room, AKTrack, AKCategory, AKOwner, AKOrgaMessage, AKRequirement
@@ -98,7 +97,8 @@ class AKCategoryViewSet(EventSlugMixin, mixins.RetrieveModelMixin, mixins.ListMo
         return AKCategory.objects.filter(event=self.event)
 
 
-class AKTrackViewSet(EventSlugMixin, mixins.RetrieveModelMixin, mixins.CreateModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, mixins.ListModelMixin, viewsets.GenericViewSet):
+class AKTrackViewSet(EventSlugMixin, mixins.RetrieveModelMixin, mixins.CreateModelMixin, mixins.UpdateModelMixin,
+                     mixins.DestroyModelMixin, mixins.ListModelMixin, viewsets.GenericViewSet):
     permission_classes = (permissions.DjangoModelPermissionsOrAnonReadOnly,)
     serializer_class = AKTrackSerializer
 
@@ -106,7 +106,8 @@ class AKTrackViewSet(EventSlugMixin, mixins.RetrieveModelMixin, mixins.CreateMod
         return AKTrack.objects.filter(event=self.event)
 
 
-class AKViewSet(EventSlugMixin, mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.ListModelMixin, viewsets.GenericViewSet):
+class AKViewSet(EventSlugMixin, mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.ListModelMixin,
+                viewsets.GenericViewSet):
     permission_classes = (permissions.DjangoModelPermissionsOrAnonReadOnly,)
     serializer_class = AKSerializer
 
@@ -175,14 +176,21 @@ class AKCSVExportView(AdminViewMixin, FilterByEventSlugMixin, ListView):
         return context
 
 
-class AKWikiExportView(AdminViewMixin, FilterByEventSlugMixin, ListView):
+class AKWikiExportView(AdminViewMixin, DetailView):
     template_name = "admin/AKModel/wiki_export.html"
-    model = AK
-    context_object_name = "AKs"
+    model = Event
+    context_object_name = "event"
     title = _("AK Wiki Export")
 
-    def get_queryset(self):
-        return super().get_queryset().order_by("category")
+    def get_context_data(self, **kwargs):
+        context = super().get_context_data(**kwargs)
+
+        categories_with_aks, ak_wishes = context["event"].get_categories_with_aks(wishes_seperately=True)
+
+        context["categories_with_aks"] = [(category.name, ak_list) for category, ak_list in categories_with_aks]
+        context["categories_with_aks"].append((_("Wishes"), ak_wishes))
+
+        return context
 
 
 class AKMessageDeleteView(AdminViewMixin, DeleteView):
@@ -220,7 +228,7 @@ class WizardViewMixin:
         return context
 
 
-class NewEventWizardStartView(AdminViewMixin, WizardViewMixin,  CreateView):
+class NewEventWizardStartView(AdminViewMixin, WizardViewMixin, CreateView):
     model = Event
     form_class = NewEventWizardStartForm
     template_name = "admin/AKModel/event_wizard/start.html"
@@ -249,7 +257,8 @@ class NewEventWizardPrepareImportView(WizardViewMixin, EventSlugMixin, FormView)
 
     def form_valid(self, form):
         # Selected a valid event to import from? Use this to go to next step of wizard
-        return redirect("admin:new_event_wizard_import", event_slug=self.event.slug, import_slug=form.cleaned_data["import_event"].slug)
+        return redirect("admin:new_event_wizard_import", event_slug=self.event.slug,
+                        import_slug=form.cleaned_data["import_event"].slug)
 
 
 class NewEventWizardImportView(EventSlugMixin, WizardViewMixin, FormView):
@@ -272,7 +281,9 @@ class NewEventWizardImportView(EventSlugMixin, WizardViewMixin, FormView):
                     import_obj.save()
                     messages.add_message(self.request, messages.SUCCESS, _("Copied '%(obj)s'" % {'obj': import_obj}))
                 except BaseException as e:
-                    messages.add_message(self.request, messages.ERROR, _("Could not copy '%(obj)s' (%(error)s)" %  {'obj': import_obj, "error": str(e)}))
+                    messages.add_message(self.request, messages.ERROR,
+                                         _("Could not copy '%(obj)s' (%(error)s)" % {'obj': import_obj,
+                                                                                     "error": str(e)}))
         return redirect("admin:new_event_wizard_activate", slug=self.event.slug)
 
 
@@ -314,26 +325,17 @@ def export_slides(request, event_slug):
         next_aks_list = zip_longest(*[ak_list[i + 1:] for i in range(NEXT_AK_LIST_LENGTH)], fillvalue=None)
         return [(ak, next_aks) for ak, next_aks in zip_longest(ak_list, next_aks_list, fillvalue=list())]
 
-    categories = event.akcategory_set.all()
-    categories_with_aks = []
-    ak_wishes = []
-    for category in categories:
-        ak_list = []
-        for ak in category.ak_set.all(): # order_by("owners").distinct():
-            if ak.wish:
-                ak_wishes.append(ak)
-            else:
-                if not RESULT_PRESENTATION_MODE or ak.present:
-                    ak_list.append(ak)
-        categories_with_aks.append((category, build_ak_list_with_next_aks(ak_list)))
+    categories_with_aks, ak_wishes = event.get_categories_with_aks(wishes_seperately=True, filter=lambda
+        ak: not RESULT_PRESENTATION_MODE or ak.present)
 
     context = {
         'title': event.name,
-        'categories_with_aks': categories_with_aks,
+        'categories_with_aks': [(category, build_ak_list_with_next_aks(ak_list)) for category, ak_list in
+                                categories_with_aks],
         'subtitle': _("AKs"),
         "wishes": build_ak_list_with_next_aks(ak_wishes),
         "translations": translations,
         "result_presentation_mode": RESULT_PRESENTATION_MODE,
-        }
+    }
 
     return render_to_pdf(request, template_name, context, filename='slides.pdf')