diff --git a/enum_field.info.yml b/enum_field.info.yml
index 6a20f14..c58a044 100644
--- a/enum_field.info.yml
+++ b/enum_field.info.yml
@@ -2,7 +2,7 @@ name: Enum Field
 type: module
 description: Create list fields based on PHP enums
 package: Field types
-core_version_requirement: ^9.3 || ^10 || ^11
+core_version_requirement: ^10.1 || ^11 || ^12
 php: 8.1
 dependencies:
   - drupal:options
diff --git a/enum_field.module b/enum_field.module
index 1f1f8d1..623d0ec 100644
--- a/enum_field.module
+++ b/enum_field.module
@@ -1,5 +1,8 @@
 <?php
 
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\enum_field\Hook\EnumFieldHooks;
+
 /**
  * @file
  * Primary module hooks for Enum Field module.
@@ -10,12 +13,9 @@
  *
  * @todo Remove once minimum version supported is at least 10.2.0.
  */
+#[LegacyHook]
 function enum_field_field_info_alter(array &$info): void {
-  // Allow module to work with versions of older versions of Drupal.
-  if (\version_compare(\Drupal::VERSION, '10.1.9999', '<')) {
-    $info['enum_integer']['category'] = t('Number');
-    $info['enum_string']['category'] = t('Text');
-  }
+  \Drupal::service(EnumFieldHooks::class)->fieldInfoAlter($info);
 }
 
 /**
@@ -35,36 +35,16 @@ function enum_field_field_widget_info_alter(array &$info): void {
 /**
  * Implements hook_field_formatter_info_alter().
  */
+#[LegacyHook]
 function enum_field_field_formatter_info_alter(array &$info): void {
-  foreach ($info as &$fieldInfo) {
-    if (in_array('list_integer', $fieldInfo['field_types'], TRUE)) {
-      $fieldInfo['field_types'][] = 'enum_integer';
-    }
-    if (in_array('list_string', $fieldInfo['field_types'], TRUE)) {
-      $fieldInfo['field_types'][] = 'enum_string';
-    }
-  }
+  \Drupal::service(EnumFieldHooks::class)->fieldFormatterInfoAlter($info);
 }
 
 /**
  * Implements hook_views_data_alter().
  */
-function enum_field_views_data_alter(&$data) {
-  $manager = \Drupal::entityTypeManager();
-  $field_config_storage = $manager->getStorage('field_config');
-  $ids = $field_config_storage->getQuery()
-    ->condition('field_type', ['enum_integer', 'enum_string'], 'IN')
-    ->execute();
-  /** @var \Drupal\field\FieldConfigInterface[] $field_configs */
-  $field_configs = $field_config_storage->loadMultiple($ids);
-  foreach ($field_configs as $field_config) {
-    $table_name = $field_config->getTargetEntityTypeId() . '__' . $field_config->getName();
-    $column_name = $field_config->getName() . '_value';
-    if (
-      isset($data[$table_name][$column_name]['filter']['id'])
-      && in_array($data[$table_name][$column_name]['filter']['id'], ['numeric', 'string'])
-    ) {
-      $data[$table_name][$column_name]['filter']['id'] = 'enum_field';
-    }
-  }
+#[LegacyHook]
+function enum_field_views_data_alter(&$data)
+{
+    \Drupal::service(EnumFieldHooks::class)->viewsDataAlter($data);
 }
diff --git a/enum_field.services.yml b/enum_field.services.yml
index d8f2199..d1c1452 100644
--- a/enum_field.services.yml
+++ b/enum_field.services.yml
@@ -6,3 +6,7 @@ services:
       - '@entity_field.manager'
       - '@entity.last_installed_schema.repository'
   Drupal\enum_field\Migration: '@enum_field.migration'
+
+  Drupal\enum_field\Hook\EnumFieldHooks:
+    class: Drupal\enum_field\Hook\EnumFieldHooks
+    autowire: true
diff --git a/src/Hook/EnumFieldHooks.php b/src/Hook/EnumFieldHooks.php
new file mode 100644
index 0000000..0dc2001
--- /dev/null
+++ b/src/Hook/EnumFieldHooks.php
@@ -0,0 +1,71 @@
+<?php
+
+namespace Drupal\enum_field\Hook;
+
+use Drupal\Core\Hook\Attribute\Hook;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+/**
+ * Hook implementations for enum_field.
+ */
+class EnumFieldHooks
+{
+    use StringTranslationTrait;
+    /**
+     * @file
+     * Primary module hooks for Enum Field module.
+     */
+    /**
+     * Implements hook_field_info_alter().
+     *
+     * @todo Remove once minimum version supported is at least 10.2.0.
+     */
+    #[Hook('field_info_alter')]
+    public function fieldInfoAlter(array &$info): void
+    {
+        // Allow module to work with versions of older versions of Drupal.
+        if (version_compare(\Drupal::VERSION, '10.1.9999', '<')) {
+            $info['enum_integer']['category'] = $this->t('Number');
+            $info['enum_string']['category'] = $this->t('Text');
+        }
+    }
+    /**
+     * Implements hook_field_formatter_info_alter().
+     */
+    #[Hook('field_formatter_info_alter')]
+    public function fieldFormatterInfoAlter(array &$info): void
+    {
+        foreach ($info as &$fieldInfo) {
+            if (in_array('list_integer', $fieldInfo['field_types'], TRUE)) {
+                $fieldInfo['field_types'][] = 'enum_integer';
+            }
+            if (in_array('list_string', $fieldInfo['field_types'], TRUE)) {
+                $fieldInfo['field_types'][] = 'enum_string';
+            }
+        }
+    }
+    /**
+     * Implements hook_views_data_alter().
+     */
+    #[Hook('views_data_alter')]
+    public function viewsDataAlter(&$data)
+    {
+        $manager = \Drupal::entityTypeManager();
+        $field_config_storage = $manager->getStorage('field_config');
+        $ids = $field_config_storage->getQuery()->condition('field_type', [
+            'enum_integer',
+            'enum_string',
+        ], 'IN')->execute();
+        /** @var \Drupal\field\FieldConfigInterface[] $field_configs */
+        $field_configs = $field_config_storage->loadMultiple($ids);
+        foreach ($field_configs as $field_config) {
+            $table_name = $field_config->getTargetEntityTypeId() . '__' . $field_config->getName();
+            $column_name = $field_config->getName() . '_value';
+            if (isset($data[$table_name][$column_name]['filter']['id']) && in_array($data[$table_name][$column_name]['filter']['id'], [
+                'numeric',
+                'string',
+            ])) {
+                $data[$table_name][$column_name]['filter']['id'] = 'enum_field';
+            }
+        }
+    }
+}
diff --git a/src/Migration.php b/src/Migration.php
index bbe0fce..b730e22 100644
--- a/src/Migration.php
+++ b/src/Migration.php
@@ -133,7 +133,7 @@ class Migration {
 
     $fieldStorageConfig->set('type', $targetFieldType);
     $fieldStorageConfig->set('module', $targetModule);
-    $fieldStorageConfig->save(TRUE);
+    $fieldStorageConfig->save();
 
     FieldStorageConfig::loadByName($entityTypeId, $fieldName)->calculateDependencies()->save();
 
