diff --git a/core/core.services.yml b/core/core.services.yml
index 4fab422..0cd1ad6 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -410,6 +410,11 @@ services:
     arguments: ['@entity.manager']
     tags:
       - { name: access_check }
+  access_check.module_exists:
+    class: Drupal\Core\Access\ModuleExistsCheck
+    arguments: ['@module_handler']
+    tags:
+      - { name: access_check }
   maintenance_mode_subscriber:
     class: Drupal\Core\EventSubscriber\MaintenanceModeSubscriber
     tags:
diff --git a/core/lib/Drupal/Core/Access/ModuleExistsCheck.php b/core/lib/Drupal/Core/Access/ModuleExistsCheck.php
new file mode 100644
index 0000000..67529da
--- /dev/null
+++ b/core/lib/Drupal/Core/Access/ModuleExistsCheck.php
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Access\ModuleExistsCheck.
+ */
+
+namespace Drupal\Core\Access;
+
+use Drupal\Core\Extension\ModuleHandlerInterface;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\Routing\Route;
+
+/**
+ * Checks whether a given module exists.
+ */
+class ModuleExistsCheck implements StaticAccessCheckInterface {
+
+  /**
+   * The module handler.
+   *
+   * @var \Drupal\Core\Extension\ModuleHandlerInterface
+   */
+  protected $moduleHandler;
+
+  /**
+   * Constructs a ModuleExistsCheck instance.
+   *
+   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
+   *   The module handler.
+   */
+  public function __construct(ModuleHandlerInterface $module_handler) {
+    $this->moduleHandler = $module_handler;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function appliesTo() {
+    return array('_module_exists');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function access(Route $route, Request $request) {
+    $module = $route->getRequirement('_module_exists');
+    $this->moduleHandler->moduleExists($module) ? static::ALLOW : static::KILL;
+  }
+
+} 
