diff --git a/redirect_node.module b/redirect_node.module
index 64a9b9f..3011e24 100644
--- a/redirect_node.module
+++ b/redirect_node.module
@@ -5,11 +5,12 @@
  * Contains redirect_node.module.
  */
 
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\redirect_node\Hook\RedirectNodeHooks;
 use Drupal\Component\Utility\UrlHelper;
 use Drupal\Core\Block\BlockPluginInterface;
 use Drupal\Core\Url;
 use Drupal\node\Entity\Node;
-use Drupal\redirect_node\RedirectNodeRenderCallback;
 
 /**
  * Implements hook_block_view_BASE_BLOCK_ID_alter().
@@ -17,8 +18,9 @@ use Drupal\redirect_node\RedirectNodeRenderCallback;
  * Add a prerender callback after all other callbacks to rewrite the displayed
  * url in menus blocks.
  */
+#[LegacyHook]
 function redirect_node_block_view_system_menu_block_alter(array &$build, BlockPluginInterface $block) {
-  $build['#pre_render'][] = [RedirectNodeRenderCallback::class, 'preRender'];
+  \Drupal::service(RedirectNodeHooks::class)->blockViewSystemMenuBlockAlter($build, $block);
 }
 
 /**
diff --git a/redirect_node.services.yml b/redirect_node.services.yml
index 17f3d08..18d9b55 100644
--- a/redirect_node.services.yml
+++ b/redirect_node.services.yml
@@ -6,3 +6,7 @@ services:
       - '@entity_type.manager'
     tags:
       - { name: event_subscriber }
+
+  Drupal\redirect_node\Hook\RedirectNodeHooks:
+    class: Drupal\redirect_node\Hook\RedirectNodeHooks
+    autowire: true
diff --git a/src/EventSubscriber/RedirectRedirectNodes.php b/src/EventSubscriber/RedirectRedirectNodes.php
index 3af19c6..de90c2a 100644
--- a/src/EventSubscriber/RedirectRedirectNodes.php
+++ b/src/EventSubscriber/RedirectRedirectNodes.php
@@ -49,7 +49,7 @@ class RedirectRedirectNodes implements EventSubscriberInterface {
   /**
    * {@inheritdoc}
    */
-  public static function getSubscribedEvents() {
+  public static function getSubscribedEvents(): array {
     // This announces which events you want to subscribe to.
     // We only need the request event for this example.  Pass
     // this an array of method names.
diff --git a/src/Hook/RedirectNodeHooks.php b/src/Hook/RedirectNodeHooks.php
new file mode 100644
index 0000000..f188824
--- /dev/null
+++ b/src/Hook/RedirectNodeHooks.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace Drupal\redirect_node\Hook;
+
+use Drupal\redirect_node\RedirectNodeRenderCallback;
+use Drupal\Core\Block\BlockPluginInterface;
+use Drupal\Core\Hook\Attribute\Hook;
+
+/**
+ * Hook implementations for redirect_node.
+ */
+class RedirectNodeHooks {
+
+  /**
+   * Implements hook_block_view_BASE_BLOCK_ID_alter().
+   *
+   * Add a prerender callback after all other callbacks to rewrite the displayed
+   * url in menus blocks.
+   */
+  #[Hook('block_view_system_menu_block_alter')]
+  public static function blockViewSystemMenuBlockAlter(array &$build, BlockPluginInterface $block) {
+    $build['#pre_render'][] = [
+      RedirectNodeRenderCallback::class,
+      'preRender',
+    ];
+  }
+
+}
