diff --git a/pdf_reader.module b/pdf_reader.module
index 95857bf..12f29a0 100644
--- a/pdf_reader.module
+++ b/pdf_reader.module
@@ -4,84 +4,24 @@
  * @file
  * This file defines the theme to render the display formats for pdf files.
  */
-
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\pdf_reader\Hook\PdfReaderHooks;
 use Drupal\Core\Routing\RouteMatchInterface;
 
 /**
  * Implements hook_theme().
  */
-function pdf_reader_theme($existing, $type, $theme, $path) {
-  $pdf_reader_theme = [
-    'pdf_reader' => [
-      'variables' => [
-        'service' => NULL,
-        'top' => NULL,
-        'bottom' => NULL,
-        'download_link' => NULL,
-        'file_url' => NULL ,
-        'width' => NULL,
-        'height' => NULL,
-      ],
-    ],
-    'pdf_reader_embed' => [
-      'variables' => [
-        'download_link' => NULL,
-        'service' => NULL,
-        'top' => NULL,
-        'bottom' => NULL,
-        'file_url' => NULL ,
-        'width' => NULL,
-        'height' => NULL,
-      ],
-    ],
-    'pdf_reader_js' => [
-      'variables' => [
-        'file' => NULL,
-        'download_link' => NULL,
-        'top' => NULL,
-        'bottom' => NULL,
-        'service' => NULL,
-        'width' => NULL,
-        'height' => NULL,
-      ],
-    ],
-  ];
-  if (\Drupal::moduleHandler()->moduleExists('colorbox')) {
-    $pdf_reader_theme['pdf_reader_colorbox'] = [
-      'variables' => [
-        'service' => NULL,
-        'download_link' => NULL,
-        'top' => NULL,
-        'bottom' => NULL,
-        'file_url' => NULL ,
-        'file_name' => NULL,
-      ],
-    ];
-  }
-  return $pdf_reader_theme;
+#[LegacyHook]
+function pdf_reader_theme($existing, $type, $theme, $path)
+{
+    return \Drupal::service(PdfReaderHooks::class)->theme($existing, $type, $theme, $path);
 }
 
 /**
  * Implements hook_help().
  */
-function pdf_reader_help($route_name, RouteMatchInterface $route_match) {
-  if ($route_name === 'help.page.pdf_reader') {
-    $readme_file = file_exists(__DIR__ . '/README.md') ? __DIR__ . '/README.md' : __DIR__ . '/README.txt';
-    if (!file_exists($readme_file)) {
-      return NULL;
-    }
-    $text = file_get_contents($readme_file);
-    if ($text && !\Drupal::moduleHandler()->moduleExists('markdown')) {
-      return '<pre>' . $text . '</pre>';
-    }
-    else {
-      // Use the Markdown filter to render the README.
-      $filter_manager = \Drupal::service('plugin.manager.filter');
-      $settings = \Drupal::configFactory()->get('markdown.settings')->getRawData();
-      $config = ['settings' => $settings];
-      $filter = $filter_manager->createInstance('markdown', $config);
-      return $filter->process($text, 'en');
-    }
-  }
-  return NULL;
+#[LegacyHook]
+function pdf_reader_help($route_name, RouteMatchInterface $route_match)
+{
+    return \Drupal::service(PdfReaderHooks::class)->help($route_name, $route_match);
 }
diff --git a/pdf_reader.services.yml b/pdf_reader.services.yml
new file mode 100644
index 0000000..cfe0c94
--- /dev/null
+++ b/pdf_reader.services.yml
@@ -0,0 +1,5 @@
+
+services:
+  Drupal\pdf_reader\Hook\PdfReaderHooks:
+    class: Drupal\pdf_reader\Hook\PdfReaderHooks
+    autowire: true
diff --git a/src/Hook/PdfReaderHooks.php b/src/Hook/PdfReaderHooks.php
new file mode 100644
index 0000000..5ba7add
--- /dev/null
+++ b/src/Hook/PdfReaderHooks.php
@@ -0,0 +1,94 @@
+<?php
+
+namespace Drupal\pdf_reader\Hook;
+
+use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\Core\Hook\Attribute\Hook;
+/**
+ * Hook implementations for pdf_reader.
+ */
+class PdfReaderHooks
+{
+    /**
+     * Implements hook_theme().
+     */
+    #[Hook('theme')]
+    public function theme($existing, $type, $theme, $path)
+    {
+        $pdf_reader_theme = [
+            'pdf_reader' => [
+                'variables' => [
+                    'service' => NULL,
+                    'top' => NULL,
+                    'bottom' => NULL,
+                    'download_link' => NULL,
+                    'file_url' => NULL,
+                    'width' => NULL,
+                    'height' => NULL,
+                ],
+            ],
+            'pdf_reader_embed' => [
+                'variables' => [
+                    'download_link' => NULL,
+                    'service' => NULL,
+                    'top' => NULL,
+                    'bottom' => NULL,
+                    'file_url' => NULL,
+                    'width' => NULL,
+                    'height' => NULL,
+                ],
+            ],
+            'pdf_reader_js' => [
+                'variables' => [
+                    'file' => NULL,
+                    'download_link' => NULL,
+                    'top' => NULL,
+                    'bottom' => NULL,
+                    'service' => NULL,
+                    'width' => NULL,
+                    'height' => NULL,
+                ],
+            ],
+        ];
+        if (\Drupal::moduleHandler()->moduleExists('colorbox')) {
+            $pdf_reader_theme['pdf_reader_colorbox'] = [
+                'variables' => [
+                    'service' => NULL,
+                    'download_link' => NULL,
+                    'top' => NULL,
+                    'bottom' => NULL,
+                    'file_url' => NULL,
+                    'file_name' => NULL,
+                ],
+            ];
+        }
+        return $pdf_reader_theme;
+    }
+    /**
+     * Implements hook_help().
+     */
+    #[Hook('help')]
+    public function help($route_name, \Drupal\Core\Routing\RouteMatchInterface $route_match)
+    {
+        if ($route_name === 'help.page.pdf_reader') {
+            $readme_file = file_exists(__DIR__ . '/README.md') ? __DIR__ . '/README.md' : __DIR__ . '/README.txt';
+            if (!file_exists($readme_file)) {
+                return NULL;
+            }
+            $text = file_get_contents($readme_file);
+            if ($text && !\Drupal::moduleHandler()->moduleExists('markdown')) {
+                return '<pre>' . $text . '</pre>';
+            } else {
+                // Use the Markdown filter to render the README.
+                $filter_manager = \Drupal::service('plugin.manager.filter');
+                $settings = \Drupal::configFactory()->get('markdown.settings')->getRawData();
+                $config = [
+                    'settings' => $settings,
+                ];
+                $filter = $filter_manager->createInstance('markdown', $config);
+                return $filter->process($text, 'en');
+            }
+        }
+        return NULL;
+    }
+}
