diff --git a/aleksis/core/apps.py b/aleksis/core/apps.py
index 1dcb1b1a450100a1eb8c375a2db47baf387d0807..b9b591bc5cf20157f43efca8dbff65a32fe4718e 100644
--- a/aleksis/core/apps.py
+++ b/aleksis/core/apps.py
@@ -1,6 +1,7 @@
 from typing import Any, List, Optional, Tuple
 
 import django.apps
+from django.contrib.auth import get_user_model
 from django.http import HttpRequest
 
 from dynamic_preferences.registries import preference_models
@@ -15,6 +16,9 @@ from .util.core_helpers import has_person
 from .util.sass_helpers import clean_scss
 
 
+User = get_user_model()
+
+
 class CoreConfig(AppConfig):
     name = "aleksis.core"
     verbose_name = "AlekSIS — The Free School Information System"
@@ -23,7 +27,7 @@ class CoreConfig(AppConfig):
         "Repository": "https://edugit.org/AlekSIS/official/AlekSIS/",
     }
     licence = "EUPL-1.2+"
-    copyright = (
+    copyright_info = (
         ([2017, 2018, 2019, 2020], "Jonathan Weth", "wethjo@katharineum.de"),
         ([2017, 2018, 2019], "Frank Poetzsch-Heffter", "p-h@katharineum.de"),
         ([2018, 2019, 2020], "Julian Leucker", "leuckeju@katharineum.de"),
diff --git a/aleksis/core/mixins.py b/aleksis/core/mixins.py
index d0b44263b1ccdcb73fcba55ee7e7aff36d44d5bd..7d1bd2c294d0f4adbcdf6218088809cf404b9f54 100644
--- a/aleksis/core/mixins.py
+++ b/aleksis/core/mixins.py
@@ -16,7 +16,7 @@ from material.base import Layout, LayoutNode
 from rules.contrib.admin import ObjectPermissionsModelAdmin
 
 
-@reversion.register()
+@reversion.register
 class ExtensibleModel(models.Model):
     """Base model for all objects in AlekSIS apps.
 
@@ -141,7 +141,7 @@ class ExtensibleModel(models.Model):
         cls.add_to_class(name, obj)
 
     @classmethod
-    def property(cls, func: Callable[[], Any], name: Optional[str] = None) -> None:
+    def property_(cls, func: Callable[[], Any], name: Optional[str] = None) -> None:
         """Add the passed callable as a property."""
         cls._safe_add(property(func), func.__name__)
 
diff --git a/aleksis/core/models.py b/aleksis/core/models.py
index c45f77d464278ad8b8df5ef6c0a3ef2f7670d375..0af29fe21504b263e0661b6eef1db78894e12e23 100644
--- a/aleksis/core/models.py
+++ b/aleksis/core/models.py
@@ -276,7 +276,7 @@ class Group(ExtensibleModel):
         blank=True,
     )
 
-    type = models.ForeignKey(
+    group_type = models.ForeignKey(
         "GroupType",
         on_delete=models.SET_NULL,
         related_name="type",
@@ -469,6 +469,7 @@ class Announcement(ExtensibleModel):
 
     def get_recipients_for_model(self, obj: Union[models.Model]) -> Sequence[models.Model]:
         """Get all recipients.
+
         Get all recipients for this announcement
         with a special content type (provided through model)
         """
diff --git a/aleksis/core/util/apps.py b/aleksis/core/util/apps.py
index d086ff3053e66da379164f6899eaaff635db7fec..23ddf368dbd88fba71a0f3d4859276c73337fc28 100644
--- a/aleksis/core/util/apps.py
+++ b/aleksis/core/util/apps.py
@@ -125,10 +125,10 @@ class AppConfig(django.apps.AppConfig):
     @classmethod
     def get_copyright(cls) -> Sequence[Tuple[str, str, str]]:
         """Get copyright information tuples for application package."""
-        copyrights = getattr(cls, "copyright", tuple())
+        copyrights = getattr(cls, "copyright_info", tuple())
 
         copyrights_processed = []
-        for copyright in copyrights:
+        for copyright_info in copyrights:
             copyrights_processed.append(
                 (
                     # Sort copyright years and combine year ranges for display
diff --git a/aleksis/core/util/core_helpers.py b/aleksis/core/util/core_helpers.py
index 67c9daae584fbdbe84294b8439d7cfb20481aa01..9f5ba8b101fdd99a2cbaaca10ccfd660d0399c23 100644
--- a/aleksis/core/util/core_helpers.py
+++ b/aleksis/core/util/core_helpers.py
@@ -1,3 +1,4 @@
+from ast import literal_eval
 import os
 import pkgutil
 from datetime import datetime, timedelta
@@ -228,6 +229,6 @@ def objectgetter_optional(
         if id_ is not None:
             return get_object_or_404(model, pk=id_)
         else:
-            return eval(default) if default_eval else default
+            return literal_eval(default) if default_eval else default
 
     return get_object
diff --git a/aleksis/core/views.py b/aleksis/core/views.py
index 350e6fc346e8ce2a94b4abfcdc9230fd3d69c002..c10f20894de42d1d8726acccebce58d5d59b953b 100644
--- a/aleksis/core/views.py
+++ b/aleksis/core/views.py
@@ -191,11 +191,11 @@ def groups_child_groups(request: HttpRequest) -> HttpResponse:
     context = {}
 
     # Apply filter
-    filter = GroupFilter(request.GET, queryset=Group.objects.all())
-    context["filter"] = filter
+    filter_ = GroupFilter(request.GET, queryset=Group.objects.all())
+    context["filter"] = filter_
 
     # Paginate
-    paginator = Paginator(filter.qs, 1)
+    paginator = Paginator(filter_.qs, 1)
     page_number = request.POST.get("page", request.POST.get("old_page"))
 
     if page_number:
diff --git a/tox.ini b/tox.ini
index 2668cbcf546d843f4b70b7185dc535ea8c61296e..36687847e9b2dd82018c8363190e80ca20304e28 100644
--- a/tox.ini
+++ b/tox.ini
@@ -48,7 +48,7 @@ commands =
 [flake8]
 max_line_length = 100
 exclude = migrations,tests
-ignore = BLK100,E203,E231,W503,D100,D101,D102,D103,D104,D105,D106,D107
+ignore = BLK100,E203,E231,W503,D100,D101,D102,D103,D104,D105,D106,D107,RST215,RST214,F841,S106
 
 [isort]
 line_length = 100