diff --git a/aleksis/core/mixins.py b/aleksis/core/mixins.py
index 856187d79a5735616a5ba3f2abb65a8fc82e8f7d..7f5db6e6d1bb4c17ece7152167ef35334b22c115 100644
--- a/aleksis/core/mixins.py
+++ b/aleksis/core/mixins.py
@@ -17,8 +17,25 @@ from material.base import Layout, LayoutNode
 from rules.contrib.admin import ObjectPermissionsModelAdmin
 
 
-@reversion.register
-class ExtensibleModel(models.Model):
+class _ExtensibleModelBase(models.base.ModelBase):
+    """Ensure predefined behaviour on model creation.
+
+    This metaclass serves the following purposes:
+
+     - Register all AlekSIS models with django-reverseion
+    """
+
+    def __new__(mcls, name, bases, attrs):
+        mcls = super().__new__(mcls, name, bases, attrs)
+
+        if "Meta" not in attrs or not attrs["Meta"].abstract:
+            # Register all non-abstract models with django-reversion
+            mcls = reversion.register(mcls)
+
+        return mcls
+
+
+class ExtensibleModel(models.Model, metaclass=_ExtensibleModelBase):
     """Base model for all objects in AlekSIS apps.
 
     This base model ensures all objects in AlekSIS apps fulfill the
@@ -212,8 +229,8 @@ class PureDjangoModel(object):
 
 
 class _ExtensibleFormMetaclass(ModelFormMetaclass):
-    def __new__(cls, mcs, name, bases, dct):
-        x = super().__new__(mcs, name, bases, dct)
+    def __new__(cls, name, bases, dct):
+        x = super().__new__(cls, name, bases, dct)
 
         # Enforce a default for the base layout for forms that o not specify one
         if hasattr(x, "layout"):
diff --git a/aleksis/core/util/notifications.py b/aleksis/core/util/notifications.py
index 499de67b9fba6513e680d6bd6354505b83396b49..33b92251b302c3f8051a13b4dc39b77d4676ce5a 100644
--- a/aleksis/core/util/notifications.py
+++ b/aleksis/core/util/notifications.py
@@ -10,7 +10,6 @@ from django.utils.translation import gettext_lazy as _
 
 from templated_email import send_templated_mail
 
-from ..models import Notification
 from .core_helpers import lazy_preference
 
 try: