diff --git a/aleksis/core/mixins.py b/aleksis/core/mixins.py
index 3232aac4deb912dfb65f28d69831767bf2fd8445..c6cee9a8c6bbefed3439eef156b685f5484e4a13 100644
--- a/aleksis/core/mixins.py
+++ b/aleksis/core/mixins.py
@@ -1,5 +1,6 @@
 # flake8: noqa: DJ12
 
+import os
 from datetime import datetime
 from typing import Any, Callable, List, Optional, Union
 
@@ -21,6 +22,8 @@ from django.views.generic import CreateView, UpdateView
 from django.views.generic.edit import DeleteView, ModelFormMixin
 
 import reversion
+from dynamic_preferences.settings import preferences_settings
+from dynamic_preferences.types import FilePreference
 from guardian.admin import GuardedModelAdmin
 from guardian.core import ObjectPermissionChecker
 from jsonstore.fields import IntegerField, JSONFieldMixin
@@ -529,3 +532,14 @@ class SchoolTermRelatedExtensibleForm(ExtensibleForm):
             kwargs["initial"] = {"school_term": SchoolTerm.current}
 
         super().__init__(*args, **kwargs)
+
+
+class PublicFilePreferenceMixin(FilePreference):
+    """Uploads a file to the public namespace."""
+
+    upload_path = "public"
+
+    def get_upload_path(self):
+        return os.path.join(
+            self.upload_path, preferences_settings.FILE_PREFERENCE_UPLOAD_DIR, self.identifier()
+        )
diff --git a/aleksis/core/preferences.py b/aleksis/core/preferences.py
index d0de22fe03cc044fa5722982dfcc7faf86a4503c..0110d9aa84d3848912bf411a00063d86609f6c1d 100644
--- a/aleksis/core/preferences.py
+++ b/aleksis/core/preferences.py
@@ -16,6 +16,7 @@ from dynamic_preferences.types import (
 )
 from oauth2_provider.models import AbstractApplication
 
+from .mixins import PublicFilePreferenceMixin
 from .models import Group, Person
 from .registries import person_preferences_registry, site_preferences_registry
 from .util.notifications import get_notification_choices_lazy
@@ -78,7 +79,7 @@ class ColourSecondary(StringPreference):
 
 
 @site_preferences_registry.register
-class Logo(FilePreference):
+class Logo(PublicFilePreferenceMixin, FilePreference):
     """Logo of your AlekSIS instance."""
 
     section = theme
@@ -88,7 +89,7 @@ class Logo(FilePreference):
 
 
 @site_preferences_registry.register
-class Favicon(FilePreference):
+class Favicon(PublicFilePreferenceMixin, FilePreference):
     """Favicon of your AlekSIS instance."""
 
     section = theme
@@ -98,7 +99,7 @@ class Favicon(FilePreference):
 
 
 @site_preferences_registry.register
-class PWAIcon(FilePreference):
+class PWAIcon(PublicFilePreferenceMixin, FilePreference):
     """PWA-Icon of your AlekSIS instance."""
 
     section = theme