diff --git a/composer.json b/composer.json
index 51d1265844181f6e0e11757877f6bc52e9d19871..e9b2851b9729886c38fb138bdd7daf3272c36f17 100644
--- a/composer.json
+++ b/composer.json
@@ -36,6 +36,6 @@
   },
   "require":{
     "mkalkbrenner/php-htmldiff-advanced": "~0.0.8",
-    "drupal/core": "^8.7.7 || ^9"
+    "drupal/core": "^9.3 || ^10"
   }
 }
diff --git a/diff.info.yml b/diff.info.yml
index 6aa49c4aaa0dbfaac9550eb90b922083968ec467..0cb7bfad7a1c72eed8e73a9c71c32a225a0f18b4 100644
--- a/diff.info.yml
+++ b/diff.info.yml
@@ -1,5 +1,5 @@
 name: Diff
 type: module
 description: Shows changes between content revisions.
-core_version_requirement: ^8.7.7 || ^9
+core_version_requirement: ^9.3 || ^10
 configure: diff.general_settings
diff --git a/diff.libraries.yml b/diff.libraries.yml
index cee65e35df5d2a8d608ba9e3edf7f649b29161c1..d3e5a71549ed8483d03e582b57161ce2c48fcea3 100644
--- a/diff.libraries.yml
+++ b/diff.libraries.yml
@@ -6,8 +6,10 @@ diff.general:
   js:
     js/diff.js: {}
   dependencies:
+    - core/jquery
+    - core/drupal
     - core/drupalSettings
-    - core/jquery.once
+    - core/once
 
 diff.double_column:
   version: 1.x
diff --git a/diff.routing.yml b/diff.routing.yml
index c3314dd1bd38ce901ec84a5866143de4da3c4ac6..f4c0e6c57fdac755bef324d2934bd2207e419e1e 100644
--- a/diff.routing.yml
+++ b/diff.routing.yml
@@ -4,7 +4,7 @@ diff.revisions_diff:
     _controller: '\Drupal\diff\Controller\NodeRevisionController::compareNodeRevisions'
     _title: Diff General Settings
   requirements:
-    _access_node_revision: 'view'
+    _entity_access: 'node.view all revisions'
   options:
     _admin_route: TRUE
 
diff --git a/js/diff.js b/js/diff.js
index d417abac0dd420175f9796ad01e0893a08ba2022..04d405cc7552809239bc651f58d78a9f81588249 100644
--- a/js/diff.js
+++ b/js/diff.js
@@ -1,4 +1,4 @@
-(function ($, Drupal, drupalSettings) {
+(function ($, Drupal, drupalSettings, once) {
 
   'use strict';
 
@@ -6,7 +6,8 @@
     attach: function (context, settings) {
       // drupalSettings in not anymore bound to attached functions.
       // It is available outside the scope of this anonymous function also.
-      var $rows = $('table.diff-revisions tbody tr').once('diff-revisions');
+      var rows = once('diff-revisions', 'table.diff-revisions tbody tr');
+      var $rows = $(rows);
       if ($rows.length === 0) {
         return;
       }
@@ -66,4 +67,4 @@
     }
   };
 
-})(jQuery, Drupal, drupalSettings);
+})(jQuery, Drupal, drupalSettings, once);
diff --git a/tests/modules/diff_test/diff_test.info.yml b/tests/modules/diff_test/diff_test.info.yml
index acf29895cff1e320edc994c6368786deb32a03ac..c6f3ecda974961c43fd5844f4e108ae77ef9c0ab 100644
--- a/tests/modules/diff_test/diff_test.info.yml
+++ b/tests/modules/diff_test/diff_test.info.yml
@@ -1,5 +1,4 @@
 description: Supports diff's automated tests.
-core_version_requirement: ^8.7.7 || ^9
 dependencies:
   - diff:diff
   - drupal:filter
@@ -8,5 +7,5 @@ dependencies:
   - drupal:node
 hidden: true
 name: Diff tests
-package: diff
+package: Testing
 type: module
diff --git a/tests/src/Functional/DiffAdminFormsTest.php b/tests/src/Functional/DiffAdminFormsTest.php
index 66752e7e0febb6fa8611f8209a3045c7d330c18e..5c206490137b2a35251053a7bee4bdbddfa0bd0f 100644
--- a/tests/src/Functional/DiffAdminFormsTest.php
+++ b/tests/src/Functional/DiffAdminFormsTest.php
@@ -61,7 +61,7 @@ class DiffAdminFormsTest extends DiffTestBase {
    * Tests the module requirements.
    */
   public function testRequirements() {
-    module_load_install('diff');
+    \Drupal::moduleHandler()->loadInclude('diff', 'install');
     $requirements = diff_requirements('runtime');
     $this->assertEquals($requirements['html_diff_advanced']['title'], 'Diff');
 
diff --git a/tests/src/Functional/DiffRevisionTest.php b/tests/src/Functional/DiffRevisionTest.php
index 1e2c461b1ceacc9b5652f231396116ae0b4f0ad7..8f08ebbb43c71226312d5ce2cbf2efe080df5fee 100644
--- a/tests/src/Functional/DiffRevisionTest.php
+++ b/tests/src/Functional/DiffRevisionTest.php
@@ -189,7 +189,8 @@ class DiffRevisionTest extends DiffTestBase {
     $this->assertSession()->pageTextContains('Copy of the revision from');
 
     // Delete the first revision (last entry in table).
-    $this->clickLink(t('Delete'), 0);
+    $this->assertSession()->elementExists('css', '#revision-overview-form')->clickLink('Delete');
+
     $this->submitForm([], 'Delete');
     $this->assertSession()->pageTextContains('of Article ' . $title . ' has been deleted.');
 
@@ -198,7 +199,7 @@ class DiffRevisionTest extends DiffTestBase {
     $this->assertCount(2, $rows);
 
     // Delete one revision so that we are left with only 1 revision.
-    $this->clickLink(t('Delete'), 0);
+    $this->assertSession()->elementExists('css', '#revision-overview-form')->clickLink('Delete');
     $this->submitForm([], 'Delete');
     $this->assertSession()->pageTextContains('of Article ' . $title . ' has been deleted.');