diff --git a/ept_basic_button.info.yml b/ept_basic_button.info.yml
index 0f8604c..2227d48 100644
--- a/ept_basic_button.info.yml
+++ b/ept_basic_button.info.yml
@@ -1,7 +1,7 @@
 type: module
 name: 'Extra Paragraph Types (EPT): Basic Button'
 description: 'Adds Basic Button paragraph type.'
-core_version_requirement: ^9.3 || ^10 || ^11
+core_version_requirement: ^10.1 || ^11 || ^12
 package: 'Extra Paragraph Types'
 
 dependencies:
diff --git a/ept_basic_button.module b/ept_basic_button.module
index 7601001..a251235 100644
--- a/ept_basic_button.module
+++ b/ept_basic_button.module
@@ -4,41 +4,23 @@
  * @file
  * EPT Basic Button module file.
  */
-
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\ept_basic_button\Hook\EptBasicButtonHooks;
 use Drupal\Core\Routing\RouteMatchInterface;
 
 /**
  * Implements hook_help().
  */
+#[LegacyHook]
 function ept_basic_button_help($route_name, RouteMatchInterface $route_match) {
-  switch ($route_name) {
-    // Main module help for the ept_basic_button.
-    case 'help.page.ept_basic_button':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('EPT modules provide ability to add different paragraphs in few clicks.') . '</p>';
-      return $output;
-
-    default:
-  }
+  return \Drupal::service(EptBasicButtonHooks::class)->help($route_name, $route_match);
 }
 
 /**
  * Implements hook_preprocess_paragraph().
  */
-function ept_basic_button_preprocess_paragraph(&$variables) {
-  if (empty($variables['elements']['#paragraph']) ||
-    $variables['elements']['#paragraph']->bundle() !== 'ept_basic_button') {
-    return;
-  }
-
-  $service = \Drupal::service('ept_basic_button.generate_custom_css');
-
-  if (!$variables['elements']['#paragraph']->hasField('field_ept_settings')) {
-    return;
-  }
-
-  $ept_settings = $variables['elements']['#paragraph']->field_ept_settings->getValue();
-  $paragraph_class = 'paragraph-id-' . $variables['elements']['#paragraph']->id();
-  $variables['button_styles'] = $service->generateFromSettings($ept_settings[0]['ept_settings'], $paragraph_class);
+#[LegacyHook]
+function ept_basic_button_preprocess_paragraph(&$variables)
+{
+    \Drupal::service(EptBasicButtonHooks::class)->preprocessParagraph($variables);
 }
diff --git a/ept_basic_button.services.yml b/ept_basic_button.services.yml
index 0b53dc3..dc187f9 100644
--- a/ept_basic_button.services.yml
+++ b/ept_basic_button.services.yml
@@ -2,3 +2,7 @@ services:
   ept_basic_button.generate_custom_css:
     class: Drupal\ept_basic_button\Services\GenerateCustomCSS
     arguments: ['@config.factory']
+
+  Drupal\ept_basic_button\Hook\EptBasicButtonHooks:
+    class: Drupal\ept_basic_button\Hook\EptBasicButtonHooks
+    autowire: true
diff --git a/src/Hook/EptBasicButtonHooks.php b/src/Hook/EptBasicButtonHooks.php
new file mode 100644
index 0000000..7311fda
--- /dev/null
+++ b/src/Hook/EptBasicButtonHooks.php
@@ -0,0 +1,47 @@
+<?php
+
+namespace Drupal\ept_basic_button\Hook;
+
+use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\Core\Hook\Attribute\Hook;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+/**
+ * Hook implementations for ept_basic_button.
+ */
+class EptBasicButtonHooks
+{
+    use StringTranslationTrait;
+    /**
+     * Implements hook_help().
+     */
+    #[Hook('help')]
+    public function help($route_name, \Drupal\Core\Routing\RouteMatchInterface $route_match)
+    {
+        switch ($route_name) {
+            // Main module help for the ept_basic_button.
+            case 'help.page.ept_basic_button':
+                $output = '';
+                $output .= '<h3>' . $this->t('About') . '</h3>';
+                $output .= '<p>' . $this->t('EPT modules provide ability to add different paragraphs in few clicks.') . '</p>';
+                return $output;
+            default:
+        }
+    }
+    /**
+     * Implements hook_preprocess_paragraph().
+     */
+    #[Hook('preprocess_paragraph')]
+    public static function preprocessParagraph(&$variables)
+    {
+        if (empty($variables['elements']['#paragraph']) || $variables['elements']['#paragraph']->bundle() !== 'ept_basic_button') {
+            return;
+        }
+        $service = \Drupal::service('ept_basic_button.generate_custom_css');
+        if (!$variables['elements']['#paragraph']->hasField('field_ept_settings')) {
+            return;
+        }
+        $ept_settings = $variables['elements']['#paragraph']->field_ept_settings->getValue();
+        $paragraph_class = 'paragraph-id-' . $variables['elements']['#paragraph']->id();
+        $variables['button_styles'] = $service->generateFromSettings($ept_settings[0]['ept_settings'], $paragraph_class);
+    }
+}
diff --git a/tests/src/Functional/InstallTest.php b/tests/src/Functional/InstallTest.php
index 4e0430f..d2c7027 100644
--- a/tests/src/Functional/InstallTest.php
+++ b/tests/src/Functional/InstallTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\ept_basic_button\Functional;
 
+use Drupal\Component\Utility\DeprecationHelper;
 use Drupal\Tests\BrowserTestBase;
 
 /**
@@ -47,10 +48,12 @@ class InstallTest extends BrowserTestBase {
     $this->moduleInstaller = $this->container->get('module_installer');
 
     // Set the front page to "/node".
-    \Drupal::configFactory()
+    DeprecationHelper::backwardsCompatibleCall(\Drupal::VERSION, '11.4.0', fn() => \Drupal::configFactory()
+      ->getEditable('system.site')
+      ->set('page.front', '/node')->save(), fn() => \Drupal::configFactory()
       ->getEditable('system.site')
       ->set('page.front', '/node')
-      ->save(TRUE);
+      ->save(TRUE));
   }
 
   /**
