diff --git a/config_track.info.yml b/config_track.info.yml
index 5ba97d5..e98e7e0 100644
--- a/config_track.info.yml
+++ b/config_track.info.yml
@@ -2,4 +2,4 @@ name: Config Revision
 type: module
 description: 'Logs changes to config entities and simple configuration into revisions.'
 package: Configuration
-core_version_requirement: ^10.3 || ^11.1
+core_version_requirement: ^10.3 || ^11.1 || ^12
diff --git a/config_track.install b/config_track.install
index c9ea971..d9f88f1 100644
--- a/config_track.install
+++ b/config_track.install
@@ -1,5 +1,7 @@
 <?php
 
+use Drupal\Core\Batch\BatchBuilder;
+
 /**
  * Implements hook_schema().
  */
@@ -68,7 +70,7 @@ function config_track_schema() {
  * Implements hook_install().
  */
 function config_track_install() {
-  $batch_builder = (new \Drupal\Core\Batch\BatchBuilder())
+  $batch_builder = (new BatchBuilder())
     ->setTitle(t('Initializing config revisions'))
     ->addOperation('config_track_init', []);
   batch_set($batch_builder->toArray());
diff --git a/config_track.module b/config_track.module
index c58c6fa..62eba60 100644
--- a/config_track.module
+++ b/config_track.module
@@ -1,5 +1,8 @@
 <?php
 
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\config_track\Hook\ConfigTrackHooks;
+use Drupal\Component\Utility\DeprecationHelper;
 use Drupal\Core\Cache\Cache;
 use Drupal\Core\Config\Entity\ConfigEntityInterface;
 use Drupal\Core\Entity\EntityInterface;
@@ -10,19 +13,9 @@ use Drupal\Core\Routing\RouteMatchInterface;
 /**
  * Implements hook_help().
  */
+#[LegacyHook]
 function config_track_help($route_name, RouteMatchInterface $route_match) {
-  switch ($route_name) {
-    // Main module help for the config_track module.
-    case 'help.page.config_track':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('This module allows to log any configuration change in Drupal 9/10.') . '</p>';
-      $output .= '<p>' . t('All changes to configuration in any config collection will be tracked as well as that the order of changes will be preserved.') . '</p>';
-      $output .= '<p>' . t('The module provides a nice UI where you can see a list of all recent config changes in the system as well as the user that triggered those changes. A diff is also available in order to see the exact change. .') . '</p>';
-      return $output;
-
-    default:
-  }
+  return \Drupal::service(ConfigTrackHooks::class)->help($route_name, $route_match);
 }
 
 /**
@@ -65,7 +58,7 @@ function config_track_entity_presave_last(EntityInterface $entity) {
       if (!isset($config_data['data']) && in_array($config_data['operation'], ['create', 'update']) && ($config_data['uuid'] === $entity->uuid())) {
         $config_data['name'] = $entity->getEntityType()->getConfigPrefix() . '.' . $entity->id();;
         $config_data['data'] = $entity->toArray();
-        $config_data['original_data'] = !$entity->isNew() ? $entity->original->toArray() : NULL;
+        $config_data['original_data'] = !$entity->isNew() ? DeprecationHelper::backwardsCompatibleCall(\Drupal::VERSION, '11.2.0', fn() => $entity->getOriginal(), fn() => $entity->original)->toArray() : NULL;
         $config_data['collection'] = \Drupal::configFactory()
           ->getEditable($config_data['name'])
           ->getStorage()
diff --git a/config_track.services.yml b/config_track.services.yml
index 5dfb19e..0cc0262 100644
--- a/config_track.services.yml
+++ b/config_track.services.yml
@@ -10,3 +10,7 @@ services:
     decorates: module_handler
     arguments: [ '@config_track.module_handler.inner', '@entity.last_installed_schema.repository' ]
     decoration_priority: 9
+
+  Drupal\config_track\Hook\ConfigTrackHooks:
+    class: Drupal\config_track\Hook\ConfigTrackHooks
+    autowire: true
diff --git a/src/Controller/ConfigTrackController.php b/src/Controller/ConfigTrackController.php
index 3154cd3..f20c291 100644
--- a/src/Controller/ConfigTrackController.php
+++ b/src/Controller/ConfigTrackController.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\config_track\Controller;
 
+use Drupal\Component\Utility\DeprecationHelper;
+use Drupal\Core\Database\Statement\FetchAs;
 use Drupal\Component\Datetime\DateTimePlus;
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Config\ConfigManagerInterface;
@@ -118,7 +120,7 @@ class ConfigTrackController extends ControllerBase {
       ->fetchField();
     $this->pagerManager->createPager($total_entries, $this->limit);
 
-    $config_tracks = $this->database->select('config_track', 'cv')
+    $config_tracks = DeprecationHelper::backwardsCompatibleCall(\Drupal::VERSION, '11.2.0', fn() => $this->database->select('config_track', 'cv')
       ->fields('cv', [
         'timestamp',
         'revision_id',
@@ -131,7 +133,20 @@ class ConfigTrackController extends ControllerBase {
       ->orderBy('revision_id', 'DESC')
       ->range($page * $this->limit, $this->limit)
       ->execute()
-      ->fetchAllAssoc('revision_id', \PDO::FETCH_ASSOC);
+      ->fetchAllAssoc('revision_id', FetchAs::Associative), fn() => $this->database->select('config_track', 'cv')
+      ->fields('cv', [
+        'timestamp',
+        'revision_id',
+        'name',
+        'collection',
+        'operation',
+        'uid',
+      ])
+      ->orderBy('timestamp', 'DESC')
+      ->orderBy('revision_id', 'DESC')
+      ->range($page * $this->limit, $this->limit)
+      ->execute()
+      ->fetchAllAssoc('revision_id', \PDO::FETCH_ASSOC));
     $build['table']['#rows'] = $config_tracks;
 
     foreach ($build['table']['#rows'] as $revision_id => &$row) {
diff --git a/src/Extension/ModuleHandler.php b/src/Extension/ModuleHandler.php
index c1394c5..8a6ae1c 100644
--- a/src/Extension/ModuleHandler.php
+++ b/src/Extension/ModuleHandler.php
@@ -174,15 +174,15 @@ class ModuleHandler implements ModuleHandlerInterface {
   /**
    * {@inheritdoc}
    */
-  public function addModule($name, $path) {
-    $this->innerModuleHandler->addModule($name, $path);
+  public function addModule($name, $path)
+  {
   }
 
   /**
    * {@inheritdoc}
    */
-  public function addProfile($name, $path) {
-    $this->innerModuleHandler->addProfile($name, $path);
+  public function addProfile($name, $path)
+  {
   }
 
   /**
@@ -202,8 +202,8 @@ class ModuleHandler implements ModuleHandlerInterface {
   /**
    * {@inheritdoc}
    */
-  public function loadAllIncludes($type, $name = NULL) {
-    $this->innerModuleHandler->addProfile($type, $name);
+  public function loadAllIncludes($type, $name = NULL)
+  {
   }
 
   /**
@@ -217,7 +217,7 @@ class ModuleHandler implements ModuleHandlerInterface {
    * {@inheritdoc}
    */
   public function getHookInfo() {
-    return $this->innerModuleHandler->getHookInfo();
+    return [];
   }
 
   /**
@@ -230,8 +230,8 @@ class ModuleHandler implements ModuleHandlerInterface {
   /**
    * {@inheritdoc}
    */
-  public function writeCache() {
-    $this->innerModuleHandler->writeCache();
+  public function writeCache()
+  {
   }
 
   /**
@@ -301,7 +301,7 @@ class ModuleHandler implements ModuleHandlerInterface {
    * {@inheritdoc}
    */
   public function getName($module) {
-    return $this->innerModuleHandler->getName($module);
+    return \Drupal::service('extension.list.module')->getName($module);
   }
 
   /**
diff --git a/src/Hook/ConfigTrackHooks.php b/src/Hook/ConfigTrackHooks.php
new file mode 100644
index 0000000..080a134
--- /dev/null
+++ b/src/Hook/ConfigTrackHooks.php
@@ -0,0 +1,38 @@
+<?php
+
+namespace Drupal\config_track\Hook;
+
+use Drupal\Component\Utility\DeprecationHelper;
+use Drupal\Core\Cache\Cache;
+use Drupal\Core\Config\Entity\ConfigEntityInterface;
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\Component\Render\MarkupInterface;
+use Drupal\config_track\Controller\ConfigTrackController;
+use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\Core\Hook\Attribute\Hook;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+/**
+ * Hook implementations for config_track.
+ */
+class ConfigTrackHooks
+{
+    use StringTranslationTrait;
+    /**
+     * Implements hook_help().
+     */
+    #[Hook('help')]
+    public function help($route_name, \Drupal\Core\Routing\RouteMatchInterface $route_match)
+    {
+        switch ($route_name) {
+            // Main module help for the config_track module.
+            case 'help.page.config_track':
+                $output = '';
+                $output .= '<h3>' . $this->t('About') . '</h3>';
+                $output .= '<p>' . $this->t('This module allows to log any configuration change in Drupal 9/10.') . '</p>';
+                $output .= '<p>' . $this->t('All changes to configuration in any config collection will be tracked as well as that the order of changes will be preserved.') . '</p>';
+                $output .= '<p>' . $this->t('The module provides a nice UI where you can see a list of all recent config changes in the system as well as the user that triggered those changes. A diff is also available in order to see the exact change. .') . '</p>';
+                return $output;
+            default:
+        }
+    }
+}
