diff --git a/src/Hook/W3cValidatorHooks.php b/src/Hook/W3cValidatorHooks.php
new file mode 100644
index 0000000..5b77518
--- /dev/null
+++ b/src/Hook/W3cValidatorHooks.php
@@ -0,0 +1,27 @@
+<?php
+
+namespace Drupal\w3c_validator\Hook;
+
+use Drupal\Core\Hook\Attribute\Hook;
+/**
+ * Hook implementations for w3c_validator.
+ */
+class W3cValidatorHooks
+{
+    /**
+     * @file
+     * Hooks for W3CValidator module.
+     */
+    /**
+     * Implements hook_cron().
+     */
+    #[Hook('cron')]
+    public function cron()
+    {
+        $context = [
+        ];
+        // Do validation as admin user.
+        // $user = User::load(1);.
+        // \Drupal::service('w3c.processor')->validateAllPages($context, 10, $user);.
+    }
+}
diff --git a/src/W3CProcessor.php b/src/W3CProcessor.php
index 95d2be0..7841b29 100644
--- a/src/W3CProcessor.php
+++ b/src/W3CProcessor.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\w3c_validator;
 
+use Drupal\Component\Utility\DeprecationHelper;
+use Drupal\Core\Database\Statement\FetchAs;
 use Drupal\Core\Access\AccessManagerInterface;
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Database\Connection;
@@ -135,7 +137,7 @@ class W3CProcessor {
     $query->fields('n', ['nid', 'title']);
     $query->addExpression("CONCAT('entity.node.canonical', '')", 'route');
     $query->addExpression("CONCAT('node/', n.nid)", 'url');
-    $nodes = $query->execute()->fetchAllAssoc('url', \PDO::FETCH_ASSOC);
+    $nodes = DeprecationHelper::backwardsCompatibleCall(\Drupal::VERSION, '11.2.0', fn() => $query->execute()->fetchAllAssoc('url', FetchAs::Associative), fn() => $query->execute()->fetchAllAssoc('url', \PDO::FETCH_ASSOC));
     $all_site_pages = array_merge($all_site_pages, $nodes);
 
     // All route names.
@@ -146,7 +148,7 @@ class W3CProcessor {
       $query->addField('r', 'name', 'route');
       $query->condition('pattern_outline', '%\%%', 'NOT LIKE');
       $query->condition('pattern_outline', '%<%', 'NOT LIKE');
-      $paths = $query->execute()->fetchAllAssoc('url', \PDO::FETCH_ASSOC);
+      $paths = DeprecationHelper::backwardsCompatibleCall(\Drupal::VERSION, '11.2.0', fn() => $query->execute()->fetchAllAssoc('url', FetchAs::Associative), fn() => $query->execute()->fetchAllAssoc('url', \PDO::FETCH_ASSOC));
       $all_site_pages = array_merge($all_site_pages, $paths);
     }
 
@@ -163,7 +165,7 @@ class W3CProcessor {
     $db_result = $this->connection->select('w3c_validator', 'w')
       ->fields('w')
       ->execute();
-    return $db_result->fetchAllAssoc('uri', \PDO::FETCH_ASSOC);
+    return DeprecationHelper::backwardsCompatibleCall(\Drupal::VERSION, '11.2.0', fn() => $db_result->fetchAllAssoc('uri', FetchAs::Associative), fn() => $db_result->fetchAllAssoc('uri', \PDO::FETCH_ASSOC));
   }
 
   /**
diff --git a/w3c_validator.module b/w3c_validator.module
index de77d4c..d604e91 100644
--- a/w3c_validator.module
+++ b/w3c_validator.module
@@ -1,17 +1,17 @@
 <?php
 
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\w3c_validator\Hook\W3cValidatorHooks;
+
 /**
  * @file
  * Hooks for W3CValidator module.
  */
-
 /**
  * Implements hook_cron().
  */
-function w3c_validator_cron() {
-  $context = [];
-
-  // Do validation as admin user.
-  // $user = User::load(1);.
-  // \Drupal::service('w3c.processor')->validateAllPages($context, 10, $user);.
+#[LegacyHook]
+function w3c_validator_cron()
+{
+    \Drupal::service(W3cValidatorHooks::class)->cron();
 }
diff --git a/w3c_validator.services.yml b/w3c_validator.services.yml
index 70373ce..d373660 100644
--- a/w3c_validator.services.yml
+++ b/w3c_validator.services.yml
@@ -13,3 +13,7 @@ services:
   logger.channel.w3c_validator:
     parent: logger.channel_base
     arguments: ['w3c_validator']
+
+  Drupal\w3c_validator\Hook\W3cValidatorHooks:
+    class: Drupal\w3c_validator\Hook\W3cValidatorHooks
+    autowire: true
