diff --git a/csp.install b/csp.install
index e8391a2..ddcecf6 100644
--- a/csp.install
+++ b/csp.install
@@ -30,7 +30,7 @@ function csp_update_20001(): ?TranslatableMarkup {
     }
   }
 
-  $config->save(TRUE);
+  $config->save();
 
   if ($changed) {
     return t("The sitelog reporting handler has been removed - use the Reporting API module instead.");
@@ -47,7 +47,7 @@ function csp_update_20201(): void {
   foreach (['enforce', 'report-only'] as $policyType) {
     if ($config->get($policyType . '.directives.require-trusted-types-for')) {
       $config->set($policyType . '.directives.require-trusted-types-for', ['script']);
-      $config->save(TRUE);
+      $config->save();
     }
   }
 }
diff --git a/csp.module b/csp.module
index c03b73e..9d491b0 100644
--- a/csp.module
+++ b/csp.module
@@ -1,5 +1,12 @@
 <?php
 
+/**
+ * @file
+ */
+
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\csp\Hook\CspHooks;
+
 /**
  * @file
  * CSP module hooks.
@@ -8,8 +15,7 @@
 /**
  * Implements hook_rebuild().
  */
+#[LegacyHook]
 function csp_rebuild(): void {
-  /** @var \Drupal\csp\LibraryPolicyBuilder $libraryPolicyBuilder */
-  $libraryPolicyBuilder = \Drupal::service('csp.library_policy_builder');
-  $libraryPolicyBuilder->getSources();
+  \Drupal::service(CspHooks::class)->rebuild();
 }
diff --git a/csp.services.yml b/csp.services.yml
index 5516f47..2d4ecda 100644
--- a/csp.services.yml
+++ b/csp.services.yml
@@ -56,3 +56,7 @@ services:
     class: Drupal\csp\Render\CspResponseAttachmentsProcessor
     decorates: html_response.attachments_processor
     arguments: ['@html_response.attachments_processor.csp.inner']
+
+  Drupal\csp\Hook\CspHooks:
+    class: Drupal\csp\Hook\CspHooks
+    autowire: true
diff --git a/src/Hook/CspHooks.php b/src/Hook/CspHooks.php
new file mode 100644
index 0000000..f2ac8a9
--- /dev/null
+++ b/src/Hook/CspHooks.php
@@ -0,0 +1,26 @@
+<?php
+
+namespace Drupal\csp\Hook;
+
+use Drupal\Core\Hook\Attribute\Hook;
+
+/**
+ * Hook implementations for csp.
+ */
+class CspHooks {
+  /**
+   * @file
+   * CSP module hooks.
+   */
+
+  /**
+   * Implements hook_rebuild().
+   */
+  #[Hook('rebuild')]
+  public function rebuild(): void {
+    /** @var \Drupal\csp\LibraryPolicyBuilder $libraryPolicyBuilder */
+    $libraryPolicyBuilder = \Drupal::service('csp.library_policy_builder');
+    $libraryPolicyBuilder->getSources();
+  }
+
+}
diff --git a/tests/src/Functional/NonceSettingTest.php b/tests/src/Functional/NonceSettingTest.php
index f8da8f6..61cc217 100644
--- a/tests/src/Functional/NonceSettingTest.php
+++ b/tests/src/Functional/NonceSettingTest.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Tests\csp\Functional;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
 use Drupal\Tests\BrowserTestBase;
 
 /**
@@ -9,6 +11,8 @@ use Drupal\Tests\BrowserTestBase;
  *
  * @group csp
  */
+#[Group('csp')]
+#[RunTestsInSeparateProcesses]
 class NonceSettingTest extends BrowserTestBase {
 
   /**
diff --git a/tests/src/Functional/RenderAttachedTest.php b/tests/src/Functional/RenderAttachedTest.php
index d9990a0..cf9ff56 100644
--- a/tests/src/Functional/RenderAttachedTest.php
+++ b/tests/src/Functional/RenderAttachedTest.php
@@ -2,16 +2,19 @@
 
 namespace Drupal\Tests\csp\Functional;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
 use Drupal\Tests\BrowserTestBase;
 use Drupal\user\Entity\User;
 
 // cspell:ignore Tyrell
-
 /**
  * Tests the render #attached functionality.
  *
  * @group csp
  */
+#[Group('csp')]
+#[RunTestsInSeparateProcesses]
 class RenderAttachedTest extends BrowserTestBase {
 
   /**
diff --git a/tests/src/Unit/CspFirefoxBugTest.php b/tests/src/Unit/CspFirefoxBugTest.php
index 58c737d..a01de7a 100644
--- a/tests/src/Unit/CspFirefoxBugTest.php
+++ b/tests/src/Unit/CspFirefoxBugTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\csp\Unit;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\Tests\UnitTestCase;
 use Drupal\csp\Csp;
 
@@ -13,6 +14,7 @@ use Drupal\csp\Csp;
  * @coversDefaultClass \Drupal\csp\Csp
  * @group csp
  */
+#[Group('csp')]
 class CspFirefoxBugTest extends UnitTestCase {
 
   /**
diff --git a/tests/src/Unit/CspOptimizationTest.php b/tests/src/Unit/CspOptimizationTest.php
index aa5b5be..24c7ac9 100644
--- a/tests/src/Unit/CspOptimizationTest.php
+++ b/tests/src/Unit/CspOptimizationTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\csp\Unit;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\Tests\UnitTestCase;
 use Drupal\csp\Csp;
 use PHPUnit\Framework\Attributes\DataProvider;
@@ -12,6 +13,7 @@ use PHPUnit\Framework\Attributes\DataProvider;
  * @coversDefaultClass \Drupal\csp\Csp
  * @group csp
  */
+#[Group('csp')]
 class CspOptimizationTest extends UnitTestCase {
 
   /**
diff --git a/tests/src/Unit/CspTest.php b/tests/src/Unit/CspTest.php
index afcdb6d..88bb364 100644
--- a/tests/src/Unit/CspTest.php
+++ b/tests/src/Unit/CspTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\csp\Unit;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\Tests\UnitTestCase;
 use Drupal\csp\Csp;
 
@@ -11,6 +12,7 @@ use Drupal\csp\Csp;
  * @coversDefaultClass \Drupal\csp\Csp
  * @group csp
  */
+#[Group('csp')]
 class CspTest extends UnitTestCase {
 
   /**
diff --git a/tests/src/Unit/EventSubscriber/CoreCspSubscriberTest.php b/tests/src/Unit/EventSubscriber/CoreCspSubscriberTest.php
index d6428df..9ccbf04 100644
--- a/tests/src/Unit/EventSubscriber/CoreCspSubscriberTest.php
+++ b/tests/src/Unit/EventSubscriber/CoreCspSubscriberTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\csp\Unit\EventSubscriber;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\Core\Asset\LibraryDependencyResolverInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Render\HtmlResponse;
@@ -15,6 +16,7 @@ use Drupal\csp\EventSubscriber\CoreCspSubscriber;
  * @coversDefaultClass \Drupal\csp\EventSubscriber\CoreCspSubscriber
  * @group csp
  */
+#[Group('csp')]
 class CoreCspSubscriberTest extends UnitTestCase {
 
   /**
diff --git a/tests/src/Unit/EventSubscriber/LibrariesCspSubscriberTest.php b/tests/src/Unit/EventSubscriber/LibrariesCspSubscriberTest.php
index 1836049..3512611 100644
--- a/tests/src/Unit/EventSubscriber/LibrariesCspSubscriberTest.php
+++ b/tests/src/Unit/EventSubscriber/LibrariesCspSubscriberTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\csp\Unit\EventSubscriber;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\Core\Render\HtmlResponse;
 use Drupal\Tests\UnitTestCase;
 use Drupal\csp\Csp;
@@ -13,6 +14,7 @@ use Drupal\csp\LibraryPolicyBuilder;
  * @coversDefaultClass \Drupal\csp\EventSubscriber\LibrariesCspSubscriber
  * @group csp
  */
+#[Group('csp')]
 class LibrariesCspSubscriberTest extends UnitTestCase {
 
   /**
diff --git a/tests/src/Unit/EventSubscriber/RenderElementAttachedCspSubscriberTest.php b/tests/src/Unit/EventSubscriber/RenderElementAttachedCspSubscriberTest.php
index 1def9df..0d2a9e8 100644
--- a/tests/src/Unit/EventSubscriber/RenderElementAttachedCspSubscriberTest.php
+++ b/tests/src/Unit/EventSubscriber/RenderElementAttachedCspSubscriberTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\csp\Unit\EventSubscriber;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\Core\Render\HtmlResponse;
 use Drupal\Tests\UnitTestCase;
 use Drupal\csp\Csp;
@@ -15,6 +16,7 @@ use PHPUnit\Framework\MockObject\MockObject;
  * @coversDefaultClass \Drupal\csp\EventSubscriber\RenderElementAttachedCspSubscriber
  * @group csp
  */
+#[Group('csp')]
 class RenderElementAttachedCspSubscriberTest extends UnitTestCase {
 
   /**
diff --git a/tests/src/Unit/EventSubscriber/ResponseCspSubscriberNonceTest.php b/tests/src/Unit/EventSubscriber/ResponseCspSubscriberNonceTest.php
index 8ea4230..5f4d68a 100644
--- a/tests/src/Unit/EventSubscriber/ResponseCspSubscriberNonceTest.php
+++ b/tests/src/Unit/EventSubscriber/ResponseCspSubscriberNonceTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\csp\Unit\EventSubscriber;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\Core\Cache\CacheableMetadata;
 use Drupal\Core\Render\HtmlResponse;
 use Drupal\Tests\UnitTestCase;
@@ -17,6 +18,7 @@ use Symfony\Component\HttpKernel\HttpKernelInterface;
  * @coversDefaultClass \Drupal\csp\EventSubscriber\ResponseCspSubscriber
  * @group csp
  */
+#[Group('csp')]
 class ResponseCspSubscriberNonceTest extends UnitTestCase {
 
   /**
diff --git a/tests/src/Unit/EventSubscriber/ResponseCspSubscriberTest.php b/tests/src/Unit/EventSubscriber/ResponseCspSubscriberTest.php
index a3804f8..bf475c9 100644
--- a/tests/src/Unit/EventSubscriber/ResponseCspSubscriberTest.php
+++ b/tests/src/Unit/EventSubscriber/ResponseCspSubscriberTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\csp\Unit\EventSubscriber;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\Core\Cache\CacheableDependencyInterface;
 use Drupal\Core\Cache\CacheableMetadata;
 use Drupal\Core\Render\HtmlResponse;
@@ -24,6 +25,7 @@ use Symfony\Component\HttpKernel\KernelEvents;
  * @coversDefaultClass \Drupal\csp\EventSubscriber\ResponseCspSubscriber
  * @group csp
  */
+#[Group('csp')]
 class ResponseCspSubscriberTest extends UnitTestCase {
   use ConfigFactoryCacheableMetadataTrait;
 
diff --git a/tests/src/Unit/EventSubscriber/SettingsCspSubscriberTest.php b/tests/src/Unit/EventSubscriber/SettingsCspSubscriberTest.php
index 6991b09..3ef5563 100644
--- a/tests/src/Unit/EventSubscriber/SettingsCspSubscriberTest.php
+++ b/tests/src/Unit/EventSubscriber/SettingsCspSubscriberTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\csp\Unit\EventSubscriber;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\Core\Render\HtmlResponse;
 use Drupal\Tests\UnitTestCase;
 use Drupal\Tests\csp\Unit\ConfigFactoryCacheableMetadataTrait;
@@ -14,6 +15,7 @@ use PHPUnit\Framework\Attributes\DataProvider;
  * @coversDefaultClass \Drupal\csp\EventSubscriber\SettingsCspSubscriber
  * @group csp
  */
+#[Group('csp')]
 class SettingsCspSubscriberTest extends UnitTestCase {
   use ConfigFactoryCacheableMetadataTrait;
 
diff --git a/tests/src/Unit/EventSubscriber/SettingsCspSubscriberWebRtcTest.php b/tests/src/Unit/EventSubscriber/SettingsCspSubscriberWebRtcTest.php
index f15bb62..9f3eb93 100644
--- a/tests/src/Unit/EventSubscriber/SettingsCspSubscriberWebRtcTest.php
+++ b/tests/src/Unit/EventSubscriber/SettingsCspSubscriberWebRtcTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\csp\Unit\EventSubscriber;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\Tests\UnitTestCase;
 use Drupal\csp\Csp;
 use Drupal\csp\Event\PolicyAlterEvent;
@@ -15,6 +16,7 @@ use Symfony\Component\HttpFoundation\Response;
  * @coversDefaultClass \Drupal\csp\EventSubscriber\SettingsCspSubscriber
  * @group csp
  */
+#[Group('csp')]
 class SettingsCspSubscriberWebRtcTest extends UnitTestCase {
 
   /**
diff --git a/tests/src/Unit/LibraryPolicyBuilderTest.php b/tests/src/Unit/LibraryPolicyBuilderTest.php
index 1565422..041594f 100644
--- a/tests/src/Unit/LibraryPolicyBuilderTest.php
+++ b/tests/src/Unit/LibraryPolicyBuilderTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\csp\Unit;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\Component\Datetime\Time;
 use Drupal\Core\Asset\Exception\IncompleteLibraryDefinitionException;
 use Drupal\Core\Asset\LibraryDiscoveryInterface;
@@ -16,6 +17,7 @@ use Psr\Log\LoggerInterface;
  * @coversDefaultClass \Drupal\csp\LibraryPolicyBuilder
  * @group csp
  */
+#[Group('csp')]
 class LibraryPolicyBuilderTest extends UnitTestCase {
 
   /**
diff --git a/tests/src/Unit/NonceTest.php b/tests/src/Unit/NonceTest.php
index 6e93cbd..067f7ed 100644
--- a/tests/src/Unit/NonceTest.php
+++ b/tests/src/Unit/NonceTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\csp\Unit;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\Tests\UnitTestCase;
 use Drupal\csp\Nonce;
 
@@ -11,6 +12,7 @@ use Drupal\csp\Nonce;
  * @coversDefaultClass \Drupal\csp\Nonce
  * @group csp
  */
+#[Group('csp')]
 class NonceTest extends UnitTestCase {
 
   /**
diff --git a/tests/src/Unit/PolicyHelperHashTest.php b/tests/src/Unit/PolicyHelperHashTest.php
index 20b0a6b..5e3d26f 100644
--- a/tests/src/Unit/PolicyHelperHashTest.php
+++ b/tests/src/Unit/PolicyHelperHashTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\csp\Unit;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\csp\Csp;
 use Drupal\csp\PolicyHelper;
 use PHPUnit\Framework\Attributes\DataProvider;
@@ -12,6 +13,7 @@ use PHPUnit\Framework\Attributes\DataProvider;
  * @coversDefaultClass \Drupal\csp\PolicyHelper
  * @group csp
  */
+#[Group('csp')]
 class PolicyHelperHashTest extends PolicyHelperTestBase {
   private const TEST_HASH_VALUE = "'sha256-m0zKW3SgFyV1D9aL5SVP9sTjV8ymQ9XirnpSfOsqCFk='";
   private const TEST_FALLBACK_VALUE = 'fallback.example.com';
diff --git a/tests/src/Unit/PolicyHelperNonceTest.php b/tests/src/Unit/PolicyHelperNonceTest.php
index 6dd71d6..d603e99 100644
--- a/tests/src/Unit/PolicyHelperNonceTest.php
+++ b/tests/src/Unit/PolicyHelperNonceTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\csp\Unit;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\csp\Csp;
 use Drupal\csp\PolicyHelper;
 use PHPUnit\Framework\Attributes\DataProvider;
@@ -12,6 +13,7 @@ use PHPUnit\Framework\Attributes\DataProvider;
  * @coversDefaultClass \Drupal\csp\PolicyHelper
  * @group csp
  */
+#[Group('csp')]
 class PolicyHelperNonceTest extends PolicyHelperTestBase {
   // cspell:disable-next-line
   private const TEST_NONCE_VALUE = "'nonce-onVJmdhRq20YD0zVBXOoOA'";
diff --git a/tests/src/Unit/PolicyHelperRequireUnsafeTest.php b/tests/src/Unit/PolicyHelperRequireUnsafeTest.php
index 50a21b8..536c53c 100644
--- a/tests/src/Unit/PolicyHelperRequireUnsafeTest.php
+++ b/tests/src/Unit/PolicyHelperRequireUnsafeTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\csp\Unit;
 
+use PHPUnit\Framework\Attributes\Group;
 use Drupal\csp\Csp;
 use Drupal\csp\PolicyHelper;
 use PHPUnit\Framework\Attributes\DataProvider;
@@ -12,6 +13,7 @@ use PHPUnit\Framework\Attributes\DataProvider;
  * @coversDefaultClass \Drupal\csp\PolicyHelper
  * @group csp
  */
+#[Group('csp')]
 class PolicyHelperRequireUnsafeTest extends PolicyHelperTestBase {
 
   /**
