diff --git a/core/core.events.yml b/core/core.events.yml
new file mode 100644
index 0000000..73f6a8e
--- /dev/null
+++ b/core/core.events.yml
@@ -0,0 +1,33 @@
+subscribers:
+  config.init:
+    - callback: Drupal\Core\EventSubscriber\ConfigGlobalOverrideSubscriber::configInit
+      priority: 30
+  config.importer.import:
+    - callback: Drupal\Core\EventSubscriber\ConfigSnapshotSubscriber::onConfigImporterImport
+      priority: 40
+  config.importer.validate:
+    - callback: Drupal\Core\EventSubscriber\ConfigImportSubscriber::onConfigImporterValidate
+      priority: 40
+  config.installer.validate:
+    - callback: Drupal\Core\EventSubscriber\ConfigImportSubscriber::onConfigImporterValidate
+      priority: 40
+  kernel.request:
+    - Drupal\Core\Ajax\AjaxSubscriber::onKernelRequest
+    - callback: Drupal\Core\EventSubscriber\MaintenanceModeSubscriber::onKernelRequestDetermineSiteStatus
+      priority: 40
+    - callback: Drupal\Core\EventSubscriber\MaintenanceModeSubscriber::onKernelRequestMaintenance
+      priority: 30
+    - Drupal\Core\EventSubscriber\LegacyRequestSubscriber::onKernelRequestLegacy
+      priority: 90
+    - callback: Drupal\Core\EventSubscriber\LegacyRequestSubscriber::onKernelRequestLegacyAfterRouting
+      priority: 30
+    - callback: Drupal\Core\EventSubscriber\LanguageRequestSubscriber::onKernelRequestLanguage
+      priority: 255
+  kernel.response:
+    - finish_response_subscriber:onRespond
+    - redirect_response_subscriber:checkRedirectUrl
+  routing.route_alter:
+    - callback: Drupal\Core\EventSubscriber\ParamConverterSubscriber::onRoutingRouteAlterSetParameterConverters
+      priority: -200
+    - callback: route_subscriber.entity:onRoutingRouteAlterSetType
+      priority: -150
diff --git a/core/core.services.yml b/core/core.services.yml
index 8f2965a..5936044 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -339,11 +339,6 @@ services:
       - [setContainer, ['@service_container']]
     tags:
       - { name: route_enhancer }
-  paramconverter_subscriber:
-    class: Drupal\Core\EventSubscriber\ParamConverterSubscriber
-    tags:
-      - { name: event_subscriber }
-    arguments: ['@paramconverter_manager']
   paramconverter.entity:
     class: Drupal\Core\ParamConverter\EntityConverter
     tags:
@@ -356,8 +351,6 @@ services:
     arguments: ['@module_handler']
   route_subscriber.entity:
     class: Drupal\Core\EventSubscriber\EntityRouteAlterSubscriber
-    tags:
-      - { name: event_subscriber }
     arguments: ['@entity.manager']
   reverse_proxy_subscriber:
     class: Drupal\Core\EventSubscriber\ReverseProxySubscriber
@@ -471,10 +464,6 @@ services:
     tags:
       - { name: access_check }
     arguments: ['@csrf_token']
-  maintenance_mode_subscriber:
-    class: Drupal\Core\EventSubscriber\MaintenanceModeSubscriber
-    tags:
-      - { name: event_subscriber }
   path_subscriber:
     class: Drupal\Core\EventSubscriber\PathSubscriber
     tags:
@@ -482,37 +471,21 @@ services:
     arguments: ['@path.alias_manager.cached', '@path_processor_manager']
   legacy_request_subscriber:
     class: Drupal\Core\EventSubscriber\LegacyRequestSubscriber
-    tags:
-      - { name: event_subscriber }
   finish_response_subscriber:
     class: Drupal\Core\EventSubscriber\FinishResponseSubscriber
-    tags:
-      - { name: event_subscriber }
     arguments: ['@language_manager']
     scope: request
   redirect_response_subscriber:
     class: Drupal\Core\EventSubscriber\RedirectResponseSubscriber
     arguments: ['@url_generator']
-    tags:
-      - { name: event_subscriber }
     scope: request
   request_close_subscriber:
     class: Drupal\Core\EventSubscriber\RequestCloseSubscriber
     tags:
       - { name: event_subscriber }
     arguments: ['@module_handler']
-  config_global_override_subscriber:
-    class: Drupal\Core\EventSubscriber\ConfigGlobalOverrideSubscriber
-    tags:
-      - { name: event_subscriber }
-  config_import_subscriber:
-    class: Drupal\Core\EventSubscriber\ConfigImportSubscriber
-    tags:
-      - { name: event_subscriber }
   config_snapshot_subscriber:
     class: Drupal\Core\EventSubscriber\ConfigSnapshotSubscriber
-    tags:
-      - { name: event_subscriber }
     arguments: ['@config.storage', '@config.storage.snapshot']
   language_request_subscriber:
     class: Drupal\Core\EventSubscriber\LanguageRequestSubscriber
@@ -571,10 +544,6 @@ services:
       - { name: event_subscriber }
     calls:
       - [setContainer, ['@service_container']]
-  ajax.subscriber:
-    class: Drupal\Core\Ajax\AjaxSubscriber
-    tags:
-      - { name: event_subscriber }
   image.toolkit.manager:
     class: Drupal\Core\ImageToolkit\ImageToolkitManager
     arguments: ['@container.namespaces', '@cache.cache', '@language_manager', '@config.factory']
diff --git a/core/lib/Drupal/Core/Ajax/AjaxSubscriber.php b/core/lib/Drupal/Core/Ajax/AjaxSubscriber.php
index 595d64e..a08d639 100644
--- a/core/lib/Drupal/Core/Ajax/AjaxSubscriber.php
+++ b/core/lib/Drupal/Core/Ajax/AjaxSubscriber.php
@@ -7,9 +7,7 @@
 
 namespace Drupal\Core\Ajax;
 
-use Symfony\Component\HttpKernel\KernelEvents;
 use Symfony\Component\HttpKernel\Event\GetResponseEvent;
-use Symfony\Component\EventDispatcher\EventSubscriberInterface;
 
 /**
  * Subscribes to the kernel request event to add the Ajax media type.
@@ -17,7 +15,7 @@
  * @param \Symfont\Component\HttpKernel\Event\GetResponseEvent $event
  *   The event to process.
  */
-class AjaxSubscriber implements EventSubscriberInterface {
+class AjaxSubscriber {
 
   /**
    * Registers Ajax formats with the Request class.
@@ -29,15 +27,4 @@ public function onKernelRequest(GetResponseEvent $event) {
     $request->setFormat('drupal_modal', 'application/vnd.drupal-modal');
   }
 
-  /**
-   * Registers the methods in this class that should be listeners.
-   *
-   * @return array
-   *   An array of event listener definitions.
-   */
-  static function getSubscribedEvents(){
-    $events[KernelEvents::REQUEST][] = array('onKernelRequest', 50);
-    return $events;
-  }
-
 }
\ No newline at end of file
diff --git a/core/lib/Drupal/Core/CoreServiceProvider.php b/core/lib/Drupal/Core/CoreServiceProvider.php
index 098b165..b9e42ef 100644
--- a/core/lib/Drupal/Core/CoreServiceProvider.php
+++ b/core/lib/Drupal/Core/CoreServiceProvider.php
@@ -8,6 +8,7 @@
 namespace Drupal\Core;
 
 use Drupal\Core\Cache\ListCacheBinsPass;
+use Drupal\Core\EventListenerPass;
 use Drupal\Core\DependencyInjection\ServiceProviderInterface;
 use Drupal\Core\DependencyInjection\ContainerBuilder;
 use Drupal\Core\DependencyInjection\Compiler\ModifyServiceDefinitionsPass;
@@ -57,6 +58,7 @@ public function register(ContainerBuilder $container) {
     $container->addCompilerPass(new RegisterRouteFiltersPass());
     // Add a compiler pass for registering event subscribers.
     $container->addCompilerPass(new RegisterKernelListenersPass(), PassConfig::TYPE_AFTER_REMOVING);
+    $container->addCompilerPass(new EventListenerPass(), PassConfig::TYPE_AFTER_REMOVING);
     $container->addCompilerPass(new RegisterAccessChecksPass());
     // Add a compiler pass for upcasting route parameters.
     $container->addCompilerPass(new RegisterParamConvertersPass());
diff --git a/core/lib/Drupal/Core/EventListenerPass.php b/core/lib/Drupal/Core/EventListenerPass.php
new file mode 100644
index 0000000..ef0250a
--- /dev/null
+++ b/core/lib/Drupal/Core/EventListenerPass.php
@@ -0,0 +1,126 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\Core\EventListenerPass
+ */
+
+namespace Drupal\Core;
+
+use Drupal\Component\Discovery\YamlDiscovery;
+use Drupal\Core\Extension\ModuleHandlerInterface;
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\Definition;
+use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
+
+class EventListenerPass implements CompilerPassInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function process(ContainerBuilder $container) {
+    if (!$container->hasDefinition('event_dispatcher')) {
+      return;
+    }
+
+    $event_dispatcher_definition = $container->getDefinition('event_dispatcher');
+    $module_handler = $container->get('module_handler');
+
+    $this->findListeners($container, $event_dispatcher_definition, $module_handler);
+  }
+
+  /**
+   * Find the event listeners in event.yml files and add it to the container.
+   *
+   * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
+   *   The container to add event services to.
+   * @param \Symfony\Component\DependencyInjection\Definition $event_dispatcher_definition
+   *   The event dispatcher service definition.
+   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
+   *   The module handler to get the module directories from.
+   */
+  protected function findListeners(ContainerBuilder $container, Definition $event_dispatcher_definition, ModuleHandlerInterface $module_handler) {
+    foreach ($this->getYamlDiscovery($module_handler)->findAll() as $info) {
+      foreach ($info['subscribers'] as $event_id => $listeners) {
+        foreach ($listeners as $listener) {
+          list($add_method, $args) = $this->prepareListener($container, $event_id, $listener);
+          $event_dispatcher_definition->addMethodCall($add_method, $args);
+        }
+      }
+    }
+  }
+
+  protected function prepareListener(ContainerBuilder $container, $event_id, $listener) {
+    if (is_array($listener)) {
+      $callback = $listener['callback'];
+      if (isset($listener['priority'])) {
+        $priority = $listener['priority'];
+      }
+    }
+    else {
+      $callback = $listener;
+    }
+
+    $callback_parts = $this->parseCallback($callback);
+    $method = $callback_parts['method'];
+    if (isset($callback_parts['class'])) {
+      $callback_parts['service'] = $this->defineService($container, $callback_parts['class']);
+    }
+    $args = array($event_id, array($callback_parts['service'], $method));
+    $add_method = 'addListenerService';
+
+    if (isset($priority)) {
+      $args[] = $priority;
+    }
+    return array($add_method, $args);
+  }
+
+  protected function defineService(ContainerBuilder $container, $class) {
+    $definition = new Definition();
+    $definition->setClass($class);
+    $name = 'event_listener.' . str_replace("\\", '.', $class);
+    $container->setDefinition($name, $definition);
+    return $name;
+  }
+
+  protected function parseCallback($callback) {
+    // TODO: This logic should abstracted somewhere.
+
+    // Callback in the service:method notation.
+    $count = substr_count($callback, ':');
+    if ($count == 1) {
+      list($service, $method) = explode(':', $callback, 2);
+      return array('service' => $service, 'method' => $method);
+    }
+
+    // Callback in the class::method notation.
+    if (strpos($callback, '::') !== FALSE) {
+      list($class, $method) = explode('::', $callback, 2);
+      if (!class_exists($class)) {
+        throw new \InvalidArgumentException(sprintf('Class "%s" does not exist.', $class));
+      }
+      return array('class' => $class, 'method' => $method);
+    }
+    else {
+      throw new \LogicException(sprintf('Unable to parse the callback name "%s".', $callback));
+    }
+  }
+
+  /**
+   * Returns the YAML discovery for getting all the .routing.yml files.
+   *
+   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
+   *   The module handler.
+   *
+   * @return \Drupal\Component\Discovery\YamlDiscovery
+   *   The yaml discovery.
+   */
+  protected function getYamlDiscovery(ModuleHandlerInterface $module_handler) {
+    if (!isset($this->yamlDiscovery)) {
+      $this->yamlDiscovery = new YamlDiscovery('events', array('core') + $module_handler->getModuleDirectories());
+    }
+    return $this->yamlDiscovery;
+  }
+
+}
+
diff --git a/core/lib/Drupal/Core/EventSubscriber/ConfigGlobalOverrideSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/ConfigGlobalOverrideSubscriber.php
index 02bf2cb..c3dee4e 100644
--- a/core/lib/Drupal/Core/EventSubscriber/ConfigGlobalOverrideSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/ConfigGlobalOverrideSubscriber.php
@@ -7,14 +7,12 @@
 
 namespace Drupal\Core\EventSubscriber;
 
-use Drupal\Core\Config\Config;
 use Drupal\Core\Config\ConfigEvent;
-use Symfony\Component\EventDispatcher\EventSubscriberInterface;
 
 /**
  * Defines a configuration global override for contexts.
  */
-class ConfigGlobalOverrideSubscriber implements EventSubscriberInterface {
+class ConfigGlobalOverrideSubscriber {
 
   /**
    * Overrides configuration values with values in global $conf variable.
@@ -31,12 +29,4 @@ public function configInit(ConfigEvent $event) {
     }
   }
 
-  /**
-   * Implements EventSubscriberInterface::getSubscribedEvents().
-   */
-  static function getSubscribedEvents() {
-    $events['config.init'][] = array('configInit', 30);
-    return $events;
-  }
-
 }
diff --git a/core/lib/Drupal/Core/EventSubscriber/EntityRouteAlterSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/EntityRouteAlterSubscriber.php
index 6283dae..dcefa99 100644
--- a/core/lib/Drupal/Core/EventSubscriber/EntityRouteAlterSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/EntityRouteAlterSubscriber.php
@@ -8,7 +8,6 @@
 namespace Drupal\Core\EventSubscriber;
 
 use Drupal\Core\Entity\EntityManagerInterface;
-use Symfony\Component\EventDispatcher\EventSubscriberInterface;
 use Drupal\Core\Routing\RoutingEvents;
 use Drupal\Core\Routing\RouteBuildEvent;
 
@@ -23,7 +22,7 @@
  *   kind of PHP variable (e.g., a type hinted interface) the controller
  *   requires: https://drupal.org/node/2041907.
  */
-class EntityRouteAlterSubscriber implements EventSubscriberInterface {
+class EntityRouteAlterSubscriber {
 
   /**
    * Entity manager.
@@ -68,11 +67,4 @@ public function onRoutingRouteAlterSetType(RouteBuildEvent $event) {
     }
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  static function getSubscribedEvents() {
-    $events[RoutingEvents::ALTER][] = array('onRoutingRouteAlterSetType', -150);
-    return $events;
-  }
 }
diff --git a/core/lib/Drupal/Core/EventSubscriber/FinishResponseSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/FinishResponseSubscriber.php
index 112644f..61d2b76 100644
--- a/core/lib/Drupal/Core/EventSubscriber/FinishResponseSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/FinishResponseSubscriber.php
@@ -10,14 +10,12 @@
 use Drupal\Core\Language\Language;
 use Drupal\Core\Language\LanguageManager;
 use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
-use Symfony\Component\HttpKernel\KernelEvents;
 use Symfony\Component\HttpKernel\HttpKernelInterface;
-use Symfony\Component\EventDispatcher\EventSubscriberInterface;
 
 /**
  * Response subscriber to handle finished responses.
  */
-class FinishResponseSubscriber implements EventSubscriberInterface {
+class FinishResponseSubscriber {
 
   /**
    * The LanguageManager object for retrieving the correct language code.
@@ -110,14 +108,4 @@ public function onRespond(FilterResponseEvent $event) {
     }
   }
 
-  /**
-   * Registers the methods in this class that should be listeners.
-   *
-   * @return array
-   *   An array of event listener definitions.
-   */
-  static function getSubscribedEvents() {
-    $events[KernelEvents::RESPONSE][] = array('onRespond');
-    return $events;
-  }
 }
diff --git a/core/lib/Drupal/Core/EventSubscriber/MaintenanceModeSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/MaintenanceModeSubscriber.php
index 39aad11..2117c78 100644
--- a/core/lib/Drupal/Core/EventSubscriber/MaintenanceModeSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/MaintenanceModeSubscriber.php
@@ -9,14 +9,12 @@
 
 use Symfony\Component\HttpFoundation\RedirectResponse;
 use Symfony\Component\HttpFoundation\Response;
-use Symfony\Component\HttpKernel\KernelEvents;
 use Symfony\Component\HttpKernel\Event\GetResponseEvent;
-use Symfony\Component\EventDispatcher\EventSubscriberInterface;
 
 /**
  * Maintenance mode subscriber for controller requests.
  */
-class MaintenanceModeSubscriber implements EventSubscriberInterface {
+class MaintenanceModeSubscriber {
 
   /**
    * Determine whether the page is configured to be offline.
@@ -58,14 +56,4 @@ public function onKernelRequestMaintenance(GetResponseEvent $event) {
     }
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  static function getSubscribedEvents() {
-    // In order to change the maintenance status an event subscriber with a
-    // priority between 30 and 40 should be added.
-    $events[KernelEvents::REQUEST][] = array('onKernelRequestDetermineSiteStatus', 40);
-    $events[KernelEvents::REQUEST][] = array('onKernelRequestMaintenance', 30);
-    return $events;
-  }
 }
diff --git a/core/lib/Drupal/Core/EventSubscriber/ParamConverterSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/ParamConverterSubscriber.php
index 7d385f5..4637dfb 100644
--- a/core/lib/Drupal/Core/EventSubscriber/ParamConverterSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/ParamConverterSubscriber.php
@@ -8,14 +8,13 @@
 namespace Drupal\Core\EventSubscriber;
 
 use Drupal\Core\ParamConverter\ParamConverterManager;
-use Symfony\Component\EventDispatcher\EventSubscriberInterface;
 use Drupal\Core\Routing\RoutingEvents;
 use Drupal\Core\Routing\RouteBuildEvent;
 
 /**
  * Event subscriber for registering parameter converters with routes.
  */
-class ParamConverterSubscriber implements EventSubscriberInterface {
+class ParamConverterSubscriber {
 
   /**
    * The parameter converter manager.
diff --git a/core/lib/Drupal/Core/EventSubscriber/RedirectResponseSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/RedirectResponseSubscriber.php
index 6cc7916..bfc20c0 100644
--- a/core/lib/Drupal/Core/EventSubscriber/RedirectResponseSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/RedirectResponseSubscriber.php
@@ -8,16 +8,13 @@
 namespace Drupal\Core\EventSubscriber;
 
 use Drupal\Core\Routing\UrlGeneratorInterface;
-use Symfony\Component\HttpKernel\KernelEvents;
 use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
-use Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent;
 use Symfony\Component\HttpFoundation\RedirectResponse;
-use Symfony\Component\EventDispatcher\EventSubscriberInterface;
 
 /**
  * Allows manipulation of the response object when performing a redirect.
  */
-class RedirectResponseSubscriber implements EventSubscriberInterface {
+class RedirectResponseSubscriber {
 
   /**
    * The url generator service.
@@ -39,7 +36,7 @@ public function __construct(UrlGeneratorInterface $url_generator) {
   /**
    * Allows manipulation of the response object when performing a redirect.
    *
-   * @param Symfony\Component\HttpKernel\Event\FilterResponseEvent $event
+   * @param \Symfony\Component\HttpKernel\Event\FilterResponseEvent $event
    *   The Event to process.
    */
   public function checkRedirectUrl(FilterResponseEvent $event) {
@@ -68,14 +65,4 @@ public function checkRedirectUrl(FilterResponseEvent $event) {
     }
   }
 
-  /**
-   * Registers the methods in this class that should be listeners.
-   *
-   * @return array
-   *   An array of event listener definitions.
-   */
-  static function getSubscribedEvents() {
-    $events[KernelEvents::RESPONSE][] = array('checkRedirectUrl');
-    return $events;
-  }
 }
diff --git a/core/lib/Drupal/Core/ParamConverter/ParamConverterManager.php b/core/lib/Drupal/Core/ParamConverter/ParamConverterManager.php
index cad587b..0ed656e 100644
--- a/core/lib/Drupal/Core/ParamConverter/ParamConverterManager.php
+++ b/core/lib/Drupal/Core/ParamConverter/ParamConverterManager.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\Core\ParamConverter;
 
+use Drupal\Core\Routing\RouteBuildEvent;
 use Symfony\Component\DependencyInjection\ContainerAware;
 use Symfony\Cmf\Component\Routing\Enhancer\RouteEnhancerInterface;
 use Symfony\Cmf\Component\Routing\RouteObjectInterface;
@@ -193,5 +194,15 @@ public function enhance(array $defaults, Request $request) {
     return $defaults;
   }
 
+  /**
+   * Applies parameter converters to route parameters.
+   *
+   * @param \Drupal\Core\Routing\RouteBuildEvent $event
+   *   The event to process.
+   */
+  public function onRoutingRouteAlterSetParameterConverters(RouteBuildEvent $event) {
+    $this->setRouteParameterConverters($event->getRouteCollection());
+  }
+
 }
 
diff --git a/core/modules/user/lib/Drupal/user/EventSubscriber/MaintenanceModeSubscriber.php b/core/modules/user/lib/Drupal/user/EventSubscriber/MaintenanceModeSubscriber.php
index 3c23086..1ec4c64 100644
--- a/core/modules/user/lib/Drupal/user/EventSubscriber/MaintenanceModeSubscriber.php
+++ b/core/modules/user/lib/Drupal/user/EventSubscriber/MaintenanceModeSubscriber.php
@@ -7,15 +7,13 @@
 
 namespace Drupal\user\EventSubscriber;
 
-use Symfony\Component\EventDispatcher\EventSubscriberInterface;
 use Symfony\Component\HttpFoundation\RedirectResponse;
 use Symfony\Component\HttpKernel\Event\GetResponseEvent;
-use Symfony\Component\HttpKernel\KernelEvents;
 
 /**
  * Maintenance mode subscriber to logout users.
  */
-class MaintenanceModeSubscriber implements EventSubscriberInterface {
+class MaintenanceModeSubscriber {
 
   /**
    * Determine whether the page is configured to be offline.
@@ -70,12 +68,4 @@ public function onKernelRequestMaintenance(GetResponseEvent $event) {
     }
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public static function getSubscribedEvents() {
-    $events[KernelEvents::REQUEST][] = array('onKernelRequestMaintenance', 35);
-    return $events;
-  }
-
 }
diff --git a/core/modules/user/user.events.yml b/core/modules/user/user.events.yml
new file mode 100644
index 0000000..4862e71
--- /dev/null
+++ b/core/modules/user/user.events.yml
@@ -0,0 +1,4 @@
+subscribers:
+  kernel.request:
+    - callback: Drupal\user\EventSubscriber\MaintenanceModeSubscriber::onKernelRequestMaintenance
+      priority: 35
diff --git a/core/modules/user/user.services.yml b/core/modules/user/user.services.yml
index f35e710..4f6fa09 100644
--- a/core/modules/user/user.services.yml
+++ b/core/modules/user/user.services.yml
@@ -21,10 +21,6 @@ services:
   user.autocomplete:
     class: Drupal\user\UserAutocomplete
     arguments: ['@database', '@config.factory']
-  user_maintenance_mode_subscriber:
-    class: Drupal\user\EventSubscriber\MaintenanceModeSubscriber
-    tags:
-      - { name: event_subscriber }
   theme.negotiator.user:
     class: Drupal\user\Theme\UserNegotiator
     arguments: ['@entity.manager', '@current_user']
diff --git a/core/modules/views/views.events.yml b/core/modules/views/views.events.yml
new file mode 100644
index 0000000..c68c984
--- /dev/null
+++ b/core/modules/views/views.events.yml
@@ -0,0 +1,3 @@
+subscribers:
+  routing.route_dynamic:
+    - Drupal\views\EventSubscriber\RouteSubscriber::dynamicRoutes
diff --git a/core/tests/Drupal/Tests/Core/EventListenerPassTest.php b/core/tests/Drupal/Tests/Core/EventListenerPassTest.php
new file mode 100644
index 0000000..28e9adb
--- /dev/null
+++ b/core/tests/Drupal/Tests/Core/EventListenerPassTest.php
@@ -0,0 +1,81 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Tests\Core\EventListenerPassTest.
+ */
+
+namespace Drupal\Tests\Core;
+
+use Drupal\Core\EventListenerPass;
+use Drupal\Tests\UnitTestCase;
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+
+/**
+ * Tests the event listener pass.
+ *
+ * @group Drupal
+ *
+ * @see \Drupal\EventListenerPassTest
+ */
+class EventListenerPassTest extends UnitTestCase {
+
+  /**
+   * The tested event listener pass.
+   *
+   * @var \Drupal\Core\EventListenerPass
+   */
+  protected $eventListenerPass;
+
+  /**
+   * The mocked event dispatcher.
+   *
+   * @var \Symfony\Component\EventDispatcher\EventDispatcherInterface|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected $eventDispatcher;
+
+  /**
+   * The mocked module handler.
+   *
+   * @var \Drupal\Core\Extension\ModuleHandlerInterface|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected $moduleHandler;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'Event listener pass',
+      'description' => 'Tests the event listener pass',
+      'group' => 'Bootstrap',
+    );
+  }
+
+  protected function setUp() {
+    $this->eventListenerPass = new EventListenerPass();
+  }
+
+  protected function setUpContainer() {
+    $container = new ContainerBuilder();
+    $this->eventDispatcher = $this->getMock('Symfony\Component\EventDispatcher\EventDispatcherInterface');
+    $this->moduleHandler = $this->getMock('Drupal\Core\Extension\ModuleHandlerInterface');
+    $container->set('event_dispatcher', $this->eventDispatcher);
+    $container->set('module_handler', $this->moduleHandler);
+    return $container;
+  }
+
+  /**
+   */
+  public function testNoEvent() {
+    $container = $this->setUpContainer();
+
+    $this->eventListenerPass->process($container);
+    $this->assertEquals(2, $container->getDefinitions());
+  }
+
+  public function testSingleEvent() {
+    $container = $this->setUpContainer();
+  }
+
+}
