diff --git a/node_title_help_text.info.yml b/node_title_help_text.info.yml
index 95fc095..7909cfd 100644
--- a/node_title_help_text.info.yml
+++ b/node_title_help_text.info.yml
@@ -1,4 +1,4 @@
 name: Node Title Help Text
 description: Allows you to add help text to node title.
 type: module
-core_version_requirement: ^8 || ^9 || ^10 || ^11
+core_version_requirement: ^10.1 || ^11 || ^12
diff --git a/node_title_help_text.module b/node_title_help_text.module
index 95e1dcc..34d5a9c 100644
--- a/node_title_help_text.module
+++ b/node_title_help_text.module
@@ -5,6 +5,8 @@
  * Allows user to add help text to node title per content type.
  */
 
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\node_title_help_text\Hook\NodeTitleHelpTextHooks;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\node\Entity\NodeType;
@@ -13,19 +15,9 @@ use Drupal\node\NodeTypeInterface;
 /**
  * Implements hook_help().
  */
+#[LegacyHook]
 function node_title_help_text_help($route_name, RouteMatchInterface $route_match) {
-  switch ($route_name) {
-    // Main module help for the custom_page module.
-    case 'help.page.node_title_help_text':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('This module allows administrator to add help text to node title field. You can set different help text for each content type. The configuration is available at content type edit form. It helps content editors understand the title field easily') . '</p>';
-      $output .= '<h3>' . t('Uses') . '</h3>';
-      $output .= '<p>' . t('Configure the help text at Administration > Structure > Content types > Edit your content type.') . '</p>';
-      return $output;
-
-    default:
-  }
+  return \Drupal::service(NodeTitleHelpTextHooks::class)->help($route_name, $route_match);
 }
 
 /**
@@ -35,17 +27,9 @@ function node_title_help_text_help($route_name, RouteMatchInterface $route_match
  *
  * @see menu_ui_form_node_form_submit()
  */
+#[LegacyHook]
 function node_title_help_text_form_node_form_alter(&$form, FormStateInterface $form_state) {
-  // Retrieve and add description to node title field on node add/edit page.
-  $node = $form_state->getFormObject()->getEntity();
-  $node_type = $node->type->entity;
-  $description = $node_type->getThirdPartySetting('node_title_help_text', 'title_help');
-  if ($description) {
-    $widget =& $form['title']['widget'];
-    if (empty($widget[0]['value']['#description'])) {
-      $widget[0]['value']['#description'] = $description;
-    }
-  }
+  \Drupal::service(NodeTitleHelpTextHooks::class)->formNodeFormAlter($form, $form_state);
 }
 
 /**
@@ -80,19 +64,9 @@ function node_title_help_text_inline_entity_form_entity_form_alter(array &$entit
  * @see NodeTypeForm::form()
  * @see node_title_help_text_node_type_form_submit()
  */
+#[LegacyHook]
 function node_title_help_text_form_node_type_form_alter(&$form, FormStateInterface $form_state, $form_id) {
-  // Set default value of the help text form element on node type form.
-  $node_type = $form_state->getFormObject()->getEntity();
-  $value = $node_type->getThirdPartySetting('node_title_help_text', 'title_help');
-
-  $form['submission']['title_help'] = [
-    '#title' => t('Title field help text'),
-    '#type' => 'textarea',
-    '#default_value' => $value,
-    '#description' => 'This text will be displayed at the bottom of title field when creating or editing content of this type.',
-  ];
-
-  $form['#entity_builders'][] = 'node_title_help_text_form_node_type_form_builder';
+  \Drupal::service(NodeTitleHelpTextHooks::class)->formNodeTypeFormAlter($form, $form_state, $form_id);
 }
 
 /**
diff --git a/node_title_help_text.services.yml b/node_title_help_text.services.yml
new file mode 100644
index 0000000..88f88f7
--- /dev/null
+++ b/node_title_help_text.services.yml
@@ -0,0 +1,5 @@
+
+services:
+  Drupal\node_title_help_text\Hook\NodeTitleHelpTextHooks:
+    class: Drupal\node_title_help_text\Hook\NodeTitleHelpTextHooks
+    autowire: true
diff --git a/src/Hook/NodeTitleHelpTextHooks.php b/src/Hook/NodeTitleHelpTextHooks.php
new file mode 100644
index 0000000..465bd1b
--- /dev/null
+++ b/src/Hook/NodeTitleHelpTextHooks.php
@@ -0,0 +1,78 @@
+<?php
+
+namespace Drupal\node_title_help_text\Hook;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\Core\Hook\Attribute\Hook;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+
+/**
+ * Hook implementations for node_title_help_text.
+ */
+class NodeTitleHelpTextHooks {
+  use StringTranslationTrait;
+
+  /**
+   * Implements hook_help().
+   */
+  #[Hook('help')]
+  public function help($route_name, RouteMatchInterface $route_match) {
+    switch ($route_name) {
+      // Main module help for the custom_page module.
+      case 'help.page.node_title_help_text':
+        $output = '';
+        $output .= '<h3>' . $this->t('About') . '</h3>';
+        $output .= '<p>' . $this->t('This module allows administrator to add help text to node title field. You can set different help text for each content type. The configuration is available at content type edit form. It helps content editors understand the title field easily') . '</p>';
+        $output .= '<h3>' . $this->t('Uses') . '</h3>';
+        $output .= '<p>' . $this->t('Configure the help text at Administration > Structure > Content types > Edit your content type.') . '</p>';
+        return $output;
+
+      default:
+    }
+  }
+
+  /**
+   * Implements hook_form_BASE_FORM_ID_alter() for \Drupal\node\NodeForm.
+   *
+   * Adds description to title field to the node form.
+   *
+   * @see menu_ui_form_node_form_submit()
+   */
+  #[Hook('form_node_form_alter')]
+  public function formNodeFormAlter(&$form, FormStateInterface $form_state) {
+    // Retrieve and add description to node title field on node add/edit page.
+    $node = $form_state->getFormObject()->getEntity();
+    $node_type = $node->type->entity;
+    $description = $node_type->getThirdPartySetting('node_title_help_text', 'title_help');
+    if ($description) {
+      $widget =& $form['title']['widget'];
+      if (empty($widget[0]['value']['#description'])) {
+        $widget[0]['value']['#description'] = $description;
+      }
+    }
+  }
+
+  /**
+   * Implements hook_form_FORM_ID_alter() for \Drupal\node\NodeTypeForm.
+   *
+   * Adds textarea for title field help text to the node type form.
+   *
+   * @see NodeTypeForm::form()
+   * @see node_title_help_text_node_type_form_submit()
+   */
+  #[Hook('form_node_type_form_alter')]
+  public function formNodeTypeFormAlter(&$form, FormStateInterface $form_state, $form_id) {
+    // Set default value of the help text form element on node type form.
+    $node_type = $form_state->getFormObject()->getEntity();
+    $value = $node_type->getThirdPartySetting('node_title_help_text', 'title_help');
+    $form['submission']['title_help'] = [
+      '#title' => $this->t('Title field help text'),
+      '#type' => 'textarea',
+      '#default_value' => $value,
+      '#description' => 'This text will be displayed at the bottom of title field when creating or editing content of this type.',
+    ];
+    $form['#entity_builders'][] = 'node_title_help_text_form_node_type_form_builder';
+  }
+
+}
