diff --git a/batch_service_interface.info.yml b/batch_service_interface.info.yml
index ef15736..a732fee 100644
--- a/batch_service_interface.info.yml
+++ b/batch_service_interface.info.yml
@@ -1,5 +1,5 @@
 name: 'Batch Service Interface'
 type: module
 description: 'Provides a batch helper service and abstract class to support it.'
-core_version_requirement: ^10.3 || ^11
+core_version_requirement: ^10.3 || ^11 || ^12
 package: 'Developer'
diff --git a/batch_service_interface.module b/batch_service_interface.module
index 7794c97..c859830 100644
--- a/batch_service_interface.module
+++ b/batch_service_interface.module
@@ -4,21 +4,14 @@
  * @file
  * Contains batch_service_interface.module.
  */
-
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\batch_service_interface\Hook\BatchServiceInterfaceHooks;
 use Drupal\Core\Routing\RouteMatchInterface;
 
 /**
  * Implements hook_help().
  */
+#[LegacyHook]
 function batch_service_interface_help($route_name, RouteMatchInterface $route_match) {
-  switch ($route_name) {
-    // Main module help for the batch_service_interface module.
-    case 'help.page.batch_service_interface':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('Provides a batch helper service and abstract class to support it.') . '</p>';
-      return $output;
-
-    default:
-  }
+  return \Drupal::service(BatchServiceInterfaceHooks::class)->help($route_name, $route_match);
 }
diff --git a/batch_service_interface.services.yml b/batch_service_interface.services.yml
new file mode 100644
index 0000000..3aa2614
--- /dev/null
+++ b/batch_service_interface.services.yml
@@ -0,0 +1,5 @@
+
+services:
+  Drupal\batch_service_interface\Hook\BatchServiceInterfaceHooks:
+    class: Drupal\batch_service_interface\Hook\BatchServiceInterfaceHooks
+    autowire: true
diff --git a/modules/batch_example/batch_example.info.yml b/modules/batch_example/batch_example.info.yml
index eb39648..11fe33f 100644
--- a/modules/batch_example/batch_example.info.yml
+++ b/modules/batch_example/batch_example.info.yml
@@ -1,7 +1,7 @@
 name: 'Batch Service Interface Example Module'
 type: module
 description: 'Provide a simple form that kicks off an example batch job.'
-core_version_requirement: ^10.3 || ^11
+core_version_requirement: ^10.3 || ^11 || ^12
 package: 'Developer (Examples)'
 
 hidden: true
diff --git a/src/Hook/BatchServiceInterfaceHooks.php b/src/Hook/BatchServiceInterfaceHooks.php
new file mode 100644
index 0000000..8a5b075
--- /dev/null
+++ b/src/Hook/BatchServiceInterfaceHooks.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace Drupal\batch_service_interface\Hook;
+
+use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\Core\Hook\Attribute\Hook;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+/**
+ * Hook implementations for batch_service_interface.
+ */
+class BatchServiceInterfaceHooks
+{
+    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 batch_service_interface module.
+            case 'help.page.batch_service_interface':
+                $output = '';
+                $output .= '<h3>' . $this->t('About') . '</h3>';
+                $output .= '<p>' . $this->t('Provides a batch helper service and abstract class to support it.') . '</p>';
+                return $output;
+            default:
+        }
+    }
+}
