diff --git a/core/lib/Drupal/Core/Action/ActionBag.php b/core/lib/Drupal/Core/Action/ActionBag.php
index 51c9fd7..b7ccdb5 100644
--- a/core/lib/Drupal/Core/Action/ActionBag.php
+++ b/core/lib/Drupal/Core/Action/ActionBag.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\Core\Action;
 
-use Drupal\Component\Plugin\DefaultSinglePluginBag;
+use Drupal\Core\Plugin\DefaultSinglePluginBag;
 
 /**
  * Provides a container for lazily loading Action plugins.
diff --git a/core/lib/Drupal/Core/Plugin/DefaultPluginBag.php b/core/lib/Drupal/Core/Plugin/DefaultPluginBag.php
new file mode 100644
index 0000000..ff6d922
--- /dev/null
+++ b/core/lib/Drupal/Core/Plugin/DefaultPluginBag.php
@@ -0,0 +1,178 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Plugin\DefaultPluginBag.
+ */
+
+namespace Drupal\Core\Plugin;
+
+use Drupal\Component\Plugin\Exception\PluginNotFoundException;
+use Drupal\Component\Plugin\PluginBag;
+use Drupal\Component\Plugin\PluginManagerInterface;
+use Drupal\Component\Plugin\ConfigurablePluginInterface;
+
+/**
+ * Provides a default plugin bag for a plugin type.
+ *
+ * A plugin bag is used to contain plugins that will be lazily instantiated. The
+ * configurations of each potential plugin are passed in, and the configuration
+ * key containing the plugin ID is specified by self::$pluginKey.
+ */
+class DefaultPluginBag extends PluginBag {
+
+  /**
+   * The manager used to instantiate the plugins.
+   *
+   * @var \Drupal\Component\Plugin\PluginManagerInterface
+   */
+  protected $manager;
+
+  /**
+   * The initial configuration for each plugin in the bag.
+   *
+   * @var array
+   *   An associative array containing the initial configuration for each plugin
+   *   in the bag, keyed by plugin instance ID.
+   */
+  protected $configurations = array();
+
+  /**
+   * The key within the plugin configuration that contains the plugin ID.
+   *
+   * @var string
+   */
+  protected $pluginKey = 'id';
+
+  /**
+   * The original order of the instances.
+   *
+   * @var array
+   */
+  protected $originalOrder = array();
+
+  /**
+   * Constructs a new DefaultPluginBag object.
+   *
+   * @param \Drupal\Component\Plugin\PluginManagerInterface $manager
+   *   The manager to be used for instantiating plugins.
+   * @param array $configurations
+   *   (optional) An associative array containing the initial configuration for
+   *   each plugin in the bag, keyed by plugin instance ID.
+   */
+  public function __construct(PluginManagerInterface $manager, array $configurations = array()) {
+    $this->manager = $manager;
+    $this->configurations = $configurations;
+
+    if (!empty($configurations)) {
+      $instance_ids = array_keys($configurations);
+      $this->instanceIDs = array_combine($instance_ids, $instance_ids);
+      // Store the original order of the instance IDs for export.
+      $this->originalOrder = $this->instanceIDs;
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function initializePlugin($instance_id) {
+    $configuration = isset($this->configurations[$instance_id]) ? $this->configurations[$instance_id] : array();
+    if (!isset($configuration[$this->pluginKey])) {
+      throw new PluginNotFoundException($instance_id);
+    }
+    $this->set($instance_id, $this->manager->createInstance($configuration[$this->pluginKey], $configuration));
+  }
+
+  /**
+   * Sorts all plugin instances in this bag.
+   *
+   * @return self
+   *   Returns the plugin bag.
+   */
+  public function sort() {
+    uasort($this->instanceIDs, array($this, 'sortHelper'));
+    return $this;
+  }
+
+  /**
+   * Provides uasort() callback to sort plugins.
+   */
+  public function sortHelper($aID, $bID) {
+    $a = $this->get($aID);
+    $b = $this->get($bID);
+    return strnatcasecmp($a->getPluginId(), $b->getPluginId());
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getConfiguration() {
+    $instances = array();
+    $this->rewind();
+    // Store the current order of the instances.
+    $current_order = $this->instanceIDs;
+    // Reorder the instances to match the original order, adding new instances
+    // to the end.
+    $this->instanceIDs = $this->originalOrder + $current_order;
+
+    foreach ($this as $instance_id => $instance) {
+      if ($instance instanceof ConfigurablePluginInterface) {
+        $instances[$instance_id] = $instance->getConfiguration();
+      }
+      else {
+        $instances[$instance_id] = $this->configurations[$instance_id];
+      }
+    }
+    // Restore the current order.
+    $this->instanceIDs = $current_order;
+    return $instances;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setConfiguration($configuration) {
+    foreach ($configuration as $instance_id => $instance_configuration) {
+      $this->setInstanceConfiguration($instance_id, $instance_configuration);
+    }
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setInstanceIds(array $instance_ids) {
+    parent::setInstanceIds($instance_ids);
+    // Ensure the new order matches the original order.
+    $this->instanceIDs = $this->originalOrder = array_intersect_assoc($this->originalOrder, $this->instanceIDs);
+  }
+
+  /**
+   * Updates the configuration for a plugin instance.
+   *
+   * If there is no plugin instance yet, a new will be instantiated. Otherwise,
+   * the existing instance is updated with the new configuration.
+   *
+   * @param string $instance_id
+   *   The ID of a plugin to set the configuration for.
+   * @param array $configuration
+   *   The plugin configuration to set.
+   */
+  public function setInstanceConfiguration($instance_id, array $configuration) {
+    $this->configurations[$instance_id] = $configuration;
+    $instance = $this->get($instance_id);
+    if ($instance instanceof ConfigurablePluginInterface) {
+      $instance->setConfiguration($configuration);
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function removeInstanceId($instance_id) {
+    parent::removeInstanceId($instance_id);
+    unset($this->originalOrder[$instance_id]);
+    unset($this->configurations[$instance_id]);
+  }
+
+}
diff --git a/core/lib/Drupal/Core/Plugin/DefaultSinglePluginBag.php b/core/lib/Drupal/Core/Plugin/DefaultSinglePluginBag.php
new file mode 100644
index 0000000..7b1c816
--- /dev/null
+++ b/core/lib/Drupal/Core/Plugin/DefaultSinglePluginBag.php
@@ -0,0 +1,96 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Plugin\DefaultSinglePluginBag.
+ */
+
+namespace Drupal\Core\Plugin;
+
+use Drupal\Component\Plugin\PluginManagerInterface;
+use Drupal\Component\Plugin\PluginBag;
+use Drupal\Component\Plugin\ConfigurablePluginInterface;
+
+/**
+ * Provides a default plugin bag for a plugin type.
+ *
+ * A plugin bag usually stores multiple plugins, and is used to lazily
+ * instantiate them. When only one plugin is needed, it is still best practice
+ * to encapsulate all of the instantiation logic in a plugin bag. This class can
+ * be used directly, or subclassed to add further exception handling in
+ * self::initializePlugin().
+ */
+class DefaultSinglePluginBag extends PluginBag {
+
+  /**
+   * The manager used to instantiate the plugins.
+   *
+   * @var \Drupal\Component\Plugin\PluginManagerInterface
+   */
+  protected $manager;
+
+  /**
+   * An array of configuration to instantiate the plugin with.
+   *
+   * @var array
+   */
+  protected $configuration;
+
+  /**
+   * The instance ID used for this plugin bag.
+   *
+   * @var string
+   */
+  protected $instanceId;
+
+  /**
+   * Constructs a new DefaultSinglePluginBag object.
+   *
+   * @param \Drupal\Component\Plugin\PluginManagerInterface $manager
+   *   The manager to be used for instantiating plugins.
+   * @param string $instance_id
+   *   The ID of the plugin instance.
+   * @param array $configuration
+   *   An array of configuration.
+   */
+  public function __construct(PluginManagerInterface $manager, $instance_id, array $configuration) {
+    $this->manager = $manager;
+    $this->instanceId = $instance_id;
+    // This is still needed by the parent PluginBag class.
+    $this->instanceIDs = array($instance_id => $instance_id);
+    $this->configuration = $configuration;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function initializePlugin($instance_id) {
+    $this->set($instance_id, $this->manager->createInstance($instance_id, $this->configuration));
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getConfiguration() {
+    $plugin = $this->get($this->instanceId);
+    if ($plugin instanceof ConfigurablePluginInterface) {
+      return $plugin->getConfiguration();
+    }
+    else {
+      return $this->configuration;
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setConfiguration($configuration) {
+    $plugin = $this->get($this->instanceId);
+    if ($plugin instanceof ConfigurablePluginInterface) {
+      $plugin->setConfiguration($configuration);
+    }
+    $this->configuration = $configuration;
+    return $this;
+  }
+
+}
diff --git a/core/modules/block/lib/Drupal/block/BlockPluginBag.php b/core/modules/block/lib/Drupal/block/BlockPluginBag.php
index 51f927a..d1f4fbb 100644
--- a/core/modules/block/lib/Drupal/block/BlockPluginBag.php
+++ b/core/modules/block/lib/Drupal/block/BlockPluginBag.php
@@ -10,7 +10,7 @@
 use Drupal\Component\Plugin\Exception\PluginException;
 use Drupal\Component\Plugin\PluginManagerInterface;
 use Drupal\Component\Utility\String;
-use Drupal\Component\Plugin\DefaultSinglePluginBag;
+use Drupal\Core\Plugin\DefaultSinglePluginBag;
 
 /**
  * Provides a collection of block plugins.
diff --git a/core/modules/filter/lib/Drupal/filter/FilterBag.php b/core/modules/filter/lib/Drupal/filter/FilterBag.php
index 2885641..970e7e8 100644
--- a/core/modules/filter/lib/Drupal/filter/FilterBag.php
+++ b/core/modules/filter/lib/Drupal/filter/FilterBag.php
@@ -8,7 +8,7 @@
 namespace Drupal\filter;
 
 use Drupal\Component\Utility\NestedArray;
-use Drupal\Component\Plugin\DefaultPluginBag;
+use Drupal\Core\Plugin\DefaultPluginBag;
 
 /**
  * A collection of filters.
diff --git a/core/modules/image/lib/Drupal/image/ImageEffectBag.php b/core/modules/image/lib/Drupal/image/ImageEffectBag.php
index 97201ec..2dc76a3 100644
--- a/core/modules/image/lib/Drupal/image/ImageEffectBag.php
+++ b/core/modules/image/lib/Drupal/image/ImageEffectBag.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\image;
 
-use Drupal\Component\Plugin\DefaultPluginBag;
+use Drupal\Core\Plugin\DefaultPluginBag;
 
 /**
  * A collection of image effects.
diff --git a/core/modules/search/lib/Drupal/search/Plugin/SearchPluginBag.php b/core/modules/search/lib/Drupal/search/Plugin/SearchPluginBag.php
index 7bcfa5f..fc4612c 100644
--- a/core/modules/search/lib/Drupal/search/Plugin/SearchPluginBag.php
+++ b/core/modules/search/lib/Drupal/search/Plugin/SearchPluginBag.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\search\Plugin;
 
-use Drupal\Component\Plugin\DefaultSinglePluginBag;
+use Drupal\Core\Plugin\DefaultSinglePluginBag;
 use Drupal\Component\Plugin\PluginManagerInterface;
 
 /**
diff --git a/core/modules/tour/lib/Drupal/tour/TipsBag.php b/core/modules/tour/lib/Drupal/tour/TipsBag.php
index 753169a..337d3dc 100644
--- a/core/modules/tour/lib/Drupal/tour/TipsBag.php
+++ b/core/modules/tour/lib/Drupal/tour/TipsBag.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\tour;
 
-use Drupal\Component\Plugin\DefaultPluginBag;
+use Drupal\Core\Plugin\DefaultPluginBag;
 
 /**
  * A collection of tips.
diff --git a/core/modules/views/lib/Drupal/views/DisplayBag.php b/core/modules/views/lib/Drupal/views/DisplayBag.php
index fc0d75c..a724745 100644
--- a/core/modules/views/lib/Drupal/views/DisplayBag.php
+++ b/core/modules/views/lib/Drupal/views/DisplayBag.php
@@ -9,7 +9,7 @@
 
 use Drupal\Component\Plugin\Exception\PluginException;
 use Drupal\Component\Plugin\PluginManagerInterface;
-use Drupal\Component\Plugin\DefaultPluginBag;
+use Drupal\Core\Plugin\DefaultPluginBag;
 
 /**
  * A class which wraps the displays of a view so you can lazy-initialize them.
diff --git a/core/tests/Drupal/Tests/Component/Plugin/ConfigurablePluginBagTest.php b/core/tests/Drupal/Tests/Component/Plugin/ConfigurablePluginBagTest.php
index 735dd7b..721f3c5 100644
--- a/core/tests/Drupal/Tests/Component/Plugin/ConfigurablePluginBagTest.php
+++ b/core/tests/Drupal/Tests/Component/Plugin/ConfigurablePluginBagTest.php
@@ -14,7 +14,7 @@
  * Tests the default plugin bag with configurable plugins.
  *
  * @see \Drupal\Component\Plugin\ConfigurablePluginInterface
- * @see \Drupal\Component\Plugin\DefaultPluginBag
+ * @see \Drupal\Core\Plugin\DefaultPluginBag
  *
  * @group Drupal
  * @group Drupal_Plugin
diff --git a/core/tests/Drupal/Tests/Component/Plugin/DefaultPluginBagTest.php b/core/tests/Drupal/Tests/Component/Plugin/DefaultPluginBagTest.php
index 1dc33d9..cf2c9b5 100644
--- a/core/tests/Drupal/Tests/Component/Plugin/DefaultPluginBagTest.php
+++ b/core/tests/Drupal/Tests/Component/Plugin/DefaultPluginBagTest.php
@@ -10,7 +10,7 @@
 /**
  * Tests the default plugin bag.
  *
- * @see \Drupal\Component\Plugin\DefaultPluginBag
+ * @see \Drupal\Core\Plugin\DefaultPluginBag
  *
  * @group Drupal
  * @group Drupal_Plugin
@@ -31,7 +31,7 @@ public static function getInfo() {
   /**
    * Tests the has method.
    *
-   * @see \Drupal\Component\Plugin\DefaultPluginBag::has()
+   * @see \Drupal\Core\Plugin\DefaultPluginBag::has()
    */
   public function testHas() {
     $this->setupPluginBag();
@@ -47,7 +47,7 @@ public function testHas() {
   /**
    * Tests the get method.
    *
-   * @see \Drupal\Component\Plugin\DefaultPluginBag::get()
+   * @see \Drupal\Core\Plugin\DefaultPluginBag::get()
    */
   public function testGet() {
     $this->setupPluginBag($this->once());
@@ -105,7 +105,7 @@ public function testSortHelper($plugin_id_1, $plugin_id_2, $expected) {
   /**
    * Tests the configuration getter method.
    *
-   * @see \Drupal\Component\Plugin\DefaultPluginBag::getConfiguration()
+   * @see \Drupal\Core\Plugin\DefaultPluginBag::getConfiguration()
    */
   public function testGetConfiguration() {
     $this->setupPluginBag($this->exactly(3));
@@ -130,7 +130,7 @@ public function testGetConfiguration() {
   /**
    * Tests the removeInstanceId() method.
    *
-   * @see \Drupal\Component\Plugin\DefaultPluginBag::removeInstanceId()
+   * @see \Drupal\Core\Plugin\DefaultPluginBag::removeInstanceId()
    */
   public function testRemoveInstanceId() {
     $this->setupPluginBag($this->exactly(2));
@@ -142,7 +142,7 @@ public function testRemoveInstanceId() {
   /**
    * Tests the setInstanceConfiguration() method.
    *
-   * @see \Drupal\Component\Plugin\DefaultPluginBag::setInstanceConfiguration()
+   * @see \Drupal\Core\Plugin\DefaultPluginBag::setInstanceConfiguration()
    */
   public function testSetInstanceConfiguration() {
     $this->setupPluginBag($this->exactly(3));
diff --git a/core/tests/Drupal/Tests/Component/Plugin/DefaultSinglePluginBagTest.php b/core/tests/Drupal/Tests/Component/Plugin/DefaultSinglePluginBagTest.php
index 65bba15..fa0d367 100644
--- a/core/tests/Drupal/Tests/Component/Plugin/DefaultSinglePluginBagTest.php
+++ b/core/tests/Drupal/Tests/Component/Plugin/DefaultSinglePluginBagTest.php
@@ -7,12 +7,12 @@
 
 namespace Drupal\Tests\Component\Plugin;
 
-use Drupal\Component\Plugin\DefaultSinglePluginBag;
+use Drupal\Core\Plugin\DefaultSinglePluginBag;
 
 /**
  * Tests the default single plugin bag.
  *
- * @see \Drupal\Component\Plugin\DefaultSinglePluginBag
+ * @see \Drupal\Core\Plugin\DefaultSinglePluginBag
  *
  * @group Drupal
  * @group Drupal_Plugin
diff --git a/core/tests/Drupal/Tests/Component/Plugin/PluginBagTestBase.php b/core/tests/Drupal/Tests/Component/Plugin/PluginBagTestBase.php
index 461321d..8bdcdb9 100644
--- a/core/tests/Drupal/Tests/Component/Plugin/PluginBagTestBase.php
+++ b/core/tests/Drupal/Tests/Component/Plugin/PluginBagTestBase.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\Tests\Component\Plugin;
 
-use Drupal\Component\Plugin\DefaultPluginBag;
+use Drupal\Core\Plugin\DefaultPluginBag;
 use Drupal\Tests\UnitTestCase;
 
 /**
@@ -25,7 +25,7 @@
   /**
    * The tested plugin bag.
    *
-   * @var \Drupal\Component\Plugin\DefaultPluginBag|\PHPUnit_Framework_MockObject_MockObject
+   * @var \Drupal\Core\Plugin\DefaultPluginBag|\PHPUnit_Framework_MockObject_MockObject
    */
   protected $defaultPluginBag;
 
