diff --git a/csv_importer.info.yml b/csv_importer.info.yml
index 2106f09..c0c52dc 100644
--- a/csv_importer.info.yml
+++ b/csv_importer.info.yml
@@ -2,4 +2,4 @@ name: CSV Importer
 type: module
 description: 'Import content from CSV.'
 package: CSV
-core_version_requirement: ^10 || ^11
+core_version_requirement: ^10.1 || ^11 || ^12
diff --git a/csv_importer.module b/csv_importer.module
index 837306f..d07cb5e 100644
--- a/csv_importer.module
+++ b/csv_importer.module
@@ -5,29 +5,14 @@
  * Contains csv_importer.module.
  */
 
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\csv_importer\Hook\CsvImporterHooks;
 use Drupal\Core\Routing\RouteMatchInterface;
-use Drupal\Core\Url;
 
 /**
  * Implements hook_help().
  */
+#[LegacyHook]
 function csv_importer_help($route_name, RouteMatchInterface $route_match) {
-  switch ($route_name) {
-    case 'help.page.csv_importer':
-      $output = '';
-      $output .= '<h3>' . t('CSV Importer') . '</h3>';
-      $output .= '<p>' . t('Import content from the CSV files.') . '</p>';
-      $output .= '<h4>' . t('Usage') . '</h4>';
-      $output .= '<ul>';
-      $output .= '<li>' . t('Navigate <a href="@uri" target="_blank">here</a>', ['@uri' => Url::fromRoute('csv_importer.import')->toString()]) . '</li>';
-      $output .= '<li>' . t('Select entity type') . '</li>';
-      $output .= '<li>' . t('Select entity bundle (if any)') . '</li>';
-      $output .= '<li>' . t('Make sure that the file is in the UTF-8 format') . '</li>';
-      $output .= '<li>' . t('Select the CSV file') . '</li>';
-      $output .= '<li>' . t('Press Import') . '</li>';
-      $output .= '</ul>';
-      $output .= '<h4>' . t('Documentation') . '</h4>';
-      $output .= '<a href="https://www.drupal.org/docs/8/modules/csv-importer" target="_blank">https://www.drupal.org/docs/8/modules/csv-importer</a>';
-      return $output;
-  }
+  return \Drupal::service(CsvImporterHooks::class)->help($route_name, $route_match);
 }
diff --git a/csv_importer.services.yml b/csv_importer.services.yml
index 7699872..1e0c67d 100644
--- a/csv_importer.services.yml
+++ b/csv_importer.services.yml
@@ -5,3 +5,7 @@ services:
   csv_importer.parser:
     class: Drupal\csv_importer\Parser
     arguments: ['@entity_type.manager']
+
+  Drupal\csv_importer\Hook\CsvImporterHooks:
+    class: Drupal\csv_importer\Hook\CsvImporterHooks
+    autowire: true
diff --git a/src/Hook/CsvImporterHooks.php b/src/Hook/CsvImporterHooks.php
new file mode 100644
index 0000000..3dcb541
--- /dev/null
+++ b/src/Hook/CsvImporterHooks.php
@@ -0,0 +1,43 @@
+<?php
+
+namespace Drupal\csv_importer\Hook;
+
+use Drupal\Core\Url;
+use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\Core\Hook\Attribute\Hook;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+
+/**
+ * Hook implementations for csv_importer.
+ */
+class CsvImporterHooks {
+  use StringTranslationTrait;
+
+  /**
+   * Implements hook_help().
+   */
+  #[Hook('help')]
+  public function help($route_name, RouteMatchInterface $route_match) {
+    switch ($route_name) {
+      case 'help.page.csv_importer':
+        $output = '';
+        $output .= '<h3>' . $this->t('CSV Importer') . '</h3>';
+        $output .= '<p>' . $this->t('Import content from the CSV files.') . '</p>';
+        $output .= '<h4>' . $this->t('Usage') . '</h4>';
+        $output .= '<ul>';
+        $output .= '<li>' . $this->t('Navigate <a href="@uri" target="_blank">here</a>', [
+          '@uri' => Url::fromRoute('csv_importer.import')->toString(),
+        ]) . '</li>';
+        $output .= '<li>' . $this->t('Select entity type') . '</li>';
+        $output .= '<li>' . $this->t('Select entity bundle (if any)') . '</li>';
+        $output .= '<li>' . $this->t('Make sure that the file is in the UTF-8 format') . '</li>';
+        $output .= '<li>' . $this->t('Select the CSV file') . '</li>';
+        $output .= '<li>' . $this->t('Press Import') . '</li>';
+        $output .= '</ul>';
+        $output .= '<h4>' . $this->t('Documentation') . '</h4>';
+        $output .= '<a href="https://www.drupal.org/docs/8/modules/csv-importer" target="_blank">https://www.drupal.org/docs/8/modules/csv-importer</a>';
+        return $output;
+    }
+  }
+
+}
diff --git a/tests/src/Kernel/ImporterTest.php b/tests/src/Kernel/ImporterTest.php
index fddb57d..faccdea 100644
--- a/tests/src/Kernel/ImporterTest.php
+++ b/tests/src/Kernel/ImporterTest.php
@@ -395,7 +395,6 @@ class ImporterTest extends KernelTestBase {
    */
   protected function invoke(object $object, string $method, array $args = []) {
     $reflection = new \ReflectionMethod($object, $method);
-    $reflection->setAccessible(TRUE);
     return $reflection->invokeArgs($object, $args);
   }
 
