diff --git a/core/core.services.yml b/core/core.services.yml
index 6f8cce6..b1a6d4f 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -445,7 +445,7 @@ services:
     calls:
       - [setContainer, ['@service_container']]
   exception_listener:
-    class: Symfony\Component\HttpKernel\EventListener\ExceptionListener
+    class: Drupal\Core\EventSubscriber\ExceptionListener
     tags:
       - { name: event_subscriber }
     arguments: [['@exception_controller', execute]]
diff --git a/core/lib/Drupal/Core/EventSubscriber/ExceptionListener.php b/core/lib/Drupal/Core/EventSubscriber/ExceptionListener.php
new file mode 100644
index 0000000..4122597
--- /dev/null
+++ b/core/lib/Drupal/Core/EventSubscriber/ExceptionListener.php
@@ -0,0 +1,76 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\EventSubscriber\ExceptionListener.
+ */
+
+namespace Drupal\Core\EventSubscriber;
+
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
+use Symfony\Component\HttpKernel\EventListener\ExceptionListener as BaseExceptionListener;
+use Symfony\Component\HttpKernel\Exception\FlattenException;
+use Symfony\Component\HttpKernel\HttpKernelInterface;
+use Symfony\Component\HttpKernel\Log\DebugLoggerInterface;
+
+class ExceptionListener extends BaseExceptionListener {
+
+  /**
+   * {@inheritdoc}
+   *
+   * Overrides the parent method to be able to clone the _account object.
+   */
+  public function onKernelException(GetResponseForExceptionEvent $event) {
+    static $handling;
+
+    if (true === $handling) {
+      return false;
+    }
+
+    $handling = true;
+
+    $exception = $event->getException();
+    $request = $event->getRequest();
+
+    $this->logException($exception, sprintf('Uncaught PHP Exception %s: "%s" at %s line %s', get_class($exception), $exception->getMessage(), $exception->getFile(), $exception->getLine()));
+
+    $request = $this->getRequestClone($exception, $request);
+
+    try {
+      $response = $event->getKernel()->handle($request, HttpKernelInterface::SUB_REQUEST, true);
+    } catch (\Exception $e) {
+      $this->logException($exception, sprintf('Exception thrown when handling an exception (%s: %s)', get_class($e), $e->getMessage()), false);
+
+      // set handling to false otherwise it wont be able to handle further more
+      $handling = false;
+
+      // re-throw the exception from within HttpKernel as this is a catch-all
+      return;
+    }
+
+    $event->setResponse($response);
+
+    $handling = false;
+  }
+
+  /**
+   * @todo
+   */
+  protected function getRequestClone($exception, Request $request) {
+    $attributes = array(
+      '_controller' => $this->controller,
+      'exception' => FlattenException::create($exception),
+      'logger' => $this->logger instanceof DebugLoggerInterface ? $this->logger : NULL,
+      'format' => $request->getRequestFormat(),
+      // Include the current account.
+      '_account' => $request->attributes->get('_account')
+    );
+
+    $request = $request->duplicate(NULL, NULL, $attributes);
+    $request->setMethod('GET');
+    return $request;
+  }
+
+
+}
