diff --git a/fvm.info.yml b/fvm.info.yml
index aca00f1..458748e 100644
--- a/fvm.info.yml
+++ b/fvm.info.yml
@@ -3,7 +3,7 @@ description: Provides a field which can be used to set view mode per entity.
 package: Custom
 
 type: module
-core_version_requirement: ^8.8 || ^9 || ^10 || ^11
+core_version_requirement: ^10.1 || ^11 || ^12
 
 dependencies:
   - drupal:field_ui
diff --git a/fvm.module b/fvm.module
index 1070838..8159862 100644
--- a/fvm.module
+++ b/fvm.module
@@ -4,43 +4,25 @@
  * @file
  * Provides hook implementations for Field View modes.
  */
-
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\fvm\Hook\FvmHooks;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Form\FormStateInterface;
 
 /**
  * Implements hook_entity_view_mode_alter().
  */
-function fvm_entity_view_mode_alter(&$view_mode, EntityInterface $entity, $context) {
-  $fvm_settings = \Drupal::config('fvm.settings')->getRawData();
-  $entity_view_mode = $entity->getEntityTypeId() . '__' . $entity->bundle();
-  if (array_key_exists($entity_view_mode, $fvm_settings)
-  && !empty($entity->view_mode_selection->entity)) {
-    if (!($entity->getEntityTypeId() == 'block_content' && !$fvm_settings['hide_layout_builder_field'])) {
-      $view_mode = explode('.', $entity->view_mode_selection->entity->id())[1];
-    }
-  }
+#[LegacyHook]
+function fvm_entity_view_mode_alter(&$view_mode, EntityInterface $entity, $context)
+{
+    \Drupal::service(FvmHooks::class)->entityViewModeAlter($view_mode, $entity, $context);
 }
 
 /**
  * Implements hook_form_alter().
  */
-function fvm_form_alter(&$form, FormStateInterface $form_state, $form_id) {
-  $moduleHandler = \Drupal::service('module_handler');
-  // Hide the view mode field as per fvm configuration.
-  if ($moduleHandler->moduleExists('layout_builder') &&
-    ($form_id == 'layout_builder_add_block' || $form_id == 'layout_builder_update_block')) {
-
-    $fvm_settings = \Drupal::config('fvm.settings')->getRawData();
-    if (!empty($fvm_settings['hide_layout_builder_field'])) {
-      $form['settings']['view_mode']['#access'] = FALSE;
-    }
-    else {
-      $form['settings']['block_form']['#process'][] = [
-        'Drupal\fvm\Form\FvmSettingsForm',
-        'processBlockForm',
-      ];
-    }
-
-  }
+#[LegacyHook]
+function fvm_form_alter(&$form, FormStateInterface $form_state, $form_id)
+{
+    \Drupal::service(FvmHooks::class)->formAlter($form, $form_state, $form_id);
 }
diff --git a/fvm.services.yml b/fvm.services.yml
new file mode 100644
index 0000000..97ecf4f
--- /dev/null
+++ b/fvm.services.yml
@@ -0,0 +1,5 @@
+
+services:
+  Drupal\fvm\Hook\FvmHooks:
+    class: Drupal\fvm\Hook\FvmHooks
+    autowire: true
diff --git a/src/Form/FvmSettingsForm.php b/src/Form/FvmSettingsForm.php
index 4fdba78..3a6fad0 100644
--- a/src/Form/FvmSettingsForm.php
+++ b/src/Form/FvmSettingsForm.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\fvm\Form;
 
+use Drupal\Component\Utility\DeprecationHelper;
 use Drupal\Core\Form\ConfigFormBase;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Config\ConfigFactoryInterface;
@@ -262,7 +263,7 @@ class FvmSettingsForm extends ConfigFormBase {
 
             if (!$fieldIsUsed && $field = FieldConfig::loadByName($entityName, $bundleName, $fieldName)) {
               $field->delete();
-              field_purge_batch(10);
+              DeprecationHelper::backwardsCompatibleCall(\Drupal::VERSION, '11.4.0', fn() => \Drupal::service('Drupal\Core\Field\FieldPurger')->purgeBatch(10), fn() => field_purge_batch(10));
 
               $this->entityTypeManager
                 ->getStorage('entity_form_display')
diff --git a/src/Hook/FvmHooks.php b/src/Hook/FvmHooks.php
new file mode 100644
index 0000000..9d29bd7
--- /dev/null
+++ b/src/Hook/FvmHooks.php
@@ -0,0 +1,47 @@
+<?php
+
+namespace Drupal\fvm\Hook;
+
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Hook\Attribute\Hook;
+/**
+ * Hook implementations for fvm.
+ */
+class FvmHooks
+{
+    /**
+     * Implements hook_entity_view_mode_alter().
+     */
+    #[Hook('entity_view_mode_alter')]
+    public function entityViewModeAlter(&$view_mode, \Drupal\Core\Entity\EntityInterface $entity, $context)
+    {
+        $fvm_settings = \Drupal::config('fvm.settings')->getRawData();
+        $entity_view_mode = $entity->getEntityTypeId() . '__' . $entity->bundle();
+        if (array_key_exists($entity_view_mode, $fvm_settings) && !empty($entity->view_mode_selection->entity)) {
+            if (!($entity->getEntityTypeId() == 'block_content' && !$fvm_settings['hide_layout_builder_field'])) {
+                $view_mode = explode('.', $entity->view_mode_selection->entity->id())[1];
+            }
+        }
+    }
+    /**
+     * Implements hook_form_alter().
+     */
+    #[Hook('form_alter')]
+    public function formAlter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id)
+    {
+        $moduleHandler = \Drupal::service('module_handler');
+        // Hide the view mode field as per fvm configuration.
+        if ($moduleHandler->moduleExists('layout_builder') && ($form_id == 'layout_builder_add_block' || $form_id == 'layout_builder_update_block')) {
+            $fvm_settings = \Drupal::config('fvm.settings')->getRawData();
+            if (!empty($fvm_settings['hide_layout_builder_field'])) {
+                $form['settings']['view_mode']['#access'] = FALSE;
+            } else {
+                $form['settings']['block_form']['#process'][] = [
+                    'Drupal\fvm\Form\FvmSettingsForm',
+                    'processBlockForm',
+                ];
+            }
+        }
+    }
+}
