diff --git a/adminimal_admin_toolbar.info.yml b/adminimal_admin_toolbar.info.yml
index d66594f..870a811 100755
--- a/adminimal_admin_toolbar.info.yml
+++ b/adminimal_admin_toolbar.info.yml
@@ -1,5 +1,5 @@
 name: Adminimal Admin Toolbar
-core_version_requirement: ^8 || ^9 || ^10 || ^11
+core_version_requirement: ^10.1 || ^11 || ^12
 description: Adminimal styling brought to admin toolbar.
 package: Administration
 configure: adminimal_admin_toolbar.settings
diff --git a/adminimal_admin_toolbar.module b/adminimal_admin_toolbar.module
index 6be3a67..389a051 100644
--- a/adminimal_admin_toolbar.module
+++ b/adminimal_admin_toolbar.module
@@ -1,5 +1,8 @@
 <?php
 
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\adminimal_admin_toolbar\Hook\AdminimalAdminToolbarHooks;
+
 /**
  * @file
  * Functions to support adminimal admin toolbar.
@@ -8,36 +11,25 @@
 /**
  * Implements hook_preprocess_HOOK().
  */
+#[LegacyHook]
 function adminimal_admin_toolbar_preprocess_html(&$variables) {
-  // Add adminimal-admin-toolbar class to the body.
-  if (_adminimal_admin_toolbar_is_access()) {
-    $variables['attributes']['class'][] = 'adminimal-admin-toolbar';
-  }
+  \Drupal::service(AdminimalAdminToolbarHooks::class)->preprocessHtml($variables);
 }
 
 /**
  * Implements hook_page_attachments_alter().
  */
+#[LegacyHook]
 function adminimal_admin_toolbar_page_attachments_alter(array &$page) {
-  // Attaches css assets globally.
-  if (_adminimal_admin_toolbar_is_access()) {
-    $page['#attached']['library'][] = 'adminimal_admin_toolbar/adminimal-admin-toolbar';
-
-    // Add Open Sans css file.
-    if (!(\Drupal::config('adminimal_admin_toolbar.settings')->get('avoid_custom_font'))) {
-      $page['#attached']['library'][] = 'adminimal_admin_toolbar/google-fonts';
-    }
-  }
+  \Drupal::service(AdminimalAdminToolbarHooks::class)->pageAttachmentsAlter($page);
 }
 
 /**
  * Implements hook_toolbar_alter().
  */
+#[LegacyHook]
 function adminimal_admin_toolbar_toolbar_alter(&$items) {
-  // Add class to the user tab so it can be moved to the right.
-  if (_adminimal_admin_toolbar_is_access()) {
-    $items['user']['#wrapper_attributes']['class'] = ['user-toolbar-tab'];
-  }
+  \Drupal::service(AdminimalAdminToolbarHooks::class)->toolbarAlter($items);
 }
 
 /**
diff --git a/adminimal_admin_toolbar.post_update.php b/adminimal_admin_toolbar.post_update.php
index a6f1094..7301f86 100644
--- a/adminimal_admin_toolbar.post_update.php
+++ b/adminimal_admin_toolbar.post_update.php
@@ -1,15 +1,16 @@
 <?php
 
+use Drupal\Component\Utility\DeprecationHelper;
+
 /**
  * @file
  * Install, update and uninstall functions for adminimal_admin_toolbar.
  */
-
 /**
  * Update adminimal_admin_toolbar.settings to include avoid_custom_font.
  */
 function adminimal_admin_toolbar_post_update_avoid_custom_font() {
   $config = \Drupal::configFactory()->getEditable('adminimal_admin_toolbar.settings');
   $config->set('avoid_custom_font', FALSE);
-  $config->save(TRUE);
+  DeprecationHelper::backwardsCompatibleCall(\Drupal::VERSION, '11.4.0', fn() => $config->save(), fn() => $config->save(TRUE));
 }
diff --git a/adminimal_admin_toolbar.services.yml b/adminimal_admin_toolbar.services.yml
new file mode 100644
index 0000000..49d5fd0
--- /dev/null
+++ b/adminimal_admin_toolbar.services.yml
@@ -0,0 +1,5 @@
+
+services:
+  Drupal\adminimal_admin_toolbar\Hook\AdminimalAdminToolbarHooks:
+    class: Drupal\adminimal_admin_toolbar\Hook\AdminimalAdminToolbarHooks
+    autowire: true
diff --git a/src/Hook/AdminimalAdminToolbarHooks.php b/src/Hook/AdminimalAdminToolbarHooks.php
new file mode 100644
index 0000000..dd0d045
--- /dev/null
+++ b/src/Hook/AdminimalAdminToolbarHooks.php
@@ -0,0 +1,54 @@
+<?php
+
+namespace Drupal\adminimal_admin_toolbar\Hook;
+
+use Drupal\Core\Hook\Attribute\Hook;
+/**
+ * Hook implementations for adminimal_admin_toolbar.
+ */
+class AdminimalAdminToolbarHooks
+{
+    /**
+     * @file
+     * Functions to support adminimal admin toolbar.
+     */
+    /**
+     * Implements hook_preprocess_HOOK().
+     */
+    #[Hook('preprocess_html')]
+    public static function preprocessHtml(&$variables)
+    {
+        // Add adminimal-admin-toolbar class to the body.
+        if (_adminimal_admin_toolbar_is_access()) {
+            $variables['attributes']['class'][] = 'adminimal-admin-toolbar';
+        }
+    }
+    /**
+     * Implements hook_page_attachments_alter().
+     */
+    #[Hook('page_attachments_alter')]
+    public static function pageAttachmentsAlter(array &$page)
+    {
+        // Attaches css assets globally.
+        if (_adminimal_admin_toolbar_is_access()) {
+            $page['#attached']['library'][] = 'adminimal_admin_toolbar/adminimal-admin-toolbar';
+            // Add Open Sans css file.
+            if (!\Drupal::config('adminimal_admin_toolbar.settings')->get('avoid_custom_font')) {
+                $page['#attached']['library'][] = 'adminimal_admin_toolbar/google-fonts';
+            }
+        }
+    }
+    /**
+     * Implements hook_toolbar_alter().
+     */
+    #[Hook('toolbar_alter')]
+    public static function toolbarAlter(&$items)
+    {
+        // Add class to the user tab so it can be moved to the right.
+        if (_adminimal_admin_toolbar_is_access()) {
+            $items['user']['#wrapper_attributes']['class'] = [
+                'user-toolbar-tab',
+            ];
+        }
+    }
+}
