diff --git a/administrator/modules/mod_user/mod_user.php b/administrator/modules/mod_user/mod_user.php
deleted file mode 100644
index a78693f73252a..0000000000000
--- a/administrator/modules/mod_user/mod_user.php
+++ /dev/null
@@ -1,17 +0,0 @@
-
- * @license GNU General Public License version 2 or later; see LICENSE.txt
- */
-
-\defined('_JEXEC') or die;
-
-use Joomla\CMS\Helper\ModuleHelper;
-
-$user = $app->getIdentity();
-
-require ModuleHelper::getLayoutPath('mod_user', $params->get('layout', 'default'));
diff --git a/administrator/modules/mod_user/mod_user.xml b/administrator/modules/mod_user/mod_user.xml
index 2ddf26bbadb5d..4c491b040bff3 100644
--- a/administrator/modules/mod_user/mod_user.xml
+++ b/administrator/modules/mod_user/mod_user.xml
@@ -9,8 +9,10 @@
www.joomla.org
4.0.0
MOD_USER_XML_DESCRIPTION
+ Joomla\Module\User
- mod_user.php
+ services
+ src
tmpl
diff --git a/administrator/modules/mod_user/services/provider.php b/administrator/modules/mod_user/services/provider.php
new file mode 100644
index 0000000000000..3c23c7c9228d3
--- /dev/null
+++ b/administrator/modules/mod_user/services/provider.php
@@ -0,0 +1,39 @@
+
+ * @license GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+\defined('_JEXEC') or die;
+
+use Joomla\CMS\Extension\Service\Provider\Module;
+use Joomla\CMS\Extension\Service\Provider\ModuleDispatcherFactory;
+use Joomla\DI\Container;
+use Joomla\DI\ServiceProviderInterface;
+
+/**
+ * The user menu module service provider.
+ *
+ * @since __DEPLOY_VERSION__
+ */
+return new class () implements ServiceProviderInterface {
+ /**
+ * Registers the service provider with a DI container.
+ *
+ * @param Container $container The DI container.
+ *
+ * @return void
+ *
+ * @since __DEPLOY_VERSION__
+ */
+ public function register(Container $container)
+ {
+ $container->registerServiceProvider(new ModuleDispatcherFactory('\\Joomla\\Module\\User'));
+
+ $container->registerServiceProvider(new Module());
+ }
+};
diff --git a/administrator/modules/mod_user/src/Dispatcher/Dispatcher.php b/administrator/modules/mod_user/src/Dispatcher/Dispatcher.php
new file mode 100644
index 0000000000000..6ad5e94ad346b
--- /dev/null
+++ b/administrator/modules/mod_user/src/Dispatcher/Dispatcher.php
@@ -0,0 +1,41 @@
+
+ * @license GNU General Public License version 2 or later; see LICENSE.txt
+ */
+
+namespace Joomla\Module\User\Administrator\Dispatcher;
+
+use Joomla\CMS\Dispatcher\AbstractModuleDispatcher;
+
+// phpcs:disable PSR1.Files.SideEffects
+\defined('_JEXEC') or die;
+// phpcs:enable PSR1.Files.SideEffects
+
+/**
+ * Dispatcher class for mod_user
+ *
+ * @since __DEPLOY_VERSION__
+ */
+class Dispatcher extends AbstractModuleDispatcher
+{
+ /**
+ * Returns the layout data.
+ *
+ * @return array
+ *
+ * @since __DEPLOY_VERSION__
+ */
+ protected function getLayoutData()
+ {
+ $data = parent::getLayoutData();
+
+ $data['user'] = $this->getApplication()->getIdentity();
+
+ return $data;
+ }
+}