diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 58f3bf2475686994a32377f574c653f21353cf61..e8e2e1e4282a74c7bf8a5abfd2a6f352ac82037a 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -14,6 +14,7 @@ Fixed
 
 * Signup was forbidden even if it was enabled in settings
 * Phone numbers were not properly linked and suboptimally formatted on person page
+* Favicon upload failed with S3 storage.
 
 `2.6`_ - 2022-01-10
 -------------------
diff --git a/aleksis/core/apps.py b/aleksis/core/apps.py
index d37a1c616953013bec122aa8070ba0d6a389a921..ab264c53a91edac303e8cb574e7d7a56fdca00ac 100644
--- a/aleksis/core/apps.py
+++ b/aleksis/core/apps.py
@@ -17,7 +17,7 @@ from .registries import (
     site_preferences_registry,
 )
 from .util.apps import AppConfig
-from .util.core_helpers import get_or_create_favicon, has_person
+from .util.core_helpers import get_or_create_favicon, get_site_preferences, has_person
 from .util.sass_helpers import clean_scss
 
 
@@ -103,11 +103,15 @@ class CoreConfig(AppConfig):
                 is_favicon = name == "favicon"
 
                 if new_value:
-                    favicon_id = Favicon.on_site.update_or_create(
+                    # Get file object from preferences instead of using new_value
+                    # to prevent problems with special file storages
+                    file_obj = get_site_preferences()[f"{section}__{name}"]
+
+                    favicon = Favicon.on_site.update_or_create(
                         title=name,
-                        defaults={"isFavicon": is_favicon, "faviconImage": new_value},
+                        defaults={"isFavicon": is_favicon, "faviconImage": file_obj},
                     )[0]
-                    FaviconImg.objects.filter(faviconFK=favicon_id).delete()
+                    FaviconImg.objects.filter(faviconFK=favicon).delete()
                 else:
                     Favicon.on_site.filter(title=name, isFavicon=is_favicon).delete()
                     if name in settings.DEFAULT_FAVICON_PATHS: