diff --git a/lib/Drupal/configuration/Config/Configuration.php b/lib/Drupal/configuration/Config/Configuration.php
index 2934536..27ed35f 100644
--- a/lib/Drupal/configuration/Config/Configuration.php
+++ b/lib/Drupal/configuration/Config/Configuration.php
@@ -273,7 +273,6 @@ abstract class Configuration {
    * @see iterate()
    */
   protected function discoverModules(ConfigIteratorSettings &$settings) {
-    $this->loadFromStorage();
     $modules = $settings->getInfo('modules');
     $modules = array_merge($modules, $this->getRequiredModules());
     $settings->setInfo('modules', $modules);
@@ -337,13 +336,15 @@ abstract class Configuration {
   public function export(ConfigIteratorSettings &$settings) {
     $this->build();
 
+    $modules = array_keys($this->getRequiredModules());
+
     // Save the configuration into a file.
     $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()))
+            ->setModules($modules)
             ->save();
 
     if ($settings->getSetting('start_tracking')) {
@@ -352,6 +353,9 @@ abstract class Configuration {
       $this->startTracking();
     }
 
+    foreach ($modules as $module) {
+      $settings->addInfo('modules', $module);
+    }
     // Add the current config as an exported item
     $settings->addInfo('exported', $this->getUniqueId());
   }
@@ -420,7 +424,8 @@ abstract class Configuration {
     if ($this->broken) {
       return $human_name ? t('Removed from ActiveStore') : 0;
     }
-    $tracked = ConfigurationManagement::readTrackingFile();
+    $tracking_file = ConfigurationManagement::readTrackingFile();
+    $tracked = $tracking_file['tracked'];
     if (isset($tracked[$this->getUniqueId()])) {
       $file_hash = $tracked[$this->getUniqueId()];
     }
@@ -685,7 +690,7 @@ abstract class Configuration {
   public function getRequiredModules() {
     $stack = array();
     foreach ($this->getModules() as $module) {
-      $this->getDependentModules($module, $stack);
+      static::getDependentModules($module, $stack);
     }
     return $stack;
   }
@@ -693,7 +698,7 @@ abstract class Configuration {
   /**
    * Determine the status of the given module and of its dependencies.
    */
-  protected function getDependentModules($module, &$stack) {
+  static public function getDependentModules($module, &$stack) {
     $available_modules = static::getAvailableModules();
     if (!isset($available_modules[$module])) {
       $stack[$module] = Configuration::moduleMissing;
@@ -704,7 +709,7 @@ abstract class Configuration {
         $stack[$module] = Configuration::moduleToInstall;
         foreach ($available_modules[$module]->requires as $required_module) {
           if (empty($stack[$required_module['name']])) {
-            $this->getDependentModules($required_module['name'], $stack);
+            static::getDependentModules($required_module['name'], $stack);
           }
         }
       }
@@ -717,7 +722,7 @@ abstract class Configuration {
   /**
    * Helper for retrieving info from system table.
    */
-  protected function getAvailableModules($reset = FALSE) {
+  static protected function getAvailableModules($reset = FALSE) {
     static $modules;
 
     if (!isset($modules)) {
@@ -762,12 +767,14 @@ abstract class Configuration {
   protected function printRaw(ConfigIteratorSettings &$settings) {
     $this->build();
 
-
     $this->buildHash();
     $settings->addInfo('hash', $this->getHash());
 
     $file_name = $this->storage->getFileName() ;
     $settings->addInfo('exported', $this->getUniqueId());
+    foreach ($this->getRequiredModules() as $module) {
+      $settings->addInfo('modules', $modules);
+    }
     $settings->addInfo('exported_files', $file_name);
 
     if ($settings->getSetting('format') == 'tar') {
diff --git a/lib/Drupal/configuration/Config/ConfigurationManagement.php b/lib/Drupal/configuration/Config/ConfigurationManagement.php
index b25bdb4..bad753d 100644
--- a/lib/Drupal/configuration/Config/ConfigurationManagement.php
+++ b/lib/Drupal/configuration/Config/ConfigurationManagement.php
@@ -93,28 +93,13 @@ class ConfigurationManagement {
    * Returns a list of modules required to import the configurations indicated
    * in $list.
    *
-   * @param  array   $list
-   *   The list of components that have to will be imported.
-   * @param  boolean $include_dependencies
-   *   If TRUE, modules required to load the dependencies of each configuration
-   *   dependency will be returned too.
-   * @param  boolean $include_optionals
-   *   If TRUE, modules required to load the optionals configurations of each
-   *   configuration will be returned too.
-   * @return ConfigIteratorSettings
-   *   A ConfigIteratorSettings object that contains the required modules to
-   *   install and the modules missing.
+   * @param  array  $modules
+   *   The list of modules that are listed in the tracked.inc file.
    */
-  static public function discoverRequiredModules($list = array(), $include_dependencies = TRUE, $include_optionals = TRUE, $source = NULL) {
+  static public function discoverRequiredModules($modules) {
+
     $settings = new ConfigIteratorSettings(
       array(
-        'build_callback' => 'loadFromStorage',
-        'callback' => 'discoverModules',
-        'process_dependencies' => $include_dependencies,
-        'process_optionals' => $include_optionals,
-        'settings' => array(
-          'source' => $source,
-        ),
         'info' => array(
           'modules' => array(),
           'modules_missing' => array(),
@@ -122,21 +107,15 @@ class ConfigurationManagement {
         )
       )
     );
-    foreach ($list as $component) {
-      list($component_name, $identifier) = explode('.', $component, 2);
-      $handler = static::getConfigurationHandler($component_name, TRUE);
-      $config = static::createConfigurationInstance($component);
 
-      // Make sure the object is built before start to iterate on its
-      // dependencies.
-      $config->setContext($settings);
-      $config->loadFromStorage();
-      $config->iterate($settings);
+    $stack = array();
+    foreach ($modules as $module) {
+      Configuration::getDependentModules($module, $stack);
     }
 
     $missing = array();
     $to_install = array();
-    foreach ($settings->getInfo('modules') as $module_name => $status) {
+    foreach ($stack as $module_name => $status) {
       if ($status == Configuration::moduleMissing) {
         $missing[] = $module_name;
       }
@@ -310,6 +289,7 @@ class ConfigurationManagement {
           'start_tracking' => $start_tracking,
         ),
         'info' => array(
+          'modules' => array(),
           'exported' => array(),
           'hash' => array(),
         )
@@ -329,7 +309,7 @@ class ConfigurationManagement {
     }
 
     if ($start_tracking) {
-      static::updateTrackingFile();
+      static::updateTrackingFile($settings->getInfo('modules'));
     }
 
     module_invoke_all('configuration_post_export', $settings);
@@ -498,7 +478,7 @@ class ConfigurationManagement {
    * This function save into config://tracked.inc file the configurations that
    * are currently tracked.
    */
-  static public function updateTrackingFile() {
+  static public function updateTrackingFile($modules = array()) {
     $tracked = static::trackedConfigurations();
 
     $file = array();
@@ -510,6 +490,8 @@ class ConfigurationManagement {
     $file_content = "<?php\n\n";
     $file_content .= "// This file contains the current being tracked configurations.\n\n";
     $file_content .= '$tracked = ' . var_export($file, TRUE) . ";\n";
+    $file_content .= "\n\n// The following modules are required to run the configurations of this file.\n\n";
+    $file_content .= '$modules = ' . var_export(array_unique($modules), TRUE) . ";\n";
     if (Storage::checkFilePermissions('tracked.inc')) {
       file_put_contents(static::getStream() . 'tracked.inc', $file_content);
     }
@@ -522,7 +504,10 @@ class ConfigurationManagement {
     if (file_exists(static::getStream() . 'tracked.inc')) {
       $file_content = drupal_substr(file_get_contents(static::getStream() . 'tracked.inc'), 6);
       @eval($file_content);
-      return $tracked;
+      return array(
+        'tracked' => $tracked,
+        'modules' => $modules,
+      );
     }
     return array();
   }
@@ -639,6 +624,11 @@ class ConfigurationManagement {
       $file_content .= "  '$config',\n";
     }
     $file_content .= ");\n";
+    $file_content .= "\$modules = array(\n";
+    foreach ($settings->getInfo('modules') as $module) {
+      $file_content .= "  '$module',\n";
+    }
+    $file_content .= ");\n";
 
     print static::createTarContent("configuration/configurations.inc", $file_content);
 
diff --git a/tests/configuration.test b/tests/configuration.test
index 34efd36..6cba549 100644
--- a/tests/configuration.test
+++ b/tests/configuration.test
@@ -300,19 +300,4 @@ class ConfigurationDiscoverModulesTestCase extends ConfigurationWebTestCase {
     );
   }
 
-  public function testDiscoverRequiredModules() {
-    $source = drupal_get_path('module', 'configuration') . '/tests/test_configs/';
-
-    $results = ConfigurationManagement::discoverRequiredModules(array('content_type.article'), TRUE, TRUE, $source);
-
-    $modules_to_install = $results->getInfo('modules_to_install');
-
-    $this->assertTrue(in_array('taxonomy', $modules_to_install), 'Taxonomy module have to be installed');
-    $this->assertTrue(in_array('file', $modules_to_install), 'File module have to be installed');
-    $this->assertTrue(in_array('image', $modules_to_install), 'Image module have to be installed');
-    $this->assertTrue(in_array('options', $modules_to_install), 'Options module have to be installed');
-
-    $missing_modules = $results->getInfo('missing_modules');
-    $this->assertTrue(empty($missing_modules), 'There are not missing modules');
-  }
 }
diff --git a/tests/handlers/ConfigurationHandlerBaseTestCase.test b/tests/handlers/ConfigurationHandlerBaseTestCase.test
index ca39874..8b4dec2 100644
--- a/tests/handlers/ConfigurationHandlerBaseTestCase.test
+++ b/tests/handlers/ConfigurationHandlerBaseTestCase.test
@@ -142,7 +142,8 @@ abstract class ConfigurationHandlerBaseTestCase extends ConfigurationWebTestCase
 
       $this->assertTrue(!empty($object), "Config $config was suscessfully tracked.");
       $verbose .= "This is the content of the tracked.inc file: \n";
-      foreach (ConfigurationManagement::readTrackingFile() as $config_id => $tracked_hash) {
+      $traking_file = ConfigurationManagement::readTrackingFile();
+      foreach ($traking_file as $config_id => $tracked_hash) {
         $verbose .= "\$tracked_hash[$config_id] = $tracked_hash\n";
       }
 
diff --git a/tests/test_configs/tracked.inc b/tests/test_configs/tracked.inc
index ee0bd4b..e8c1b04 100644
--- a/tests/test_configs/tracked.inc
+++ b/tests/test_configs/tracked.inc
@@ -7,3 +7,13 @@ $tracked = array (
   'field.node.body.article' => '78f3cfa393218e9d74a91caf681c6067d9a8ce6a',
   'vocabulary.tags' => '36a9325f71dc343299f61677a58260d6ce8a8026',
 );
+
+// The following modules are required to run the configurations of this file.
+
+$modules = array (
+  0 => 'node',
+  1 => 'field_sql_storage',
+  2 => 'text',
+  4 => 'taxonomy',
+  6 => 'image',
+);
diff --git a/ui/configuration_ui.admin.inc b/ui/configuration_ui.admin.inc
index 50a51d5..17638b4 100644
--- a/ui/configuration_ui.admin.inc
+++ b/ui/configuration_ui.admin.inc
@@ -677,8 +677,9 @@ function configuration_ui_validate_settings($form, &$form_state) {
 }
 
 function configuration_sync_configurations_submit($form, &$form_state) {
-  $to_track = array_keys(ConfigurationManagement::readTrackingFile());
-  $modules_results = ConfigurationManagement::discoverRequiredModules($to_track, FALSE, FALSE);
+  $tracking_file = ConfigurationManagement::readTrackingFile();
+  $to_track = array_keys($tracking_file['tracked']);
+  $modules_results = ConfigurationManagement::discoverRequiredModules($tracking_file['modules']);
 
   $missing_modules = $modules_results->getInfo('missing_modules');
 
