diff --git a/menu_delete.info.yml b/menu_delete.info.yml
index 95775de..7b727de 100644
--- a/menu_delete.info.yml
+++ b/menu_delete.info.yml
@@ -1,5 +1,5 @@
 name: Menu Delete
 type: module
 description: "Selectively delete menu items."
-core_version_requirement: ^8.8 || ^9 || ^10 || ^11
+core_version_requirement: ^10.1 || ^11 || ^12
 package: Menu
diff --git a/menu_delete.module b/menu_delete.module
index 6efff6a..5956487 100644
--- a/menu_delete.module
+++ b/menu_delete.module
@@ -5,57 +5,25 @@
  * Contains menu_delete.module.
  */
 
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\menu_delete\Hook\MenuDeleteHooks;
 use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Render\Element;
 use Drupal\Core\Routing\RouteMatchInterface;
 
 /**
  * Implements hook_help().
  */
+#[LegacyHook]
 function menu_delete_help($route_name, RouteMatchInterface $route_match) {
-  switch ($route_name) {
-    case 'help.page.menu_delete':
-      $output = '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('Easily delete multiple menu items at a time.') . '</p>';
-      return $output;
-  }
+  return \Drupal::service(MenuDeleteHooks::class)->help($route_name, $route_match);
 }
 
 /**
  * Implements hook_form_alter().
  */
+#[LegacyHook]
 function menu_delete_form_alter(&$form, FormStateInterface $form_state, $form_id) {
-  if ($form['#form_id'] == 'menu_edit_form') {
-    $form['links']['links']['#header'][] = [
-      'data' => t('Delete'),
-      'class' => ['checkbox'],
-    ];
-
-    foreach (Element::children($form['links']['links']) as $id) {
-      $form['links']['links'][$id]['delete'] = [];
-      // Add a checkbox to all menu items that can be deleted.
-      if ($form['links']['links'][$id]['#item']->link->isDeletable()) {
-        $form['links']['links'][$id]['delete'] = [
-          '#type' => 'checkbox',
-          '#title' => t('Delete'),
-          '#title_display' => 'invisible',
-          '#default_value' => FALSE,
-          '#wrapper_attributes' => [
-            'class' => ['checkbox', 'menu-delete'],
-          ],
-        ];
-      }
-    }
-
-    $form['actions']['delete_selected'] = [
-      '#type' => 'submit',
-      '#value' => t('Delete selected'),
-      '#button_type' => 'secondary',
-      '#weight' => 10,
-      '#submit' => ['menu_delete_edit_form_submit'],
-      '#name' => 'menu_delete',
-    ];
-  }
+  \Drupal::service(MenuDeleteHooks::class)->formAlter($form, $form_state, $form_id);
 }
 
 /**
diff --git a/menu_delete.services.yml b/menu_delete.services.yml
new file mode 100644
index 0000000..99bfb91
--- /dev/null
+++ b/menu_delete.services.yml
@@ -0,0 +1,5 @@
+
+services:
+  Drupal\menu_delete\Hook\MenuDeleteHooks:
+    class: Drupal\menu_delete\Hook\MenuDeleteHooks
+    autowire: true
diff --git a/src/Hook/MenuDeleteHooks.php b/src/Hook/MenuDeleteHooks.php
new file mode 100644
index 0000000..f3c596c
--- /dev/null
+++ b/src/Hook/MenuDeleteHooks.php
@@ -0,0 +1,73 @@
+<?php
+
+namespace Drupal\menu_delete\Hook;
+
+use Drupal\Core\Render\Element;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\Core\Hook\Attribute\Hook;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+
+/**
+ * Hook implementations for menu_delete.
+ */
+class MenuDeleteHooks {
+  use StringTranslationTrait;
+
+  /**
+   * Implements hook_help().
+   */
+  #[Hook('help')]
+  public function help($route_name, RouteMatchInterface $route_match) {
+    switch ($route_name) {
+      case 'help.page.menu_delete':
+        $output = '<h3>' . $this->t('About') . '</h3>';
+        $output .= '<p>' . $this->t('Easily delete multiple menu items at a time.') . '</p>';
+        return $output;
+    }
+  }
+
+  /**
+   * Implements hook_form_alter().
+   */
+  #[Hook('form_alter')]
+  public function formAlter(&$form, FormStateInterface $form_state, $form_id) {
+    if ($form['#form_id'] == 'menu_edit_form') {
+      $form['links']['links']['#header'][] = [
+        'data' => $this->t('Delete'),
+        'class' => [
+          'checkbox',
+        ],
+      ];
+      foreach (Element::children($form['links']['links']) as $id) {
+        $form['links']['links'][$id]['delete'] = [];
+        // Add a checkbox to all menu items that can be deleted.
+        if ($form['links']['links'][$id]['#item']->link->isDeletable()) {
+          $form['links']['links'][$id]['delete'] = [
+            '#type' => 'checkbox',
+            '#title' => $this->t('Delete'),
+            '#title_display' => 'invisible',
+            '#default_value' => FALSE,
+            '#wrapper_attributes' => [
+              'class' => [
+                'checkbox',
+                'menu-delete',
+              ],
+            ],
+          ];
+        }
+      }
+      $form['actions']['delete_selected'] = [
+        '#type' => 'submit',
+        '#value' => $this->t('Delete selected'),
+        '#button_type' => 'secondary',
+        '#weight' => 10,
+        '#submit' => [
+          'menu_delete_edit_form_submit',
+        ],
+        '#name' => 'menu_delete',
+      ];
+    }
+  }
+
+}
