diff --git a/hal.module b/hal.module
index 0833e47..e427458 100644
--- a/hal.module
+++ b/hal.module
@@ -5,19 +5,14 @@
  * Adds support for serializing entities to Hypertext Application Language.
  */
 
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\hal\Hook\HalHooks;
 use Drupal\Core\Routing\RouteMatchInterface;
 
 /**
  * Implements hook_help().
  */
+#[LegacyHook]
 function hal_help($route_name, RouteMatchInterface $route_match) {
-  switch ($route_name) {
-    case 'help.page.hal':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('<a href=":hal_spec">Hypertext Application Language (HAL)</a> is a format that supports the linking required for hypermedia APIs.', [':hal_spec' => 'http://stateless.co/hal_specification.html']) . '</p>';
-      $output .= '<p>' . t('Hypermedia APIs are a style of Web API that uses URIs to identify resources and the <a href="http://wikipedia.org/wiki/Link_relation">link relations</a> between them, enabling API consumers to follow links to discover API functionality.') . '</p>';
-      $output .= '<p>' . t('This module adds support for serializing entities (such as content items, taxonomy terms, etc.) to the JSON version of HAL. For more information, see the <a href=":hal_do">online documentation for the HAL module</a>.', [':hal_do' => 'https://www.drupal.org/documentation/modules/hal']) . '</p>';
-      return $output;
-  }
+  return \Drupal::service(HalHooks::class)->help($route_name, $route_match);
 }
diff --git a/hal.services.yml b/hal.services.yml
index 9bb431e..bd7900b 100644
--- a/hal.services.yml
+++ b/hal.services.yml
@@ -48,3 +48,7 @@ services:
   hal.link_manager.relation:
     class: Drupal\hal\LinkManager\RelationLinkManager
     arguments: ['@cache.default', '@entity_type.manager', '@module_handler', '@config.factory', '@request_stack', '@entity_type.bundle.info', '@entity_field.manager']
+
+  Drupal\hal\Hook\HalHooks:
+    class: Drupal\hal\Hook\HalHooks
+    autowire: true
diff --git a/src/Hook/HalHooks.php b/src/Hook/HalHooks.php
new file mode 100644
index 0000000..8a55997
--- /dev/null
+++ b/src/Hook/HalHooks.php
@@ -0,0 +1,35 @@
+<?php
+
+namespace Drupal\hal\Hook;
+
+use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\Core\Hook\Attribute\Hook;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+
+/**
+ * Hook implementations for hal.
+ */
+class HalHooks {
+  use StringTranslationTrait;
+
+  /**
+   * Implements hook_help().
+   */
+  #[Hook('help')]
+  public function help($route_name, RouteMatchInterface $route_match) {
+    switch ($route_name) {
+      case 'help.page.hal':
+        $output = '';
+        $output .= '<h3>' . $this->t('About') . '</h3>';
+        $output .= '<p>' . $this->t('<a href=":hal_spec">Hypertext Application Language (HAL)</a> is a format that supports the linking required for hypermedia APIs.', [
+          ':hal_spec' => 'http://stateless.co/hal_specification.html',
+        ]) . '</p>';
+        $output .= '<p>' . $this->t('Hypermedia APIs are a style of Web API that uses URIs to identify resources and the <a href="http://wikipedia.org/wiki/Link_relation">link relations</a> between them, enabling API consumers to follow links to discover API functionality.') . '</p>';
+        $output .= '<p>' . $this->t('This module adds support for serializing entities (such as content items, taxonomy terms, etc.) to the JSON version of HAL. For more information, see the <a href=":hal_do">online documentation for the HAL module</a>.', [
+          ':hal_do' => 'https://www.drupal.org/documentation/modules/hal',
+        ]) . '</p>';
+        return $output;
+    }
+  }
+
+}
diff --git a/tests/modules/hal_test/hal_test.module b/tests/modules/hal_test/hal_test.module
index da71ffb..dc1d0af 100644
--- a/tests/modules/hal_test/hal_test.module
+++ b/tests/modules/hal_test/hal_test.module
@@ -1,5 +1,12 @@
 <?php
 
+/**
+ * @file
+ */
+
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\hal_test\Hook\HalTestHooks;
+
 /**
  * @file
  * Contains hook implementations for testing HAL module.
@@ -8,17 +15,15 @@
 /**
  * Implements hook_hal_type_uri_alter().
  */
+#[LegacyHook]
 function hal_test_hal_type_uri_alter(&$uri, $context = []) {
-  if (!empty($context['hal_test'])) {
-    $uri = 'hal_test_type';
-  }
+  \Drupal::service(HalTestHooks::class)->halTypeUriAlter($uri, $context);
 }
 
 /**
  * Implements hook_hal_relation_uri_alter().
  */
+#[LegacyHook]
 function hal_test_hal_relation_uri_alter(&$uri, $context = []) {
-  if (!empty($context['hal_test'])) {
-    $uri = 'hal_test_relation';
-  }
+  \Drupal::service(HalTestHooks::class)->halRelationUriAlter($uri, $context);
 }
diff --git a/tests/modules/hal_test/hal_test.services.yml b/tests/modules/hal_test/hal_test.services.yml
new file mode 100644
index 0000000..e194303
--- /dev/null
+++ b/tests/modules/hal_test/hal_test.services.yml
@@ -0,0 +1,5 @@
+
+services:
+  Drupal\hal_test\Hook\HalTestHooks:
+    class: Drupal\hal_test\Hook\HalTestHooks
+    autowire: true
diff --git a/tests/modules/hal_test/src/Hook/HalTestHooks.php b/tests/modules/hal_test/src/Hook/HalTestHooks.php
new file mode 100644
index 0000000..903a7e3
--- /dev/null
+++ b/tests/modules/hal_test/src/Hook/HalTestHooks.php
@@ -0,0 +1,42 @@
+<?php
+
+namespace Drupal\hal_test\Hook;
+
+use Drupal\Core\Hook\Attribute\Hook;
+
+/**
+ * Hook implementations for hal_test.
+ */
+class HalTestHooks {
+  /**
+   * @file
+   * Contains hook implementations for testing HAL module.
+   */
+
+  /**
+   * Implements hook_hal_type_uri_alter().
+   */
+  #[Hook('hal_type_uri_alter')]
+  public static function halTypeUriAlter(
+    &$uri,
+    $context = [],
+  ) {
+    if (!empty($context['hal_test'])) {
+      $uri = 'hal_test_type';
+    }
+  }
+
+  /**
+   * Implements hook_hal_relation_uri_alter().
+   */
+  #[Hook('hal_relation_uri_alter')]
+  public static function halRelationUriAlter(
+    &$uri,
+    $context = [],
+  ) {
+    if (!empty($context['hal_test'])) {
+      $uri = 'hal_test_relation';
+    }
+  }
+
+}
diff --git a/tests/src/Functional/page_cache/PageCacheTest.php b/tests/src/Functional/page_cache/PageCacheTest.php
index cb33e24..3fa074a 100644
--- a/tests/src/Functional/page_cache/PageCacheTest.php
+++ b/tests/src/Functional/page_cache/PageCacheTest.php
@@ -129,7 +129,6 @@ class PageCacheTest extends BrowserTestBase {
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
     curl_setopt($ch, CURLOPT_USERAGENT, drupal_generate_test_ua($this->databasePrefix));
     $output = curl_exec($ch);
-    curl_close($ch);
 
     $headers = [];
     foreach (explode("\n", $output) as $header) {
diff --git a/tests/src/Kernel/EntityTranslationNormalizeTest.php b/tests/src/Kernel/EntityTranslationNormalizeTest.php
index 40924c4..9e1ac7a 100644
--- a/tests/src/Kernel/EntityTranslationNormalizeTest.php
+++ b/tests/src/Kernel/EntityTranslationNormalizeTest.php
@@ -26,7 +26,6 @@ class EntityTranslationNormalizeTest extends NormalizerTestBase {
    */
   protected function setUp(): void {
     parent::setUp();
-    $this->installSchema('system', ['sequences']);
     $this->installConfig(['node', 'content_translation']);
   }
 
diff --git a/tests/src/Kernel/HalLinkManagerTest.php b/tests/src/Kernel/HalLinkManagerTest.php
index 6208207..0a94f43 100644
--- a/tests/src/Kernel/HalLinkManagerTest.php
+++ b/tests/src/Kernel/HalLinkManagerTest.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\Tests\hal\Kernel;
 
+use Drupal\Component\Utility\DeprecationHelper;
 use Drupal\Core\Cache\CacheableMetadata;
 use Drupal\Core\Url;
 use Drupal\field\Entity\FieldConfig;
@@ -63,7 +64,7 @@ class HalLinkManagerTest extends KernelTestBase {
       $hal_settings->clear('link_domain');
     }
     else {
-      $hal_settings->set('link_domain', $link_domain)->save(TRUE);
+      DeprecationHelper::backwardsCompatibleCall(\Drupal::VERSION, '11.4.0', fn() => $hal_settings->set('link_domain', $link_domain)->save(), fn() => $hal_settings->set('link_domain', $link_domain)->save(TRUE));
     }
 
     /** @var \Drupal\hal\LinkManager\TypeLinkManagerInterface $type_manager */
@@ -74,6 +75,9 @@ class HalLinkManagerTest extends KernelTestBase {
     $this->assertEquals($context, $expected_context);
   }
 
+  /**
+   *
+   */
   public static function providerTestGetTypeUri(): array {
     $serialization_context_collecting_cacheability = [
       CacheableNormalizerInterface::SERIALIZATION_CONTEXT_CACHEABILITY => new CacheableMetadata(),
@@ -144,7 +148,7 @@ class HalLinkManagerTest extends KernelTestBase {
       $hal_settings->clear('link_domain');
     }
     else {
-      $hal_settings->set('link_domain', $link_domain)->save(TRUE);
+      DeprecationHelper::backwardsCompatibleCall(\Drupal::VERSION, '11.4.0', fn() => $hal_settings->set('link_domain', $link_domain)->save(), fn() => $hal_settings->set('link_domain', $link_domain)->save(TRUE));
     }
 
     /** @var \Drupal\hal\LinkManager\RelationLinkManagerInterface $relation_manager */
@@ -155,6 +159,9 @@ class HalLinkManagerTest extends KernelTestBase {
     $this->assertEquals($context, $expected_context);
   }
 
+  /**
+   *
+   */
   public static function providerTestGetRelationUri(): array {
     $serialization_context_collecting_cacheability = [
       CacheableNormalizerInterface::SERIALIZATION_CONTEXT_CACHEABILITY => new CacheableMetadata(),
