diff --git a/src/Hook/ThemableFormsHooks.php b/src/Hook/ThemableFormsHooks.php
new file mode 100644
index 0000000..f5f0af3
--- /dev/null
+++ b/src/Hook/ThemableFormsHooks.php
@@ -0,0 +1,71 @@
+<?php
+
+namespace Drupal\themable_forms\Hook;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Render\Element;
+use Drupal\Core\Hook\Attribute\Hook;
+/**
+ * Hook implementations for themable_forms.
+ */
+class ThemableFormsHooks
+{
+    /**
+     * Implements hook_theme_suggestions_form_element().
+     */
+    #[Hook('theme_suggestions_form_element')]
+    public function themeSuggestionsFormElement(array $variables)
+    {
+        $suggestions = [
+            'form_element__type__' . $variables['element']['#type'],
+        ];
+        if (isset($variables['element']['#form_id'])) {
+            $suggestions[] = 'form_element__form_id__' . $variables['element']['#form_id'];
+            $suggestions[] = 'form_element__' . $variables['element']['#form_id'] . '__' . $variables['element']['#type'];
+        }
+        return $suggestions;
+    }
+    /**
+     * Implements hook_theme_suggestions_form_element_label().
+     */
+    #[Hook('theme_suggestions_form_element_label')]
+    public function themeSuggestionsFormElementLabel(array $variables)
+    {
+        $suggestions = [
+        ];
+        if (isset($variables['element']['#form_element_type'])) {
+            $suggestions[] = 'form_element_label__type__' . $variables['element']['#form_element_type'];
+        }
+        if (isset($variables['element']['#form_id'])) {
+            $suggestions[] = 'form_element_label__form-id__' . $variables['element']['#form_id'];
+        }
+        if (isset($variables['element']['#form_element_type']) && isset($variables['element']['#form_id'])) {
+            $suggestions[] = 'form_element_label__' . $variables['element']['#form_id'] . '__' . $variables['element']['#form_element_type'];
+        }
+        return $suggestions;
+    }
+    /**
+     * Implements hook_preprocess_form_element().
+     */
+    #[Hook('preprocess_form_element')]
+    public function preprocessFormElement(array &$variables)
+    {
+        if (!isset($variables['label'])) {
+            return;
+        }
+        if (isset($variables['element']['#form_id'])) {
+            $variables['label']['#form_id'] = $variables['element']['#form_id'];
+        }
+        if (isset($variables['element']['#type'])) {
+            $variables['label']['#form_element_type'] = $variables['element']['#type'];
+        }
+    }
+    /**
+     * Implements hook_form_alter().
+     */
+    #[Hook('form_alter')]
+    public function formAlter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id)
+    {
+        themable_forms_attach_form_id($form, $form_id);
+    }
+}
diff --git a/themable_forms.info.yml b/themable_forms.info.yml
index e9f6bc1..e3a14f2 100644
--- a/themable_forms.info.yml
+++ b/themable_forms.info.yml
@@ -1,4 +1,4 @@
 name: Themable Forms
 description: Provides better theming experience for theming forms.
-core_version_requirement: ^8 || ^9 || ^10 || ^11
+core_version_requirement: ^10.1 || ^11 || ^12
 type: module
diff --git a/themable_forms.module b/themable_forms.module
index 686710b..ffaf0bf 100644
--- a/themable_forms.module
+++ b/themable_forms.module
@@ -4,62 +4,44 @@
  * @file
  * Provides hooks for themable_forms module.
  */
-
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\themable_forms\Hook\ThemableFormsHooks;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Render\Element;
 
 /**
  * Implements hook_theme_suggestions_form_element().
  */
-function themable_forms_theme_suggestions_form_element(array $variables) {
-  $suggestions = ['form_element__type__' . $variables['element']['#type']];
-  if (isset($variables['element']['#form_id'])) {
-    $suggestions[] = 'form_element__form_id__' . $variables['element']['#form_id'];
-    $suggestions[] = 'form_element__' . $variables['element']['#form_id'] . '__' . $variables['element']['#type'];
-  }
-
-  return $suggestions;
+#[LegacyHook]
+function themable_forms_theme_suggestions_form_element(array $variables)
+{
+    return \Drupal::service(ThemableFormsHooks::class)->themeSuggestionsFormElement($variables);
 }
 
 /**
  * Implements hook_theme_suggestions_form_element_label().
  */
-function themable_forms_theme_suggestions_form_element_label(array $variables) {
-  $suggestions = [];
-  if (isset($variables['element']['#form_element_type'])) {
-    $suggestions[] = 'form_element_label__type__' . $variables['element']['#form_element_type'];
-  }
-  if (isset($variables['element']['#form_id'])) {
-    $suggestions[] = 'form_element_label__form-id__' . $variables['element']['#form_id'];
-  }
-  if (isset($variables['element']['#form_element_type']) && isset($variables['element']['#form_id'])) {
-    $suggestions[] = 'form_element_label__' . $variables['element']['#form_id'] . '__' . $variables['element']['#form_element_type'];
-  }
-
-  return $suggestions;
+#[LegacyHook]
+function themable_forms_theme_suggestions_form_element_label(array $variables)
+{
+    return \Drupal::service(ThemableFormsHooks::class)->themeSuggestionsFormElementLabel($variables);
 }
 
 /**
  * Implements hook_preprocess_form_element().
  */
-function themable_forms_preprocess_form_element(array &$variables) {
-  if (!isset($variables['label'])) {
-    return;
-  }
-
-  if (isset($variables['element']['#form_id'])) {
-    $variables['label']['#form_id'] = $variables['element']['#form_id'];
-  }
-  if (isset($variables['element']['#type'])) {
-    $variables['label']['#form_element_type'] = $variables['element']['#type'];
-  }
+#[LegacyHook]
+function themable_forms_preprocess_form_element(array &$variables)
+{
+    \Drupal::service(ThemableFormsHooks::class)->preprocessFormElement($variables);
 }
 
 /**
  * Implements hook_form_alter().
  */
+#[LegacyHook]
 function themable_forms_form_alter(&$form, FormStateInterface $form_state, $form_id) {
-  themable_forms_attach_form_id($form, $form_id);
+  \Drupal::service(ThemableFormsHooks::class)->formAlter($form, $form_state, $form_id);
 }
 
 /**
diff --git a/themable_forms.services.yml b/themable_forms.services.yml
new file mode 100644
index 0000000..183f852
--- /dev/null
+++ b/themable_forms.services.yml
@@ -0,0 +1,5 @@
+
+services:
+  Drupal\themable_forms\Hook\ThemableFormsHooks:
+    class: Drupal\themable_forms\Hook\ThemableFormsHooks
+    autowire: true
