diff --git a/core/lib/Drupal/Core/Config/ConfigInstaller.php b/core/lib/Drupal/Core/Config/ConfigInstaller.php
index 6c0bd7e..9719fff 100644
--- a/core/lib/Drupal/Core/Config/ConfigInstaller.php
+++ b/core/lib/Drupal/Core/Config/ConfigInstaller.php
@@ -281,9 +281,16 @@ protected function createConfiguration($collection, array $config_to_create) {
       }
       else {
         $new_config = new Config($name, $this->getActiveStorages($collection), $this->eventDispatcher, $this->typedConfig);
+        // Create a copy of the original configuration for later reference.
+        if ($collection == StorageInterface::DEFAULT_COLLECTION) {
+          $config_copy = new Config($name, $this->getActiveStorages(StorageInterface::ORIGINAL_COPY_COLLECTION), $this->eventDispatcher, $this->typedConfig);
+        }
       }
       if ($config_to_create[$name] !== FALSE) {
         $new_config->setData($config_to_create[$name]);
+        if (isset($config_copy)) {
+          $config_copy->setData($config_to_create[$name])->save();
+        }
       }
       if ($config_entity_support && $entity_type = $this->configManager->getEntityTypeIdByName($name)) {
         // If we are syncing do not create configuration entities. Pluggable
diff --git a/core/lib/Drupal/Core/Config/FileStorage.php b/core/lib/Drupal/Core/Config/FileStorage.php
index de3ac80..7e705d8 100644
--- a/core/lib/Drupal/Core/Config/FileStorage.php
+++ b/core/lib/Drupal/Core/Config/FileStorage.php
@@ -231,7 +231,7 @@ public function deleteAll($prefix = '') {
     }
     if ($success && $this->collection != StorageInterface::DEFAULT_COLLECTION) {
       // Remove empty directories.
-      if (!(new \FilesystemIterator($this->getCollectionDirectory()))->valid()) {
+      if (file_exists($this->getCollectionDirectory()) && !(new \FilesystemIterator($this->getCollectionDirectory()))->valid()) {
         drupal_rmdir($this->getCollectionDirectory());
       }
     }
diff --git a/core/lib/Drupal/Core/Config/StorageInterface.php b/core/lib/Drupal/Core/Config/StorageInterface.php
index f6145b8..b9ec918 100644
--- a/core/lib/Drupal/Core/Config/StorageInterface.php
+++ b/core/lib/Drupal/Core/Config/StorageInterface.php
@@ -21,6 +21,11 @@
   const DEFAULT_COLLECTION = '';
 
   /**
+   * Collection for storing copies of original configuration.
+   */
+  const ORIGINAL_COPY_COLLECTION = 'originalcopy';
+
+  /**
    * Returns whether a configuration object exists.
    *
    * @param string $name
diff --git a/core/modules/config/src/Tests/ConfigExportUITest.php b/core/modules/config/src/Tests/ConfigExportUITest.php
index 1a679de..b015617 100644
--- a/core/modules/config/src/Tests/ConfigExportUITest.php
+++ b/core/modules/config/src/Tests/ConfigExportUITest.php
@@ -9,6 +9,7 @@
 
 use Drupal\Component\Serialization\Yaml;
 use Drupal\Core\Archiver\Tar;
+use Drupal\Core\Config\StorageInterface;
 use Drupal\simpletest\WebTestBase;
 
 /**
@@ -65,6 +66,11 @@ function testExport() {
     foreach ($storage_active->listAll() as $config_name) {
       $config_files[] = $config_name . '.yml';
     }
+    // Add configuration copies to the list of expected files.
+    $copy_collection = $storage_active->createCollection(StorageInterface::ORIGINAL_COPY_COLLECTION);
+    foreach ($copy_collection->listAll() as $config_name) {
+      $config_files[] = 'originalcopy/' . $config_name . '.yml';
+    }
     // Assert that the downloaded archive file contents are the same as the test
     // site active store.
     $this->assertIdentical($archive_contents, $config_files);
diff --git a/core/modules/config/src/Tests/ConfigInstallTest.php b/core/modules/config/src/Tests/ConfigInstallTest.php
index 2d09548..70bc3b7 100644
--- a/core/modules/config/src/Tests/ConfigInstallTest.php
+++ b/core/modules/config/src/Tests/ConfigInstallTest.php
@@ -174,6 +174,7 @@ public function testCollectionInstallationCollections() {
   public function testCollectionInstallationCollectionConfigEntity() {
     $collections = array(
       'entity',
+      StorageInterface::ORIGINAL_COPY_COLLECTION,
     );
     \Drupal::state()->set('config_collection_install_test.collection_names', $collections);
     // Install the test module.
diff --git a/core/modules/config/tests/config_import_test/src/EventSubscriber.php b/core/modules/config/tests/config_import_test/src/EventSubscriber.php
index 1a56829..69d7336 100644
--- a/core/modules/config/tests/config_import_test/src/EventSubscriber.php
+++ b/core/modules/config/tests/config_import_test/src/EventSubscriber.php
@@ -11,6 +11,7 @@
 use Drupal\Core\Config\ConfigEvents;
 use Drupal\Core\Config\ConfigImporterEvent;
 use Drupal\Core\Config\Importer\MissingContentEvent;
+use Drupal\Core\Config\StorageInterface;
 use Drupal\Core\State\StateInterface;
 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
 
@@ -92,7 +93,7 @@ public function onConfigImporterMissingContentTwo(MissingContentEvent $event) {
    */
   public function onConfigSave(ConfigCrudEvent $event) {
     $config = $event->getConfig();
-    if ($config->getName() == 'action.settings') {
+    if ($config->getStorage()->getCollectionName() == StorageInterface::DEFAULT_COLLECTION && $config->getName() == 'action.settings') {
       $values = $this->state->get('ConfigImportUITest.action.settings.recursion_limit', array());
       $values[] = $config->get('recursion_limit');
       $this->state->set('ConfigImportUITest.action.settings.recursion_limit', $values);
@@ -124,7 +125,7 @@ public function onConfigSave(ConfigCrudEvent $event) {
    */
   public function onConfigDelete(ConfigCrudEvent $event) {
     $config = $event->getConfig();
-    if ($config->getName() == 'action.settings') {
+    if ($config->getStorage()->getCollectionName() == StorageInterface::DEFAULT_COLLECTION && $config->getName() == 'action.settings') {
       $value = $this->state->get('ConfigImportUITest.action.settings.delete', 0);
       $this->state->set('ConfigImportUITest.action.settings.delete', $value + 1);
     }
diff --git a/core/modules/simpletest/src/TestBase.php b/core/modules/simpletest/src/TestBase.php
index 9078d39..2fb5cf6 100644
--- a/core/modules/simpletest/src/TestBase.php
+++ b/core/modules/simpletest/src/TestBase.php
@@ -1629,9 +1629,15 @@ public function configImporter() {
    *   The target config storage service.
    */
   public function copyConfig(StorageInterface $source_storage, StorageInterface $target_storage) {
-    $target_storage->deleteAll();
-    foreach ($source_storage->listAll() as $name) {
-      $target_storage->write($name, $source_storage->read($name));
+    $collections = $source_storage->getAllCollectionNames();
+    $collections[] = StorageInterface::DEFAULT_COLLECTION;
+    foreach ($collections as $collection) {
+      $source_collection = $source_storage->createCollection($collection);
+      $target_collection = $target_storage->createCollection($collection);
+      $target_collection->deleteAll();
+      foreach ($source_collection->listAll() as $name) {
+        $target_collection->write($name, $source_collection->read($name));
+      }
     }
   }
 
