diff --git a/composer.json b/composer.json
index 4c6c986..c15e25b 100644
--- a/composer.json
+++ b/composer.json
@@ -34,7 +34,7 @@
         }
     ],
     "require": {
-        "drupal/core": "^9 || ^10 || ^11"
+        "drupal/core": "^11.4 || ^12"
     },
     "require-dev": {
         "drupal/coder": "^8.3",
diff --git a/jsonapi_image_styles.info.yml b/jsonapi_image_styles.info.yml
index 3e1c013..0bfaf60 100644
--- a/jsonapi_image_styles.info.yml
+++ b/jsonapi_image_styles.info.yml
@@ -1,7 +1,7 @@
 name: 'JSON:API Image Styles'
 type: module
 description: 'Expose image styles to JSON:API'
-core_version_requirement: ^9 || ^10 || ^11
+core_version_requirement: ^11.4 || ^12
 package: 'Web services'
 dependencies:
   - drupal:jsonapi
diff --git a/jsonapi_image_styles.module b/jsonapi_image_styles.module
index 0a835d1..901e3a2 100644
--- a/jsonapi_image_styles.module
+++ b/jsonapi_image_styles.module
@@ -5,44 +5,23 @@
  * Contains jsonapi_image_styles.module.
  */
 
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\jsonapi_image_styles\Hook\JsonapiImageStylesHooks;
 use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\Core\Field\BaseFieldDefinition;
 
 /**
  * Implements hook_help().
  */
+#[LegacyHook]
 function jsonapi_image_styles_help($route_name, RouteMatchInterface $route_match) {
-  switch ($route_name) {
-    // Main module help for the jsonapi_image_styles module.
-    case 'help.page.jsonapi_image_styles':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('Expose image styles to JSON:API') . '</p>';
-      return $output;
-
-    default:
-  }
+  return \Drupal::service(JsonapiImageStylesHooks::class)->help($route_name, $route_match);
 }
 
 /**
  * Implements hook_entity_base_field_info().
  */
+#[LegacyHook]
 function jsonapi_image_styles_entity_base_field_info(EntityTypeInterface $entity_type) {
-  $fields = [];
-  $base_table = $entity_type->getBaseTable();
-
-  // Certain classes are just not supported.
-  $original_class = $entity_type->getOriginalClass();
-
-  if (!empty($base_table) && $original_class == 'Drupal\file\Entity\File') {
-    $fields['image_style_uri'] = BaseFieldDefinition::create('image_style_uri')
-      ->setLabel(t('Entity image styles'))
-      ->setDescription(t('Image styles of the file entity'))
-      ->setComputed(TRUE)
-      ->setCardinality(1)
-      ->setTranslatable(TRUE);
-  }
-
-  return $fields;
+  return \Drupal::service(JsonapiImageStylesHooks::class)->entityBaseFieldInfo($entity_type);
 }
diff --git a/jsonapi_image_styles.services.yml b/jsonapi_image_styles.services.yml
index 97480b5..65b629c 100644
--- a/jsonapi_image_styles.services.yml
+++ b/jsonapi_image_styles.services.yml
@@ -5,3 +5,7 @@ services:
     class: Drupal\jsonapi_image_styles\EventSubscriber\ConfigSubscriber
     tags:
       - { name: event_subscriber }
+
+  Drupal\jsonapi_image_styles\Hook\JsonapiImageStylesHooks:
+    class: Drupal\jsonapi_image_styles\Hook\JsonapiImageStylesHooks
+    autowire: true
diff --git a/src/Hook/JsonapiImageStylesHooks.php b/src/Hook/JsonapiImageStylesHooks.php
new file mode 100644
index 0000000..86c590d
--- /dev/null
+++ b/src/Hook/JsonapiImageStylesHooks.php
@@ -0,0 +1,50 @@
+<?php
+
+namespace Drupal\jsonapi_image_styles\Hook;
+
+use Drupal\Core\Field\BaseFieldDefinition;
+use Drupal\Component\Utility\DeprecationHelper;
+use Drupal\Core\Entity\EntityTypeInterface;
+use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\Core\Hook\Attribute\Hook;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+
+/**
+ * Hook implementations for jsonapi_image_styles.
+ */
+class JsonapiImageStylesHooks {
+  use StringTranslationTrait;
+
+  /**
+   * Implements hook_help().
+   */
+  #[Hook('help')]
+  public function help($route_name, RouteMatchInterface $route_match) {
+    switch ($route_name) {
+      // Main module help for the jsonapi_image_styles module.
+      case 'help.page.jsonapi_image_styles':
+        $output = '';
+        $output .= '<h3>' . $this->t('About') . '</h3>';
+        $output .= '<p>' . $this->t('Expose image styles to JSON:API') . '</p>';
+        return $output;
+
+      default:
+    }
+  }
+
+  /**
+   * Implements hook_entity_base_field_info().
+   */
+  #[Hook('entity_base_field_info')]
+  public function entityBaseFieldInfo(EntityTypeInterface $entity_type) {
+    $fields = [];
+    $base_table = $entity_type->getBaseTable();
+    // Certain classes are just not supported.
+    $original_class = DeprecationHelper::backwardsCompatibleCall(\Drupal::VERSION, '11.4.0', fn() => $entity_type->getDecoratedClasses()[0], fn() => $entity_type->getOriginalClass());
+    if (!empty($base_table) && $original_class == 'Drupal\file\Entity\File') {
+      $fields['image_style_uri'] = BaseFieldDefinition::create('image_style_uri')->setLabel($this->t('Entity image styles'))->setDescription($this->t('Image styles of the file entity'))->setComputed(TRUE)->setCardinality(1)->setTranslatable(TRUE);
+    }
+    return $fields;
+  }
+
+}
diff --git a/tests/src/Functional/JsonApiImageStylesFunctionalTest.php b/tests/src/Functional/JsonApiImageStylesFunctionalTest.php
index 07205c8..151c0eb 100644
--- a/tests/src/Functional/JsonApiImageStylesFunctionalTest.php
+++ b/tests/src/Functional/JsonApiImageStylesFunctionalTest.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Tests\jsonapi_image_styles\Functional;
 
+use PHPUnit\Framework\Attributes\Group;
+use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
 use Drupal\Component\Serialization\Json;
 
 /**
@@ -9,6 +11,8 @@
  *
  * @group jsonapi_image_styles
  */
+#[Group('jsonapi_image_styles')]
+#[RunTestsInSeparateProcesses]
 class JsonApiImageStylesFunctionalTest extends JsonApiImageStylesFunctionalTestBase {
 
   /**
diff --git a/tests/src/Functional/JsonApiImageStylesFunctionalTestBase.php b/tests/src/Functional/JsonApiImageStylesFunctionalTestBase.php
index f2f9c45..6bcddb6 100644
--- a/tests/src/Functional/JsonApiImageStylesFunctionalTestBase.php
+++ b/tests/src/Functional/JsonApiImageStylesFunctionalTestBase.php
@@ -28,7 +28,7 @@ protected function setUp(): void {
       'large' => 'large',
       'thumbnail' => 'thumbnail',
     ]);
-    $config->save(TRUE);
+    $config->save();
     $this->resetAll();
   }
 
