diff --git a/src/Hook/WebformEncryptHooks.php b/src/Hook/WebformEncryptHooks.php
new file mode 100644
index 0000000..89a25ab
--- /dev/null
+++ b/src/Hook/WebformEncryptHooks.php
@@ -0,0 +1,55 @@
+<?php
+
+namespace Drupal\webform_encrypt\Hook;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Hook\Attribute\Hook;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+
+/**
+ * Hook implementations for webform_encrypt.
+ */
+class WebformEncryptHooks {
+  use StringTranslationTrait;
+
+  /**
+   * Implements hook_form_FORM_ID_alter().
+   */
+  #[Hook('form_webform_ui_element_form_alter')]
+  public function formWebformUiElementFormAlter(&$form, FormStateInterface $form_state) {
+    /** @var \Drupal\webform\Plugin\WebformElementManagerInterface $element_manager */
+    $element_manager = \Drupal::service('plugin.manager.webform.element');
+    $element = $form_state->getBuildInfo()['callback_object']->getElement();
+    $element_handler = $element_manager->getElementInstance($element);
+    // Checks whether the element carries a value.
+    // Only input elements are allowed to be encrypted.
+    $is_input_element = $element_handler->isInput($element);
+    if ($is_input_element) {
+      // To provide the fieldset for encryption fields on element config form.
+      $form['element_encrypt'] = [
+        '#type' => 'details',
+        '#title' => $this->t('Encryption'),
+        '#group' => 'tab_advanced',
+      ];
+      // To provide the encryption fields for webform elements.
+      $form['element_encrypt']['encrypt'] = [
+        '#type' => 'webform_element_encrypt',
+        '#title' => $this->t('Encryption'),
+        '#title_display' => 'hidden',
+      ];
+    }
+  }
+
+  /**
+   * Implements hook_entity_type_alter().
+   */
+  #[Hook('entity_type_alter')]
+  public function entityTypeAlter(array &$entity_types) {
+    /** @var \Drupal\Core\Entity\EntityTypeInterface[] $entity_types */
+    if (isset($entity_types['webform_submission'])) {
+      $entity_types['webform_submission']->setStorageClass('Drupal\webform_encrypt\WebformEncryptSubmissionStorage');
+      $entity_types['webform_submission']->setAccessClass('Drupal\webform_encrypt\WebformEncryptSubmissionAccessControlHandler');
+    }
+  }
+
+}
diff --git a/tests/src/Functional/WebformEncryptEditSubmissionsTest.php b/tests/src/Functional/WebformEncryptEditSubmissionsTest.php
index b817b4c..d733ce8 100644
--- a/tests/src/Functional/WebformEncryptEditSubmissionsTest.php
+++ b/tests/src/Functional/WebformEncryptEditSubmissionsTest.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Tests\webform_encrypt\Functional;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
 use Drupal\Tests\BrowserTestBase;
 
 /**
@@ -9,6 +11,8 @@ use Drupal\Tests\BrowserTestBase;
  *
  * @group webform_encrypt
  */
+#[Group('webform_encrypt')]
+#[RunTestsInSeparateProcesses]
 class WebformEncryptEditSubmissionsTest extends BrowserTestBase {
 
   /**
diff --git a/tests/src/Functional/WebformEncryptFunctionalTest.php b/tests/src/Functional/WebformEncryptFunctionalTest.php
index 487919d..6d94ab4 100644
--- a/tests/src/Functional/WebformEncryptFunctionalTest.php
+++ b/tests/src/Functional/WebformEncryptFunctionalTest.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Tests\webform_encrypt\Functional;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
 use Drupal\Tests\BrowserTestBase;
 use Drupal\user\Entity\Role;
 
@@ -10,6 +12,8 @@ use Drupal\user\Entity\Role;
  *
  * @group webform_encrypt
  */
+#[Group('webform_encrypt')]
+#[RunTestsInSeparateProcesses]
 class WebformEncryptFunctionalTest extends BrowserTestBase {
 
   /**
diff --git a/tests/src/Functional/WebformEncryptUninstallTest.php b/tests/src/Functional/WebformEncryptUninstallTest.php
index 11d506b..50ac841 100644
--- a/tests/src/Functional/WebformEncryptUninstallTest.php
+++ b/tests/src/Functional/WebformEncryptUninstallTest.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Tests\webform_encrypt\Functional;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
 use Drupal\Tests\BrowserTestBase;
 
 /**
@@ -9,6 +11,8 @@ use Drupal\Tests\BrowserTestBase;
  *
  * @group webform_encrypt
  */
+#[Group('webform_encrypt')]
+#[RunTestsInSeparateProcesses]
 class WebformEncryptUninstallTest extends BrowserTestBase {
 
   /**
diff --git a/tests/src/Functional/WebformEncryptWizardTest.php b/tests/src/Functional/WebformEncryptWizardTest.php
index a651769..d70503d 100644
--- a/tests/src/Functional/WebformEncryptWizardTest.php
+++ b/tests/src/Functional/WebformEncryptWizardTest.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Tests\webform_encrypt\Functional;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
 use Drupal\Tests\BrowserTestBase;
 
 /**
@@ -9,6 +11,8 @@ use Drupal\Tests\BrowserTestBase;
  *
  * @group webform_encrypt
  */
+#[Group('webform_encrypt')]
+#[RunTestsInSeparateProcesses]
 class WebformEncryptWizardTest extends BrowserTestBase {
 
   /**
diff --git a/tests/src/Kernel/WebformEncryptSubmissionStorageTest.php b/tests/src/Kernel/WebformEncryptSubmissionStorageTest.php
index 4b65644..3ff8000 100644
--- a/tests/src/Kernel/WebformEncryptSubmissionStorageTest.php
+++ b/tests/src/Kernel/WebformEncryptSubmissionStorageTest.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Tests\webform_encrypt\Kernel;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
 use Drupal\encrypt\Entity\EncryptionProfile;
 use Drupal\KernelTests\KernelTestBase;
 use Drupal\webform\Entity\Webform;
@@ -12,6 +14,8 @@ use Drupal\webform\Entity\WebformSubmission;
  *
  * @group webform_encrypt
  */
+#[Group('webform_encrypt')]
+#[RunTestsInSeparateProcesses]
 class WebformEncryptSubmissionStorageTest extends KernelTestBase {
 
   /**
diff --git a/webform_encrypt.info.yml b/webform_encrypt.info.yml
index 47294b4..1ed94fe 100644
--- a/webform_encrypt.info.yml
+++ b/webform_encrypt.info.yml
@@ -2,7 +2,7 @@ name: 'Webform Encrypt'
 type: module
 description: 'Provides encryption for webform components.'
 package: 'Webform'
-core_version_requirement: ^10.1 || ^11
+core_version_requirement: ^10.1 || ^11 || ^12
 dependencies:
   - webform:webform
   - encrypt:encrypt
diff --git a/webform_encrypt.module b/webform_encrypt.module
index 16ec464..73b24e0 100644
--- a/webform_encrypt.module
+++ b/webform_encrypt.module
@@ -5,45 +5,22 @@
  * Main module file for the Webform Encrypt module.
  */
 
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\webform_encrypt\Hook\WebformEncryptHooks;
 use Drupal\Core\Form\FormStateInterface;
 
 /**
  * Implements hook_form_FORM_ID_alter().
  */
+#[LegacyHook]
 function webform_encrypt_form_webform_ui_element_form_alter(&$form, FormStateInterface $form_state) {
-  /** @var \Drupal\webform\Plugin\WebformElementManagerInterface $element_manager */
-  $element_manager = \Drupal::service('plugin.manager.webform.element');
-
-  $element = $form_state->getBuildInfo()['callback_object']->getElement();
-  $element_handler = $element_manager->getElementInstance($element);
-
-  // Checks whether the element carries a value.
-  // Only input elements are allowed to be encrypted.
-  $is_input_element = $element_handler->isInput($element);
-  if ($is_input_element) {
-    // To provide the fieldset for encryption fields on element config form.
-    $form['element_encrypt'] = [
-      '#type' => 'details',
-      '#title' => t('Encryption'),
-      '#group' => 'tab_advanced',
-    ];
-
-    // To provide the encryption fields for webform elements.
-    $form['element_encrypt']['encrypt'] = [
-      '#type' => 'webform_element_encrypt',
-      '#title' => t('Encryption'),
-      '#title_display' => 'hidden',
-    ];
-  }
+  \Drupal::service(WebformEncryptHooks::class)->formWebformUiElementFormAlter($form, $form_state);
 }
 
 /**
  * Implements hook_entity_type_alter().
  */
+#[LegacyHook]
 function webform_encrypt_entity_type_alter(array &$entity_types) {
-  /** @var \Drupal\Core\Entity\EntityTypeInterface[] $entity_types */
-  if (isset($entity_types['webform_submission'])) {
-    $entity_types['webform_submission']->setStorageClass('Drupal\webform_encrypt\WebformEncryptSubmissionStorage');
-    $entity_types['webform_submission']->setAccessClass('Drupal\webform_encrypt\WebformEncryptSubmissionAccessControlHandler');
-  }
+  \Drupal::service(WebformEncryptHooks::class)->entityTypeAlter($entity_types);
 }
diff --git a/webform_encrypt.services.yml b/webform_encrypt.services.yml
new file mode 100644
index 0000000..2398eca
--- /dev/null
+++ b/webform_encrypt.services.yml
@@ -0,0 +1,5 @@
+
+services:
+  Drupal\webform_encrypt\Hook\WebformEncryptHooks:
+    class: Drupal\webform_encrypt\Hook\WebformEncryptHooks
+    autowire: true
