diff --git a/aleksis/apps/alsijil/preferences.py b/aleksis/apps/alsijil/preferences.py
index 3ad751865f0534a156fd8ea7f9bfc0b558a467f8..e04e7c1da250e23fdcd7d2ef6978ef7d2cfa7602 100644
--- a/aleksis/apps/alsijil/preferences.py
+++ b/aleksis/apps/alsijil/preferences.py
@@ -124,3 +124,11 @@ class RegisterObjectsTableItemsPerPage(IntegerPreference):
     def validate(self, value):
         if value < 1:
             raise ValidationError(_("Each page must show at least one item."))
+
+
+@person_preferences_registry.register
+class DefaultLessonDocumentationFilter(BooleanPreference):
+    section = alsijil
+    name = "default_lesson_documentation_filter"
+    default = True
+    verbose_name = _("Filter lessons by existence of their lesson documentation on default")
diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py
index c691996fabe5ca8dbd441bb96bc24f4d1868329a..23c2810e78962cee1f0d5ad182f3936d6eef7ff2 100644
--- a/aleksis/apps/alsijil/views.py
+++ b/aleksis/apps/alsijil/views.py
@@ -946,11 +946,18 @@ def overview_person(request: HttpRequest, id_: Optional[int] = None) -> HttpResp
     context["extra_marks"] = extra_marks
 
     # Build filter with own form and logic as django-filter can't work with different models
+    if request.user.person.preferences["alsijil__default_lesson_documentation_filter"]:
+        default_documentation = False
+    else:
+        default_documentation = None
+
     filter_form = FilterRegisterObjectForm(
-        request, request.GET or None, for_person=True, default_documentation=False
+        request, request.GET or None, for_person=True, default_documentation=default_documentation
     )
     filter_dict = (
-        filter_form.cleaned_data if filter_form.is_valid() else {"has_documentation": False}
+        filter_form.cleaned_data
+        if filter_form.is_valid()
+        else {"has_documentation": default_documentation}
     )
     filter_dict["person"] = person
     context["filter_form"] = filter_form