diff --git a/fapi_validation.info.yml b/fapi_validation.info.yml
index 2ac75fc..7143fc9 100644
--- a/fapi_validation.info.yml
+++ b/fapi_validation.info.yml
@@ -3,4 +3,4 @@ type: module
 description: Form API Validation.
 package: Development
 configure: fapi_validation.settings
-core_version_requirement: ^10.3 || ^11
+core_version_requirement: ^10.3 || ^11 || ^12
diff --git a/fapi_validation.module b/fapi_validation.module
index e4277a4..0aeea14 100644
--- a/fapi_validation.module
+++ b/fapi_validation.module
@@ -5,6 +5,8 @@
  * Form API validation module.
  */
 
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\fapi_validation\Hook\FapiValidationHooks;
 use Drupal\Core\Routing\RouteMatchInterface;
 
 /**
@@ -12,13 +14,9 @@ use Drupal\Core\Routing\RouteMatchInterface;
  *
  * Provides additional information about the module.
  */
+#[LegacyHook]
 function fapi_validation_help($route_name, RouteMatchInterface $route_match) {
-  switch ($route_name) {
-    case 'help.page.fapi_validation':
-      $output = '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('Extends the form API to include convenient access to common for submission filters and validation checks.') . '</p>';
-      return $output;
-  }
+  return \Drupal::service(FapiValidationHooks::class)->help($route_name, $route_match);
 }
 
 /**
@@ -26,14 +24,9 @@ function fapi_validation_help($route_name, RouteMatchInterface $route_match) {
  *
  * PURPOSE: Add fapi validation element processing to all form elements.
  */
+#[LegacyHook]
 function fapi_validation_element_info_alter(array &$info) {
-  // Loop through all form element types and only hit input variants.
-  foreach ($info as $type_name => $type_info) {
-    if (isset($type_info['#input']) && $type_info['#input']) {
-      // Processes the form element on form creation.
-      $info[$type_name]['#process'][] = '\Drupal\fapi_validation\FapiValidationService::process';
-    }
-  }
+  \Drupal::service(FapiValidationHooks::class)->elementInfoAlter($info);
 }
 
 /**
diff --git a/fapi_validation.services.yml b/fapi_validation.services.yml
index b23ee65..1e9cc0f 100644
--- a/fapi_validation.services.yml
+++ b/fapi_validation.services.yml
@@ -8,3 +8,7 @@ services:
   plugin.manager.fapi_validation_filters:
     class: Drupal\fapi_validation\FapiValidationFiltersManager
     parent: default_plugin_manager
+
+  Drupal\fapi_validation\Hook\FapiValidationHooks:
+    class: Drupal\fapi_validation\Hook\FapiValidationHooks
+    autowire: true
diff --git a/fapiv_example/fapiv_example.info.yml b/fapiv_example/fapiv_example.info.yml
index a17d262..5b942eb 100644
--- a/fapiv_example/fapiv_example.info.yml
+++ b/fapiv_example/fapiv_example.info.yml
@@ -2,7 +2,7 @@ name: FAPI Validation Example Form
 type: module
 description: Form API Validation Example Form.
 package: Development
-core_version_requirement: ^10.3 || ^11
+core_version_requirement: ^10.3 || ^11 || ^12
 configure: fapiv_example.simple_form
 dependencies:
   - fapi_validation:fapi_validation
diff --git a/src/Hook/FapiValidationHooks.php b/src/Hook/FapiValidationHooks.php
new file mode 100644
index 0000000..50d245d
--- /dev/null
+++ b/src/Hook/FapiValidationHooks.php
@@ -0,0 +1,46 @@
+<?php
+
+namespace Drupal\fapi_validation\Hook;
+
+use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\Core\Hook\Attribute\Hook;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+
+/**
+ * Hook implementations for fapi_validation.
+ */
+class FapiValidationHooks {
+  use StringTranslationTrait;
+
+  /**
+   * Implements hook_help().
+   *
+   * Provides additional information about the module.
+   */
+  #[Hook('help')]
+  public function help($route_name, RouteMatchInterface $route_match) {
+    switch ($route_name) {
+      case 'help.page.fapi_validation':
+        $output = '<h3>' . $this->t('About') . '</h3>';
+        $output .= '<p>' . $this->t('Extends the form API to include convenient access to common for submission filters and validation checks.') . '</p>';
+        return $output;
+    }
+  }
+
+  /**
+   * Implements hook_element_info_alter().
+   *
+   * PURPOSE: Add fapi validation element processing to all form elements.
+   */
+  #[Hook('element_info_alter')]
+  public static function elementInfoAlter(array &$info) {
+    // Loop through all form element types and only hit input variants.
+    foreach ($info as $type_name => $type_info) {
+      if (isset($type_info['#input']) && $type_info['#input']) {
+        // Processes the form element on form creation.
+        $info[$type_name]['#process'][] = '\Drupal\fapi_validation\FapiValidationService::process';
+      }
+    }
+  }
+
+}
diff --git a/tests/src/Unit/Filters/HtmlEntitiesFilterTest.php b/tests/src/Unit/Filters/HtmlEntitiesFilterTest.php
index 9bb16df..8a0e248 100644
--- a/tests/src/Unit/Filters/HtmlEntitiesFilterTest.php
+++ b/tests/src/Unit/Filters/HtmlEntitiesFilterTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\fapi_validation\Unit\Filters;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\fapi_validation\Plugin\FapiValidationFilter\HtmlEntitiesFilter;
 use Drupal\Tests\UnitTestCase;
 
@@ -11,6 +12,8 @@ use Drupal\Tests\UnitTestCase;
  * @group fapi_validation
  * @group fapi_validation_filters
  */
+#[Group('fapi_validation')]
+#[Group('fapi_validation_filters')]
 class HtmlEntitiesFilterTest extends UnitTestCase {
 
   /**
diff --git a/tests/src/Unit/Filters/LowercaseFilterTest.php b/tests/src/Unit/Filters/LowercaseFilterTest.php
index 7a272ef..31d90d9 100644
--- a/tests/src/Unit/Filters/LowercaseFilterTest.php
+++ b/tests/src/Unit/Filters/LowercaseFilterTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\fapi_validation\Unit\Filters;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\fapi_validation\Plugin\FapiValidationFilter\LowercaseFilter;
 use Drupal\Tests\UnitTestCase;
 
@@ -11,6 +12,8 @@ use Drupal\Tests\UnitTestCase;
  * @group fapi_validation
  * @group fapi_validation_filters
  */
+#[Group('fapi_validation')]
+#[Group('fapi_validation_filters')]
 class LowercaseFilterTest extends UnitTestCase {
 
   /**
diff --git a/tests/src/Unit/Filters/LtrimFilterTest.php b/tests/src/Unit/Filters/LtrimFilterTest.php
index 0701699..9d5fa6f 100644
--- a/tests/src/Unit/Filters/LtrimFilterTest.php
+++ b/tests/src/Unit/Filters/LtrimFilterTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\fapi_validation\Unit\Filters;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\fapi_validation\Plugin\FapiValidationFilter\LtrimFilter;
 use Drupal\Tests\UnitTestCase;
 
@@ -11,6 +12,8 @@ use Drupal\Tests\UnitTestCase;
  * @group fapi_validation
  * @group fapi_validation_filters
  */
+#[Group('fapi_validation')]
+#[Group('fapi_validation_filters')]
 class LtrimFilterTest extends UnitTestCase {
 
   /**
diff --git a/tests/src/Unit/Filters/MachineNameFilterTest.php b/tests/src/Unit/Filters/MachineNameFilterTest.php
index 07104e0..791c08a 100644
--- a/tests/src/Unit/Filters/MachineNameFilterTest.php
+++ b/tests/src/Unit/Filters/MachineNameFilterTest.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Tests\fapi_validation\Unit\Filters;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
 use Drupal\fapi_validation\FapiValidationFiltersManager;
 use Drupal\KernelTests\KernelTestBase;
 
@@ -11,6 +13,9 @@ use Drupal\KernelTests\KernelTestBase;
  * @group fapi_validation
  * @group fapi_validation_filters
  */
+#[Group('fapi_validation')]
+#[Group('fapi_validation_filters')]
+#[RunTestsInSeparateProcesses]
 class MachineNameFilterTest extends KernelTestBase {
 
   /**
diff --git a/tests/src/Unit/Filters/NumericFilterTest.php b/tests/src/Unit/Filters/NumericFilterTest.php
index dee639c..ba856ae 100644
--- a/tests/src/Unit/Filters/NumericFilterTest.php
+++ b/tests/src/Unit/Filters/NumericFilterTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\fapi_validation\Unit\Filters;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\fapi_validation\Plugin\FapiValidationFilter\NumericFilter;
 use Drupal\Tests\UnitTestCase;
 
@@ -11,6 +12,8 @@ use Drupal\Tests\UnitTestCase;
  * @group fapi_validation
  * @group fapi_validation_filters
  */
+#[Group('fapi_validation')]
+#[Group('fapi_validation_filters')]
 class NumericFilterTest extends UnitTestCase {
 
   /**
diff --git a/tests/src/Unit/Filters/RtrimFilterTest.php b/tests/src/Unit/Filters/RtrimFilterTest.php
index 6036662..a24e934 100644
--- a/tests/src/Unit/Filters/RtrimFilterTest.php
+++ b/tests/src/Unit/Filters/RtrimFilterTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\fapi_validation\Unit\Filters;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\fapi_validation\Plugin\FapiValidationFilter\RtrimFilter;
 use Drupal\Tests\UnitTestCase;
 
@@ -11,6 +12,8 @@ use Drupal\Tests\UnitTestCase;
  * @group fapi_validation
  * @group fapi_validation_filters
  */
+#[Group('fapi_validation')]
+#[Group('fapi_validation_filters')]
 class RtrimFilterTest extends UnitTestCase {
 
   /**
diff --git a/tests/src/Unit/Filters/StripTagsFilterTest.php b/tests/src/Unit/Filters/StripTagsFilterTest.php
index 9399cbb..85ee0d8 100644
--- a/tests/src/Unit/Filters/StripTagsFilterTest.php
+++ b/tests/src/Unit/Filters/StripTagsFilterTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\fapi_validation\Unit\Filters;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\fapi_validation\Plugin\FapiValidationFilter\StripTagsFilter;
 use Drupal\Tests\UnitTestCase;
 
@@ -11,6 +12,8 @@ use Drupal\Tests\UnitTestCase;
  * @group fapi_validation
  * @group fapi_validation_filters
  */
+#[Group('fapi_validation')]
+#[Group('fapi_validation_filters')]
 class StripTagsFilterTest extends UnitTestCase {
 
   /**
diff --git a/tests/src/Unit/Filters/TrimFilterTest.php b/tests/src/Unit/Filters/TrimFilterTest.php
index a884654..775d9f3 100644
--- a/tests/src/Unit/Filters/TrimFilterTest.php
+++ b/tests/src/Unit/Filters/TrimFilterTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\fapi_validation\Unit\Filters;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\fapi_validation\Plugin\FapiValidationFilter\TrimFilter;
 use Drupal\Tests\UnitTestCase;
 
@@ -11,6 +12,8 @@ use Drupal\Tests\UnitTestCase;
  * @group fapi_validation
  * @group fapi_validation_filters
  */
+#[Group('fapi_validation')]
+#[Group('fapi_validation_filters')]
 class TrimFilterTest extends UnitTestCase {
 
   /**
diff --git a/tests/src/Unit/Filters/UcfirstFilterTest.php b/tests/src/Unit/Filters/UcfirstFilterTest.php
index f50eb6f..e2b810d 100644
--- a/tests/src/Unit/Filters/UcfirstFilterTest.php
+++ b/tests/src/Unit/Filters/UcfirstFilterTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\fapi_validation\Unit\Filters;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\fapi_validation\Plugin\FapiValidationFilter\UcfirstFilter;
 use Drupal\Tests\UnitTestCase;
 
@@ -11,6 +12,8 @@ use Drupal\Tests\UnitTestCase;
  * @group fapi_validation
  * @group fapi_validation_filters
  */
+#[Group('fapi_validation')]
+#[Group('fapi_validation_filters')]
 class UcfirstFilterTest extends UnitTestCase {
 
   /**
diff --git a/tests/src/Unit/Filters/UcwordsFilterTest.php b/tests/src/Unit/Filters/UcwordsFilterTest.php
index 8d95cfb..73f6715 100644
--- a/tests/src/Unit/Filters/UcwordsFilterTest.php
+++ b/tests/src/Unit/Filters/UcwordsFilterTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\fapi_validation\Unit\Filters;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\fapi_validation\Plugin\FapiValidationFilter\UcwordsFilter;
 use Drupal\Tests\UnitTestCase;
 
@@ -11,6 +12,8 @@ use Drupal\Tests\UnitTestCase;
  * @group fapi_validation
  * @group fapi_validation_filters
  */
+#[Group('fapi_validation')]
+#[Group('fapi_validation_filters')]
 class UcwordsFilterTest extends UnitTestCase {
 
   /**
diff --git a/tests/src/Unit/Filters/UppercaseFilterTest.php b/tests/src/Unit/Filters/UppercaseFilterTest.php
index e321922..034f26c 100644
--- a/tests/src/Unit/Filters/UppercaseFilterTest.php
+++ b/tests/src/Unit/Filters/UppercaseFilterTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\fapi_validation\Unit\Filters;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\fapi_validation\Plugin\FapiValidationFilter\UppercaseFilter;
 use Drupal\Tests\UnitTestCase;
 
@@ -11,6 +12,8 @@ use Drupal\Tests\UnitTestCase;
  * @group fapi_validation
  * @group fapi_validation_filters
  */
+#[Group('fapi_validation')]
+#[Group('fapi_validation_filters')]
 class UppercaseFilterTest extends UnitTestCase {
 
   /**
diff --git a/tests/src/Unit/Validators/AlphaValidatorTest.php b/tests/src/Unit/Validators/AlphaValidatorTest.php
index e3c5e83..698f068 100644
--- a/tests/src/Unit/Validators/AlphaValidatorTest.php
+++ b/tests/src/Unit/Validators/AlphaValidatorTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\fapi_validation\Unit\Validators;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\fapi_validation\Plugin\FapiValidationValidator\AlphaValidator;
 use Drupal\fapi_validation\Validator;
 
@@ -11,6 +12,8 @@ use Drupal\fapi_validation\Validator;
  * @group fapi_validation
  * @group fapi_validation_validators
  */
+#[Group('fapi_validation')]
+#[Group('fapi_validation_validators')]
 class AlphaValidatorTest extends BaseValidator {
 
   /**
diff --git a/tests/src/Unit/Validators/BaseValidator.php b/tests/src/Unit/Validators/BaseValidator.php
index 3913a20..3f543b5 100644
--- a/tests/src/Unit/Validators/BaseValidator.php
+++ b/tests/src/Unit/Validators/BaseValidator.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\fapi_validation\Unit\Validators;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Tests\UnitTestCase;
 
@@ -11,6 +12,8 @@ use Drupal\Tests\UnitTestCase;
  * @group fapi_validation
  * @group fapi_validation_validators
  */
+#[Group('fapi_validation')]
+#[Group('fapi_validation_validators')]
 abstract class BaseValidator extends UnitTestCase {
 
   /**
diff --git a/tests/src/Unit/Validators/DecimalValidatorTest.php b/tests/src/Unit/Validators/DecimalValidatorTest.php
index 707f2fb..d94043b 100644
--- a/tests/src/Unit/Validators/DecimalValidatorTest.php
+++ b/tests/src/Unit/Validators/DecimalValidatorTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\fapi_validation\Unit\Validators;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\fapi_validation\Plugin\FapiValidationValidator\DecimalValidator;
 use Drupal\fapi_validation\Validator;
 
@@ -11,6 +12,8 @@ use Drupal\fapi_validation\Validator;
  * @group fapi_validation
  * @group fapi_validation_validators
  */
+#[Group('fapi_validation')]
+#[Group('fapi_validation_validators')]
 class DecimalValidatorTest extends BaseValidator {
 
   /**
diff --git a/tests/src/Unit/Validators/LengthValidatorTest.php b/tests/src/Unit/Validators/LengthValidatorTest.php
index 6a8e1ea..9bab860 100644
--- a/tests/src/Unit/Validators/LengthValidatorTest.php
+++ b/tests/src/Unit/Validators/LengthValidatorTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\fapi_validation\Unit\Validators;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\fapi_validation\Plugin\FapiValidationValidator\LengthValidator;
 use Drupal\fapi_validation\Validator;
 
@@ -11,6 +12,8 @@ use Drupal\fapi_validation\Validator;
  * @group fapi_validation
  * @group fapi_validation_validators
  */
+#[Group('fapi_validation')]
+#[Group('fapi_validation_validators')]
 class LengthValidatorTest extends BaseValidator {
 
   /**
diff --git a/tests/src/Unit/Validators/NumericValidatorTest.php b/tests/src/Unit/Validators/NumericValidatorTest.php
index 78e6b5c..8a7a037 100644
--- a/tests/src/Unit/Validators/NumericValidatorTest.php
+++ b/tests/src/Unit/Validators/NumericValidatorTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\fapi_validation\Unit\Validators;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\fapi_validation\Plugin\FapiValidationValidator\NumericValidator;
 use Drupal\fapi_validation\Validator;
 
@@ -11,6 +12,8 @@ use Drupal\fapi_validation\Validator;
  * @group fapi_validation
  * @group fapi_validation_validators
  */
+#[Group('fapi_validation')]
+#[Group('fapi_validation_validators')]
 class NumericValidatorTest extends BaseValidator {
 
   /**
diff --git a/tests/src/Unit/Validators/RangeValidatorTest.php b/tests/src/Unit/Validators/RangeValidatorTest.php
index 4a3c792..0e728de 100644
--- a/tests/src/Unit/Validators/RangeValidatorTest.php
+++ b/tests/src/Unit/Validators/RangeValidatorTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\fapi_validation\Unit\Validators;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\fapi_validation\Plugin\FapiValidationValidator\RangeValidator;
 use Drupal\fapi_validation\Validator;
 
@@ -11,6 +12,8 @@ use Drupal\fapi_validation\Validator;
  * @group fapi_validation
  * @group fapi_validation_validators
  */
+#[Group('fapi_validation')]
+#[Group('fapi_validation_validators')]
 class RangeValidatorTest extends BaseValidator {
 
   /**
