diff --git a/core/lib/Drupal/Core/CoreBundle.php b/core/lib/Drupal/Core/CoreBundle.php
index 8734772..e6345e7 100644
--- a/core/lib/Drupal/Core/CoreBundle.php
+++ b/core/lib/Drupal/Core/CoreBundle.php
@@ -8,6 +8,7 @@
 namespace Drupal\Core;
 
 use Drupal\Core\Cache\ListCacheBinsPass;
+use Drupal\Core\DependencyInjection\Compiler\OptionalDependencyPass;
 use Drupal\Core\DependencyInjection\Compiler\RegisterKernelListenersPass;
 use Drupal\Core\DependencyInjection\Compiler\RegisterAccessChecksPass;
 use Drupal\Core\DependencyInjection\Compiler\RegisterMatchersPass;
@@ -51,8 +52,7 @@ public function build(ContainerBuilder $container) {
     $container->addCompilerPass(new RegisterRouteFiltersPass());
     // Add a compiler pass for registering event subscribers.
     $container->addCompilerPass(new RegisterKernelListenersPass(), PassConfig::TYPE_AFTER_REMOVING);
-    // Add a compiler pass for registering event subscribers.
-    $container->addCompilerPass(new RegisterKernelListenersPass(), PassConfig::TYPE_AFTER_REMOVING);
+    $container->addCompilerPass(new OptionalDependencyPass());
     $container->addCompilerPass(new RegisterAccessChecksPass());
     // Add a compiler pass for upcasting of entity route parameters.
     $container->addCompilerPass(new RegisterParamConvertersPass());
diff --git a/core/lib/Drupal/Core/DependencyInjection/Compiler/OptionalDependencyPass.php b/core/lib/Drupal/Core/DependencyInjection/Compiler/OptionalDependencyPass.php
index f5a5430..92b3bba 100644
--- a/core/lib/Drupal/Core/DependencyInjection/Compiler/OptionalDependencyPass.php
+++ b/core/lib/Drupal/Core/DependencyInjection/Compiler/OptionalDependencyPass.php
@@ -1,15 +1,33 @@
 <?php
+
 /**
- * Created by JetBrains PhpStorm.
- * User: chx
- * Date: 4/23/13
- * Time: 7:00 PM
- * To change this template use File | Settings | File Templates.
+ * @file
+ * Contains \Drupal\Core\DependencyInjection\Compiler\OptionalDependencyPass
  */
 
 namespace Drupal\Core\DependencyInjection\Compiler;
 
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
+use Symfony\Component\DependencyInjection\Reference;
 
-class OptionalDependencyPass {
+/**
+ * Adds optional dependencies.
+ */
+class OptionalDependencyPass implements CompilerPassInterface {
 
+  public function process(ContainerBuilder $container) {
+    foreach ($container->findTaggedServiceIds('optional_dependency') as $id => $attributes) {
+      $optional_services = array();
+      // We must assume that the class value has been correcly filled, even if the service is created by a factory
+      foreach ($attributes as $key => $reference_id) {
+        if ($container->has($reference_id)) {
+          $optional_services[$key] = new Reference($reference_id);
+        }
+      }
+      if ($optional_services) {
+        $container->getDefinition($id)->addArgument($optional_services);
+      }
+    }
+  }
 }
