diff --git a/lib/Drupal/configuration/Config/Configuration.php b/lib/Drupal/configuration/Config/Configuration.php
index 373f981..ee8a43b 100644
--- a/lib/Drupal/configuration/Config/Configuration.php
+++ b/lib/Drupal/configuration/Config/Configuration.php
@@ -155,10 +155,16 @@ class Configuration {
     return $list_of_components;
   }
 
+  public function loadFromActiveStore() {
+    $this->build();
+    $this->buildHash();
+    return $this;
+  }
+
   /**
    * Load the Configuration data from the disk.
    */
-  protected function loadFromStorage() {
+  public function loadFromStorage() {
     $this->storage->load();
     $this->setData($this->storage->getData());
     $this->setDependencies($this->storage->getDependencies());
@@ -176,7 +182,7 @@ class Configuration {
    * Load the configuration data using the information saved in the
    * configuration_staging table.
    */
-  protected function loadFromStaging() {
+  public function loadFromStaging() {
     $object = db_select('configuration_staging', 'cs')
                         ->fields('cs')
                         ->condition('component', $this->getComponent())
@@ -451,7 +457,7 @@ class Configuration {
   }
 
   public function saveToActiveStore(ConfigIteratorSettings &$settings) {
-    // Override
+
   }
 
   static public function exportToDataStore($list = array(), $export_dependencies = TRUE, $export_optionals = TRUE, $start_tracking = FALSE) {
@@ -502,7 +508,7 @@ class Configuration {
             ->save();
 
     if ($settings->getSetting('start_tracking')) {
-      $this->setHash($this->storage->getHash());
+      $this->buildHash();
       $settings->addInfo('hash', $this->getHash());
       $this->saveToStaging();
     }
@@ -566,6 +572,18 @@ class Configuration {
     return $this;
   }
 
+  public function buildHash() {
+    $this->storage
+        ->setData($this->data)
+        ->setKeysToExport($this->getKeysToExport())
+        ->setDependencies(drupal_map_assoc(array_keys($this->getDependencies())))
+        ->setOptionalConfigurations(drupal_map_assoc(array_keys($this->getOptionalConfigurations())))
+        ->setModules(array_keys($this->getRequiredModules()))
+        ->save();
+    $this->storage->getDataToSave();
+    $this->setHash($this->storage->getHash());
+  }
+
   /**
    * Provides the differences between two configurations of the same component.
    */
diff --git a/lib/Drupal/configuration/Config/ContentTypeConfiguration.php b/lib/Drupal/configuration/Config/ContentTypeConfiguration.php
index 524036d..fbebe14 100644
--- a/lib/Drupal/configuration/Config/ContentTypeConfiguration.php
+++ b/lib/Drupal/configuration/Config/ContentTypeConfiguration.php
@@ -8,6 +8,7 @@
 namespace Drupal\configuration\Config;
 
 use Drupal\configuration\Config\Configuration;
+use Drupal\configuration\Utils\ConfigIteratorSettings;
 
 class ContentTypeConfiguration extends Configuration {
 
diff --git a/lib/Drupal/configuration/Config/CtoolsConfiguration.php b/lib/Drupal/configuration/Config/CtoolsConfiguration.php
index 48e99cb..9170180 100644
--- a/lib/Drupal/configuration/Config/CtoolsConfiguration.php
+++ b/lib/Drupal/configuration/Config/CtoolsConfiguration.php
@@ -8,6 +8,7 @@
 namespace Drupal\configuration\Config;
 
 use Drupal\configuration\Config\Configuration;
+use Drupal\configuration\Utils\ConfigIteratorSettings;
 
 abstract class CtoolsConfiguration extends Configuration {
 
diff --git a/lib/Drupal/configuration/Config/FieldConfiguration.php b/lib/Drupal/configuration/Config/FieldConfiguration.php
index c9c6eeb..ceb11fc 100644
--- a/lib/Drupal/configuration/Config/FieldConfiguration.php
+++ b/lib/Drupal/configuration/Config/FieldConfiguration.php
@@ -8,6 +8,7 @@
 namespace Drupal\configuration\Config;
 
 use Drupal\configuration\Config\Configuration;
+use Drupal\configuration\Utils\ConfigIteratorSettings;
 
 class FieldConfiguration extends Configuration {
 
diff --git a/lib/Drupal/configuration/Config/ImageStyleConfiguration.php b/lib/Drupal/configuration/Config/ImageStyleConfiguration.php
index 2c21670..de19ace 100644
--- a/lib/Drupal/configuration/Config/ImageStyleConfiguration.php
+++ b/lib/Drupal/configuration/Config/ImageStyleConfiguration.php
@@ -8,6 +8,7 @@
 namespace Drupal\configuration\Config;
 
 use Drupal\configuration\Config\Configuration;
+use Drupal\configuration\Utils\ConfigIteratorSettings;
 
 class ImageStyleConfiguration extends Configuration {
 
diff --git a/lib/Drupal/configuration/Config/MenuConfiguration.php b/lib/Drupal/configuration/Config/MenuConfiguration.php
index a091c37..e3d738d 100644
--- a/lib/Drupal/configuration/Config/MenuConfiguration.php
+++ b/lib/Drupal/configuration/Config/MenuConfiguration.php
@@ -8,6 +8,7 @@
 namespace Drupal\configuration\Config;
 
 use Drupal\configuration\Config\Configuration;
+use Drupal\configuration\Utils\ConfigIteratorSettings;
 
 class MenuConfiguration extends Configuration {
 
diff --git a/lib/Drupal/configuration/Config/MenuLinkConfiguration.php b/lib/Drupal/configuration/Config/MenuLinkConfiguration.php
index 8c58fb9..0574fbc 100644
--- a/lib/Drupal/configuration/Config/MenuLinkConfiguration.php
+++ b/lib/Drupal/configuration/Config/MenuLinkConfiguration.php
@@ -8,6 +8,7 @@
 namespace Drupal\configuration\Config;
 
 use Drupal\configuration\Config\Configuration;
+use Drupal\configuration\Utils\ConfigIteratorSettings;
 
 class MenuLinkConfiguration extends Configuration {
 
diff --git a/lib/Drupal/configuration/Config/PermissionConfiguration.php b/lib/Drupal/configuration/Config/PermissionConfiguration.php
index 80785f2..b02083a 100644
--- a/lib/Drupal/configuration/Config/PermissionConfiguration.php
+++ b/lib/Drupal/configuration/Config/PermissionConfiguration.php
@@ -8,6 +8,7 @@
 namespace Drupal\configuration\Config;
 
 use Drupal\configuration\Config\Configuration;
+use Drupal\configuration\Utils\ConfigIteratorSettings;
 
 class PermissionConfiguration extends Configuration {
 
diff --git a/lib/Drupal/configuration/Config/TextFormatConfiguration.php b/lib/Drupal/configuration/Config/TextFormatConfiguration.php
index 0d007f0..1c74da7 100644
--- a/lib/Drupal/configuration/Config/TextFormatConfiguration.php
+++ b/lib/Drupal/configuration/Config/TextFormatConfiguration.php
@@ -8,6 +8,7 @@
 namespace Drupal\configuration\Config;
 
 use Drupal\configuration\Config\Configuration;
+use Drupal\configuration\Utils\ConfigIteratorSettings;
 
 class TextFormatConfiguration extends Configuration {
 
diff --git a/lib/Drupal/configuration/Config/VariableConfiguration.php b/lib/Drupal/configuration/Config/VariableConfiguration.php
index 2a27f02..0cc6c45 100644
--- a/lib/Drupal/configuration/Config/VariableConfiguration.php
+++ b/lib/Drupal/configuration/Config/VariableConfiguration.php
@@ -8,6 +8,7 @@
 namespace Drupal\configuration\Config;
 
 use Drupal\configuration\Config\Configuration;
+use Drupal\configuration\Utils\ConfigIteratorSettings;
 
 class VariableConfiguration extends Configuration {
 
diff --git a/lib/Drupal/configuration/Config/VocabularyConfiguration.php b/lib/Drupal/configuration/Config/VocabularyConfiguration.php
index e5053d0..2bf594c 100644
--- a/lib/Drupal/configuration/Config/VocabularyConfiguration.php
+++ b/lib/Drupal/configuration/Config/VocabularyConfiguration.php
@@ -8,6 +8,7 @@
 namespace Drupal\configuration\Config;
 
 use Drupal\configuration\Config\Configuration;
+use Drupal\configuration\Utils\ConfigIteratorSettings;
 
 class VocabularyConfiguration extends Configuration {
 
diff --git a/tests/configuration.test b/tests/configuration.test
index 7be8cd5..7ad7553 100644
--- a/tests/configuration.test
+++ b/tests/configuration.test
@@ -10,6 +10,7 @@ use Drupal\configuration\Config\Configuration;
  * Base class for functional tests for configuration management.
  */
 class ConfigurationWebTestCase extends DrupalWebTestCase {
+  protected $profile = 'standard';
 
   /**
    * Returns a new vocabulary with random properties.
@@ -37,12 +38,15 @@ class ConfigurationWebTestCase extends DrupalWebTestCase {
     $this->datastore_path = file_directory_temp();
 
     variable_set('configuration_config_path', $this->datastore_path);
-    file_prepare_directory(variable_get('configuration_config_path', $this->datastore_path));
+    $config_path = variable_get('configuration_config_path', $this->datastore_path);
+    file_prepare_directory($config_path);
   }
 }
 
 class ConfigurationApiTest extends ConfigurationWebTestCase {
 
+  protected $configurations;
+
   /**
    * Test info.
    */
@@ -57,7 +61,7 @@ class ConfigurationApiTest extends ConfigurationWebTestCase {
   /**
    * Set up test.
    */
-  public function setUp() {
+  public function setUp($modules = array()) {
     parent::setUp(array(
       'configuration',
       'field',
@@ -66,45 +70,77 @@ class ConfigurationApiTest extends ConfigurationWebTestCase {
       'taxonomy',
     ));
 
-    $this->content_type = $this->drupalCreateContentType();
-    $nodes = array($this->content_type->type => $this->content_type->type);
-    $this->vocabulary = $this->drupalCreateVocabulary($nodes);
-    drupal_flush_all_caches();
+    $this->configurations = array(
+      'variable.field_bundle_settings_node__article',
+      'variable.language_content_type_article',
+      'variable.node_options_article',
+      'variable.node_preview_article',
+      'variable.node_submitted_article',
+      'variable.comment_default_per_page_article',
+      'variable.comment_form_location_article',
+      'variable.comment_preview_article',
+      'variable.comment_subject_field_article',
+      'content_type.article',
+      'field.node.body.article',
+      'vocabulary.tags',
+      'field.node.field_tags.article',
+      'image_style.large',
+      'image_style.medium',
+      'field.node.field_image.article',
+      'permission.create_article_content',
+      'permission.edit_own_article_content',
+      'permission.edit_any_article_content',
+      'permission.delete_own_article_content',
+      'permission.delete_any_article_content',
+    );
+
   }
 
   public function testExportToDatastore() {
+    $results = Configuration::exportToDataStore(array('content_type.article'));
+    $exported = $results->getInfo('exported');
 
-    // This will build the configuration and create the files in config://
-    Configuration::exportToDataStore(array('content_type.' . $this->content_type->type));
-
-    $files = array(
-      'permission.delete_any_IDENTIFIER_content.inc',
-      'permission.delete_own_IDENTIFIER_content.inc',
-      'permission.edit_any_IDENTIFIER_content.inc',
-      'permission.edit_own_IDENTIFIER_content.inc',
-      'permission.create_IDENTIFIER_content.inc',
-      'variable.comment_preview_IDENTIFIER.inc',
-      'variable.comment_subject_field_IDENTIFIER.inc',
-      'variable.comment_default_per_page_IDENTIFIER.inc',
-      'variable.comment_form_location_IDENTIFIER.inc',
-      'variable.node_submitted_IDENTIFIER.inc',
-      'variable.node_options_IDENTIFIER.inc',
-      'variable.node_preview_IDENTIFIER.inc',
-      'variable.language_content_type_IDENTIFIER.inc',
-      //'image_style.medium.inc',
-      'variable.field_bundle_settings_node__IDENTIFIER.inc',
-      //'image_style.large.inc',
-      //'field.node.field_image.IDENTIFIER.inc',
-      //'vocabulary.tags.inc',
-      //'field.node.field_tags.IDENTIFIER.inc',
-      'field.node.body.IDENTIFIER.inc',
-      'content_type.IDENTIFIER.inc',
-    );
-
-    foreach ($files as $file) {
-      $filename = str_replace('IDENTIFIER', $this->content_type->type, $file);
-      $config_file_exists = file_exists($this->datastore_path . '/' . $filename);
-      $this->assertTrue($config_file_exists, "Configuration file $filename was created.");
+    foreach ($this->configurations as $config) {
+      $this->assertTrue(in_array($config, $exported), "Configuration for $config was exported.");
     }
+
+    $count_tracked = db_query("SELECT COUNT(component) FROM {configuration_staging}")->fetchField();
+    $this->assertTrue(empty($count_tracked), "No configurations have been tracked.");
+  }
+
+  public function testStartAndStopTracking() {
+    $results = Configuration::startTracking(array('content_type.article'));
+    $exported = $results->getInfo('exported');
+
+    $count_tracked = db_query("SELECT COUNT(component) FROM {configuration_staging}")->fetchField();
+    $this->assertTrue($count_tracked == count($exported), t("@num of @total configurations have been tracked.", array('@num' => $count_tracked, '@total' => count($exported))));
+
+    $results = Configuration::stopTracking(array('content_type.article'));
+    $count_tracked = db_query("SELECT COUNT(component) FROM {configuration_staging}")->fetchField();
+    $this->assertTrue(empty($count_tracked), "No configurations have been tracked.");
+  }
+
+  public function testRevertActiveStore() {
+    $results = Configuration::startTracking(array('content_type.article'));
+    $exported = $results->getInfo('exported');
+
+    $handler = Configuration::getConfigurationHandler('content_type');
+
+    $content_types = node_type_get_types();
+    $article = $content_types['article'];
+    $article->description = 'modified';
+    node_type_save($article);
+
+    $modified_config = new $handler('article');
+    $original_config = new $handler('article');
+    $original_config->loadFromStaging();
+    $modified_config->loadFromActiveStore();
+
+    $this->assertTrue($original_config->getHash() != $modified_config->getHash(), "Hash for content type Article has changed after modify the content type.");
+
+    $results = Configuration::revertActiveStore(array('content_type.article'));
+    $modified_config->loadFromActiveStore();
+
+    $this->assertTrue($original_config->getHash() == $modified_config->getHash(), "Configuration for content type Article has been reverted.");
   }
 }
