diff --git a/advancedqueue_runner.info.yml b/advancedqueue_runner.info.yml
index 906fdbd..c23be9d 100644
--- a/advancedqueue_runner.info.yml
+++ b/advancedqueue_runner.info.yml
@@ -1,7 +1,7 @@
 name: 'Advanced Queue Runner'
 type: module
 description: 'This module assist Advanced queue module for running in the background without activate cronjob or run command'
-core_version_requirement: ^8.8 || ^9 || ^10 || ^11
+core_version_requirement: ^10.1 || ^11 || ^12
 package: 'Custom'
 dependencies:
   - advancedqueue:advancedqueue
diff --git a/advancedqueue_runner.module b/advancedqueue_runner.module
index 33b3f70..f2fb91e 100644
--- a/advancedqueue_runner.module
+++ b/advancedqueue_runner.module
@@ -1,5 +1,8 @@
 <?php
 
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\advancedqueue_runner\Hook\AdvancedqueueRunnerHooks;
+
 /**
  * @file
  * Contains advancedqueue_runner.module.
@@ -12,29 +15,18 @@ use Drupal\Core\Routing\RouteMatchInterface;
 /**
  * Implements hook_help().
  */
-function advancedqueue_runner_help($route_name, RouteMatchInterface $route_match) {
-  switch ($route_name) {
-    // Main module help for the advancedqueue_runner module.
-    case 'help.page.advancedqueue_runner':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('This module assist Advanced queue module for running in the background without activate cronjob or run command') . '</p>';
-      return $output;
-
-    default:
-  }
-  return "";
+#[LegacyHook]
+function advancedqueue_runner_help($route_name, RouteMatchInterface $route_match)
+{
+    return \Drupal::service(AdvancedqueueRunnerHooks::class)->help($route_name, $route_match);
 }
 
 /**
  * Implements hook_theme().
  */
+#[LegacyHook]
 function advancedqueue_runner_theme() {
-  return [
-    'advancedqueue_runner' => [
-      'render element' => 'children',
-    ],
-  ];
+  return \Drupal::service(AdvancedqueueRunnerHooks::class)->theme();
 }
 
 /**
@@ -55,31 +47,8 @@ function advancedqueue_runner_set_environment_home() {
 /**
  * Implements hook_cron().
  */
-function advancedqueue_runner_cron() {
-
-  $config = \Drupal::config('advancedqueue_runner.settings');
-  if ($config->get("auto-restart-in-cron") == 1) {
-    $pid = $config->get('runner-pid');
-    if (isset($pid) && !empty($pid)) {
-      // If the runner is already start, check if pid still exist.
-      if (!Runner::statusByPid($pid)) {
-
-        // Have to set home variable.
-        advancedqueue_runner_set_environment_home();
-
-        // If no, restart the runner with existing set config,.
-        $newProcess = new Runner('php ' . __DIR__ . '/src/Scripts/jobs.php');
-        $newPID = $newProcess->getPid();
-        if ($newProcess->status()) {
-          // Update $config->get('runner-pid')
-          $config = \Drupal::service('config.factory')->getEditable('advancedqueue_runner.settings');
-          $config->set('runner-pid', $newPID);
-          $config->save();
-        }
-        else {
-          \Drupal::logger("advancedqueue_runner")->error("Unable to restart the runner");
-        }
-      }
-    }
-  }
+#[LegacyHook]
+function advancedqueue_runner_cron()
+{
+    \Drupal::service(AdvancedqueueRunnerHooks::class)->cron();
 }
diff --git a/advancedqueue_runner.services.yml b/advancedqueue_runner.services.yml
index ff9670b..cf35620 100644
--- a/advancedqueue_runner.services.yml
+++ b/advancedqueue_runner.services.yml
@@ -5,3 +5,7 @@ services:
   advancedqueue_runner.default:
     class: Drupal\advancedqueue_runner\DefaultService
     arguments: ['@entity_type.manager', '@messenger']
+
+  Drupal\advancedqueue_runner\Hook\AdvancedqueueRunnerHooks:
+    class: Drupal\advancedqueue_runner\Hook\AdvancedqueueRunnerHooks
+    autowire: true
diff --git a/src/Hook/AdvancedqueueRunnerHooks.php b/src/Hook/AdvancedqueueRunnerHooks.php
new file mode 100644
index 0000000..ce64ad3
--- /dev/null
+++ b/src/Hook/AdvancedqueueRunnerHooks.php
@@ -0,0 +1,73 @@
+<?php
+
+namespace Drupal\advancedqueue_runner\Hook;
+
+use Drupal\advancedqueue_runner\Classes\Runner;
+use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\Core\Hook\Attribute\Hook;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+/**
+ * Hook implementations for advancedqueue_runner.
+ */
+class AdvancedqueueRunnerHooks
+{
+    use StringTranslationTrait;
+    /**
+     * Implements hook_help().
+     */
+    #[Hook('help')]
+    public function help($route_name, \Drupal\Core\Routing\RouteMatchInterface $route_match)
+    {
+        switch ($route_name) {
+            // Main module help for the advancedqueue_runner module.
+            case 'help.page.advancedqueue_runner':
+                $output = '';
+                $output .= '<h3>' . $this->t('About') . '</h3>';
+                $output .= '<p>' . $this->t('This module assist Advanced queue module for running in the background without activate cronjob or run command') . '</p>';
+                return $output;
+            default:
+        }
+        return "";
+    }
+    /**
+     * Implements hook_theme().
+     */
+    #[Hook('theme')]
+    public static function theme()
+    {
+        return [
+            'advancedqueue_runner' => [
+                'render element' => 'children',
+            ],
+        ];
+    }
+    /**
+     * Implements hook_cron().
+     */
+    #[Hook('cron')]
+    public static function cron()
+    {
+        $config = \Drupal::config('advancedqueue_runner.settings');
+        if ($config->get("auto-restart-in-cron") == 1) {
+            $pid = $config->get('runner-pid');
+            if (isset($pid) && !empty($pid)) {
+                // If the runner is already start, check if pid still exist.
+                if (!\Drupal\advancedqueue_runner\Classes\Runner::statusByPid($pid)) {
+                    // Have to set home variable.
+                    advancedqueue_runner_set_environment_home();
+                    // If no, restart the runner with existing set config,.
+                    $newProcess = new \Drupal\advancedqueue_runner\Classes\Runner('php ' . __DIR__ . '/src/Scripts/jobs.php');
+                    $newPID = $newProcess->getPid();
+                    if ($newProcess->status()) {
+                        // Update $config->get('runner-pid')
+                        $config = \Drupal::service('config.factory')->getEditable('advancedqueue_runner.settings');
+                        $config->set('runner-pid', $newPID);
+                        $config->save();
+                    } else {
+                        \Drupal::logger("advancedqueue_runner")->error("Unable to restart the runner");
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/tests/src/Functional/LoadTest.php b/tests/src/Functional/LoadTest.php
index 07e49a7..48cdbd2 100644
--- a/tests/src/Functional/LoadTest.php
+++ b/tests/src/Functional/LoadTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\advancedqueue_runner\Functional;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\Core\Url;
 use Drupal\Tests\BrowserTestBase;
 use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
@@ -12,6 +13,7 @@ use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
  * @group advancedqueue_runner
  */
 #[RunTestsInSeparateProcesses]
+#[Group('advancedqueue_runner')]
 class LoadTest extends BrowserTestBase {
 
   /**
