diff --git a/src/Routing/AdminHtmlRouteProvider.php b/src/Routing/AdminHtmlRouteProvider.php
new file mode 100644
index 0000000..7ef2f6e
--- /dev/null
+++ b/src/Routing/AdminHtmlRouteProvider.php
@@ -0,0 +1,26 @@
+<?php
+
+namespace Drupal\entity\Routing;
+
+use Drupal\Core\Entity\EntityTypeInterface;
+use Drupal\Core\Entity\Routing\AdminHtmlRouteProvider as CoreAdminHtmlRouteProvider;
+
+/**
+ * Provides HTML routes for entities with administrative add/edit/delete pages.
+ */
+class AdminHtmlRouteProvider extends CoreAdminHtmlRouteProvider {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getCollectionRoute(EntityTypeInterface $entity_type) {
+    $route = parent::getCollectionRoute($entity_type);
+    if ($route && $entity_type->hasHandlerClass('permission_provider')) {
+      $admin_permission = $entity_type->getAdminPermission();
+      $overview_permission = "access {$entity_type->id()} overview";
+      $route->setRequirement('_permission', "$admin_permission+$overview_permission");
+    }
+    return $route;
+  }
+
+}
diff --git a/src/Routing/DefaultHtmlRouteProvider.php b/src/Routing/DefaultHtmlRouteProvider.php
new file mode 100644
index 0000000..06a3504
--- /dev/null
+++ b/src/Routing/DefaultHtmlRouteProvider.php
@@ -0,0 +1,26 @@
+<?php
+
+namespace Drupal\entity\Routing;
+
+use Drupal\Core\Entity\EntityTypeInterface;
+use Drupal\Core\Entity\Routing\DefaultHtmlRouteProvider as CoreDefaultHtmlRouteProvider;
+
+/**
+ * Provides HTML routes for entities.
+ */
+class DefaultHtmlRouteProvider extends CoreDefaultHtmlRouteProvider {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getCollectionRoute(EntityTypeInterface $entity_type) {
+    $route = parent::getCollectionRoute($entity_type);
+    if ($route && $entity_type->hasHandlerClass('permission_provider')) {
+      $admin_permission = $entity_type->getAdminPermission();
+      $overview_permission = "access {$entity_type->id()} overview";
+      $route->setRequirement('_permission', "$admin_permission+$overview_permission");
+    }
+    return $route;
+  }
+
+}
diff --git a/tests/modules/entity_module_test/entity_module_test.routing.yml b/tests/modules/entity_module_test/entity_module_test.routing.yml
deleted file mode 100644
index 3724a65..0000000
--- a/tests/modules/entity_module_test/entity_module_test.routing.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-entity.entity_test_enhanced.collection:
-  path: '/entity_test_enhanced'
-  defaults:
-    _entity_list: 'entity_test_enhanced'
-    _title: 'Entity test with enhancements'
-  requirements:
-    _permission: 'administer entity_test_enhanced'
diff --git a/tests/modules/entity_module_test/src/Entity/EnhancedEntity.php b/tests/modules/entity_module_test/src/Entity/EnhancedEntity.php
index 51e074b..0967765 100644
--- a/tests/modules/entity_module_test/src/Entity/EnhancedEntity.php
+++ b/tests/modules/entity_module_test/src/Entity/EnhancedEntity.php
@@ -22,7 +22,7 @@ use Drupal\entity\Revision\RevisionableContentEntityBase;
  *       "delete" = "\Drupal\Core\Entity\EntityDeleteForm",
  *     },
  *     "route_provider" = {
- *       "html" = "\Drupal\Core\Entity\Routing\DefaultHtmlRouteProvider",
+ *       "html" = "\Drupal\entity\Routing\DefaultHtmlRouteProvider",
  *       "revision" = "\Drupal\entity\Routing\RevisionRouteProvider",
  *       "delete-multiple" = "\Drupal\entity\Routing\DeleteMultipleRouteProvider",
  *     },
diff --git a/tests/src/Kernel/OverviewPermissionTest.php b/tests/src/Kernel/OverviewPermissionTest.php
new file mode 100644
index 0000000..cf2ff95
--- /dev/null
+++ b/tests/src/Kernel/OverviewPermissionTest.php
@@ -0,0 +1,48 @@
+<?php
+
+namespace Drupal\Tests\entity\Kernel;
+
+use Drupal\entity_module_test\Entity\EnhancedEntityBundle;
+use Drupal\KernelTests\KernelTestBase;
+
+/**
+ * @group entity
+ */
+class OverviewPermissionTest extends KernelTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['entity_module_test', 'system', 'user', 'entity'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->installEntitySchema('user');
+    $this->installEntitySchema('entity_test_enhanced');
+    $this->installSchema('system', 'router');
+    $this->installConfig(['system']);
+
+    $bundle = EnhancedEntityBundle::create([
+      'id' => 'default',
+      'label' => 'Default',
+    ]);
+    $bundle->save();
+
+    \Drupal::service('router.builder')->rebuild();
+  }
+
+  /**
+   * Tests that the EnhancedEntity has proper collection permission requirement.
+   */
+  public function testOverviewPermissionRequirement() {
+    $router = $this->container->get('router');
+    $route = $router->getRouteCollection()->get('entity.entity_test_enhanced.collection');
+    $_permission = $route->getRequirement('_permission');
+    $this->assertEquals('administer entity_test_enhanced+access entity_test_enhanced overview', $_permission);
+  }
+
+}
