diff --git a/.htaccess b/.htaccess
index fd7bd29..856fd32 100644
--- a/.htaccess
+++ b/.htaccess
@@ -39,6 +39,14 @@ AddEncoding gzip svgz
   php_value mbstring.http_input             pass
   php_value mbstring.http_output            pass
   php_flag mbstring.encoding_translation    off
+
+  # Assertions.
+  # By default PHP has these turned on. Production sites should turn these off.
+  # While assertions can be turned off at run time, we need to have this setting
+  # in place immediately to catch an assertions thrown before the settings file
+  # can be loaded.
+  php_value assert.active                   1
+  # To enable them, change 0 to 1. Recommended for dev sites.
 </IfModule>
 
 # Requires mod_expires to be enabled.
diff --git a/core/lib/Drupal/Component/Fault/Assertion.php b/core/lib/Drupal/Component/Fault/Assertion.php
new file mode 100644
index 0000000..743fbd3
--- /dev/null
+++ b/core/lib/Drupal/Component/Fault/Assertion.php
@@ -0,0 +1,109 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\Component\Fault\Assertion.
+ *
+ * A collection of methods to assist the assert statement.
+ */
+
+namespace Drupal\Component\Fault;
+
+use Traversable;
+
+/**
+ * Assertion.
+ *
+ * This is a static function hive for use by the assert statement on the more
+ * complicated assertions we which to make.
+ */
+class Assertion {
+  /**
+   * Test to see if a class is being constructed from the allowed scope.
+   *
+   * In Java a protected method is callable by other classes in the same
+   * package, or namespace. This assertion is meant to create the same
+   * restriction, or an even tighter one if desired.
+   *
+   * This is done for the same reason the protected keyword is used. Protected
+   * methods can be changed without fear of creating backwards compatibility
+   * headaches. This further separates the internal API from the external one.
+   *
+   * @param string $scope
+   *   The allowed scope to call the class from. If left null it is assumed
+   *   the class can only be called from the same namespace or a child.
+   * @param array $trace
+   *   Only the unit tests need to provide their own trace for testing.
+   *
+   * @return bool
+   *   Validity of the caller.
+   */
+  public static function validCaller($scope = NULL, $trace = []) {
+    if (count($trace) === 0) {
+      $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
+    }
+
+    // First level is the function debug_backtrace was called from. Drop.
+    array_shift($trace);
+
+    // The second should be assert. If it isn't pitch an error.
+    if ($trace[0]['function'] !== 'assert') {
+      throw new FaultException('You must call this function from assert()');
+    }
+
+    // Now pitch it out.
+    array_shift($trace);
+
+    // Idiot Proof.
+    if (count($trace) === 0) {
+      throw new FaultException('Why are you asserting this in the global namespace???');
+    }
+
+    // Get this level.
+    $origin = array_shift($trace);
+
+    // Now to find the true origin of the call we have to traverse any
+    // override functions by the children. We'll know when we've hit the caller
+    // because the function name will change.
+    do {
+      $frame = array_shift($trace);
+    } while ($frame['function'] === $origin['function']);
+
+    // Resolve the namespace of the callee's frame.
+    $namespace = substr($origin['class'], 0, strrpos($origin['class'], '\\'));
+
+    // Be a little forgiving of devs who start the scope with a \
+    if ($scope && strpos($scope, '\\') === 0) {
+      $scope = substr($scope, 1);
+    }
+
+    // Now do the check.
+    return strpos($frame['class'], empty($scope) ? $namespace : $scope) === 0 ||
+        strpos($frame['class'] . '\\' . $frame['function'], empty($scope) ? $namespace : $scope) === 0;
+  }
+
+  /**
+   * Test a collection to insure all members belong to a class or interface.
+   *
+   * @param array|Traversable $traversable
+   *   An array or traversable object.
+   * @param string $class_name
+   *   Class or interface to check for a match - including the namespace.
+   */
+  public static function collectionOf($traversable, $class_name) {
+    if (!(is_array($traversable) || (is_object($traversable) && $traversable instanceof Traversable))) {
+      return FALSE;
+    }
+    elseif (count($traversable) === 0) {
+      return FALSE;
+    }
+
+    foreach ($traversable as $obj) {
+      if (!$obj instanceof $class_name) {
+        return FALSE;
+      }
+    }
+
+    return TRUE;
+  }
+
+}
diff --git a/core/lib/Drupal/Component/Fault/AssertionHandler.php b/core/lib/Drupal/Component/Fault/AssertionHandler.php
new file mode 100644
index 0000000..a9021d8
--- /dev/null
+++ b/core/lib/Drupal/Component/Fault/AssertionHandler.php
@@ -0,0 +1,107 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\Component\Fault\AssertionHandler.
+ */
+
+namespace Drupal\Component\Fault;
+
+/**
+ * Handler for Assert Failures.
+ */
+class AssertionHandler extends BaseFaultHandler {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct($file, $line, $code, $message, $trace, $option = NULL) {
+    if (!$message && version_compare(PHP_VERSION, '5.4.8') === -1) {
+      $message = 'Assertion description messages unavailable in PHP versions prior to 5.4.8';
+    }
+    parent::__construct($file, $line, $code, $message, $trace, $option);
+  }
+
+  /**
+   * Implements BaseFaultHandler::composeLogEntry.
+   */
+  protected function composeLogEntry() {
+    return 'Assert Failure line '
+      . $this->errorLocation['line']
+      . ' in file '
+      . $this->errorLocation['file']
+      . ' -- asserted: '
+      . $this->code
+      . ' -- comment: ' . $this->message;
+  }
+
+  /**
+   * Implements BaseFaultHandler::verboseResponse.
+   */
+  protected function verboseResponse() {
+    $this->printHtmlStart(); ?>
+
+<body>
+  <h1>Assertion Failure</h1>
+  <hr>
+  <?php if ($this->code) :
+?>
+    <p><strong>Assertion:</strong> <?php echo $this->code; ?></p>
+  <?php else :
+?>
+    <strong>WARNING:</strong> The Assert statement was passed a non-string
+    value. Whatever expression was sent to it will be evaluated regardless of
+    whether assert functions are turned on or off. In order to preserve system
+    efficiency it is imperative that you encapsulate the expression in a string
+    to be evaluated by assert rather than passing an expression to it.
+  <?php
+endif ?>
+  <p><strong>Comment: </strong><?php echo $this->message; ?></p>
+  <?php if ($this->reference['error']) :
+?>
+  <p><strong>Reference: </strong><?php echo $this->reference['error'] ?></p>
+  <?php
+endif; ?>
+  <hr>
+  <h2>Failure Location</h2>
+  <p><strong>File: </strong> <?php echo $this->errorLocation['file']; ?></p>
+  <p><strong>Line: </strong> <?php echo $this->errorLocation['line']; ?></p>
+  <?php if ($this->errorLocation['class']) :
+?>
+  <p><strong>Class: </strong>
+    <a href="<?php echo $this->reference['class']; ?>">
+      <?php echo $this->errorLocation['class']; ?>
+    </a>
+  </p>
+  <p><strong>Method: </strong>
+    <a href="<?php echo $this->reference['method']; ?>">
+      <?php echo $this->errorLocation['method']; ?>
+    </a>
+  </p>
+  <?php elseif ($this->errorLocation['method']) :
+?>
+  <p><strong>Function: </strong>
+    <a href="<?php echo $this->reference['function'] ?>">
+      <?php echo $this->errorLocation['method'] ?>
+    </a>
+  </p>
+  <?php else :
+?>
+  <p><strong>Global Scope</strong></p>
+  <?php
+endif; ?>
+  <hr>
+  <h2>Stack Trace</h2>
+  <?php if (function_exists('dump') && !isset($_SERVER['DRUPAL_FAULT_COMPONENT_IN_TEST_MODE'])) :
+?>
+  <?php dump($this->trace); ?>
+  <?php else :
+    foreach ($this->trace as &$level) {
+    unset($level['args']);
+    }
+    var_dump($this->trace);
+endif; ?>
+</body>
+</html><?php
+  }
+
+}
diff --git a/core/lib/Drupal/Component/Fault/BaseFaultHandler.php b/core/lib/Drupal/Component/Fault/BaseFaultHandler.php
new file mode 100644
index 0000000..082e72a
--- /dev/null
+++ b/core/lib/Drupal/Component/Fault/BaseFaultHandler.php
@@ -0,0 +1,373 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\Component\Fault\BaseFaultHandler.
+ */
+
+namespace Drupal\Component\Fault;
+
+/**
+ * Drupal Base Fault Handler.
+ *
+ * The term "fault" refers to any form of runtime problem, be it an error from
+ * the system or trigger_error(), an uncaught exception, or an assert failure.
+ * At present this system only deals with assert failures - it will be expanded
+ * in 8.1 to deal with errors and exceptions and replace the existing code
+ * managing those areas.
+ */
+abstract class BaseFaultHandler {
+
+  /**
+   * URI of the Drupal API.
+   */
+  const API = 'https://api.drupal.org/api/drupal/';
+
+  /**
+   * Location in the Drupal API the fault codes for this type are located.
+   */
+  const CODE_DIR = '';
+
+  /**
+   * Filesystem root for Drupal.
+   */
+  protected $root;
+
+  /**
+   * Location of the fault.
+   */
+  protected $errorLocation = [
+    'file' => '',
+    'line' => '',
+    'class' => '',
+    'method' => ''
+  ];
+
+  /**
+   * Reference information for the fault.
+   */
+  protected $reference = [
+    'error' => '',
+    'class' => '',
+    'method' => ''
+  ];
+
+  /**
+   * Fault code.
+   */
+  protected $code;
+
+  /**
+   * Fault message.
+   */
+  protected $message;
+
+  /**
+   * Fault backtrace.
+   */
+  protected $trace;
+
+  /**
+   * The verbose HTML response method.
+   */
+  abstract protected function verboseResponse();
+
+  /**
+   * The log message string for the Fault.
+   */
+  abstract protected function composeLogEntry();
+
+  /**
+   * Return a Fault Response object.
+   *
+   * The FaultSetup class does the favor of normalizing the argument order from
+   * the three possible.
+   */
+  public function __construct($file, $line, $code, $message, $trace, $option = NULL) {
+    // Remember that raising an assertion while evaluating an assertion will
+    // cause a segmentation fault in the PHP engine.  This assertion however
+    // cannot be fulfilled by a call under that circumstance UNLESS invoked
+    // by a handle function other than the one in FaultSetup.
+    assert('\\Drupal\\Component\\Fault\\Assertion::validCaller()', 'This class can only be used by other classes in the Fault Component');
+
+    // Find Drupal root from here - we don't know if DRUPAL_ROOT is defined.
+    $this->root = dirname(dirname(dirname(dirname(dirname(__DIR__)))));
+
+    // Remove the root from the error file string to reduce verbosity. There is
+    // no security advantage in doing this.
+    $this->errorLocation['file'] = substr($file, strlen($this->root));
+
+    // This maps straightforwardly.
+    $this->errorLocation['line'] = $line;
+
+    // For assertions 'code' means the PHP string of code that evaluated to
+    // 'false' and triggered the assert failure. For errors and exceptions this
+    // is an error code with an associated PHP constant such as E_ERROR.
+    $this->code = $code;
+
+    // Parse out the trace to find the class and method location of the
+    // fault and remove the section of the trace from this namespace.
+    $this->parseTrace($trace, $file, $line);
+
+    // Now break down the error message string, extracting any reference link
+    // that it might contain at its start.
+    $this->parseMessage($message);
+
+  }
+
+  /**
+   * Parse out any link at the start of the message.
+   */
+  protected function parseMessage($message) {
+
+    // First look for http which indicates the author of the fault throw has
+    // a page in mind to show explaining what's going on - this will occur for
+    // third party modules.
+    if (strpos($message, 'http') === 0) {
+      $this->reference['error'] = substr($message, 0, strpos($message, ' '));
+      $this->message = substr($message, strpos($message, ' ') + 1);
+    }
+    // API: which is shorthand for the online api reference.
+    elseif (strpos($message, 'api://') === 0) {
+      $this->reference['error'] = str_replace('api://', static::API, substr($message, 0, strpos($message, ' ')));
+      $this->message = substr($message, strpos($message, ' ') + 1);
+    }
+    // node: which is shorthand for a drupal issue node.
+    elseif (strpos($message, 'node://') === 0) {
+      $this->reference['error'] = str_replace('node://', 'http://www.drupal.org/node/', substr($message, 0, strpos($message, ' ')));
+      $this->message = substr($message, strpos($message, ' ') + 1);
+    }
+    // At this point we presume that there is no error link to present, so pass
+    // along whatever message we got.
+    else {
+      $this->message = $message;
+    }
+  }
+
+  /**
+   * Make sure the backtrace starts from the class and method of the fault.
+   */
+  protected function parseTrace(array $trace, $file, $line) {
+
+    // Traverse the stack until we find the error point.
+    // Works with assertion, need to test for exceptions and errors.
+    while ($frame = array_shift($trace)) {
+      if (isset($frame['file']) && isset($frame['line']) && $frame['file'] === $file && $frame['line'] === $line) {
+        break;
+      }
+    }
+
+    // Now set the pointers to the class and method of the fault.
+    if (count($trace) > 0) {
+      if (isset($trace[0]['class'])) {
+        $this->errorLocation['class'] = $trace[0]['class'];
+      }
+      $this->errorLocation['method'] = $trace[0]['function'];
+    }
+
+    // Assemble the path to the API page for the class and method of the fault.
+    if ($this->errorLocation['class']) {
+      $this->reference['class'] = $this->getApiPageForClass($this->errorLocation['file'], $this->errorLocation['class']);
+      $this->reference['method'] = $this->getApiPageForMethod($this->errorLocation['file'], $this->errorLocation['class'], $this->errorLocation['method']);
+    }
+    // Or just the method.
+    else {
+      $this->reference['method'] = $this->getApiPageForFunction($file, $function);
+    }
+
+    $this->trace = $trace;
+
+  }
+
+  /**
+   * Return the Drupal API path for a class.
+   */
+  protected function getApiPageForClass($file, $class) {
+    return static::API
+      . str_replace("/", '!', $file)
+      . '/class/' . $class . '/8';
+  }
+
+  /**
+   * Return the Drupal API path for a method.
+   */
+  protected function getApiPageForMethod($file, $class, $method) {
+    return static::API
+        . str_replace("/", '!', $file)
+        . '/function/' . $class
+        . '%3A%3A' . $method . '/8';
+  }
+
+  /**
+   * Return the Drupal API path for a function.
+   */
+  protected function getApiPageForFunction($file, $function) {
+    return static::API
+      . str_replace("/", '!', $file)
+      . '/function/' . $function . '/8';
+  }
+
+  /**
+   * Resolve the fault.
+   */
+  public function resolve() {
+    $this->clearBuffers();
+    $this->log();
+
+    if ($this->isXmlHttpRequest()) {
+      $this->jsonRespond();
+    }
+    elseif (PHP_SAPI === 'cli' && !isset($_SERVER['DRUPAL_FAULT_COMPONENT_IN_TEST_MODE'])) {
+      $this->terminalRespond();
+    }
+    else {
+      $this->htmlRespond();
+    }
+  }
+
+  /**
+   * Send Fault response to a Javascript.
+   */
+  protected function jsonRespond() {
+    $this->sendHeaders('application/json; charset=utf-8');
+    echo $this->composeLogEntry();
+  }
+
+  /**
+   * Send the terminal response directly to stdout.
+   */
+  protected function terminalRespond() {
+    $stdout = fopen('php://stdout', 'w');
+    fwrite($stdout, $this->composeLogEntry());
+    fclose($stout);
+  }
+
+  /**
+   * Log the error both to the PHP engine log and to the system log.
+   */
+  protected function log() {
+    if (!isset($_SERVER['DRUPAL_FAULT_COMPONENT_IN_TEST_MODE'])) {
+      $entry = addslashes($this->composeLogEntry());
+      openlog('Drupal 8', LOG_PERROR, LOG_USER);
+      syslog(LOG_ERR, $entry);
+      closelog();
+      error_log($entry);
+    }
+  }
+
+  /**
+   * Determine if this script was requested by Javascript.
+   */
+  protected function isXmlHttpRequest() {
+    return (isset($_SERVER) && isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest');
+  }
+
+  /**
+   * Clear and disable the output buffers if not testing.
+   */
+  protected function clearBuffers() {
+    if (!isset($_SERVER['DRUPAL_FAULT_COMPONENT_IN_TEST_MODE'])) {
+      while (@ob_get_level()) {
+        @ob_end_clean();
+      }
+    }
+  }
+
+  /**
+   * Respond to a fault encountered while processing an HTTP request for HTML.
+   */
+  protected function htmlRespond() {
+
+    $this->sendHeaders('text/html; charset=utf-8');
+
+    // PHP's error display level determines how much information we give.
+    if (ini_get('display_errors')) {
+      $this->verboseResponse();
+    }
+    else {
+      $this->quietResponse();
+    }
+  }
+
+  /**
+   * A quiet response.
+   *
+   * Since, in theory, faults can happen in production, the developer can
+   * provide an html file to be displayed in place of the system default. It
+   * must be an HTML file - in order to prevent further errors we load the file
+   * with file_get_contents and echo out whatever is in it.
+   */
+  protected function quietResponse() {
+
+    $template = FaultSetup::getQuietResponseHtml();
+
+    if ($template) {
+      print (file_get_contents($template));
+    }
+    else {
+      $this->printHtmlStart();
+      print <<<HTML
+<body>
+  <h1>System Error</h1>
+  <p>The system has encountered an error and the administrator has configured
+    the server not to publicly report the nature of the error, though it has
+    been logged.</p>
+</body>
+</html>
+HTML;
+    }
+  }
+
+  /**
+   * The start of an HTML response.
+   */
+  protected function printHtmlStart() {
+    echo <<<HTML
+<!DOCTYPE html>
+<html>
+<head>
+  <title>System Error</title>
+  <style>
+    body {
+      background: #046BC4 url('/core/lib/Drupal/Component/Fault/sad-droop.svg') 1em 1em no-repeat;
+      background-size: 6em auto;
+      padding: 2em 2em 2em 120px;
+      font: sans-serif;
+      color: #FFF;
+    }
+    a { color: #FF0; }
+    a:visited { color: #FFF; }
+    strong {
+      display: inline-block;
+      width: 6em;
+      text-align: right;
+      padding-right: 1em;
+    }
+    pre {
+      background: #000;
+    }
+  </style>
+</head>
+HTML;
+
+  }
+
+  /**
+   * Send the correct response headers for a fault response.
+   */
+  protected function sendHeaders($type) {
+    if (headers_sent()) {
+      return;
+    }
+
+    header('Content-Type: ' . $type);
+
+    // Somewhat redundant - browsers shouldn't cache 500 class responses anyway.
+    header("Cache-Control: no-cache, must-revalidate");
+    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
+
+    // Status return.
+    header($_SERVER["SERVER_PROTOCOL"] . " 503 Service Unavailable");
+
+  }
+
+}
diff --git a/core/lib/Drupal/Component/Fault/FaultException.php b/core/lib/Drupal/Component/Fault/FaultException.php
new file mode 100644
index 0000000..dd8538b
--- /dev/null
+++ b/core/lib/Drupal/Component/Fault/FaultException.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\Component\Fault\FaultException.
+ */
+
+namespace Drupal\Component\Fault;
+
+/**
+ * Fault System Exception.
+ */
+class FaultException extends \Exception {}
diff --git a/core/lib/Drupal/Component/Fault/FaultSetup.php b/core/lib/Drupal/Component/Fault/FaultSetup.php
new file mode 100644
index 0000000..f458154
--- /dev/null
+++ b/core/lib/Drupal/Component/Fault/FaultSetup.php
@@ -0,0 +1,65 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\Component\Fault\FaultSetup.
+ */
+
+namespace Drupal\Component\Fault;
+
+/**
+ * Fault System Setup.
+ */
+class FaultSetup {
+
+  /**
+   * Path to the Quiet Response.
+   *
+   * While undesirable, it is conceivable that a fault be raised in production.
+   * Typically we log these faults and send back a simple service unavailable
+   * response. However, using the setQuietResponseHtml method below the admin
+   * or theme maker can specify an HTML file to show in that event. The file is
+   * sent out without any parsing.
+   */
+  protected static $html = '';
+
+  /**
+   * Load the environment variables and configure the assertion handler.
+   *
+   * Note that you may call this function at any time to re-register the
+   * Fault System handlers.
+   */
+  public final static function start() {
+    if (assert_options(ASSERT_ACTIVE)) {
+      assert_options(ASSERT_CALLBACK, [__CLASS__, 'handleAssert']);
+      assert_options(ASSERT_WARNING, 0);
+      assert_options(ASSERT_BAIL, 1);
+    }
+  }
+
+  /**
+   * Assertion Handler.
+   *
+   * @see http://www.php.net/assert
+   * @see http://www.php.net/assert_options
+   */
+  public final static function handleAssert($file, $line, $code, $message = NULL) {
+    (new AssertionHandler($file, $line, $code, $message, debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT)))
+      ->resolve();
+  }
+
+  /**
+   * Get the HTML for a quiet response.
+   */
+  public static function getQuietResponseHtml() {
+    return static::$html;
+  }
+
+  /**
+   * Set the HTML file path for a quiet response.
+   */
+  public static function setQuietResponseHtml($html) {
+    assert('file_exists($html)', 'Invalid File');
+    static::$html = $html;
+  }
+
+}
diff --git a/core/lib/Drupal/Component/Fault/sad-droop.svg b/core/lib/Drupal/Component/Fault/sad-droop.svg
new file mode 100644
index 0000000..f9bcfb2
--- /dev/null
+++ b/core/lib/Drupal/Component/Fault/sad-droop.svg
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="221px" height="258.748px" viewBox="0 0 221 258.748" enable-background="new 0 0 221 258.748" xml:space="preserve">
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M221,147.638c0-34.82-16.53-65.2-40.87-86.28
+	c-22.92-19.85-67.82-45.42-86.78-61.31c-1.39-1.16,6.37,19.31-12.81,33.42c-14.79,10.88-28.93,20.2-38.34,28.08
+	C17.53,82.188,0,112.848,0,147.638c0,61.36,49.47,111.11,110.5,111.11S221,208.998,221,147.638z M54,175.188
+	c0-20.7,18.44-32.44,38.31-32.44c26.05,0,40.96,17.47,49.97,27.03c1.29,1.37,4.14,2.92,5.05,2.92c0.9,0,4.18-1.36,5.45-2.54
+	c11.2-10.56,27.72-23.86,42.09-23.86c13.21,0,20.76,14.23,17.29,30.43c-3.52,16.45-18.64,30.32-30.93,30.32
+	c-14.42,0-22.65-15.42-29.9-24.98c-0.88-1.16-3.37-3.12-4.31-3.12c-1.18,0-4.37,1.83-5.61,2.94c-10.31,9.21-31.65,26.86-52.22,26.86
+	C69.14,208.748,54,195.948,54,175.188z M145.07,202.748c8.07,0,10.02,5.32,9.93,8.2c-0.03,0.9-0.68,1.77-1.65,2.19
+	c-0.96,0.42-2.03,0.3-2.69-0.3c-0.01-0.02-2.62-2.28-7.18-2.28c-4.14,0-10.32,2.13-12.36,2.96c-0.39,0.16-0.77,0.23-1.14,0.23
+	c-0.67,0-1.27-0.25-1.63-0.71c-0.57-0.72-0.43-1.78,0.32-2.6C128.96,210.118,135.76,202.748,145.07,202.748z M100.4,236.107
+	c-0.57-0.59-0.53-1.41,0.1-1.97c0.52-0.46,12.75-10.39,31.9-10.39c22.12,0,29.88,7.32,30.47,7.73c0.68,0.5,1.78,3.22,0.63,4.53
+	c-1.39,1.6-3.91,2.62-8.8,0.68c-5.01-1.98-12.15-5.72-26.61-5.72c-14.58,0-25.13,5.53-25.26,5.59
+	C101.99,236.888,100.97,236.708,100.4,236.107z"/>
+</svg>
diff --git a/core/tests/Drupal/Tests/AssertionException.php b/core/tests/Drupal/Tests/AssertionException.php
new file mode 100644
index 0000000..c459f4d
--- /dev/null
+++ b/core/tests/Drupal/Tests/AssertionException.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * @file
+ * Contains Drupal\Tests\AssertionTestingTrait.
+ */
+
+namespace Drupal\Tests;
+
+/**
+ * On occassion we need to die immediately on assertion failure. For these
+ * occassions this is the exception that will be thrown.
+ */
+class AssertionException extends \Exception {}
diff --git a/core/tests/Drupal/Tests/AssertionTestingTrait.php b/core/tests/Drupal/Tests/AssertionTestingTrait.php
new file mode 100644
index 0000000..1911bcd
--- /dev/null
+++ b/core/tests/Drupal/Tests/AssertionTestingTrait.php
@@ -0,0 +1,146 @@
+<?php
+/**
+ * @file
+ * Contains Drupal\Tests\AssertionTestingTrait.
+ */
+
+namespace Drupal\Tests;
+
+/**
+ * Methods for testing the internal PHP assert function.
+ *
+ * By default, PHPUnit and Simpletest convert assert failures to exceptions
+ * stopping the code in its tracks.  These methods allow the tester to log
+ * the last assertion statement's message and thereby monitor when they are
+ * thrown and correct.
+ *
+ * You will need to override the construct of Drupal Unit Tests in this manner
+ * to keep the library working correctly.
+ *
+ * @code
+ * public function setUp() {
+ *   $this->startAssertionHandling();
+ *   parent::setUp();
+ * }
+ * @endcode
+ */
+trait AssertionTestingTrait {
+
+  /**
+   * Flag assertion handler to throw an exception on raise, ending the test.
+   */
+  protected $dieOnRaise = FALSE;
+
+  /**
+   * Collections of captured assertions.
+   */
+  protected $assertionsRaised = [];
+
+  /**
+   * Errors Expected.
+   *
+   * This flag prevents the tearDown from checking for unaccounted assertions.
+   * after an error throw.
+   */
+  protected $thereWillBeErrors = FALSE;
+
+  /**
+   * Callback handler for assert raises during testing.
+   */
+  public function assertCallbackHandle($file, $line, $code, $message) {
+
+    // We print out this warning during test development, and since the
+    // automated tests run in strict mode it will cause a test failure.
+    if (!$code) {
+      print ('Assertions should always be strings! Even though PHP permits
+        other argument types, those arguments will be evaluated which causes
+        a loss of performance.');
+    }
+
+    // Usually we want to let the code continue evaluating as it is going to
+    // do when assertions are turned off just to make sure the code doesn't
+    // enter a fatal condition. However, some assertions are guarding against
+    // Fatal conditions anyway and there will be no way to recover from these
+    // failures. When testing these assertions, set the dieOnRaise flag which
+    // causes the exception throw here.
+    if ($this->dieOnRaise) {
+      throw new AssertionException($message);
+    }
+
+    // Otherwise we log the assertion as thrown and let the code continue.
+    // However, be aware we assert that this array is empty during tear down.
+    // If it isn't the test will fail.
+    $this->assertionsRaised[] = $message;
+
+    // Inform PHP we've successfully completed our handling of the assert fail.
+    return TRUE;
+  }
+
+  /**
+   * Start assertion handling for the test.
+   */
+  protected function startAssertionHandling() {
+    assert_options(ASSERT_WARNING, FALSE);
+    assert_options(ASSERT_CALLBACK, [$this, 'assertCallbackHandle']);
+    $this->assertionsRaised = [];
+    return false;
+  }
+
+  /**
+   * Suspend assertion handling.
+   */
+  protected function suspendAssertionHandling() {
+    assert_options(ASSERT_WARNING, TRUE);
+    assert_options(ASSERT_CALLBACK, NULL);
+    $this->assertionsRaised = [];
+  }
+
+  /**
+   * {@inheritdoc}
+   *
+   * Drupal Unit test has no tear down and since this trait will most
+   * frequently be applied to its children we just go ahead and define this
+   * method.  Reminder - if you need to define this method in your test you'll
+   * need to alias this function when you bind in the trait.
+   */
+  protected function tearDown() {
+
+    // If an error was expected and indeed thrown there will be no chance to
+    // clear out the assertion log before we reach this function, so set the
+    // flag to skip the assertions check.
+    //
+    // Only use this when testing errors that you are raising yourself with
+    // trigger error (and that itself should be rare).  In other cases go ahead
+    // and catch the assertion by setting the dieOnRaise flag.
+    if ($this->thereWillBeErrors) {
+      $this->assertionsRaised = [];
+      $this->thereWillBeErrors = FALSE;
+    }
+
+    $this->assertEmpty($this->assertionsRaised,
+      'Unaccounted for assert fails found at test conclusion: ' . implode(', ', $this->assertionsRaised));
+    $this->suspendAssertionHandling();
+    $this->dieOnRaise = FALSE;
+  }
+
+  /**
+   * Check if the assertions specified where raised.
+   *
+   * This function can be overloaded. Assertions should be passed in the order
+   * they are expected to occur. After being accounted for the assertion count
+   * is reset.
+   */
+  protected function assertAssertionsRaised() {
+    $this->assertEquals(func_get_args(), $this->assertionsRaised);
+    $this->assertionsRaised = [];
+  }
+
+  /**
+   * Insure no assertions where thrown. Called during teardown, but you may
+   * wish to call it at other times.
+   */
+  protected function assertAssertionNotRaised() {
+    $this->assertEmpty($this->assertionsRaised);
+  }
+
+}
diff --git a/core/tests/Drupal/Tests/Component/Fault/AssertionHandlerTest.php b/core/tests/Drupal/Tests/Component/Fault/AssertionHandlerTest.php
new file mode 100644
index 0000000..8d4efc4
--- /dev/null
+++ b/core/tests/Drupal/Tests/Component/Fault/AssertionHandlerTest.php
@@ -0,0 +1,94 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\Tests\Core\Fault\AssertionHandlerTest.
+ */
+
+namespace Drupal\Tests\Component\Fault;
+
+use Drupal\Component\Fault\AssertionHandler;
+use Drupal\Component\Fault\FaultSetup;
+use Drupal\Tests\UnitTestCase;
+use Drupal\Tests\AssertionTestingTrait;
+
+/**
+ * @coversDefaultClass \Drupal\Component\Fault\AssertionHandler
+ * @group Fault
+ */
+class AssertionHandlerTest extends UnitTestCase {
+  use AssertionTestingTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp() {
+    $this->startAssertionHandling();
+    parent::setUp();
+  }
+
+  /**
+   * Test the constructor to make sure it asserts it shouldn't be called.
+   */
+  public function testConstructor() {
+    // Flag to the AssertionHandler that it is to spit out HTML anyway, leave
+    // the buffers alone, and not log anything.
+    $_SERVER['DRUPAL_FAULT_COMPONENT_IN_TEST_MODE'] = TRUE;
+
+    // Turn error display off, see if the Handler goes to silent mode.
+    ini_set('display_errors', 0);
+
+    // Also test to see if an override will be returned.
+    FaultSetup::setQuietResponseHtml(dirname(__FILE__) . '/results/assertionHandlerTest4.txt');
+
+    $response = new AssertionHandler(__FILE__, 42, 'FALSE', 'node://66 test2', [
+      [
+        'file' => __FILE__,
+        'line' => 42,
+        'function' => 'assert',
+        'class' => 'Moo',
+      ],
+      [
+        'file' => 'check',
+        'line' => 12,
+        'function' => 'clear',
+        'class' => 'Woo'
+      ]
+    ]);
+    $this->assertAssertionsRaised('This class can only be used by other classes in the Fault Component');
+
+    ob_start();
+    $response->resolve();
+    $this->assertEquals(trim(file_get_contents(dirname(__FILE__) . '/results/assertionHandlerTest4.txt')),
+      trim(ob_get_clean())
+    );
+
+    ini_set('display_errors', 1);
+
+    // JSON Response.
+    $_SERVER['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest';
+
+    $response = new AssertionHandler(__FILE__, 42, 'FALSE', 'node://66 test2', [
+      [
+        'file' => __FILE__,
+        'line' => 42,
+        'function' => 'assert',
+        'class' => 'Moo',
+      ],
+      [
+        'file' => 'check',
+        'line' => 12,
+        'function' => 'clear',
+        'class' => 'Woo'
+      ]
+    ]);
+    $this->assertAssertionsRaised('This class can only be used by other classes in the Fault Component');
+
+    ob_start();
+    $response->resolve();
+    $this->assertEquals('Assert Failure line 42 in file /core/tests/Drupal/Tests/Component/Fault/AssertionHandlerTest.php -- asserted: FALSE -- comment: test2',
+      ob_get_clean()
+    );
+
+  }
+
+}
diff --git a/core/tests/Drupal/Tests/Component/Fault/AssertionTest.php b/core/tests/Drupal/Tests/Component/Fault/AssertionTest.php
new file mode 100644
index 0000000..10fc90b
--- /dev/null
+++ b/core/tests/Drupal/Tests/Component/Fault/AssertionTest.php
@@ -0,0 +1,215 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\Tests\Component\Fault\AssertionTest.
+ */
+
+namespace Drupal\Tests\Component\Fault;
+
+use Drupal\Component\Fault\FaultSetup;
+use Drupal\Component\Fault\Assertion;
+use Drupal\Tests\UnitTestCase;
+use ArrayObject;
+
+/**
+ * Test the static Assertion assisting Library.
+ *
+ * @coversDefaultClass \Drupal\Component\Fault\FaultSetup
+ *
+ * @group Fault
+ */
+class AssertionTest extends UnitTestCase {
+
+  /**
+   * Test that the caller throws an error if called outside the scope of assert.
+   *
+   * @expectedException \Drupal\Component\Fault\FaultException
+   *
+   * @expectedExceptionMessage You must call this function from assert()
+   */
+  public function testValidCallerExceptionFromAssert() {
+    Assertion::validCaller('', [
+      ['function' => 'foo'],
+      ['function' => 'moo']
+    ]);
+  }
+
+  /**
+   * Test the throw of an error when the assert is made outside of any function.
+   *
+   * @expectedException \Drupal\Component\Fault\FaultException
+   *
+   * @expectedExceptionMessage Why are you asserting this in the global namespace???
+   */
+  public function testValidCallerExceptionNotGlobal() {
+    Assertion::validCaller('', [
+      ['function' => 'foo'],
+      ['function' => 'assert']
+    ]);
+  }
+
+  /**
+   * Test the analysis of stackframes.
+   */
+  public function testValidCallerAnalysis() {
+    // Call in same class.
+    $this->assertTrue(
+      Assertion::validCaller('', [
+        ['function' => 'foo'],
+        ['function' => 'assert'],
+        ['function' => 'callee', 'class' => 'A\\B\\C'],
+        ['function' => 'caller', 'class' => 'A\\B\\C']
+      ])
+    );
+
+    // Call in same namespace.
+    $this->assertTrue(
+      Assertion::validCaller('', [
+        ['function' => 'foo'],
+        ['function' => 'assert'],
+        ['function' => 'callee', 'class' => 'A\\B\\C'],
+        ['function' => 'caller', 'class' => 'A\\B\\D']
+      ])
+    );
+
+    // Call in child namespace.
+    $this->assertTrue(
+      Assertion::validCaller('', [
+        ['function' => 'foo'],
+        ['function' => 'assert'],
+        ['function' => 'callee', 'class' => 'A\\B\\C'],
+        ['function' => 'caller', 'class' => 'A\\B\\D\\E']
+      ])
+    );
+
+    // Call in parent namespace.
+    $this->assertFalse(
+      Assertion::validCaller('', [
+        ['function' => 'foo'],
+        ['function' => 'assert'],
+        ['function' => 'callee', 'class' => 'A\\B\\C'],
+        ['function' => 'caller', 'class' => 'A\\D']
+      ])
+    );
+
+    // Call from global namespace.
+    $this->assertFalse(
+      Assertion::validCaller('', [
+        ['function' => 'foo'],
+        ['function' => 'assert'],
+        ['function' => 'callee', 'class' => 'A\\B\\C'],
+        ['function' => 'caller', 'class' => 'D']
+      ])
+    );
+
+    // A child class will have to be in the same namepace to function.
+    $this->assertTrue(
+      Assertion::validCaller('', [
+        ['function' => 'foo'],
+        ['function' => 'assert'],
+        ['function' => 'callee', 'class' => 'A\\B\\C'],
+        ['function' => 'callee', 'class' => 'A\\B\\D'],
+        ['function' => 'callee', 'class' => 'A\\B\\E'],
+        ['function' => 'caller', 'class' => 'A\\B\\F']
+      ])
+    );
+
+    // Or in a child namespace. The scope governance is that of the class
+    // making the assertion.
+    $this->assertTrue(
+      Assertion::validCaller('', [
+        ['function' => 'foo'],
+        ['function' => 'assert'],
+        ['function' => 'callee', 'class' => 'A\\B\\C'],
+        ['function' => 'callee', 'class' => 'A\\B\\D\\E'],
+        ['function' => 'callee', 'class' => 'A\\B\\F\\G\\E'],
+        ['function' => 'caller', 'class' => 'A\\B\\F\\G']
+      ])
+    );
+
+    // An extender class from a foreign namespace allows calls from the original
+    // namespace.
+    $this->assertTrue(
+      Assertion::validCaller('', [
+        ['function' => 'foo'],
+        ['function' => 'assert'],
+        ['function' => 'callee', 'class' => 'A\\B\\C'],
+        ['function' => 'callee', 'class' => 'A\\D\\E'],
+        ['function' => 'caller', 'class' => 'A\\B\\F\\G']
+      ])
+    );
+
+    // But will not allow calls from a new namespace.
+    $this->assertFalse(
+      Assertion::validCaller('', [
+        ['function' => 'foo'],
+        ['function' => 'assert'],
+        ['function' => 'callee', 'class' => 'A\\B\\C'],
+        ['function' => 'callee', 'class' => 'A\\D\\E'],
+        ['function' => 'caller', 'class' => 'A\\F\\G']
+      ])
+    );
+
+    // Test scope argument.
+    $this->assertTrue(
+      Assertion::validCaller('A\\F', [
+        ['function' => 'foo'],
+        ['function' => 'assert'],
+        ['function' => 'callee', 'class' => 'A\\B\\C'],
+        ['function' => 'callee', 'class' => 'A\\D\\E'],
+        ['function' => 'caller', 'class' => 'A\\F\\G']
+      ])
+    );
+
+  }
+
+  /**
+   * Test the collectionOf method.
+   */
+  public function testCollectionOf() {
+    // We don't need a test mock - the internal ArrayObject will work just fine.
+    $this->assertTrue(
+      Assertion::collectionOf([
+        new ArrayObject(),
+        new ArrayObject()
+      ], 'ArrayObject')
+    );
+
+    $this->assertFalse(
+      Assertion::collectionOf([
+        new ArrayObject(),
+        []
+      ], 'ArrayObject')
+    );
+
+    $this->assertTrue(
+      Assertion::collectionOf(new ArrayObject([
+        new ArrayObject(),
+        new ArrayObject()
+      ]), 'ArrayObject')
+    );
+
+    $this->assertFalse(
+      Assertion::collectionOf(new ArrayObject([
+        new ArrayObject(),
+        []
+      ]), 'ArrayObject')
+    );
+
+    // Non traversables fail.
+    $this->assertFalse(
+      Assertion::collectionOf('string', 'ArrayObject')
+    );
+
+    $this->assertFalse(
+      Assertion::collectionOf(new \stdClass(), 'ArrayObject')
+    );
+
+    // Empty collections fail.
+    $this->assertFalse(
+      Assertion::collectionOf([], 'ArrayObject')
+    );
+
+  }
+
+}
diff --git a/core/tests/Drupal/Tests/Component/Fault/FaultSetupTest.php b/core/tests/Drupal/Tests/Component/Fault/FaultSetupTest.php
new file mode 100644
index 0000000..79022d4
--- /dev/null
+++ b/core/tests/Drupal/Tests/Component/Fault/FaultSetupTest.php
@@ -0,0 +1,68 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\Tests\Component\Fault\FaultSetupTest.
+ */
+
+namespace Drupal\Tests\Component\Fault;
+
+use Drupal\Component\Fault\FaultSetup;
+use Drupal\Component\Fault\AssertionHandler;
+use Drupal\Tests\AssertionTestingTrait;
+use Drupal\Tests\UnitTestCase;
+
+/**
+ * @coversDefaultClass \Drupal\Component\Fault\FaultSetup
+ * @group Fault
+ */
+class FaultSetupTest extends UnitTestCase {
+  use AssertionTestingTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp() {
+    $this->startAssertionHandling();
+    parent::setUp();
+  }
+
+  /**
+   * Test the static start method.
+   */
+  public function testStart() {
+    // Assertions already on, so the method should detect this and set its
+    // handler up. It also activates assert_bail.
+    FaultSetup::start();
+    $this->assertEquals(['Drupal\\Component\\Fault\\FaultSetup', 'handleAssert'], assert_options(ASSERT_CALLBACK));
+    $this->assertEquals(1, assert_options(ASSERT_BAIL));
+
+    // Reset and disable assertions momentarily.
+    assert_options(ASSERT_CALLBACK, NULL);
+    assert_options(ASSERT_ACTIVE, 0);
+
+    // Now test to see if the method does nothing as it should when assert
+    // active = 0
+    FaultSetup::start();
+    $this->assertEquals(0, assert_options(ASSERT_ACTIVE));
+    $this->assertEquals(NULL, assert_options(ASSERT_CALLBACK));
+
+    // Restore test environment defaults.
+    assert_options(ASSERT_ACTIVE, 1);
+    assert_options(ASSERT_BAIL, 0);
+  }
+
+  /**
+   * Test the assertion that quiet response is receiving a valid file path.
+   */
+  public function testSetQuietResponseHtml() {
+    FaultSetup::setQuietResponseHtml('not/a/valid/path.html');
+    $this->assertAssertionsRaised('Invalid File');
+
+    // It doesn't test if the file is html, just that it exists, so test
+    // it against self.
+    FaultSetup::setQuietResponseHtml(__FILE__);
+
+    // The check that assertions weren't thrown will be done by tear down.
+  }
+
+}
diff --git a/core/tests/Drupal/Tests/Component/Fault/results/assertionHandlerTest1.txt b/core/tests/Drupal/Tests/Component/Fault/results/assertionHandlerTest1.txt
new file mode 100644
index 0000000..f92c8b5
--- /dev/null
+++ b/core/tests/Drupal/Tests/Component/Fault/results/assertionHandlerTest1.txt
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>System Error</title>
+  <style>
+    body {
+      background: #046BC4 url('/core/lib/Drupal/Component/Fault/drupal_error.png') 1em 1em no-repeat;
+      padding: 2em 2em 2em 120px;
+      font: sans-serif;
+      color: #FFF;
+    }
+    a { color: #FF0; }
+    a:visited { color: #FFF; }
+    strong {
+      display: inline-block;
+      width: 6em;
+      text-align: right;
+      padding-right: 1em;
+    }
+    pre {
+      background: #000;
+    }
+  </style>
+</head>
+<body>
+  <h1>Assertion Failure</h1>
+  <hr>
+      <strong>WARNING:</strong> The Assert statement was passed a non-string
+    value. Whatever expression was sent to it will be evaluated regardless of
+    whether assert functions are turned on or off. In order to preserve system
+    efficiency it is imperative that you encapsulate the expression in a string
+    to be evaluated by assert rather than passing an expression to it.
+    <p><strong>Comment: </strong>test</p>
+    <p><strong>Reference: </strong>http://www.drupal.org</p>
+    <hr>
+  <h2>Failure Location</h2>
+  <p><strong>File: </strong> /core/tests/Drupal/Tests/Component/Fault/AssertionHandlerTest.php</p>
+  <p><strong>Line: </strong> 42</p>
+    <p><strong>Class: </strong>
+    <a href="https://api.drupal.org/api/drupal/!core!tests!Drupal!Tests!Component!Fault!AssertionHandlerTest.php/class/Woo/8">
+      Woo    </a>
+  </p>
+  <p><strong>Method: </strong>
+    <a href="https://api.drupal.org/api/drupal/!core!tests!Drupal!Tests!Component!Fault!AssertionHandlerTest.php/function/Woo%3A%3Afoo/8">
+      foo    </a>
+  </p>
+    <hr>
+  <h2>Stack Trace</h2>
+  array(1) {
+  [0] =>
+  array(4) {
+    'file' =>
+    string(5) "check"
+    'line' =>
+    int(12)
+    'function' =>
+    string(3) "foo"
+    'class' =>
+    string(3) "Woo"
+  }
+}
+</body>
+</html>
diff --git a/core/tests/Drupal/Tests/Component/Fault/results/assertionHandlerTest2.txt b/core/tests/Drupal/Tests/Component/Fault/results/assertionHandlerTest2.txt
new file mode 100644
index 0000000..9c27f95
--- /dev/null
+++ b/core/tests/Drupal/Tests/Component/Fault/results/assertionHandlerTest2.txt
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>System Error</title>
+  <style>
+    body {
+      background: #046BC4 url('/core/lib/Drupal/Component/Fault/drupal_error.png') 1em 1em no-repeat;
+      padding: 2em 2em 2em 120px;
+      font: sans-serif;
+      color: #FFF;
+    }
+    a { color: #FF0; }
+    a:visited { color: #FFF; }
+    strong {
+      display: inline-block;
+      width: 6em;
+      text-align: right;
+      padding-right: 1em;
+    }
+    pre {
+      background: #000;
+    }
+  </style>
+</head>
+<body>
+  <h1>Assertion Failure</h1>
+  <hr>
+      <p><strong>Assertion:</strong> FALSE</p>
+    <p><strong>Comment: </strong>test2</p>
+    <p><strong>Reference: </strong>http://www.drupal.org/node/66</p>
+    <hr>
+  <h2>Failure Location</h2>
+  <p><strong>File: </strong> /core/tests/Drupal/Tests/Component/Fault/AssertionHandlerTest.php</p>
+  <p><strong>Line: </strong> 42</p>
+    <p><strong>Class: </strong>
+    <a href="https://api.drupal.org/api/drupal/!core!tests!Drupal!Tests!Component!Fault!AssertionHandlerTest.php/class/Woo/8">
+      Woo    </a>
+  </p>
+  <p><strong>Method: </strong>
+    <a href="https://api.drupal.org/api/drupal/!core!tests!Drupal!Tests!Component!Fault!AssertionHandlerTest.php/function/Woo%3A%3Aclear/8">
+      clear    </a>
+  </p>
+    <hr>
+  <h2>Stack Trace</h2>
+  array(1) {
+  [0] =>
+  array(4) {
+    'file' =>
+    string(5) "check"
+    'line' =>
+    int(12)
+    'function' =>
+    string(5) "clear"
+    'class' =>
+    string(3) "Woo"
+  }
+}
+</body>
+</html>
diff --git a/core/tests/Drupal/Tests/Component/Fault/results/assertionHandlerTest3.txt b/core/tests/Drupal/Tests/Component/Fault/results/assertionHandlerTest3.txt
new file mode 100644
index 0000000..0b7b0e9
--- /dev/null
+++ b/core/tests/Drupal/Tests/Component/Fault/results/assertionHandlerTest3.txt
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>System Error</title>
+  <style>
+    body {
+      background: #046BC4 url('/core/lib/Drupal/Component/Fault/drupal_error.png') 1em 1em no-repeat;
+      padding: 2em 2em 2em 120px;
+      font: sans-serif;
+      color: #FFF;
+    }
+    a { color: #FF0; }
+    a:visited { color: #FFF; }
+    strong {
+      display: inline-block;
+      width: 6em;
+      text-align: right;
+      padding-right: 1em;
+    }
+    pre {
+      background: #000;
+    }
+  </style>
+</head><body>
+  <h1>System Error</h1>
+  <p>The system has encountered an error and the administrator has configured
+    the server not to publicly report the nature of the error, though it has
+    been logged.</p>
+</body>
+</html>
diff --git a/core/tests/Drupal/Tests/Component/Fault/results/assertionHandlerTest4.txt b/core/tests/Drupal/Tests/Component/Fault/results/assertionHandlerTest4.txt
new file mode 100644
index 0000000..5539b9a
--- /dev/null
+++ b/core/tests/Drupal/Tests/Component/Fault/results/assertionHandlerTest4.txt
@@ -0,0 +1 @@
+<!DOCTYPE html><html><body>Hello World!</body></html>
diff --git a/core/tests/Drupal/Tests/ToStringMock.php b/core/tests/Drupal/Tests/ToStringMock.php
new file mode 100644
index 0000000..eacea64
--- /dev/null
+++ b/core/tests/Drupal/Tests/ToStringMock.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * @file
+ * Contains Drupal\Tests\ToStringMock.
+ */
+
+namespace Drupal\Tests;
+
+/**
+ * Simply provides an object that implements magic __toString.
+ */
+class ToStringMock {
+
+  /**
+   * String.
+   */
+  protected $string = '';
+
+  /**
+   * Return Drupal\Tests\ToStringMock object.
+   */
+  public function __construct($string) {
+    $this->string = strval($string);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __toString() {
+    return $this->string;
+  }
+
+}
diff --git a/index.php b/index.php
index a44e5c5..e4de701 100644
--- a/index.php
+++ b/index.php
@@ -10,14 +10,16 @@
 
 use Drupal\Core\DrupalKernel;
 use Drupal\Core\Site\Settings;
+use Drupal\Component\Fault\FaultSetup;
 use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\Response;
 
 $autoloader = require_once 'autoload.php';
 
-try {
+FaultSetup::start();
 
+try {
   $request = Request::createFromGlobals();
   $kernel = DrupalKernel::createFromRequest($request, $autoloader, 'prod');
   $response = $kernel
