diff --git a/src/Form/StateTransitionConfirmForm.php b/src/Form/StateTransitionConfirmForm.php
index 54a3cb4..bdbdbdb 100644
--- a/src/Form/StateTransitionConfirmForm.php
+++ b/src/Form/StateTransitionConfirmForm.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\state_machine\Form;
 
+use Drupal\Component\Utility\DeprecationHelper;
 use Drupal\Core\Entity\ContentEntityConfirmFormBase;
 use Drupal\Core\Form\FormStateInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -109,7 +110,7 @@ class StateTransitionConfirmForm extends ContentEntityConfirmFormBase {
       return $this->renderer->renderInIsolation($description);
     }
     else {
-      return $this->renderer->renderPlain($description);
+      return DeprecationHelper::backwardsCompatibleCall(\Drupal::VERSION, '10.3.0', fn() => $this->renderer->renderInIsolation($description), fn() => $this->renderer->renderPlain($description));
     }
   }
 
diff --git a/src/Hook/StateMachineHooks.php b/src/Hook/StateMachineHooks.php
new file mode 100644
index 0000000..190049a
--- /dev/null
+++ b/src/Hook/StateMachineHooks.php
@@ -0,0 +1,67 @@
+<?php
+
+namespace Drupal\state_machine\Hook;
+
+use Drupal\field\FieldStorageConfigInterface;
+use Drupal\state_machine\Form\StateTransitionConfirmForm;
+use Drupal\Core\Hook\Attribute\Hook;
+
+/**
+ * Hook implementations for state_machine.
+ */
+class StateMachineHooks {
+
+  /**
+   * Implements hook_field_widget_info_alter().
+   */
+  #[Hook('field_widget_info_alter')]
+  public static function fieldWidgetInfoAlter(array &$info) {
+    $info['options_select']['field_types'][] = 'state';
+  }
+
+  /**
+   * Implements hook_field_formatter_info_alter().
+   */
+  #[Hook('field_formatter_info_alter')]
+  public static function fieldFormatterInfoAlter(array &$info) {
+    $info['list_default']['field_types'][] = 'state';
+  }
+
+  /**
+   * Implements hook_entity_type_alter().
+   */
+  #[Hook('entity_type_alter')]
+  public static function entityTypeAlter(array &$entity_types) {
+    /** @var \Drupal\Core\Entity\EntityTypeInterface[] $entity_types */
+    foreach ($entity_types as $entity_type) {
+      // Sets a default state-transition-confirm form class for all entity types
+      // defining a "state-transition-form" link template.
+      if (!$entity_type->hasLinkTemplate('state-transition-form') || $entity_type->getFormClass('state-transition-confirm')) {
+        continue;
+      }
+      $entity_type->setFormClass('state-transition-confirm', StateTransitionConfirmForm::class);
+    }
+  }
+
+  /**
+   * Implements hook_field_views_data().
+   *
+   * Views integration for state fields.
+   */
+  #[Hook('field_views_data')]
+  public static function fieldViewsData(FieldStorageConfigInterface $field) {
+    if (\Drupal::hasService('views.field_data_provider')) {
+      $data = \Drupal::service('views.field_data_provider')->defaultFieldImplementation($field);
+    }
+    else {
+      $deprecated_function = 'views_field_default_views_data';
+      $data = $deprecated_function($field);
+    }
+    $field_name = $field->getName();
+    foreach ($data as $table_name => $table_data) {
+      $data[$table_name][$field_name . '_value']['filter']['id'] = 'state_machine_state';
+    }
+    return $data;
+  }
+
+}
diff --git a/state_machine.module b/state_machine.module
index a5c51ca..fbe95b7 100644
--- a/state_machine.module
+++ b/state_machine.module
@@ -5,37 +5,32 @@
  * Provides workflow functionality.
  */
 
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\state_machine\Hook\StateMachineHooks;
 use Drupal\field\FieldStorageConfigInterface;
-use Drupal\state_machine\Form\StateTransitionConfirmForm;
 
 /**
  * Implements hook_field_widget_info_alter().
  */
+#[LegacyHook]
 function state_machine_field_widget_info_alter(array &$info) {
-  $info['options_select']['field_types'][] = 'state';
+  \Drupal::service(StateMachineHooks::class)->fieldWidgetInfoAlter($info);
 }
 
 /**
  * Implements hook_field_formatter_info_alter().
  */
+#[LegacyHook]
 function state_machine_field_formatter_info_alter(array &$info) {
-  $info['list_default']['field_types'][] = 'state';
+  \Drupal::service(StateMachineHooks::class)->fieldFormatterInfoAlter($info);
 }
 
 /**
  * Implements hook_entity_type_alter().
  */
+#[LegacyHook]
 function state_machine_entity_type_alter(array &$entity_types) {
-  /** @var \Drupal\Core\Entity\EntityTypeInterface[] $entity_types */
-  foreach ($entity_types as $entity_type) {
-    // Sets a default state-transition-confirm form class for all entity types
-    // defining a "state-transition-form" link template.
-    if (!$entity_type->hasLinkTemplate('state-transition-form') ||
-      $entity_type->getFormClass('state-transition-confirm')) {
-      continue;
-    }
-    $entity_type->setFormClass('state-transition-confirm', StateTransitionConfirmForm::class);
-  }
+  \Drupal::service(StateMachineHooks::class)->entityTypeAlter($entity_types);
 }
 
 /**
@@ -43,18 +38,7 @@ function state_machine_entity_type_alter(array &$entity_types) {
  *
  * Views integration for state fields.
  */
+#[LegacyHook]
 function state_machine_field_views_data(FieldStorageConfigInterface $field) {
-  if (\Drupal::hasService('views.field_data_provider')) {
-    $data = \Drupal::service('views.field_data_provider')->defaultFieldImplementation($field);
-  }
-  else {
-    $deprecated_function = 'views_field_default_views_data';
-    $data = $deprecated_function($field);
-  }
-  $field_name = $field->getName();
-  foreach ($data as $table_name => $table_data) {
-    $data[$table_name][$field_name . '_value']['filter']['id'] = 'state_machine_state';
-  }
-
-  return $data;
+  return \Drupal::service(StateMachineHooks::class)->fieldViewsData($field);
 }
diff --git a/state_machine.services.yml b/state_machine.services.yml
index e7876ee..4ef9915 100644
--- a/state_machine.services.yml
+++ b/state_machine.services.yml
@@ -22,3 +22,7 @@ services:
   plugin.manager.workflow_group:
     class: Drupal\state_machine\WorkflowGroupManager
     arguments: ['@module_handler', '@cache.discovery']
+
+  Drupal\state_machine\Hook\StateMachineHooks:
+    class: Drupal\state_machine\Hook\StateMachineHooks
+    autowire: true
diff --git a/tests/modules/state_machine_test/src/Hook/StateMachineTestHooks.php b/tests/modules/state_machine_test/src/Hook/StateMachineTestHooks.php
new file mode 100644
index 0000000..abf66a0
--- /dev/null
+++ b/tests/modules/state_machine_test/src/Hook/StateMachineTestHooks.php
@@ -0,0 +1,32 @@
+<?php
+
+namespace Drupal\state_machine_test\Hook;
+
+use Drupal\views\EntityViewsData;
+use Drupal\Core\Hook\Attribute\Hook;
+
+/**
+ * Hook implementations for state_machine_test.
+ */
+class StateMachineTestHooks {
+
+  /**
+   * Implements hook_entity_type_build().
+   */
+  #[Hook('entity_type_build')]
+  public static function entityTypeBuild(array &$entity_types) {
+    $entity_types['entity_test_with_bundle']->setHandlerClass('views_data', EntityViewsData::class);
+  }
+
+  /**
+   * Implements hook_entity_type_alter().
+   */
+  #[Hook('entity_type_alter')]
+  public static function entityTypeAlter(array &$entity_types) {
+    /** @var \Drupal\Core\Entity\EntityTypeInterface[] $entity_types */
+    if (isset($entity_types['entity_test_with_bundle'])) {
+      $entity_types['entity_test_with_bundle']->setLinkTemplate('state-transition-form', '/entity_test_with_bundle/{entity_test_with_bundle}/{field_name}/{transition_id}');
+    }
+  }
+
+}
diff --git a/tests/modules/state_machine_test/state_machine_test.module b/tests/modules/state_machine_test/state_machine_test.module
index 109a45b..4427027 100644
--- a/tests/modules/state_machine_test/state_machine_test.module
+++ b/tests/modules/state_machine_test/state_machine_test.module
@@ -5,13 +5,15 @@
  * Test module for State Machine.
  */
 
-use Drupal\views\EntityViewsData;
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\state_machine_test\Hook\StateMachineTestHooks;
 
 /**
  * Implements hook_entity_type_build().
  */
+#[LegacyHook]
 function state_machine_test_entity_type_build(array &$entity_types) {
-  $entity_types['entity_test_with_bundle']->setHandlerClass('views_data', EntityViewsData::class);
+  \Drupal::service(StateMachineTestHooks::class)->entityTypeBuild($entity_types);
 }
 
 /**
@@ -24,11 +26,9 @@ function state_machine_test_workflow_callback() {
 /**
  * Implements hook_entity_type_alter().
  */
+#[LegacyHook]
 function state_machine_test_entity_type_alter(array &$entity_types) {
-  /** @var \Drupal\Core\Entity\EntityTypeInterface[] $entity_types */
-  if (isset($entity_types['entity_test_with_bundle'])) {
-    $entity_types['entity_test_with_bundle']->setLinkTemplate('state-transition-form', '/entity_test_with_bundle/{entity_test_with_bundle}/{field_name}/{transition_id}');
-  }
+  \Drupal::service(StateMachineTestHooks::class)->entityTypeAlter($entity_types);
 }
 
 /**
diff --git a/tests/modules/state_machine_test/state_machine_test.services.yml b/tests/modules/state_machine_test/state_machine_test.services.yml
index 179711c..7df474d 100644
--- a/tests/modules/state_machine_test/state_machine_test.services.yml
+++ b/tests/modules/state_machine_test/state_machine_test.services.yml
@@ -15,3 +15,7 @@ services:
     arguments: ['@messenger']
     tags:
       - { name: event_subscriber }
+
+  Drupal\state_machine_test\Hook\StateMachineTestHooks:
+    class: Drupal\state_machine_test\Hook\StateMachineTestHooks
+    autowire: true
diff --git a/tests/src/Functional/StateFilterTest.php b/tests/src/Functional/StateFilterTest.php
index 0869e3c..ba2612b 100644
--- a/tests/src/Functional/StateFilterTest.php
+++ b/tests/src/Functional/StateFilterTest.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Tests\state_machine\Functional;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
 use Drupal\entity_test\Entity\EntityTestWithBundle;
 use Drupal\Tests\BrowserTestBase;
 
@@ -10,6 +12,8 @@ use Drupal\Tests\BrowserTestBase;
  *
  * @group state_machine
  */
+#[Group('state_machine')]
+#[RunTestsInSeparateProcesses]
 class StateFilterTest extends BrowserTestBase {
 
   /**
diff --git a/tests/src/Functional/StateTransitionFormTest.php b/tests/src/Functional/StateTransitionFormTest.php
index f0921a2..b1f555f 100644
--- a/tests/src/Functional/StateTransitionFormTest.php
+++ b/tests/src/Functional/StateTransitionFormTest.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Tests\state_machine\Functional;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
 use Drupal\Core\Entity\Entity\EntityViewDisplay;
 use Drupal\Core\Url;
 use Drupal\entity_test\Entity\EntityTestWithBundle;
@@ -12,6 +14,8 @@ use Drupal\Tests\BrowserTestBase;
  *
  * @group state_machine
  */
+#[Group('state_machine')]
+#[RunTestsInSeparateProcesses]
 class StateTransitionFormTest extends BrowserTestBase {
 
   /**
diff --git a/tests/src/FunctionalJavascript/StateTransitionFormTest.php b/tests/src/FunctionalJavascript/StateTransitionFormTest.php
index 6c797f3..9cc241b 100644
--- a/tests/src/FunctionalJavascript/StateTransitionFormTest.php
+++ b/tests/src/FunctionalJavascript/StateTransitionFormTest.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Tests\state_machine\FunctionalJavascript;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
 use Drupal\Core\Entity\Entity\EntityViewDisplay;
 use Drupal\entity_test\Entity\EntityTestWithBundle;
 use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
@@ -11,6 +13,8 @@ use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
  *
  * @group state_machine
  */
+#[Group('state_machine')]
+#[RunTestsInSeparateProcesses]
 class StateTransitionFormTest extends WebDriverTestBase {
 
   /**
diff --git a/tests/src/Kernel/StateItemTest.php b/tests/src/Kernel/StateItemTest.php
index d04880e..eec9558 100644
--- a/tests/src/Kernel/StateItemTest.php
+++ b/tests/src/Kernel/StateItemTest.php
@@ -2,6 +2,9 @@
 
 namespace Drupal\Tests\state_machine\Kernel;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
+use PHPUnit\Framework\Attributes\DataProvider;
 use Drupal\entity_test\Entity\EntityTestWithBundle;
 use Drupal\Tests\field\Kernel\FieldKernelTestBase;
 
@@ -9,6 +12,8 @@ use Drupal\Tests\field\Kernel\FieldKernelTestBase;
  * @coversDefaultClass \Drupal\state_machine\Plugin\Field\FieldType\StateItem
  * @group state_machine
  */
+#[Group('state_machine')]
+#[RunTestsInSeparateProcesses]
 class StateItemTest extends FieldKernelTestBase {
 
   /**
@@ -50,6 +55,7 @@ class StateItemTest extends FieldKernelTestBase {
   /**
    * @dataProvider providerTestField
    */
+  #[DataProvider('providerTestField')]
   public function testField($initial_state, $allowed_transitions, $invalid_new_state, $valid_transition, $expected_new_state) {
     $entity = EntityTestWithBundle::create([
       'name' => 'second',
@@ -125,6 +131,7 @@ class StateItemTest extends FieldKernelTestBase {
   /**
    * @dataProvider providerSettableOptions
    */
+  #[DataProvider('providerSettableOptions')]
   public function testSettableOptions($initial_state, $available_options) {
     $entity = EntityTestWithBundle::create([
       'name' => 'second',
diff --git a/tests/src/Kernel/WorkflowTransitionEventTest.php b/tests/src/Kernel/WorkflowTransitionEventTest.php
index 1175c5f..5bf5816 100644
--- a/tests/src/Kernel/WorkflowTransitionEventTest.php
+++ b/tests/src/Kernel/WorkflowTransitionEventTest.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Tests\state_machine\Kernel;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
 use Drupal\entity_test\Entity\EntityTestWithBundle;
 use Drupal\KernelTests\KernelTestBase;
 
@@ -10,6 +12,8 @@ use Drupal\KernelTests\KernelTestBase;
  *
  * @group state_machine
  */
+#[Group('state_machine')]
+#[RunTestsInSeparateProcesses]
 class WorkflowTransitionEventTest extends KernelTestBase {
 
   /**
diff --git a/tests/src/Unit/Plugin/Workflow/WorkflowTest.php b/tests/src/Unit/Plugin/Workflow/WorkflowTest.php
index 915734c..b2135f5 100644
--- a/tests/src/Unit/Plugin/Workflow/WorkflowTest.php
+++ b/tests/src/Unit/Plugin/Workflow/WorkflowTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\state_machine\Unit\Plugin\Workflow;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\StringTranslation\TranslatableMarkup;
 use Drupal\Core\StringTranslation\TranslationInterface;
@@ -15,6 +16,7 @@ use Prophecy\Argument;
  * @coversDefaultClass \Drupal\state_machine\Plugin\Workflow\Workflow
  * @group state_machine
  */
+#[Group('state_machine')]
 class WorkflowTest extends UnitTestCase {
 
   /**
diff --git a/tests/src/Unit/Plugin/WorkflowGroup/WorkflowGroupTest.php b/tests/src/Unit/Plugin/WorkflowGroup/WorkflowGroupTest.php
index aef843b..59c66dc 100644
--- a/tests/src/Unit/Plugin/WorkflowGroup/WorkflowGroupTest.php
+++ b/tests/src/Unit/Plugin/WorkflowGroup/WorkflowGroupTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\state_machine\Unit\Plugin\WorkflowGroup;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\state_machine\Plugin\Workflow\Workflow;
 use Drupal\state_machine\Plugin\WorkflowGroup\WorkflowGroup;
 use Drupal\Tests\UnitTestCase;
@@ -10,6 +11,7 @@ use Drupal\Tests\UnitTestCase;
  * @coversDefaultClass \Drupal\state_machine\Plugin\WorkflowGroup\WorkflowGroup
  * @group state_machine
  */
+#[Group('state_machine')]
 class WorkflowGroupTest extends UnitTestCase {
 
   /**
diff --git a/tests/src/Unit/WorkflowManagerCacheTest.php b/tests/src/Unit/WorkflowManagerCacheTest.php
index 2114a2f..f6b8cd5 100644
--- a/tests/src/Unit/WorkflowManagerCacheTest.php
+++ b/tests/src/Unit/WorkflowManagerCacheTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\state_machine\Unit;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\Core\Cache\CacheBackendInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\state_machine\Guard\GuardFactoryInterface;
@@ -18,6 +19,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
  * @coversDefaultClass \Drupal\state_machine\WorkflowManager
  * @group state_machine
  */
+#[Group('state_machine')]
 class WorkflowManagerCacheTest extends UnitTestCase {
 
   /**
