diff --git a/aleksis/core/models.py b/aleksis/core/models.py
index bd3c017371dc2daeef2c855dca290c8d50b6577d..eb92cb5d714aa3d538e9a407677b06f9cdc664ce 100644
--- a/aleksis/core/models.py
+++ b/aleksis/core/models.py
@@ -14,7 +14,6 @@ from django.utils.translation import gettext_lazy as _
 from image_cropping import ImageCropField, ImageRatioField
 from phonenumber_field.modelfields import PhoneNumberField
 from polymorphic.models import PolymorphicModel
-import reversion
 
 from .mixins import ExtensibleModel, PureDjangoModel
 from .tasks import send_notification
@@ -24,7 +23,6 @@ from .util.model_helpers import ICONS
 from constance import config
 
 
-@reversion.register()
 class School(ExtensibleModel):
     """A school that will have many other objects linked to it.
     AlekSIS has multi-tenant support by linking all objects to a school,
@@ -56,7 +54,6 @@ class School(ExtensibleModel):
         verbose_name_plural = _("Schools")
 
 
-@reversion.register()
 class SchoolTerm(ExtensibleModel):
     """ Information about a term (limited time frame) that data can
     be linked to.
@@ -89,7 +86,6 @@ class SchoolTerm(ExtensibleModel):
         verbose_name_plural = _("School terms")
 
 
-@reversion.register()
 class Person(ExtensibleModel):
     """ A model describing any person related to a school, including, but not
     limited to, students, teachers and guardians (parents).
@@ -250,7 +246,6 @@ class Person(ExtensibleModel):
                 self.primary_group = self.member_of.filter(name__regex=pattern).first()
 
 
-@reversion.register()
 class Group(ExtensibleModel):
     """Any kind of group of persons in a school, including, but not limited
     classes, clubs, and the like.
@@ -308,7 +303,6 @@ class Group(ExtensibleModel):
         dj_group.save()
 
 
-@reversion.register()
 class Activity(ExtensibleModel):
     user = models.ForeignKey("Person", on_delete=models.CASCADE, related_name="activities")
 
@@ -325,7 +319,6 @@ class Activity(ExtensibleModel):
         verbose_name_plural = _("Activities")
 
 
-@reversion.register()
 class Notification(ExtensibleModel):
     sender = models.CharField(max_length=100, verbose_name=_("Sender"))
     recipient = models.ForeignKey("Person", on_delete=models.CASCADE, related_name="notifications")
@@ -405,12 +398,7 @@ class AnnouncementQuerySet(models.QuerySet):
 
         return announcements_for_person
 
-    class Meta:
-        verbose_name = _("Announcement Queryset")
-        verbose_name_plural = _("Announcements Querysets")
-
 
-@reversion.register()
 class Announcement(ExtensibleModel):
     objects = models.Manager.from_queryset(AnnouncementQuerySet)()
 
@@ -449,7 +437,6 @@ class Announcement(ExtensibleModel):
         verbose_name_plural = _("Announcements")
 
 
-@reversion.register()
 class AnnouncementRecipient(ExtensibleModel):
     announcement = models.ForeignKey(Announcement, on_delete=models.CASCADE, related_name="recipients")
 
@@ -478,7 +465,6 @@ class AnnouncementRecipient(ExtensibleModel):
         verbose_name_plural = _("Announcement recipients")
 
 
-@reversion.register()
 class DashboardWidget(PolymorphicModel, PureDjangoModel):
     """ Base class for dashboard widgets on the index page
 
@@ -543,7 +529,6 @@ class DashboardWidget(PolymorphicModel, PureDjangoModel):
         verbose_name_plural = _("Dashboard Widgets")
 
 
-@reversion.register()
 class CustomMenu(ExtensibleModel):
     id = models.CharField(max_length=100, verbose_name=_("Menu ID"), primary_key=True)
     name = models.CharField(max_length=150, verbose_name=_("Menu name"))
@@ -567,7 +552,6 @@ class CustomMenu(ExtensibleModel):
         verbose_name_plural = _("Custom menus")
 
 
-@reversion.register()
 class CustomMenuItem(ExtensibleModel):
     menu = models.ForeignKey(
         CustomMenu, models.CASCADE, verbose_name=_("Menu"), related_name="items"
@@ -585,8 +569,6 @@ class CustomMenuItem(ExtensibleModel):
         verbose_name = _("Custom menu item")
         verbose_name_plural = _("Custom menu items")
 
-
-@reversion.register()
 class GroupType(ExtensibleModel):
     name = models.CharField(verbose_name=_("Title of type"), max_length=50)
     description = models.CharField(verbose_name=_("Description"), max_length=500)
@@ -596,7 +578,6 @@ class GroupType(ExtensibleModel):
         verbose_name_plural = _("Group types")
 
 
-@reversion.register()
 class GlobalPermissions(ExtensibleModel):
     class Meta:
         managed = False
diff --git a/aleksis/core/settings.py b/aleksis/core/settings.py
index 6fd8e14951bb0585f2138a37fe384d726f0b4ccc..04728798c6552e2eca84712c1fc8364aacb45601 100644
--- a/aleksis/core/settings.py
+++ b/aleksis/core/settings.py
@@ -75,7 +75,6 @@ INSTALLED_APPS = [
     "image_cropping",
     "maintenance_mode",
     "menu_generator",
-    "reversion",
     "phonenumber_field",
     "debug_toolbar",
     "django_select2",
diff --git a/pyproject.toml b/pyproject.toml
index 118325ec2e47142790983685cc36bb77531ccf03..b0e9c84ee4820832417255a8f290c762fe270206 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -75,7 +75,6 @@ celery-haystack = {version="^0.3.1", optional=true}
 django-dbbackup = "^3.3.0"
 spdx-license-list = "^0.4.0"
 license-expression = "^1.2"
-django-reversion = "^3.0.7"
 
 [tool.poetry.extras]
 ldap = ["django-auth-ldap"]