diff --git a/core/includes/config.inc b/core/includes/config.inc
index b4a0666..d9ef879 100644
--- a/core/includes/config.inc
+++ b/core/includes/config.inc
@@ -200,6 +200,7 @@ function config_sync_changes(array $config_changes, StorageInterface $source_sto
 function config_import() {
   // Retrieve a list of differences between staging and the active configuration.
   $source_storage = drupal_container()->get('config.storage.staging');
+  $snapshot_storage = drupal_container()->get('config.storage.snapshot');
   $target_storage = drupal_container()->get('config.storage');
 
   $config_changes = config_sync_get_changes($source_storage, $target_storage);
@@ -220,6 +221,7 @@ function config_import() {
   try {
     $remaining_changes = config_import_invoke_owner($config_changes, $source_storage, $target_storage);
     config_sync_changes($remaining_changes, $source_storage, $target_storage);
+    config_import_create_snapshot($target_storage, $snapshot_storage);
   }
   catch (ConfigException $e) {
     watchdog_exception('config_import', $e);
@@ -231,6 +233,21 @@ function config_import() {
 }
 
 /**
+ * Creates a configuration snapshot following a successful import.
+ *
+ * @param Drupal\Core\Config\StorageInterface $source_storage
+ *   The storage to synchronize configuration from.
+ * @param Drupal\Core\Config\StorageInterface $target_storage
+ *   The storage to synchronize configuration to.
+ */
+function config_import_create_snapshot(StorageInterface $source_storage, StorageInterface $snapshot_storage) {
+  $snapshot_storage->deleteAll();
+  foreach ($source_storage->listAll() as $name) {
+    $snapshot_storage->write($name, $source_storage->read($name));
+  }
+}
+
+/**
  * Invokes MODULE_config_import() callbacks for configuration changes.
  *
  * @param array $config_changes
diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc
index 819e671..4036627 100644
--- a/core/includes/install.core.inc
+++ b/core/includes/install.core.inc
@@ -1828,6 +1828,11 @@ function install_finished(&$install_state) {
   // Will also trigger indexing of profile-supplied content or feeds.
   drupal_cron_run();
 
+  // Save a snapshot of the intially installed configuration.
+  $active = drupal_container()->get('config.storage');
+  $snapshot = drupal_container()->get('config.storage.snapshot');
+  config_import_create_snapshot($active, $snapshot);
+
   return $output;
 }
 
diff --git a/core/lib/Drupal/Core/CoreBundle.php b/core/lib/Drupal/Core/CoreBundle.php
index 4ec42b9..10ad858 100644
--- a/core/lib/Drupal/Core/CoreBundle.php
+++ b/core/lib/Drupal/Core/CoreBundle.php
@@ -62,6 +62,12 @@ public function build(ContainerBuilder $container) {
       ->register('config.storage.staging', 'Drupal\Core\Config\FileStorage')
       ->addArgument(config_get_config_directory(CONFIG_STAGING_DIRECTORY));
 
+    // Register import snapshot configuration storage.
+    $container
+      ->register('config.storage.snapshot', 'Drupal\Core\Config\DatabaseStorage')
+      ->addArgument(new Reference('database'))
+      ->addArgument('config_snapshot');
+
     // Register the typed configuration data manager.
     $container->register('config.typed', 'Drupal\Core\Config\TypedConfigManager')
       ->addArgument(new Reference('config.storage'));
diff --git a/core/modules/config/lib/Drupal/config/Tests/ConfigSnapshotTest.php b/core/modules/config/lib/Drupal/config/Tests/ConfigSnapshotTest.php
new file mode 100644
index 0000000..325e3c1
--- /dev/null
+++ b/core/modules/config/lib/Drupal/config/Tests/ConfigSnapshotTest.php
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\config\Tests\ConfigSnapshotTest.
+ */
+
+namespace Drupal\config\Tests;
+
+use Drupal\simpletest\WebTestBase;
+
+/**
+ * Tests config snapshot creation and updating.
+ */
+class ConfigSnapshotTest extends WebTestBase {
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Snapshot functionality',
+      'description' => 'Config snapshot creation and updating.',
+      'group' => 'Configuration',
+    );
+  }
+
+  /**
+   * Tests config snapshot creation and updating.
+   */
+  function testSnapshot() {
+    $active = $this->container->get('config.storage');
+    $staging = $this->container->get('config.storage.staging');
+    $snapshot = $this->container->get('config.storage.snapshot');
+
+    $config_name = 'system.performance';
+    $config_key = 'cache.page.max_age';
+    $original_data = '0';
+    $new_data = '10';
+
+    // Verify that we have an initial snapshot that matches the active
+    // configuration.
+    $this->assertFalse(config_sync_get_changes($snapshot, $active));
+
+    // Change a configuration value in staging.
+    $staging->write($config_name, $staging_data);
+
+    // Verify that active and snapshot match, and that staging doesn't match
+    // either of them.
+    $this->assertFalse(config_sync_get_changes($snapshot, $active));
+    $this->assertTrue(config_sync_get_changes($snapshot, $staging));
+    $this->assertTrue(config_sync_get_changes($staging, $active));
+
+    // Import changed data from staging to active.
+    config_import();
+
+    // Verify changed config was properly imported.
+    $this->assertIdentical(config($config_name)->get($config_key), $new_data);
+
+    // Verify that a new snapshot was created which and that it matches
+    // the active config.
+    $this->assertFalse(config_sync_get_changes($snapshot, $active));
+  }
+
+}
\ No newline at end of file
diff --git a/core/modules/system/system.install b/core/modules/system/system.install
index 7b9effa..dbbaf70 100644
--- a/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -1377,6 +1377,26 @@ function system_schema() {
     ),
   );
 
+  $schema['config_snapshot'] = array(
+    'description' => 'Stores a snapshot of the last imported configuration.',
+    'fields' => array(
+      'name' => array(
+        'description' => 'The identifier for the config object (the name of the file, minus the file extension).',
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => TRUE,
+        'default' => '',
+      ),
+      'data' => array(
+        'description' => 'The raw data for this configuration object.',
+        'type' => 'blob',
+        'not null' => TRUE,
+        'size' => 'big',
+      ),
+    ),
+    'primary key' => array('name'),
+  );
+
   return $schema;
 }
 
