diff --git a/src/Command/ProcessStatus.php b/src/Command/ProcessStatus.php
index b0beaba..9f7d1c6 100644
--- a/src/Command/ProcessStatus.php
+++ b/src/Command/ProcessStatus.php
@@ -4,7 +4,7 @@ declare(strict_types=1);
 
 namespace Drupal\supervisor\Command;
 
-use Drupal\supervisor\Formatter;
+use Drupal\supervisor\Formatter\ProcessInfo;
 use Supervisor\ProcessStates;
 use Supervisor\SupervisorInterface;
 use Symfony\Component\Console\Attribute\AsCommand;
@@ -27,7 +27,7 @@ final class ProcessStatus extends Command {
    */
   public function __construct(
     private readonly SupervisorInterface $supervisor,
-    private readonly Formatter\ProcessInfo $formatter,
+    private readonly ProcessInfo $formatter,
   ) {
     parent::__construct();
   }
diff --git a/src/Controller/Process/Canonical.php b/src/Controller/Process/Canonical.php
index b63b104..770b8e4 100644
--- a/src/Controller/Process/Canonical.php
+++ b/src/Controller/Process/Canonical.php
@@ -4,11 +4,11 @@ declare(strict_types=1);
 
 namespace Drupal\supervisor\Controller\Process;
 
+use Drupal\supervisor\Formatter\ProcessInfo;
 use Drupal\Component\Render\FormattableMarkup as FM;
 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
 use Drupal\Core\StringTranslation\TranslatableMarkup as TM;
 use Drupal\Core\Url;
-use Drupal\supervisor\Formatter;
 use Supervisor\Exception\Fault\BadNameException;
 use Supervisor\SupervisorInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -24,7 +24,7 @@ final readonly class Canonical implements ContainerInjectionInterface {
    */
   public function __construct(
     private SupervisorInterface $supervisor,
-    private Formatter\ProcessInfo $formatter,
+    private ProcessInfo $formatter,
   ) {}
 
   /**
diff --git a/src/Controller/Process/CanonicalRefresh.php b/src/Controller/Process/CanonicalRefresh.php
index 9a17eb9..7ef0253 100644
--- a/src/Controller/Process/CanonicalRefresh.php
+++ b/src/Controller/Process/CanonicalRefresh.php
@@ -4,8 +4,8 @@ declare(strict_types=1);
 
 namespace Drupal\supervisor\Controller\Process;
 
+use Drupal\supervisor\Formatter\ProcessInfo;
 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
-use Drupal\supervisor\Formatter;
 use Supervisor\Exception\Fault\BadNameException;
 use Supervisor\SupervisorInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -24,7 +24,7 @@ final readonly class CanonicalRefresh implements ContainerInjectionInterface {
    */
   public function __construct(
     private SupervisorInterface $supervisor,
-    private Formatter\ProcessInfo $formatter,
+    private ProcessInfo $formatter,
   ) {}
 
   /**
diff --git a/src/Controller/Process/Collection.php b/src/Controller/Process/Collection.php
index a6a307b..dab32c6 100644
--- a/src/Controller/Process/Collection.php
+++ b/src/Controller/Process/Collection.php
@@ -4,12 +4,12 @@ declare(strict_types=1);
 
 namespace Drupal\supervisor\Controller\Process;
 
+use Drupal\supervisor\Formatter\ProcessInfo;
 use Drupal\Component\Render\FormattableMarkup as FM;
 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
 use Drupal\Core\Link;
 use Drupal\Core\StringTranslation\TranslatableMarkup as TM;
 use Drupal\Core\Url;
-use Drupal\supervisor\Formatter;
 use Supervisor\SupervisorInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
@@ -23,7 +23,7 @@ final readonly class Collection implements ContainerInjectionInterface {
    */
   public function __construct(
     private SupervisorInterface $supervisor,
-    private Formatter\ProcessInfo $formatter,
+    private ProcessInfo $formatter,
   ) {}
 
   /**
diff --git a/src/Controller/Process/CollectionRefresh.php b/src/Controller/Process/CollectionRefresh.php
index 52e8e34..0b67447 100644
--- a/src/Controller/Process/CollectionRefresh.php
+++ b/src/Controller/Process/CollectionRefresh.php
@@ -4,8 +4,8 @@ declare(strict_types=1);
 
 namespace Drupal\supervisor\Controller\Process;
 
+use Drupal\supervisor\Formatter\ProcessInfo;
 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
-use Drupal\supervisor\Formatter;
 use Supervisor\SupervisorInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\HttpFoundation\JsonResponse;
@@ -22,7 +22,7 @@ final readonly class CollectionRefresh implements ContainerInjectionInterface {
    */
   public function __construct(
     private SupervisorInterface $supervisor,
-    private Formatter\ProcessInfo $formatter,
+    private ProcessInfo $formatter,
   ) {}
 
   /**
diff --git a/src/Formatter/ProcessInfo.php b/src/Formatter/ProcessInfo.php
index 08fc4d5..2ae44cb 100644
--- a/src/Formatter/ProcessInfo.php
+++ b/src/Formatter/ProcessInfo.php
@@ -6,7 +6,6 @@ namespace Drupal\supervisor\Formatter;
 
 use Drupal\Core\StringTranslation\TranslatableMarkup as TM;
 use Drupal\supervisor\Data;
-use Drupal\supervisor\Formatter;
 use Supervisor\ProcessStates;
 
 /**
@@ -17,7 +16,7 @@ final readonly class ProcessInfo {
   /**
    * {@selfdoc}
    */
-  public function __construct(private Formatter\Date $dateFormatter) {}
+  public function __construct(private Date $dateFormatter) {}
 
   /**
    * {@selfdoc}
diff --git a/src/Hook/SupervisorHooks.php b/src/Hook/SupervisorHooks.php
new file mode 100644
index 0000000..92222a5
--- /dev/null
+++ b/src/Hook/SupervisorHooks.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace Drupal\supervisor\Hook;
+
+use Drupal\Core\Hook\Attribute\Hook;
+
+/**
+ * Hook implementations for supervisor.
+ */
+class SupervisorHooks {
+  /**
+   * @file
+   * Primary module hooks for Supervisor module.
+   */
+
+  /**
+   * Implements hook_theme().
+   */
+  #[Hook('theme')]
+  public function theme(): array {
+    return [
+      'supervisor_field' => [
+        'variables' => [
+          'label' => NULL,
+          'items' => [],
+          'list' => FALSE,
+          'attributes' => [],
+        ],
+      ],
+    ];
+  }
+
+}
diff --git a/supervisor.module b/supervisor.module
index 84cd754..f8a4c26 100644
--- a/supervisor.module
+++ b/supervisor.module
@@ -2,6 +2,9 @@
 
 declare(strict_types=1);
 
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\supervisor\Hook\SupervisorHooks;
+
 /**
  * @file
  * Primary module hooks for Supervisor module.
@@ -10,15 +13,7 @@ declare(strict_types=1);
 /**
  * Implements hook_theme().
  */
+#[LegacyHook]
 function supervisor_theme(): array {
-  return [
-    'supervisor_field' => [
-      'variables' => [
-        'label' => NULL,
-        'items' => [],
-        'list' => FALSE,
-        'attributes' => [],
-      ],
-    ],
-  ];
+  return \Drupal::service(SupervisorHooks::class)->theme();
 }
diff --git a/supervisor.services.yml b/supervisor.services.yml
index 8f08d20..590da48 100644
--- a/supervisor.services.yml
+++ b/supervisor.services.yml
@@ -23,3 +23,7 @@ services:
   supervisor.process_info_formatter:
     class: Drupal\supervisor\Formatter\ProcessInfo
     arguments: ['@supervisor.date_formatter']
+
+  Drupal\supervisor\Hook\SupervisorHooks:
+    class: Drupal\supervisor\Hook\SupervisorHooks
+    autowire: true
diff --git a/tests/src/Functional/CanonicalTest.php b/tests/src/Functional/CanonicalTest.php
index 500fafb..85d8c04 100644
--- a/tests/src/Functional/CanonicalTest.php
+++ b/tests/src/Functional/CanonicalTest.php
@@ -4,6 +4,8 @@ declare(strict_types=1);
 
 namespace Drupal\Tests\supervisor\Functional;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
 use Drupal\Tests\BrowserTestBase;
 
 /**
@@ -11,6 +13,8 @@ use Drupal\Tests\BrowserTestBase;
  *
  * @group supervisor
  */
+#[Group('supervisor')]
+#[RunTestsInSeparateProcesses]
 final class CanonicalTest extends BrowserTestBase {
 
   /**
diff --git a/tests/src/Functional/CollectionTest.php b/tests/src/Functional/CollectionTest.php
index b554c40..81b3f21 100644
--- a/tests/src/Functional/CollectionTest.php
+++ b/tests/src/Functional/CollectionTest.php
@@ -4,6 +4,8 @@ declare(strict_types=1);
 
 namespace Drupal\Tests\supervisor\Functional;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
 use Drupal\Tests\BrowserTestBase;
 
 /**
@@ -11,6 +13,8 @@ use Drupal\Tests\BrowserTestBase;
  *
  * @group supervisor
  */
+#[Group('supervisor')]
+#[RunTestsInSeparateProcesses]
 final class CollectionTest extends BrowserTestBase {
 
   /**
diff --git a/tests/src/Functional/Form/SettingsTest.php b/tests/src/Functional/Form/SettingsTest.php
index ee18ab8..e7ec7cf 100644
--- a/tests/src/Functional/Form/SettingsTest.php
+++ b/tests/src/Functional/Form/SettingsTest.php
@@ -4,6 +4,8 @@ declare(strict_types=1);
 
 namespace Drupal\Tests\supervisor\Functional\Form;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
 use Drupal\Tests\BrowserTestBase;
 
 /**
@@ -11,6 +13,8 @@ use Drupal\Tests\BrowserTestBase;
  *
  * @group supervisor
  */
+#[Group('supervisor')]
+#[RunTestsInSeparateProcesses]
 final class SettingsTest extends BrowserTestBase {
 
   /**
diff --git a/tests/src/Functional/PermissionsTest.php b/tests/src/Functional/PermissionsTest.php
index 1f4dc8d..7da07ab 100644
--- a/tests/src/Functional/PermissionsTest.php
+++ b/tests/src/Functional/PermissionsTest.php
@@ -4,6 +4,8 @@ declare(strict_types=1);
 
 namespace Drupal\Tests\supervisor\Functional;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
 use Drupal\Tests\BrowserTestBase;
 
 /**
@@ -13,6 +15,8 @@ use Drupal\Tests\BrowserTestBase;
  *
  * @see \Drupal\Tests\supervisor\Functional\ProcessTest
  */
+#[Group('supervisor')]
+#[RunTestsInSeparateProcesses]
 final class PermissionsTest extends BrowserTestBase {
 
   private const PATHS = [
diff --git a/tests/src/Functional/ProcessTest.php b/tests/src/Functional/ProcessTest.php
index 20b44cf..a4d22cd 100644
--- a/tests/src/Functional/ProcessTest.php
+++ b/tests/src/Functional/ProcessTest.php
@@ -4,6 +4,9 @@ declare(strict_types=1);
 
 namespace Drupal\Tests\supervisor\Functional;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
+use PHPUnit\Framework\Attributes\DataProvider;
 use Drupal\Tests\BrowserTestBase;
 
 /**
@@ -13,6 +16,8 @@ use Drupal\Tests\BrowserTestBase;
  *
  * @see \Drupal\Tests\supervisor\Functional\PermissionsTest
  */
+#[Group('supervisor')]
+#[RunTestsInSeparateProcesses]
 final class ProcessTest extends BrowserTestBase {
 
   /**
@@ -39,6 +44,7 @@ final class ProcessTest extends BrowserTestBase {
    *
    * @dataProvider processAccessData
    */
+  #[DataProvider('processAccessData')]
   public function testProcessAccess(string $path, int $status_code): void {
     $this->drupalGet($path);
     $this->assertSession()->statusCodeEquals($status_code);
diff --git a/tests/src/Functional/StateTest.php b/tests/src/Functional/StateTest.php
index 2b74a6d..1e85789 100644
--- a/tests/src/Functional/StateTest.php
+++ b/tests/src/Functional/StateTest.php
@@ -4,6 +4,8 @@ declare(strict_types=1);
 
 namespace Drupal\Tests\supervisor\Functional;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
 use Drupal\Tests\BrowserTestBase;
 
 /**
@@ -11,6 +13,8 @@ use Drupal\Tests\BrowserTestBase;
  *
  * @group supervisor
  */
+#[Group('supervisor')]
+#[RunTestsInSeparateProcesses]
 final class StateTest extends BrowserTestBase {
 
   /**
diff --git a/tests/src/Kernel/Formatter/DateTest.php b/tests/src/Kernel/Formatter/DateTest.php
index cfff67a..40e5eda 100644
--- a/tests/src/Kernel/Formatter/DateTest.php
+++ b/tests/src/Kernel/Formatter/DateTest.php
@@ -4,6 +4,8 @@ declare(strict_types=1);
 
 namespace Drupal\Tests\supervisor\Kernel;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
 use Drupal\KernelTests\KernelTestBase;
 
 /**
@@ -11,6 +13,8 @@ use Drupal\KernelTests\KernelTestBase;
  *
  * @group supervisor
  */
+#[Group('supervisor')]
+#[RunTestsInSeparateProcesses]
 class DateTest extends KernelTestBase {
 
   /**
diff --git a/tests/src/Kernel/Formatter/ProcessInfoTest.php b/tests/src/Kernel/Formatter/ProcessInfoTest.php
index 520cb48..84ffbd0 100644
--- a/tests/src/Kernel/Formatter/ProcessInfoTest.php
+++ b/tests/src/Kernel/Formatter/ProcessInfoTest.php
@@ -4,6 +4,9 @@ declare(strict_types=1);
 
 namespace Drupal\Tests\supervisor\Kernel;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
+use PHPUnit\Framework\Attributes\DataProvider;
 use Drupal\KernelTests\KernelTestBase;
 use Drupal\supervisor\Data\ProcessInfo;
 use Supervisor\ProcessStates;
@@ -13,6 +16,8 @@ use Supervisor\ProcessStates;
  *
  * @group supervisor
  */
+#[Group('supervisor')]
+#[RunTestsInSeparateProcesses]
 class ProcessInfoTest extends KernelTestBase {
 
   /**
@@ -28,6 +33,7 @@ class ProcessInfoTest extends KernelTestBase {
    *
    * @dataProvider formatterData
    */
+  #[DataProvider('formatterData')]
   public function testFormatter(array $raw_process_info, ProcessInfo $expected_process_info): void {
     $this->installConfig('supervisor');
     $formatter = $this->container->get('supervisor.process_info_formatter');
