diff --git a/aleksis/core/mixins.py b/aleksis/core/mixins.py
index 3c3ed2238494133513c08633b1254cd83a947733..1b49ab042c8ed77254068e2f9f256201d649e6ea 100644
--- a/aleksis/core/mixins.py
+++ b/aleksis/core/mixins.py
@@ -2,6 +2,8 @@ from datetime import datetime
 from typing import Any, Callable, Optional, Union
 
 from django.contrib.contenttypes.models import ContentType
+from django.contrib.sites.managers import CurrentSiteManager
+from django.contrib.sites.models import Site
 from django.db import models
 from django.db.models import QuerySet
 from django.forms.models import ModelFormMetaclass, ModelForm
@@ -78,6 +80,10 @@ class ExtensibleModel(CRUDMixin):
     # Defines a material design icon associated with this type of model
     icon_ = "radio_button_unchecked"
 
+    site = models.ForeignKey(Site, on_delete=models.CASCADE)
+    objects = CurrentSiteManager()
+    objects_all_sites = models.Manager()
+
     def get_absolute_url(self) -> str:
         """ Get the URL o a view representing this model instance """
         pass
diff --git a/aleksis/core/settings.py b/aleksis/core/settings.py
index c97701ba58f3cd42d470870d2b85f6e4abba3dc3..b23b32f8cf080ce5390c2c3f7f095d7319eab445 100644
--- a/aleksis/core/settings.py
+++ b/aleksis/core/settings.py
@@ -114,6 +114,7 @@ MIDDLEWARE = [
     "django.middleware.locale.LocaleMiddleware",
     "django.middleware.http.ConditionalGetMiddleware",
     "django_global_request.middleware.GlobalRequestMiddleware",
+    "django.contrib.sites.middleware.CurrentSiteMiddleware",
     "django.middleware.common.CommonMiddleware",
     "django.middleware.csrf.CsrfViewMiddleware",
     "django.contrib.auth.middleware.AuthenticationMiddleware",