diff --git a/aleksis/apps/alsijil/forms.py b/aleksis/apps/alsijil/forms.py
index 72d3d20275c9c9cfec0909a418940862ce9d6491..322de9d2fa763a3be9cec5fab8fae30c8550a1ec 100644
--- a/aleksis/apps/alsijil/forms.py
+++ b/aleksis/apps/alsijil/forms.py
@@ -275,13 +275,14 @@ class FilterRegisterObjectForm(forms.Form):
     date_end = forms.DateField(label=_("End date"))
 
     @classmethod
-    def get_initial(cls):
+    def get_initial(cls, has_documentation: Optional[bool] = None):
         date_end = timezone.now().date()
         date_start = date_end - timedelta(days=30)
         return {
             "school_term": SchoolTerm.current,
             "date_start": date_start,
             "date_end": date_end,
+            "has_documentation": has_documentation,
         }
 
     def __init__(
@@ -289,13 +290,14 @@ class FilterRegisterObjectForm(forms.Form):
         request: HttpRequest,
         *args,
         for_person: bool = True,
+        default_documentation: Optional[bool] = None,
         groups: Optional[Sequence[Group]] = None,
         **kwargs
     ):
         self.request = request
         person = self.request.user.person
 
-        kwargs["initial"] = self.get_initial()
+        kwargs["initial"] = self.get_initial(has_documentation=default_documentation)
         super().__init__(*args, **kwargs)
 
         self.fields["school_term"].queryset = SchoolTerm.objects.all()
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 5c09923367c327ff93d473769876a2e2d21248ef..c4c4385f6e00bafe70e7c0147e0e974c9132d5d9 100644
--- a/aleksis/apps/alsijil/views.py
+++ b/aleksis/apps/alsijil/views.py
@@ -961,8 +961,19 @@ 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
-    filter_form = FilterRegisterObjectForm(request, request.GET or None, for_person=True)
-    filter_dict = filter_form.cleaned_data if filter_form.is_valid() else {}
+    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=default_documentation
+    )
+    filter_dict = (
+        filter_form.cleaned_data
+        if filter_form.is_valid()
+        else {"has_documentation": default_documentation}
+    )
     filter_dict["person"] = person
     context["filter_form"] = filter_form