diff --git a/modules/data/src/Hook/StyledGoogleMapDataHooks.php b/modules/data/src/Hook/StyledGoogleMapDataHooks.php
new file mode 100644
index 0000000..78c85d7
--- /dev/null
+++ b/modules/data/src/Hook/StyledGoogleMapDataHooks.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace Drupal\styled_google_map_data\Hook;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Hook\Attribute\Hook;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+/**
+ * Hook implementations for styled_google_map_data.
+ */
+class StyledGoogleMapDataHooks
+{
+    use StringTranslationTrait;
+    /**
+     * Implements hook_preprocess_HOOK().
+     */
+    #[Hook('preprocess_page')]
+    public function preprocessPage()
+    {
+        // Display message about demo content.
+        \Drupal::messenger()->addStatus($this->t('Example pages are available here: <a href="/heatmap" target="_blank">Heatmap</a>, <a href="/cluster-map" target="_blank">cluster</a>, <a href="/cluster-map-spiderified" target="_blank">spiderified cluster</a>, <a href="/map-controls" target="_blank">custom controls</a>, <a href="/real_estate/1" target="_blank">single item</a>'));
+        \Drupal::messenger()->addWarning($this->t('Do not forget to put Google Maps API Key <a href="/admin/config/services/styled_google_map">here</a>'));
+    }
+    /**
+     * Implements hook_form_alter().
+     */
+    #[Hook('form_alter', module: 'styled_google_map_data_form_views_exposed')]
+    public function formViewsExposedFormAlter(array &$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id)
+    {
+        $view = $form_state->get('view');
+        if ($view->id() == 'styled_google_map' && $view->current_display == 'page_4') {
+            $form['#attributes']['class'][] = 'google-map-control';
+            $form['#attributes']['data-position'] = 'TOP_LEFT';
+        }
+    }
+}
diff --git a/modules/data/styled_google_map_data.module b/modules/data/styled_google_map_data.module
index bbb76bb..3edadf9 100644
--- a/modules/data/styled_google_map_data.module
+++ b/modules/data/styled_google_map_data.module
@@ -1,23 +1,23 @@
 <?php
 
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\styled_google_map_data\Hook\StyledGoogleMapDataHooks;
 use Drupal\Core\Form\FormStateInterface;
 
 /**
  * Implements hook_preprocess_HOOK().
  */
-function styled_google_map_data_preprocess_page() {
-  // Display message about demo content.
-  \Drupal::messenger()->addStatus(t('Example pages are available here: <a href="/heatmap" target="_blank">Heatmap</a>, <a href="/cluster-map" target="_blank">cluster</a>, <a href="/cluster-map-spiderified" target="_blank">spiderified cluster</a>, <a href="/map-controls" target="_blank">custom controls</a>, <a href="/real_estate/1" target="_blank">single item</a>'));
-  \Drupal::messenger()->addWarning(t('Do not forget to put Google Maps API Key <a href="/admin/config/services/styled_google_map">here</a>'));
+#[LegacyHook]
+function styled_google_map_data_preprocess_page()
+{
+    \Drupal::service(StyledGoogleMapDataHooks::class)->preprocessPage();
 }
 
 /**
  * Implements hook_form_alter().
  */
-function styled_google_map_data_form_views_exposed_form_alter(array &$form, FormStateInterface $form_state, $form_id) {
-  $view = $form_state->get('view');
-  if (($view->id() == 'styled_google_map') && ($view->current_display == 'page_4')) {
-    $form['#attributes']['class'][] = 'google-map-control';
-    $form['#attributes']['data-position'] = 'TOP_LEFT';
-  }
+#[LegacyHook]
+function styled_google_map_data_form_views_exposed_form_alter(array &$form, FormStateInterface $form_state, $form_id)
+{
+    \Drupal::service(StyledGoogleMapDataHooks::class)->formViewsExposedFormAlter($form, $form_state, $form_id);
 }
diff --git a/modules/data/styled_google_map_data.services.yml b/modules/data/styled_google_map_data.services.yml
new file mode 100644
index 0000000..0fdda37
--- /dev/null
+++ b/modules/data/styled_google_map_data.services.yml
@@ -0,0 +1,5 @@
+
+services:
+  Drupal\styled_google_map_data\Hook\StyledGoogleMapDataHooks:
+    class: Drupal\styled_google_map_data\Hook\StyledGoogleMapDataHooks
+    autowire: true
diff --git a/src/Hook/StyledGoogleMapHooks.php b/src/Hook/StyledGoogleMapHooks.php
new file mode 100644
index 0000000..2e71842
--- /dev/null
+++ b/src/Hook/StyledGoogleMapHooks.php
@@ -0,0 +1,176 @@
+<?php
+
+namespace Drupal\styled_google_map\Hook;
+
+use Drupal\Component\Utility\UrlHelper;
+use Drupal\Component\Utility\Xss;
+use Drupal\Core\Entity\Entity\EntityViewDisplay;
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\styled_google_map\StyledGoogleMapInterface;
+use Drupal\Core\Hook\Attribute\Hook;
+/**
+ * Hook implementations for styled_google_map.
+ */
+class StyledGoogleMapHooks
+{
+    /**
+     * Implements hook_theme().
+     */
+    #[Hook('theme')]
+    public function theme()
+    {
+        $themes['styled_google_map'] = [
+            'variables' => [
+                'location' => NULL,
+                'settings' => [
+                ],
+                'entity' => NULL,
+                'gid' => NULL,
+                'directions_form' => NULL,
+                'steps' => FALSE,
+            ],
+        ];
+        $themes['styled_google_map_directions'] = [
+            'variables' => [
+                'settings' => [
+                    'enabled' => FALSE,
+                    'type' => 'DRIVING',
+                    'steps' => FALSE,
+                ],
+                'id' => '',
+            ],
+        ];
+        return $themes;
+    }
+    /**
+     * Implements hook_preprocess_HOOK().
+     */
+    #[Hook('preprocess_styled_google_map')]
+    public function preprocessStyledGoogleMap(&$variables)
+    {
+        $language = \Drupal::languageManager()->getCurrentLanguage();
+        $location =& $variables['location'];
+        /** @var \Drupal\Core\Entity\FieldableEntityInterface|\Drupal\Core\Entity\TranslatableInterface $entity */
+        $entity =& $variables['entity'];
+        $settings =& $variables['settings'];
+        if (empty($location) || !$location['geohash']) {
+            $location = NULL;
+            return;
+        }
+        // Get the pin file url.
+        if (isset($settings['style']['pin']) && !empty($settings['style']['pin'])) {
+            $settings['style']['pin'] = styled_google_map_file_create_url($settings['style']['pin']);
+        }
+        // Sanitize the output of the style settings.
+        foreach ($settings['style'] as $id => $setting) {
+            if ($id != 'style') {
+                $location[$id] = \Drupal\Component\Utility\Xss::filter($settings['style'][$id]);
+            }
+        }
+        // Get the label settings.
+        if ($entity instanceof \Drupal\Core\Entity\EntityInterface) {
+            switch ($settings['popup']['choice']) {
+                // Create popup from field.
+                case 1:
+                    if ($settings['popup']['text'] == 'label') {
+                        $popup_field = [
+                            '#markup' => $entity->label(),
+                        ];
+                    } else {
+                        $settings['popup']['label'] = $settings['popup']['label'] ? 'inline' : 'hidden';
+                        $popup_field = $entity->{$settings['popup']['text']}->view([
+                            'label' => $settings['popup']['label'],
+                        ], $language->getId());
+                    }
+                    break;
+                // Create popup from view mode.
+                case 2:
+                    $display = \Drupal\Core\Entity\Entity\EntityViewDisplay::collectRenderDisplay($entity, $settings['popup']['view_mode']);
+                    $popup_field = $display->build($entity);
+                    break;
+                // Default to empty.
+                default:
+                    $popup_field = [
+                    ];
+            }
+            $location['popup'] = \Drupal::service('renderer')->render($popup_field);
+        } else {
+            // Not an entity object.
+            $location['popup'] = [
+            ];
+        }
+        if ($settings['map_center']['center_coordinates'] && $entity->hasField($settings['map_center']['center_coordinates'])) {
+            if ($entity->hasTranslation($language->getId())) {
+                $map_center = $entity->getTranslation($language->getId())->get($settings['map_center']['center_coordinates'])->getValue();
+            } else {
+                $map_center = $entity->get($settings['map_center']['center_coordinates'])->getValue();
+            }
+            if ($map_center && isset($map_center[0]['lat'], $map_center[0]['lon'])) {
+                $settings['map_center']['center_coordinates'] = $map_center[0];
+            } else {
+                $settings['map_center']['center_coordinates'] = FALSE;
+            }
+        } else {
+            $settings['map_center']['center_coordinates'] = FALSE;
+        }
+        // Add map settings and required libraries.
+        $gid = $variables['gid'];
+        // Include the Google Maps API and map location settings.
+        $map_settings['locations'] = [
+            $location,
+        ];
+        // Include the custom map settings.
+        $map_settings['settings'] = $settings;
+        // Include the unique div id.
+        $map_settings['id'] = 'styled-google-map-' . $gid;
+        $variables['#attached']['drupalSettings']['styled_google_map'] = [
+            $gid => $gid,
+        ];
+        $variables['#attached']['drupalSettings']['maps'] = [
+            'id' . $gid => $map_settings,
+        ];
+        if (!empty($settings['directions']['enabled'])) {
+            if (!empty($settings['directions']['steps'])) {
+                $variables['steps'] = TRUE;
+            }
+            $variables['directions_form'] = [
+                '#theme' => 'styled_google_map_directions',
+                '#settings' => $settings['directions'],
+                '#id' => $gid,
+            ];
+            if (\Drupal::service('library.discovery')->getLibraryByName('core', 'drupal.message')) {
+                $variables['#attached']['library'][] = 'core/drupal.message';
+            }
+        }
+        // Attach the Styled Google Map javascript file.
+        $variables['#attached']['library'][] = 'styled_google_map/styled-google-map';
+    }
+    /**
+     * Implements hook_library_info_alter().
+     */
+    #[Hook('library_info_alter')]
+    public function libraryInfoAlter(&$libraries, $extension)
+    {
+        if ($extension == 'styled_google_map' && isset($libraries['styled-google-map'])) {
+            if (!empty($libraries['styled-google-map']['js']['//maps.google.com/maps/api/js'])) {
+                $options = $libraries['styled-google-map']['js']['//maps.google.com/maps/api/js'];
+                unset($libraries['styled-google-map']['js']['//maps.google.com/maps/api/js']);
+                $api_url = styled_google_map_build_api_url();
+                $libraries['styled-google-map']['js']['//maps.google.com/maps/api/js' . $api_url] = $options;
+            }
+        }
+    }
+    /**
+     * Implements hook_modules_uninstalled().
+     */
+    #[Hook('modules_uninstalled')]
+    public function modulesUninstalled($modules)
+    {
+        // Uninstall demo module when data module is disabled because demo is hidden.
+        if (in_array('styled_google_map_data', $modules)) {
+            \Drupal::service('module_installer')->uninstall([
+                'styled_google_map_demo',
+            ]);
+        }
+    }
+}
diff --git a/src/Hook/StyledGoogleMapViewsHooks.php b/src/Hook/StyledGoogleMapViewsHooks.php
new file mode 100644
index 0000000..476e05a
--- /dev/null
+++ b/src/Hook/StyledGoogleMapViewsHooks.php
@@ -0,0 +1,39 @@
+<?php
+
+namespace Drupal\styled_google_map\Hook;
+
+use Drupal\Core\Hook\Attribute\Hook;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+/**
+ * Hook implementations for styled_google_map.
+ */
+class StyledGoogleMapViewsHooks
+{
+    use StringTranslationTrait;
+    /**
+     * @file
+     * Provide views data for our custom styled_google_map.
+     */
+    /**
+     * Implements hook_views_data().
+     */
+    #[Hook('views_data')]
+    public function viewsData()
+    {
+        $data['views']['styled_google_map'] = [
+            'title' => $this->t('Styled Google Map'),
+            'help' => $this->t('Display the values of geofields on styled Google map.'),
+            'style' => [
+                'id' => 'styled_google_map',
+            ],
+        ];
+        $data['views']['google_map_control'] = [
+            'title' => $this->t('Google map custom control'),
+            'help' => $this->t('Provide markup text for the area.'),
+            'area' => [
+                'id' => 'google_map_control',
+            ],
+        ];
+        return $data;
+    }
+}
diff --git a/src/Plugin/views/style/StyledGoogleMapStyle.php b/src/Plugin/views/style/StyledGoogleMapStyle.php
index 1e18186..f6e2823 100644
--- a/src/Plugin/views/style/StyledGoogleMapStyle.php
+++ b/src/Plugin/views/style/StyledGoogleMapStyle.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\styled_google_map\Plugin\views\style;
 
+use Drupal\Component\Utility\DeprecationHelper;
 use Drupal\Component\Utility\Html;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\file\Entity\File;
@@ -843,7 +844,7 @@ class StyledGoogleMapStyle extends StylePluginBase {
         // Add marker Label.
         if (!empty($this->options['marker_label']) && isset($sourceHandlerOutput[$this->options['marker_label']])) {
           $markerLabelRenderArray = ['#markup' => $sourceHandlerOutput[$this->options['marker_label']]];
-          $marker = \Drupal::service('renderer')->renderPlain($markerLabelRenderArray);
+          $marker = DeprecationHelper::backwardsCompatibleCall(\Drupal::VERSION, '10.3.0', fn() => \Drupal::service('renderer')->renderInIsolation($markerLabelRenderArray), fn() => \Drupal::service('renderer')->renderPlain($markerLabelRenderArray));
           $marker = strip_tags($marker);
           $location = $location + [
               'marker_label' => [
@@ -859,13 +860,13 @@ class StyledGoogleMapStyle extends StylePluginBase {
         if (!empty($this->options['popup_source']) && !empty($sourceHandlerOutput[$this->options['popup_source']])) {
           $popupRenderArray = ['#markup' => $sourceHandlerOutput[$this->options['popup_source']]];
           $location = $location + [
-              'popup' => \Drupal::service('renderer')->renderPlain($popupRenderArray),
+              'popup' => DeprecationHelper::backwardsCompatibleCall(\Drupal::VERSION, '10.3.0', fn() => \Drupal::service('renderer')->renderInIsolation($popupRenderArray), fn() => \Drupal::service('renderer')->renderPlain($popupRenderArray)),
             ];
         }
         // Add category.
         if (!empty($this->options['category_source']) && !empty($sourceHandlerOutput[$this->options['category_source']])) {
           $categoryRenderArray = ['#markup' => $sourceHandlerOutput[$this->options['category_source']]];
-          $category = \Drupal::service('renderer')->renderPlain($categoryRenderArray);
+          $category = DeprecationHelper::backwardsCompatibleCall(\Drupal::VERSION, '10.3.0', fn() => \Drupal::service('renderer')->renderInIsolation($categoryRenderArray), fn() => \Drupal::service('renderer')->renderPlain($categoryRenderArray));
           $location = $location + [
               'category' => Html::cleanCssIdentifier($category),
             ];
@@ -877,7 +878,7 @@ class StyledGoogleMapStyle extends StylePluginBase {
       // Gather heatmap weights.
       if (!empty($this->options['heatmap_settings']['data_source']) && !empty($sourceHandlerOutput[$this->options['heatmap_settings']['data_source']])) {
         $weightRenderArray = ['#markup' => $sourceHandlerOutput[$this->options['heatmap_settings']['data_source']]];
-        $weight = \Drupal::service('renderer')->renderPlain($weightRenderArray);
+        $weight = DeprecationHelper::backwardsCompatibleCall(\Drupal::VERSION, '10.3.0', fn() => \Drupal::service('renderer')->renderInIsolation($weightRenderArray), fn() => \Drupal::service('renderer')->renderPlain($weightRenderArray));
         $heat_map_coords[$row_index]['weight'] = $weight;
       }
     }
diff --git a/styled_google_map.install b/styled_google_map.install
index e921dc5..bb7f4dc 100644
--- a/styled_google_map.install
+++ b/styled_google_map.install
@@ -4,7 +4,8 @@
  * @file
  * Installation routine.
  */
-
+use Drupal\Component\Utility\DeprecationHelper;
+use Drupal\Core\Extension\Requirement\RequirementSeverity;
 use Drupal\styled_google_map\StyledGoogleMapInterface;
 
 /**
@@ -35,7 +36,7 @@ function styled_google_map_requirements($phase) {
     if (!$key_provided) {
       $requirements['styled_google_map'] = [
         'title' => t('Styled Google Map'),
-        'severity' => REQUIREMENT_WARNING,
+        'severity' => DeprecationHelper::backwardsCompatibleCall(\Drupal::VERSION, '11.2.0', fn() => RequirementSeverity::Warning, fn() => REQUIREMENT_WARNING),
         'value' => t('Google Maps API key or Client ID was not found. As of 2016/06/22, keyless access is no longer supported and it may impact rendering of maps. For more information visit: <a href="@link">@link</a>', [
           '@link' => 'http://googlegeodevelopers.blogspot.ca/2016/06/building-for-scale-updates-to-google.html',
         ]),
@@ -106,7 +107,7 @@ function styled_google_map_update_10001(&$sandbox)  {
       }
       if ($changed) {
         $view->set('display', $displays);
-        $view->save(TRUE);
+        $view->save();
       }
     }
   }
diff --git a/styled_google_map.module b/styled_google_map.module
index 1977662..60fe267 100755
--- a/styled_google_map.module
+++ b/styled_google_map.module
@@ -4,7 +4,8 @@
  * @file
  * Contains all hooks and functions for the Styled Google Map module.
  */
-
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\styled_google_map\Hook\StyledGoogleMapHooks;
 use Drupal\Component\Utility\UrlHelper;
 
 use Drupal\Component\Utility\Xss;
@@ -15,149 +16,27 @@ use Drupal\styled_google_map\StyledGoogleMapInterface;
 /**
  * Implements hook_theme().
  */
-function styled_google_map_theme() {
-  $themes['styled_google_map'] = [
-    'variables' => [
-      'location' => NULL,
-      'settings' => [],
-      'entity' => NULL,
-      'gid' => NULL,
-      'directions_form' => NULL,
-      'steps' => FALSE,
-    ],
-  ];
-
-  $themes['styled_google_map_directions'] = [
-    'variables' => [
-      'settings' => [
-        'enabled' => FALSE,
-        'type' => 'DRIVING',
-        'steps' => FALSE,
-      ],
-      'id' => '',
-    ],
-  ];
-
-  return $themes;
+#[LegacyHook]
+function styled_google_map_theme()
+{
+    return \Drupal::service(StyledGoogleMapHooks::class)->theme();
 }
 
 /**
  * Implements hook_preprocess_HOOK().
  */
-function styled_google_map_preprocess_styled_google_map(&$variables) {
-  $language = \Drupal::languageManager()->getCurrentLanguage();
-
-  $location = &$variables['location'];
-  /** @var \Drupal\Core\Entity\FieldableEntityInterface|\Drupal\Core\Entity\TranslatableInterface $entity */
-  $entity = &$variables['entity'];
-  $settings = &$variables['settings'];
-
-  if (empty($location) || !$location['geohash']) {
-    $location = NULL;
-    return;
-  }
-
-  // Get the pin file url.
-  if (isset($settings['style']['pin']) && !empty($settings['style']['pin'])) {
-    $settings['style']['pin'] = styled_google_map_file_create_url($settings['style']['pin']);
-  }
-  // Sanitize the output of the style settings.
-  foreach ($settings['style'] as $id => $setting) {
-    if ($id != 'style') {
-      $location[$id] = Xss::filter($settings['style'][$id]);
-    }
-  }
-  // Get the label settings.
-  if ($entity instanceof EntityInterface) {
-    switch ($settings['popup']['choice']) {
-      // Create popup from field.
-      case 1:
-        if ($settings['popup']['text'] == 'label') {
-          $popup_field = [
-            '#markup' => $entity->label(),
-          ];
-        } else {
-          $settings['popup']['label'] = $settings['popup']['label'] ? 'inline' : 'hidden';
-          $popup_field = $entity->{$settings['popup']['text']}->view(['label' => $settings['popup']['label']], $language->getId());
-        }
-        break;
-
-      // Create popup from view mode.
-      case 2:
-        $display = EntityViewDisplay::collectRenderDisplay($entity, $settings['popup']['view_mode']);
-        $popup_field = $display->build($entity);
-        break;
-
-      // Default to empty.
-      default:
-        $popup_field = [];
-    }
-    $location['popup'] = \Drupal::service('renderer')->render($popup_field);
-  }
-  else {
-    // Not an entity object.
-    $location['popup'] = [];
-  }
-  if ($settings['map_center']['center_coordinates']
-    && $entity->hasField($settings['map_center']['center_coordinates'])) {
-    if ($entity->hasTranslation($language->getId())) {
-      $map_center = $entity->getTranslation($language->getId())
-        ->get($settings['map_center']['center_coordinates'])
-        ->getValue();
-    }
-    else {
-      $map_center = $entity->get($settings['map_center']['center_coordinates'])->getValue();
-    }
-    if ($map_center && isset($map_center[0]['lat'], $map_center[0]['lon'])) {
-      $settings['map_center']['center_coordinates'] = $map_center[0];
-    }
-    else {
-      $settings['map_center']['center_coordinates'] = FALSE;
-    }
-  }
-  else {
-    $settings['map_center']['center_coordinates'] = FALSE;
-  }
-
-  // Add map settings and required libraries.
-  $gid = $variables['gid'];
-  // Include the Google Maps API and map location settings.
-  $map_settings['locations'] = [$location];
-  // Include the custom map settings.
-  $map_settings['settings'] = $settings;
-  // Include the unique div id.
-  $map_settings['id'] = 'styled-google-map-' . $gid;
-  $variables['#attached']['drupalSettings']['styled_google_map'] = [$gid => $gid];
-  $variables['#attached']['drupalSettings']['maps'] = ['id' . $gid => $map_settings];
-  if (!empty($settings['directions']['enabled'])) {
-    if (!empty($settings['directions']['steps'])) {
-      $variables['steps'] = TRUE;
-    }
-    $variables['directions_form'] = [
-      '#theme' => 'styled_google_map_directions',
-      '#settings' => $settings['directions'],
-      '#id' => $gid,
-    ];
-    if (\Drupal::service('library.discovery')->getLibraryByName('core', 'drupal.message')) {
-      $variables['#attached']['library'][] = 'core/drupal.message';
-    }
-  }
-  // Attach the Styled Google Map javascript file.
-  $variables['#attached']['library'][] = 'styled_google_map/styled-google-map';
+#[LegacyHook]
+function styled_google_map_preprocess_styled_google_map(&$variables)
+{
+    \Drupal::service(StyledGoogleMapHooks::class)->preprocessStyledGoogleMap($variables);
 }
 
 /**
  * Implements hook_library_info_alter().
  */
+#[LegacyHook]
 function styled_google_map_library_info_alter(&$libraries, $extension) {
-  if ($extension == 'styled_google_map' && isset($libraries['styled-google-map'])) {
-    if (!empty($libraries['styled-google-map']['js']['//maps.google.com/maps/api/js'])) {
-      $options = $libraries['styled-google-map']['js']['//maps.google.com/maps/api/js'];
-      unset($libraries['styled-google-map']['js']['//maps.google.com/maps/api/js']);
-      $api_url = styled_google_map_build_api_url();
-      $libraries['styled-google-map']['js']['//maps.google.com/maps/api/js' . $api_url] = $options;
-    }
-  }
+  \Drupal::service(StyledGoogleMapHooks::class)->libraryInfoAlter($libraries, $extension);
 }
 
 /**
@@ -217,11 +96,9 @@ function styled_google_map_build_api_url(array $libraries = []) {
 /**
  * Implements hook_modules_uninstalled().
  */
+#[LegacyHook]
 function styled_google_map_modules_uninstalled($modules) {
-  // Uninstall demo module when data module is disabled because demo is hidden.
-  if (in_array('styled_google_map_data', $modules)) {
-    \Drupal::service('module_installer')->uninstall(['styled_google_map_demo']);
-  }
+  \Drupal::service(StyledGoogleMapHooks::class)->modulesUninstalled($modules);
 }
 
 /**
diff --git a/styled_google_map.services.yml b/styled_google_map.services.yml
new file mode 100644
index 0000000..5b67336
--- /dev/null
+++ b/styled_google_map.services.yml
@@ -0,0 +1,9 @@
+
+services:
+  Drupal\styled_google_map\Hook\StyledGoogleMapHooks:
+    class: Drupal\styled_google_map\Hook\StyledGoogleMapHooks
+    autowire: true
+
+  Drupal\styled_google_map\Hook\StyledGoogleMapViewsHooks:
+    class: Drupal\styled_google_map\Hook\StyledGoogleMapViewsHooks
+    autowire: true
diff --git a/styled_google_map.views.inc b/styled_google_map.views.inc
index 3a80d7d..2385c12 100644
--- a/styled_google_map.views.inc
+++ b/styled_google_map.views.inc
@@ -1,27 +1,17 @@
 <?php
 
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\styled_google_map\Hook\StyledGoogleMapViewsHooks;
+
 /**
  * @file
  * Provide views data for our custom styled_google_map.
  */
-
 /**
  * Implements hook_views_data().
  */
-function styled_google_map_views_data() {
-  $data['views']['styled_google_map'] = [
-    'title' => t('Styled Google Map'),
-    'help' => t('Display the values of geofields on styled Google map.'),
-    'style' => [
-      'id' => 'styled_google_map',
-    ],
-  ];
-  $data['views']['google_map_control'] = [
-    'title' => t('Google map custom control'),
-    'help' => t('Provide markup text for the area.'),
-    'area' => [
-      'id' => 'google_map_control',
-    ],
-  ];
-  return $data;
+#[LegacyHook]
+function styled_google_map_views_data()
+{
+    return \Drupal::service(StyledGoogleMapViewsHooks::class)->viewsData();
 }
