diff --git a/fblikebutton.info.yml b/fblikebutton.info.yml
index 38d142c..963dfd0 100755
--- a/fblikebutton.info.yml
+++ b/fblikebutton.info.yml
@@ -1,6 +1,6 @@
 name: Facebook Like Button
 description: Adds a configurable <em>Like</em> button for Facebook to each selected node type as well as a configurable block with a <em>Like</em> box in it.
-core_version_requirement: ^8.8 || ^9 || ^10 || ^11
+core_version_requirement: ^10.1 || ^11 || ^12
 configure: fblikebutton.settings
 type: module
 package: Social
diff --git a/fblikebutton.module b/fblikebutton.module
index ef5ca08..9605511 100755
--- a/fblikebutton.module
+++ b/fblikebutton.module
@@ -5,74 +5,34 @@
  * Contains fblikebutton.module.
  */
 
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\fblikebutton\Hook\FblikebuttonHooks;
 use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
 use Drupal\Core\Entity\EntityInterface;
-use Drupal\Core\Link;
 use Drupal\Core\Routing\RouteMatchInterface;
-use Drupal\Core\Url;
 
 /**
  * Implements hook_help() for fblikebutton module.
  */
+#[LegacyHook]
 function fblikebutton_help($route_name, RouteMatchInterface $route_match) {
-  switch ($route_name) {
-    case 'help.page.fblikebutton':
-      $link = Link::fromTextAndUrl('Block Layout page', Url::fromRoute('block.admin_display'))->toString();
-      $output = t("<p>Configure the dynamic Like button. This Like button will like the URL you\'re visiting.
-        You can set the content types on which the button displays, choose to display it in the
-        content block or in the links area.</p>");
-      $output .= t('<p style="font-weight:bold;">You can also configure Static Like Button Blocks in @link.</p>', ['@link' => $link]);
-      $output .= t('<p style="font-weight:bold;">Site administrator can completely customize size, position, weight, verbiage, color scheme, language, etc.</p>');
-      $output .= t('<p style="font-weight:bold;">Users do not need to be granted any additional input format permissions to have the button added to their content.</p>');
-
-      return $output;
-  }
+  return \Drupal::service(FblikebuttonHooks::class)->help($route_name, $route_match);
 }
 
 /**
  * Implements hook_entity_extra_field_info().
  */
+#[LegacyHook]
 function fblikebutton_entity_extra_field_info() {
-  $extra = [];
-  $config = \Drupal::config('fblikebutton.settings');
-  $node_types = (array) $config->get('node_types');
-
-  // Only add the extra field to enabled content types.
-  foreach ($node_types as $bundle => $enabled) {
-    if ($enabled) {
-      $extra['node'][$bundle]['display']['fblikebutton'] = [
-        'label' => t('Facebook Like Button'),
-        'description' => t('Displays a Facebook Like button.'),
-        'visible' => FALSE,
-      ];
-    }
-  }
-
-  return $extra;
+  return \Drupal::service(FblikebuttonHooks::class)->entityExtraFieldInfo();
 }
 
 /**
  * Implements hook_ENTITY_TYPE_view().
  */
+#[LegacyHook]
 function fblikebutton_node_view(array &$build, EntityInterface $node, EntityViewDisplayInterface $display, $view_mode) {
-  $user = \Drupal::currentUser();
-  $config = \Drupal::config('fblikebutton.settings');
-
-  $types = $config->get('node_types');
-  $show = isset($types[$node->getType()]) && $user->hasPermission('access fblikebutton');
-
-  if ($show && $display->getComponent('fblikebutton')) {
-    $url = fblikebutton_get_node_url($node->id());
-    $build['fblikebutton'] = [
-      '#theme' => 'fblikebutton',
-      '#url' => $url,
-      '#cache' => [
-        'tags' => [
-          'config:fblikebutton.settings',
-        ],
-      ],
-    ];
-  }
+  \Drupal::service(FblikebuttonHooks::class)->nodeView($build, $node, $display, $view_mode);
 }
 
 /**
@@ -113,11 +73,7 @@ function fblikebutton_conf() {
 /**
  * Implements hook_theme().
  */
+#[LegacyHook]
 function fblikebutton_theme() {
-  return [
-    'fblikebutton' => [
-      'variables' => fblikebutton_conf(),
-      'template' => 'fblikebutton',
-    ],
-  ];
+  return \Drupal::service(FblikebuttonHooks::class)->theme();
 }
diff --git a/fblikebutton.services.yml b/fblikebutton.services.yml
new file mode 100644
index 0000000..5a4b1e7
--- /dev/null
+++ b/fblikebutton.services.yml
@@ -0,0 +1,5 @@
+
+services:
+  Drupal\fblikebutton\Hook\FblikebuttonHooks:
+    class: Drupal\fblikebutton\Hook\FblikebuttonHooks
+    autowire: true
diff --git a/src/Form/FblikebuttonFormSettings.php b/src/Form/FblikebuttonFormSettings.php
index fbfff57..4654327 100755
--- a/src/Form/FblikebuttonFormSettings.php
+++ b/src/Form/FblikebuttonFormSettings.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\fblikebutton\Form;
 
+use Drupal\Component\Utility\DeprecationHelper;
 use Drupal\Core\Cache\Cache;
 use Drupal\Core\Form\ConfigFormBase;
 use Drupal\Core\Form\FormStateInterface;
@@ -33,7 +34,7 @@ class FblikebuttonFormSettings extends ConfigFormBase {
    * {@inheritdoc}
    */
   public function buildForm(array $form, FormStateInterface $form_state) {
-    $fblikebutton_node_options = node_type_get_names();
+    $fblikebutton_node_options = DeprecationHelper::backwardsCompatibleCall(\Drupal::VERSION, '11.3.0', fn() => \Drupal::service('entity_type.bundle.info')->getBundleLabels('node'), fn() => node_type_get_names());
     $config = $this->config('fblikebutton.settings');
 
     $form['fblikebutton_dynamic_visibility'] = [
diff --git a/src/Hook/FblikebuttonHooks.php b/src/Hook/FblikebuttonHooks.php
new file mode 100644
index 0000000..d584a69
--- /dev/null
+++ b/src/Hook/FblikebuttonHooks.php
@@ -0,0 +1,94 @@
+<?php
+
+namespace Drupal\fblikebutton\Hook;
+
+use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\Core\Url;
+use Drupal\Core\Link;
+use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\Core\Hook\Attribute\Hook;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+
+/**
+ * Hook implementations for fblikebutton.
+ */
+class FblikebuttonHooks {
+  use StringTranslationTrait;
+
+  /**
+   * Implements hook_help() for fblikebutton module.
+   */
+  #[Hook('help')]
+  public function help($route_name, RouteMatchInterface $route_match) {
+    switch ($route_name) {
+      case 'help.page.fblikebutton':
+        $link = Link::fromTextAndUrl('Block Layout page', Url::fromRoute('block.admin_display'))->toString();
+        $output = $this->t("<p>Configure the dynamic Like button. This Like button will like the URL you\\'re visiting.\n        You can set the content types on which the button displays, choose to display it in the\n        content block or in the links area.</p>");
+        $output .= $this->t('<p style="font-weight:bold;">You can also configure Static Like Button Blocks in @link.</p>', [
+          '@link' => $link,
+        ]);
+        $output .= $this->t('<p style="font-weight:bold;">Site administrator can completely customize size, position, weight, verbiage, color scheme, language, etc.</p>');
+        $output .= $this->t('<p style="font-weight:bold;">Users do not need to be granted any additional input format permissions to have the button added to their content.</p>');
+        return $output;
+    }
+  }
+
+  /**
+   * Implements hook_entity_extra_field_info().
+   */
+  #[Hook('entity_extra_field_info')]
+  public function entityExtraFieldInfo() {
+    $extra = [];
+    $config = \Drupal::config('fblikebutton.settings');
+    $node_types = (array) $config->get('node_types');
+    // Only add the extra field to enabled content types.
+    foreach ($node_types as $bundle => $enabled) {
+      if ($enabled) {
+        $extra['node'][$bundle]['display']['fblikebutton'] = [
+          'label' => $this->t('Facebook Like Button'),
+          'description' => $this->t('Displays a Facebook Like button.'),
+          'visible' => FALSE,
+        ];
+      }
+    }
+    return $extra;
+  }
+
+  /**
+   * Implements hook_ENTITY_TYPE_view().
+   */
+  #[Hook('node_view')]
+  public static function nodeView(array &$build, EntityInterface $node, EntityViewDisplayInterface $display, $view_mode) {
+    $user = \Drupal::currentUser();
+    $config = \Drupal::config('fblikebutton.settings');
+    $types = $config->get('node_types');
+    $show = isset($types[$node->getType()]) && $user->hasPermission('access fblikebutton');
+    if ($show && $display->getComponent('fblikebutton')) {
+      $url = fblikebutton_get_node_url($node->id());
+      $build['fblikebutton'] = [
+        '#theme' => 'fblikebutton',
+        '#url' => $url,
+        '#cache' => [
+          'tags' => [
+            'config:fblikebutton.settings',
+          ],
+        ],
+      ];
+    }
+  }
+
+  /**
+   * Implements hook_theme().
+   */
+  #[Hook('theme')]
+  public static function theme() {
+    return [
+      'fblikebutton' => [
+        'variables' => fblikebutton_conf(),
+        'template' => 'fblikebutton',
+      ],
+    ];
+  }
+
+}
