diff --git a/core/composer.json b/core/composer.json
index 4a109a2..32b5f83 100644
--- a/core/composer.json
+++ b/core/composer.json
@@ -25,5 +25,12 @@
     "easyrdf/easyrdf": "0.8.0-beta.1",
     "phpunit/phpunit": "3.7 as dev-3.7"
   },
-  "minimum-stability": "dev"
+  "minimum-stability": "dev",
+  "autoload": {
+    "psr-0": {
+      "Drupal\\Core\\": "lib",
+      "Drupal\\Component\\": "lib",
+      "Drupal\\Driver\\": "lib"
+    }
+  }
 }
diff --git a/core/composer.lock b/core/composer.lock
index 8715a8e..8e33c4d 100644
--- a/core/composer.lock
+++ b/core/composer.lock
@@ -1,5 +1,5 @@
 {
-    "hash": "a8c56a3549ec70f775e4bf795e65a993",
+    "hash": "7eae3f1e9f543a9f27f607af3066689c",
     "packages": [
         {
             "name": "doctrine/common",
diff --git a/core/includes/bootstrap.inc b/core/includes/bootstrap.inc
index 3e3853a..a9f9328 100644
--- a/core/includes/bootstrap.inc
+++ b/core/includes/bootstrap.inc
@@ -5,8 +5,8 @@
 use Drupal\Core\DrupalKernel;
 use Drupal\Core\Database\Database;
 use Drupal\Core\DependencyInjection\ContainerBuilder;
-use Symfony\Component\ClassLoader\UniversalClassLoader;
-use Symfony\Component\ClassLoader\ApcUniversalClassLoader;
+use Symfony\Component\ClassLoader\ClassLoader;
+use Symfony\Component\ClassLoader\ApcClassLoader;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\DependencyInjection\Container;
 use Symfony\Component\DependencyInjection\Reference;
@@ -3126,78 +3126,41 @@ function ip_address() {
  *   loader class when calling drupal_classloader() from settings.php. It is
  *   ignored otherwise.
  *
- * @return Symfony\Component\ClassLoader\UniversalClassLoader
- *   A UniversalClassLoader class instance (or extension thereof).
+ * @return Symfony\Component\ClassLoader\ClassLoader
+ *   A ClassLoader class instance (or extension thereof).
  */
 function drupal_classloader($class_loader = NULL) {
-  // By default, use the UniversalClassLoader which is best for development,
-  // as it does not break when code is moved on the file system. However, as it
-  // is slow, allow to use the APC class loader in production.
+  // By default, use the ClassLoader which is best for development, as it does
+  // not break when code is moved on the file system. However, as it is slow,
+  // allow to use the APC class loader in production.
   static $loader;
 
   if (!isset($loader)) {
 
-    // Include the Symfony ClassLoader for loading PSR-0-compatible classes.
-    require_once DRUPAL_ROOT . '/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/UniversalClassLoader.php';
+    require_once DRUPAL_ROOT . '/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/ClassLoader.php';
+    $loader = new ClassLoader();
+
+    // Register the class loader.
+    // When configured to use APC, the ApcClassLoader is registered instead.
+    // Note that ApcClassLoader decorates ClassLoader and only provides the
+    // findFile() method, but none of the others. The actual registry is still
+    // in ClassLoader.
+    $class_loader = 'default';
     if (!isset($class_loader) && class_exists('Drupal\Component\Utility\Settings', FALSE)) {
       $class_loader = settings()->get('class_loader');
     }
-
-    switch ($class_loader) {
-      case 'apc':
-        if (function_exists('apc_store')) {
-          require_once DRUPAL_ROOT . '/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/ApcUniversalClassLoader.php';
-          $loader = new ApcUniversalClassLoader('drupal.' . drupal_get_hash_salt());
-          break;
-        }
-      // Fall through to the default loader if APC was not loaded, so that the
-      // site does not fail completely.
-      case 'dev':
-      case 'default':
-      default:
-        $loader = new UniversalClassLoader();
-        break;
+    if ($class_loader === 'apc') {
+      require_once DRUPAL_ROOT . '/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/ApcClassLoader.php';
+      $apc_loader = new ApcClassLoader('drupal.' . drupal_get_hash_salt(), $loader);
+      $apc_loader->register();
+    }
+    else {
+      $loader->register();
     }
 
-    // Register explicit namespaces for Drupal core.
-    // The majority of namespaces that need to be resolved are from Drupal core,
-    // so registering/setting them before vendor libraries saves a few
-    // additional cycles per class lookup.
-    $loader->registerNamespaces(array(
-      'Drupal\Core' => DRUPAL_ROOT . '/core/lib',
-      'Drupal\Component' => DRUPAL_ROOT . '/core/lib',
-      'Drupal\Driver' => DRUPAL_ROOT . '/drivers/lib',
-    ));
-
-    // Register namespaces and PEAR-like prefixes for vendor libraries managed
-    // by Composer. Composer combines libraries that use PHP 5.3 namespaces and
-    // ones that use PEAR-like class prefixes in a single array, but the Symfony
-    // class loader requires them to be registered separately.
+    // Register namespaces for vendor libraries managed by Composer.
     $prefixes_and_namespaces = require DRUPAL_ROOT . '/core/vendor/composer/autoload_namespaces.php';
-    $prefixes = array();
-    $namespaces = array();
-    foreach ($prefixes_and_namespaces as $key => $path) {
-      // If the key:
-      // - Contains a namespace separator, we know it's a namespace.
-      // - Doesn't contain a namespace separator and ends in an "_" (e.g.,
-      //   "Twig_"), it's likely intended as a PEAR-like prefix rather than a
-      //   namespace.
-      // - Doesn't contain a namespace separator or end in an "_" (e.g.,
-      //   "Assetic"), then it could be either a namespace or an incomplete
-      //   PEAR-like prefix, but we assume the former, since the only example of
-      //   that currently in Drupal is Assetic.
-      // @todo Switch to a class loader that doesn't require this guessing:
-      //   http://drupal.org/node/1658720.
-      $is_namespace = (strpos($key, '\\') !== FALSE) && (substr($key, -1) !== '_');
-      if ($is_namespace) {
-        $namespaces[rtrim($key, '\\')] = $path;
-      }
-      else {
-        $prefixes[$key] = $path;
-      }
-    }
-    $loader->registerPrefixes($prefixes);
-    $loader->registerNamespaces($namespaces);
+    $loader->addPrefixes($prefixes_and_namespaces);
 
     // Register the loader with PHP.
     $loader->register();
@@ -3215,7 +3178,7 @@ function drupal_classloader($class_loader = NULL) {
  */
 function drupal_classloader_register($name, $path) {
   $loader = drupal_classloader();
-  $loader->registerNamespace('Drupal\\' . $name, DRUPAL_ROOT . '/' . $path . '/lib');
+  $loader->addPrefix('Drupal\\' . $name, DRUPAL_ROOT . '/' . $path . '/lib');
 }
 
 /**
diff --git a/core/lib/Drupal/Core/DrupalKernel.php b/core/lib/Drupal/Core/DrupalKernel.php
index d56f503..1759734 100644
--- a/core/lib/Drupal/Core/DrupalKernel.php
+++ b/core/lib/Drupal/Core/DrupalKernel.php
@@ -11,7 +11,7 @@
 use Drupal\Core\Config\BootstrapConfigStorageFactory;
 use Drupal\Core\CoreBundle;
 use Drupal\Core\DependencyInjection\ContainerBuilder;
-use Symfony\Component\ClassLoader\UniversalClassLoader;
+use Symfony\Component\ClassLoader\ClassLoader;
 use Symfony\Component\Config\Loader\LoaderInterface;
 use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
 use Symfony\Component\DependencyInjection\Dumper\PhpDumper;
@@ -67,7 +67,7 @@ class DrupalKernel extends Kernel implements DrupalKernelInterface {
   /**
    * The classloader object.
    *
-   * @var \Symfony\Component\ClassLoader\UniversalClassLoader
+   * @var \Symfony\Component\ClassLoader\ClassLoader
    */
   protected $classLoader;
 
@@ -119,7 +119,7 @@ class DrupalKernel extends Kernel implements DrupalKernelInterface {
    *   (optional) FALSE to stop the container from being written to or read
    *   from disk. Defaults to TRUE.
    */
-  public function __construct($environment, $debug, UniversalClassLoader $class_loader, $allow_dumping = TRUE) {
+  public function __construct($environment, $debug, ClassLoader $class_loader, $allow_dumping = TRUE) {
     parent::__construct($environment, $debug);
     $this->classLoader = $class_loader;
     $this->allowDumping = $allow_dumping;
@@ -294,7 +294,7 @@ protected function initializeContainer() {
       // All namespaces must be registered before we attempt to use any service
       // from the container.
       $container_modules = $this->container->getParameter('container.modules');
-      $namespaces_before = $this->classLoader->getNamespaces();
+      $namespaces_before = $this->classLoader->getPrefixes();
       $this->registerModuleNamespaces($container_modules);
 
       // If 'container.modules' is wrong, the container must be rebuilt.
@@ -308,9 +308,9 @@ protected function initializeContainer() {
         // registerNamespaces() performs a merge rather than replace, so to
         // effectively remove erroneous registrations, we must replace them with
         // empty arrays.
-        $namespaces_after = $this->classLoader->getNamespaces();
+        $namespaces_after = $this->classLoader->getPrefixes();
         $namespaces_before += array_fill_keys(array_diff(array_keys($namespaces_after), array_keys($namespaces_before)), array());
-        $this->classLoader->registerNamespaces($namespaces_before);
+        $this->classLoader->registerPrefixes($namespaces_before);
       }
     }
 
@@ -457,7 +457,7 @@ protected function getModuleFileNames() {
    */
   protected function registerModuleNamespaces($moduleFileNames) {
     foreach ($moduleFileNames as $module => $filename) {
-      $this->classLoader->registerNamespace("Drupal\\$module", DRUPAL_ROOT . '/' . dirname($filename) . '/lib');
+      $this->classLoader->addPrefix("Drupal\\$module", DRUPAL_ROOT . '/' . dirname($filename) . '/lib');
     }
   }
 }
diff --git a/core/lib/Drupal/Core/Plugin/Discovery/AnnotatedClassDiscovery.php b/core/lib/Drupal/Core/Plugin/Discovery/AnnotatedClassDiscovery.php
index 0b387dc..73aa7c3 100644
--- a/core/lib/Drupal/Core/Plugin/Discovery/AnnotatedClassDiscovery.php
+++ b/core/lib/Drupal/Core/Plugin/Discovery/AnnotatedClassDiscovery.php
@@ -37,7 +37,7 @@ function __construct($owner, $type, $root_namespaces = NULL) {
    */
   protected function getPluginNamespaces() {
     $plugin_namespaces = array();
-    $root_namespaces = isset($this->rootNamespaces) ? $this->rootNamespaces : drupal_classloader()->getNamespaces();
+    $root_namespaces = isset($this->rootNamespaces) ? $this->rootNamespaces : drupal_classloader()->getPrefixes();
     foreach ($root_namespaces as $namespace => $dirs) {
       $plugin_namespaces["$namespace\\Plugin\\{$this->owner}\\{$this->type}"] = $dirs;
     }
diff --git a/core/vendor/autoload.php b/core/vendor/autoload.php
index 5a49ae7..004ba3a 100644
--- a/core/vendor/autoload.php
+++ b/core/vendor/autoload.php
@@ -4,4 +4,4 @@
 
 require_once __DIR__ . '/composer' . '/autoload_real.php';
 
-return ComposerAutoloaderInit481bddffaf22b51d159ec1b257c2bd7f::getLoader();
+return ComposerAutoloaderInit::getLoader();
diff --git a/core/vendor/composer/ClassLoader.php b/core/vendor/composer/ClassLoader.php
index 596c65d..a4a0dc5 100644
--- a/core/vendor/composer/ClassLoader.php
+++ b/core/vendor/composer/ClassLoader.php
@@ -75,64 +75,31 @@ public function addClassMap(array $classMap)
     }
 
     /**
-     * Registers a set of classes, merging with any others previously set.
+     * Registers a set of classes
      *
-     * @param string       $prefix  The classes prefix
-     * @param array|string $paths   The location(s) of the classes
-     * @param bool         $prepend Prepend the location(s)
+     * @param string       $prefix The classes prefix
+     * @param array|string $paths  The location(s) of the classes
      */
-    public function add($prefix, $paths, $prepend = false)
+    public function add($prefix, $paths)
     {
         if (!$prefix) {
-            if ($prepend) {
-                $this->fallbackDirs = array_merge(
-                    (array) $paths,
-                    $this->fallbackDirs
-                );
-            } else {
-                $this->fallbackDirs = array_merge(
-                    $this->fallbackDirs,
-                    (array) $paths
-                );
+            foreach ((array) $paths as $path) {
+                $this->fallbackDirs[] = $path;
             }
 
             return;
         }
-        if (!isset($this->prefixes[$prefix])) {
-            $this->prefixes[$prefix] = (array) $paths;
-
-            return;
-        }
-        if ($prepend) {
-            $this->prefixes[$prefix] = array_merge(
-                (array) $paths,
-                $this->prefixes[$prefix]
-            );
-        } else {
+        if (isset($this->prefixes[$prefix])) {
             $this->prefixes[$prefix] = array_merge(
                 $this->prefixes[$prefix],
                 (array) $paths
             );
+        } else {
+            $this->prefixes[$prefix] = (array) $paths;
         }
     }
 
     /**
-     * Registers a set of classes, replacing any others previously set.
-     *
-     * @param string       $prefix  The classes prefix
-     * @param array|string $paths   The location(s) of the classes
-     */
-    public function set($prefix, $paths)
-    {
-        if (!$prefix) {
-            $this->fallbackDirs = (array) $paths;
-
-            return;
-        }
-        $this->prefixes[$prefix] = (array) $paths;
-    }
-
-    /**
      * Turns on searching the include path for class files.
      *
      * @param bool $useIncludePath
diff --git a/core/vendor/composer/autoload_namespaces.php b/core/vendor/composer/autoload_namespaces.php
index 54b2551..30ac43c 100644
--- a/core/vendor/composer/autoload_namespaces.php
+++ b/core/vendor/composer/autoload_namespaces.php
@@ -25,6 +25,9 @@
     'Guzzle\\Http' => $vendorDir . '/guzzle/http/',
     'Guzzle\\Common' => $vendorDir . '/guzzle/common/',
     'EasyRdf_' => $vendorDir . '/easyrdf/easyrdf/lib/',
+    'Drupal\\Driver\\' => $baseDir . '/lib',
+    'Drupal\\Core\\' => $baseDir . '/lib',
+    'Drupal\\Component\\' => $baseDir . '/lib',
     'Doctrine\\Common' => $vendorDir . '/doctrine/common/lib/',
     'Assetic' => $vendorDir . '/kriswallsmith/assetic/src/',
 );
diff --git a/core/vendor/composer/autoload_real.php b/core/vendor/composer/autoload_real.php
index 24c4d51..e241360 100644
--- a/core/vendor/composer/autoload_real.php
+++ b/core/vendor/composer/autoload_real.php
@@ -2,27 +2,19 @@
 
 // autoload_real.php generated by Composer
 
-class ComposerAutoloaderInit481bddffaf22b51d159ec1b257c2bd7f
+require __DIR__ . '/ClassLoader.php';
+
+class ComposerAutoloaderInit
 {
     private static $loader;
 
-    public static function loadClassLoader($class)
-    {
-        if ('Composer\Autoload\ClassLoader' === $class) {
-            require __DIR__ . '/ClassLoader.php';
-        }
-    }
-
     public static function getLoader()
     {
-        if (null !== self::$loader) {
-            return self::$loader;
+        if (null !== static::$loader) {
+            return static::$loader;
         }
 
-        spl_autoload_register(array('ComposerAutoloaderInit481bddffaf22b51d159ec1b257c2bd7f', 'loadClassLoader'));
-        self::$loader = $loader = new \Composer\Autoload\ClassLoader();
-        spl_autoload_unregister(array('ComposerAutoloaderInit481bddffaf22b51d159ec1b257c2bd7f', 'loadClassLoader'));
-
+        static::$loader = $loader = new \Composer\Autoload\ClassLoader();
         $vendorDir = dirname(__DIR__);
         $baseDir = dirname($vendorDir);
 
@@ -40,7 +32,7 @@ public static function getLoader()
             $loader->addClassMap($classMap);
         }
 
-        $loader->register(true);
+        $loader->register();
 
         require $vendorDir . '/phpunit/phpunit/PHPUnit/Autoload.php';
 
