diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 650f704a85a7d9e49a36fc55682c6aedb310e0ca..9d37a25abde92bc57987d08e325d97a8cff9b4f8 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -25,6 +25,7 @@ Fixed
 * GroupManager.get_queryset() returned an incomplete QuerySet
 * OAuth was broken by a non-semver-adhering django-oauth-toolkit update
 * Too long texts in chips didn't result in a larger chip.
+* The ``Person`` model had an ``is_active`` flag that was used in unclear ways; it is now removed
 
 Changed
 ~~~~~~~
diff --git a/aleksis/core/filters.py b/aleksis/core/filters.py
index eb5724b322232381017aa0b84e4ab111a9304eda..ea8a7cacdf93e5b7c45355fc0ea8b3322cbb680e 100644
--- a/aleksis/core/filters.py
+++ b/aleksis/core/filters.py
@@ -72,11 +72,11 @@ class PersonFilter(FilterSet):
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
-        self.form.layout = Layout(Row("name", "contact"), Row("is_active", "sex", "primary_group"))
+        self.form.layout = Layout(Row("name", "contact"), Row("sex", "primary_group"))
 
     class Meta:
         model = Person
-        fields = ["sex", "is_active", "primary_group"]
+        fields = ["sex", "primary_group"]
 
 
 class PermissionFilter(FilterSet):
diff --git a/aleksis/core/forms.py b/aleksis/core/forms.py
index eb2465870a36174997c73a967b04690b30d60051..680da9d59f7dead43379925d67dbc1975f01a2e2 100644
--- a/aleksis/core/forms.py
+++ b/aleksis/core/forms.py
@@ -48,7 +48,6 @@ class PersonForm(ExtensibleForm):
             _("Base data"),
             "short_name",
             Row("user", "primary_group"),
-            "is_active",
             Row("first_name", "additional_name", "last_name"),
         ),
         Fieldset(_("Address"), Row("street", "housenumber"), Row("postal_code", "place")),
@@ -66,7 +65,6 @@ class PersonForm(ExtensibleForm):
         model = Person
         fields = [
             "user",
-            "is_active",
             "first_name",
             "last_name",
             "additional_name",
diff --git a/aleksis/core/migrations/0031_remove_person_is_active.py b/aleksis/core/migrations/0031_remove_person_is_active.py
new file mode 100644
index 0000000000000000000000000000000000000000..a3c3f7a444964a62f7b69a293e9a452976f0300d
--- /dev/null
+++ b/aleksis/core/migrations/0031_remove_person_is_active.py
@@ -0,0 +1,17 @@
+# Generated by Django 3.2.11 on 2022-01-08 10:30
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0030_user_attributes'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='person',
+            name='is_active',
+        ),
+    ]
diff --git a/aleksis/core/models.py b/aleksis/core/models.py
index 133af202290421dd215b568cd6a1133adc239571..dbc5ed5bf83af53f8806dc98aa66ce9f41be1c27 100644
--- a/aleksis/core/models.py
+++ b/aleksis/core/models.py
@@ -176,7 +176,6 @@ class Person(ExtensibleModel):
         related_name="person",
         verbose_name=_("Linked user"),
     )
-    is_active = models.BooleanField(verbose_name=_("Is person active?"), default=True)
 
     first_name = models.CharField(verbose_name=_("First name"), max_length=255)
     last_name = models.CharField(verbose_name=_("Last name"), max_length=255)
diff --git a/aleksis/core/views.py b/aleksis/core/views.py
index cfb9cd5b3050af79341958aa60f72ad88d097923..0d78123845e3aeca17ef3bfff14c2b5dd6d64d8d 100644
--- a/aleksis/core/views.py
+++ b/aleksis/core/views.py
@@ -297,9 +297,7 @@ def persons(request: HttpRequest) -> HttpResponse:
     context = {}
 
     # Get all persons
-    persons = get_objects_for_user(
-        request.user, "core.view_person", Person.objects.filter(is_active=True)
-    )
+    persons = get_objects_for_user(request.user, "core.view_person", Person.objects.all())
 
     # Get filter
     persons_filter = PersonFilter(request.GET, queryset=persons)
@@ -346,7 +344,7 @@ def group(request: HttpRequest, id_: int) -> HttpResponse:
     group = Group.objects.get(pk=id_)
 
     # Get members
-    members = group.members.filter(is_active=True)
+    members = group.members.all()
 
     # Build table
     members_table = PersonsTable(members)
@@ -354,7 +352,7 @@ def group(request: HttpRequest, id_: int) -> HttpResponse:
     context["members_table"] = members_table
 
     # Get owners
-    owners = group.owners.filter(is_active=True)
+    owners = group.owners.all()
 
     # Build table
     owners_table = PersonsTable(owners)
diff --git a/docs/dev/04_materialize_templates.rst b/docs/dev/04_materialize_templates.rst
index 3e7979cf1d39c317bb02832d43c84ab970b9d7a1..882604168d04ae6fd6085626305844a8648405e7 100644
--- a/docs/dev/04_materialize_templates.rst
+++ b/docs/dev/04_materialize_templates.rst
@@ -111,7 +111,6 @@ In your ``forms.py`` you can configure the layout of the fields like in the Edit
             _("Base data"),
             "short_name",
             Row("user", "primary_group"),
-            "is_active",
             Row("first_name", "additional_name", "last_name"),
         ),
         Fieldset(_("Address"), Row("street", "housenumber"), Row("postal_code", "place")),
@@ -136,4 +135,4 @@ After you've loaded the template tag, you can simply generate the table like thi
 
 .. _MaterializeCSS: https://materializecss.com/
 .. _django-material: https://pypi.org/project/django-material/
-.. _Extended Navbar with Tabs: https://materializecss.com/navbar.html#navbar-tabs
\ No newline at end of file
+.. _Extended Navbar with Tabs: https://materializecss.com/navbar.html#navbar-tabs