diff --git a/aleksis/core/util/core_helpers.py b/aleksis/core/util/core_helpers.py
index aeffad13fb6d1d869a8b6e2793b18f36a9063096..b7d3bcd7e0308168d2912693af13807b23e34e99 100644
--- a/aleksis/core/util/core_helpers.py
+++ b/aleksis/core/util/core_helpers.py
@@ -1,8 +1,7 @@
 import os
-import pkgutil
 import time
 from datetime import datetime, timedelta
-from importlib import import_module
+from importlib import import_module, metadata
 from itertools import groupby
 from operator import itemgetter
 from typing import Any, Callable, Optional, Sequence, Union
@@ -59,14 +58,8 @@ def dt_show_toolbar(request: HttpRequest) -> bool:
 
 
 def get_app_packages() -> Sequence[str]:
-    """Find all packages within the aleksis.apps namespace."""
-    # Import error are non-fatal here because probably simply no app is installed.
-    try:
-        import aleksis.apps
-    except ImportError:
-        return []
-
-    return [f"aleksis.apps.{pkg[1]}" for pkg in pkgutil.iter_modules(aleksis.apps.__path__)]
+    """Find all registered apps from the setuptools entrypoint."""
+    return [f"{ep.module}.{ep.attr}" for ep in metadata.entry_points()["aleksis.app"]]
 
 
 def merge_app_settings(
@@ -81,7 +74,8 @@ def merge_app_settings(
     Note: Only selected names will be imported frm it to minimise impact of
     potentially malicious apps!
     """
-    for pkg in get_app_packages():
+    for app in get_app_packages():
+        pkg = ".".join(app.split(".")[:-2])
         try:
             mod_settings = import_module(pkg + ".settings")
         except ImportError: