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/Controller/ExceptionController.php b/core/lib/Drupal/Core/Controller/ExceptionController.php
index fee1294..f72686e 100644
--- a/core/lib/Drupal/Core/Controller/ExceptionController.php
+++ b/core/lib/Drupal/Core/Controller/ExceptionController.php
@@ -92,6 +92,7 @@ public function on403Html(FlattenException $exception, Request $request) {
       }
 
       $subrequest = Request::create('/' . $path, 'get', array('destination' => $system_path), $request->cookies->all(), array(), $request->server->all());
+      $subrequest->attributes->set('_account', $request->attributes->get('_account'));
 
       // The active trail is being statically cached from the parent request to
       // the subrequest, like any other static.  Unfortunately that means the
@@ -165,6 +166,7 @@ public function on404Html(FlattenException $exception, Request $request) {
       // @todo The create() method expects a slash-prefixed path, but we store a
       //   normal system path in the site_404 variable.
       $subrequest = Request::create('/' . $path, 'get', array(), $request->cookies->all(), array(), $request->server->all());
+      $subrequest->attributes->set('_account', $request->attributes->get('_account'));
 
       // The active trail is being statically cached from the parent request to
       // the subrequest, like any other static.  Unfortunately that means the
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;
+  }
+
+
+}
