diff --git a/core/includes/bootstrap.inc b/core/includes/bootstrap.inc
index 2218e03..5f335c3 100644
--- a/core/includes/bootstrap.inc
+++ b/core/includes/bootstrap.inc
@@ -3,8 +3,8 @@
 use Drupal\Component\Utility\NestedArray;
 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\Container;
 use Symfony\Component\DependencyInjection\Reference;
 use Symfony\Component\DependencyInjection\Exception\RuntimeException as DependencyInjectionRuntimeException;
@@ -3094,61 +3094,49 @@ function ip_address() {
  * are DRUPAL_ROOT and variable_get(). Otherwise it may be called as early as
  * possible.
  *
- * @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() {
-  // 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';
-
-    // @todo Use a cleaner way than variable_get() to switch autoloaders.
-    switch (variable_get('autoloader_mode', 'default')) {
-      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;
+    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.
+    // @todo Make ApcClassLoader properly decorate ClassLoader.
+    // @see https://github.com/symfony/symfony/pull/5950
+    // @todo Use a different way than variable_get() to switch the class loader.
+    if (variable_get('autoloader_mode', 'default') === 'apc') {
+      require_once DRUPAL_ROOT . '/core/vendor/symfony/class-loader/Symfony/Component/ClassLoader/ApcClassLoader.php';
+      $apc_loader = new ApcClassLoader('drupal.' . $GLOBALS['drupal_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(
+    $loader->addPrefixes(array(
       'Drupal\Core' => DRUPAL_ROOT . '/core/lib',
       'Drupal\Component' => DRUPAL_ROOT . '/core/lib',
     ));
 
     // Register namespaces for vendor libraries managed by Composer.
     $namespaces = require DRUPAL_ROOT . '/core/vendor/composer/autoload_namespaces.php';
-    $prefixes = array();
-    foreach ($namespaces as $namespace => $path) {
-      // Composer combines libraries that use PHP 5.3 namespaces and ones that
-      // use PEAR-style class prefixes in a single array, but the Symfony class
-      // loader requires them to be registered separately. PSR-0 disallows
-      // underscores in namespace names and requires at least one in a
-      // PEAR-style class prefix.
-      if (strpos($namespace, '_') !== FALSE) {
-        $prefixes[$namespace] = $path;
-        unset($namespaces[$namespace]);
-      }
-    }
-    $loader->registerPrefixes($prefixes);
-    $loader->registerNamespaces($namespaces);
+    $loader->addPrefixes($namespaces);
 
     // Register the loader with PHP.
     $loader->register();
@@ -3166,7 +3154,7 @@ function drupal_classloader() {
  */
 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 25c0a1a..cbc7d69 100644
--- a/core/lib/Drupal/Core/DrupalKernel.php
+++ b/core/lib/Drupal/Core/DrupalKernel.php
@@ -140,7 +140,7 @@ public function registerBundles() {
       $this->moduleList = isset($module_list['enabled']) ? $module_list['enabled'] : array();
     }
 
-    $namespaces = $this->classLoader->getNamespaces();
+    $namespaces = $this->classLoader->getPrefixes();
     foreach ($this->moduleList as $module => $weight) {
       // When installing new modules, the modules in the list passed to
       // updateModules() do not yet have their namespace registered.
diff --git a/core/lib/Drupal/Core/Plugin/Discovery/AnnotatedClassDiscovery.php b/core/lib/Drupal/Core/Plugin/Discovery/AnnotatedClassDiscovery.php
index bd89a92..34a145c 100644
--- a/core/lib/Drupal/Core/Plugin/Discovery/AnnotatedClassDiscovery.php
+++ b/core/lib/Drupal/Core/Plugin/Discovery/AnnotatedClassDiscovery.php
@@ -47,14 +47,14 @@ public function getDefinitions() {
 
     // Register the namespace of classes that can be used for annotations.
     AnnotationRegistry::registerAutoloadNamespace('Drupal\Core\Annotation', array(DRUPAL_ROOT . '/core/lib'));
-    // Get all PSR-0 namespaces.
-    $namespaces = drupal_classloader()->getNamespaces();
-    foreach ($namespaces as $ns => $namespace_dirs) {
+    // Get all PSR-0 prefixes.
+    $prefixes = drupal_classloader()->getPrefixes();
+    foreach ($prefixes as $ns => $prefix_dirs) {
 
       // OS-Safe directory separators.
       $ns = str_replace('\\', DIRECTORY_SEPARATOR, $ns);
 
-      foreach ($namespace_dirs as $dir) {
+      foreach ($prefix_dirs as $dir) {
         // Check for the pre-determined directory structure to find plugins.
         $prefix = implode(DIRECTORY_SEPARATOR, array(
           $ns,
