diff --git a/core/lib/Drupal/Core/CoreBundle.php b/core/lib/Drupal/Core/CoreBundle.php
index ed15dd5..f1e43d6 100644
--- a/core/lib/Drupal/Core/CoreBundle.php
+++ b/core/lib/Drupal/Core/CoreBundle.php
@@ -119,7 +119,7 @@ public function build(ContainerBuilder $container) {
     $container->register('request_close_subscriber', 'Drupal\Core\EventSubscriber\RequestCloseSubscriber')
       ->addTag('kernel.event_subscriber');
     $container->register('config_global_override_subscriber', '\Drupal\Core\EventSubscriber\ConfigGlobalOverrideSubscriber');
-    $container->register('exception_listener', 'Symfony\Component\HttpKernel\EventListener\ExceptionListener')
+    $container->register('exception_listener', 'Drupal\Core\EventSubscriber\ExceptionListener')
       ->addTag('kernel.event_subscriber')
       ->addArgument(new Reference('service_container'))
       ->setFactoryClass('Drupal\Core\ExceptionController')
diff --git a/core/lib/Drupal/Core/EventSubscriber/ExceptionListener.php b/core/lib/Drupal/Core/EventSubscriber/ExceptionListener.php
new file mode 100644
index 0000000..8af3f20
--- /dev/null
+++ b/core/lib/Drupal/Core/EventSubscriber/ExceptionListener.php
@@ -0,0 +1,110 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Drupal\Core\EventSubscriber;
+
+use Symfony\Component\HttpKernel\Log\LoggerInterface;
+use Symfony\Component\HttpKernel\Log\DebugLoggerInterface;
+use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
+use Symfony\Component\HttpKernel\KernelEvents;
+use Symfony\Component\HttpKernel\HttpKernelInterface;
+use Symfony\Component\HttpKernel\Exception\FlattenException;
+use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+/**
+ * ExceptionListener.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class ExceptionListener implements EventSubscriberInterface
+{
+    private $controller;
+    private $logger;
+
+    public function __construct($controller, LoggerInterface $logger = null)
+    {
+        $this->controller = $controller;
+        $this->logger = $logger;
+    }
+
+    public function onKernelException(GetResponseForExceptionEvent $event)
+    {
+        static $handling;
+
+        if (true === $handling) {
+            return false;
+        }
+
+        $handling = true;
+
+        $exception = $event->getException();
+        $request = $event->getRequest();
+
+        if (null !== $this->logger) {
+            $message = sprintf('%s: %s (uncaught exception) at %s line %s', get_class($exception), $exception->getMessage(), $exception->getFile(), $exception->getLine());
+            if (!$exception instanceof HttpExceptionInterface || $exception->getStatusCode() >= 500) {
+                $this->logger->crit($message);
+            } else {
+                $this->logger->err($message);
+            }
+        } else {
+            // Do not put a line in the server logs for every HTTP error.
+            if !$exception instanceof HttpExceptionInterface) {
+                error_log(sprintf('Uncaught PHP Exception %s: "%s" at %s line %s', get_class($exception), $exception->getMessage(), $exception->getFile(), $exception->getLine()));
+            }
+        }
+
+        $logger = $this->logger instanceof DebugLoggerInterface ? $this->logger : null;
+
+        $attributes = array(
+            '_controller' => $this->controller,
+            'exception'   => FlattenException::create($exception),
+            'logger'      => $logger,
+            'format'      => $request->getRequestFormat(),
+        );
+
+        $request = $request->duplicate(null, null, $attributes);
+        $request->setMethod('GET');
+
+        try {
+            $response = $event->getKernel()->handle($request, HttpKernelInterface::SUB_REQUEST, true);
+        } catch (\Exception $e) {
+            $message = sprintf('Exception thrown when handling an exception (%s: %s)', get_class($e), $e->getMessage());
+            if (null !== $this->logger) {
+                if (!$exception instanceof HttpExceptionInterface || $exception->getStatusCode() >= 500) {
+                    $this->logger->crit($message);
+                } else {
+                    $this->logger->err($message);
+                }
+            } else {
+                error_log($message);
+            }
+
+            // set handling to false otherwise it wont be able to handle further more
+            $handling = false;
+
+            // re-throw the exception as this is a catch-all
+            return;
+        }
+
+        $event->setResponse($response);
+
+        $handling = false;
+    }
+
+    public static function getSubscribedEvents()
+    {
+        return array(
+            KernelEvents::EXCEPTION => array('onKernelException', -128),
+        );
+    }
+}
diff --git a/core/lib/Drupal/Core/ExceptionController.php b/core/lib/Drupal/Core/ExceptionController.php
index 20c9ec2..0e620ec 100644
--- a/core/lib/Drupal/Core/ExceptionController.php
+++ b/core/lib/Drupal/Core/ExceptionController.php
@@ -12,9 +12,8 @@
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\Response;
 use Symfony\Component\HttpFoundation\JsonResponse;
-use Drupal\Core\HttpKernel;
 use Symfony\Component\HttpKernel\Exception\FlattenException;
-use Symfony\Component\HttpKernel\EventListener\ExceptionListener;
+use Drupal\Core\EventSubscriber\ExceptionListener
 
 /**
  * This controller handles HTTP errors generated by the routing system.
