diff --git a/configuration.drush.inc b/configuration.drush.inc
index b508025..0c81353 100644
--- a/configuration.drush.inc
+++ b/configuration.drush.inc
@@ -21,10 +21,10 @@ function configuration_drush_help($section) {
       return dt("Return the list of configurations components that are tracked.");
     case 'drush:cgnt':
       return dt("Return the list of configurations components that are not tracked.");
-    case 'drush:cimp':
-      return dt("Import configurations into the Active Store.");
     case 'drush:cexp':
       return dt("Export a configuration to the Data Store.");
+    case 'drush:csyn':
+      return dt("Syncronize configurations based on config://tracked.inc.");
     case 'drush:csta':
       return dt("Start tracking a configuration changes.");
     case 'drush:csto':
@@ -77,26 +77,6 @@ function configuration_drush_command() {
     ),
     'arguments' => array(),
   );
-  $items['config-import'] = array(
-    'callback' => '_configuration_import_configurations',
-    'description' => 'Import a configuration to the active store.',
-    'aliases' => array('cimp'),
-    'examples' => array(
-      'drush cimp' => 'Loads all the files that have configurations into the ActiveStore',
-      'drush cimp content_type.article variable.theme_settings' => 'Loads the configurations for content type Article and the variable theme_settings into the ActiveStore',
-      'drush cimp --dir=%site/myconfig' => 'Loads the configurations from drupal/sites/example.com/myconfig',
-      'drush cimp --dir=myconfig' => 'Loads the configurations from drupal/myconfig',
-      'drush cimp --dir=/path/to/myconfig' => 'Loads the configurations from /path/to/myconfig',
-    ),
-    'options' => array(
-      'all' => 'import all components',
-      'dir' => 'import all the configurations from a given directory.',
-      'exclude-dependencies' => 'Import a configuration without import its dependencies.',
-      'exclude-optionals' => 'Import a configuration without import its optional configurations.',
-      'start-tracking' => 'Import a configuration and automatically start to tracking it.',
-    ),
-    'arguments' => array(),
-  );
   $items['config-export'] = array(
     'callback' => '_configuration_export_to_datastore',
     'description' => 'Export a configuration to the datastore.',
@@ -152,6 +132,22 @@ function configuration_drush_command() {
       'drush clist' => 'Return the list of components and identifiers',
     ),
   );
+  $items['config-sync'] = array(
+    'callback' => '_configuration_sync',
+    'description' => 'Syncronize configurations',
+    'aliases' => array('csyn'),
+    'examples' => array(
+      'drush config-sync' => 'Enable all the required modules and the configurations defined in tracked.inc',
+      'drush config-sync --preserve-tracked' => 'Will keep tracking the previous configurations even if they are not listed in the tracked.inc',
+      'drush csyn --source=%site/myconfig' => 'Syncronize configurations from drupal/sites/example.com/myconfig/tracked.inc',
+      'drush csyn --source=myconfig' => 'Syncronize configurations from drupal/myconfig/tracked.inc',
+      'drush csyn --source=/path/to/myconfig' => 'Syncronize configurations from /path/to/myconfig/tracked.inc',
+    ),
+    'options' => array(
+      'source' => 'import all the configurations from a given directory.',
+      'preserve-tracked' => 'By default, all configurations that are not listed on the tracked.inc file are automatically untracked. Using this options avoid remove the already being tracked configurations.',
+    ),
+  );
   return $items;
 }
 
@@ -421,89 +417,49 @@ function _configuration_stop_tracking() {
   }
 }
 
-function _configuration_import_configurations() {
-  $import_all = drush_get_option('all');
-  $args = array();
-  if (!empty($import_all)) {
-    $args = array_keys(ConfigurationManagement::trackedConfigurations(FALSE));
-  }
-  elseif ($dir = drush_get_option('dir')) {
-    $options = array();
-    $path = drush_sitealias_evaluate_path($dir, $options);
-    if (is_dir($path['evaluated-path'])) {
-      $handlers = ConfigurationManagement::getConfigurationHandler();
-      foreach ($handlers as $component => $handler) {
-        $args += $handler::scanDataStore($component, $path['evaluated-path']);
-      }
-    }
-    else {
-      drush_die($dir . ' is not a directory or cannot be accessed.');
-    }
-  }
-  else {
-    $args = func_get_args();
-  }
-  if (!empty($args)) {
-    _configuration_import_load_configurations('import', $args);
+function _configuration_sync() {
+  $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');
+
+  if (!empty($missing_modules)) {
+    drush_log(dt('Configurations cannot be syncronized because the following modules are not available to install: %modules', array('%modules' => implode(', ', $missing_modules))), 'error');
+    $error = TRUE;
   }
   else {
-    drush_die('There are not configurations to import.');
+    $modules_to_install = $modules_results->getInfo('modules_to_install');
+    drush_log(dt('The following will be enabled: %modules', array('%modules' => implode(', ', $modules_to_install))));
+    if (!empty($modules_to_install)) {
+      module_enable($modules_to_install, FALSE);
+      drush_log(dt('The following modules have been enabled: %modules', array('%modules' => implode(', ', $modules_to_install))));
+    }
+
   }
-}
 
-function _configuration_import_load_configurations($action, $args) {
+  // If we have to stop stracking some configurations, figure out which
+  // configurations have to be untracked.
+  if (drush_get_option('preserve-tracked')) {
 
-  if (!drush_confirm(dt('Are you sure you want to import this configurations? This will override the configurations of the ActiveStore'))) {
-    drush_die('Aborting.');
-  }
+    $being_tracked = array_keys(ConfigurationManagement::trackedConfigurations(FALSE));
 
-  if (drush_get_option(array('skip-enable-modules'), FALSE)) {
-    ConfigurationManagement::importToActiveStore($args);
-  }
-  else {
-    $import_dependencies = !drush_get_option('exclude-dependencies');
-    $import_optionals = !drush_get_option('exclude-optionals');
-    $start_tracking = drush_get_option('start-tracking');
-    $settings = ConfigurationManagement::discoverRequiredModules($args, $import_dependencies, $import_optionals);
-
-    $missing = $settings->getInfo('modules_missing');
-    $to_install = $settings->getInfo('modules_to_install');
-
-    if (count($missing)) {
-      drush_set_error('', dt('Missing required modules. None configuration was processed.'));
-      drush_set_error('', dt('The following modules are required to @action the configurations but are not available to install: !modules', array('@action' => $action, '!modules' => implode(', ', $missing))));
-      drush_die('Aborting.');
-    }
-    else {
-      if (count($to_install)) {
-        drush_print(dt('The following modules will be installed in order to @action the configurations:', array('@action' => $action)));
-        drush_print(implode(', ', $to_install));
-        if (!drush_confirm(dt('Do you really want to continue?'))) {
-          drush_die('Aborting.');
-        }
-
-        module_enable($to_install);
-        foreach ($to_install as $module) {
-          drush_log(dt('Installed @module.', array('@module' => $module)), 'ok');
-        }
-        drupal_flush_all_caches();
-      }
+    $to_untrack = array_diff($being_tracked, $to_track);
 
-      $import_results = ConfigurationManagement::importToActiveStore($args, $import_dependencies, $import_optionals, $start_tracking);
-      $rows = array();
-      foreach ($import_results->getInfo('imported') as $imported) {
-        $rows[]['identifier'] = $imported;
-      }
+    $un_track_results = ConfigurationManagement::stopTracking($to_untrack, TRUE, TRUE);
 
-      if ($action == 'import') {
-        drush_log(dt('The configurations for the following items have been imported.'), 'ok');
-      }
-      else {
-        drush_log(dt('The configurations for the following items have been loaded.'), 'ok');
+    if (count($un_track_results->getInfo('untracked'))) {
+      foreach ($un_track_results->getInfo('untracked') as $untracked_config) {
+        drush_log(dt('Untracked %config', array('%config' => $untracked_config)));
       }
-      drush_print_table($rows);
-
-      drupal_flush_all_caches();
     }
   }
+
+  $results = ConfigurationManagement::importToActiveStore($to_track, FALSE, FALSE, TRUE);
+  foreach ($results->getInfo('imported') as $imported) {
+    drush_log(dt('Imported !config', array('!config' => $imported)), 'ok');
+  }
+  foreach ($results->getInfo('no_handler') as $failed) {
+    drush_log(dt('!config could be imported because there is no module that can handle that configuration.', array('!config' => $failed)), 'error');
+  }
 }
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..561bb8c 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;
       }
@@ -256,20 +235,30 @@ class ConfigurationManagement {
         ),
         'info' => array(
           'imported' => array(),
+          'fail' => array(),
+          'no_handler' => array(),
         )
       )
     );
 
     module_invoke_all('configuration_pre_import', $settings);
 
+    $handlers = static::getConfigurationHandler();
+
     foreach ($list as $component) {
-      $config = static::createConfigurationInstance($component);
+      $part = explode('.', $component, 2);
+      if (empty($handlers[$part[0]])) {
+        $settings->addInfo('no_handler', $part[0]);
+      }
+      else {
+        $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);
+        // Make sure the object is built before start to iterate on its
+        // dependencies.
+        $config->setContext($settings);
+        $config->loadFromStorage();
+        $config->iterate($settings);
+      }
     }
 
     drupal_flush_all_caches();
@@ -310,6 +299,7 @@ class ConfigurationManagement {
           'start_tracking' => $start_tracking,
         ),
         'info' => array(
+          'modules' => array(),
           'exported' => array(),
           'hash' => array(),
         )
@@ -329,7 +319,7 @@ class ConfigurationManagement {
     }
 
     if ($start_tracking) {
-      static::updateTrackingFile();
+      static::updateTrackingFile($settings->getInfo('modules'));
     }
 
     module_invoke_all('configuration_post_export', $settings);
@@ -498,7 +488,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 +500,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 +514,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 +634,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..f94fb1e 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');
 
@@ -717,4 +718,7 @@ function configuration_sync_configurations_submit($form, &$form_state) {
   foreach ($results->getInfo('imported') as $imported) {
     drupal_set_message(t('Imported %config', array('%config' => $imported)));
   }
+  foreach ($results->getInfo('no_handler') as $failed) {
+    drupal_set_message(t('%config could be imported because there is no module that can handle that configuration.', array('%config' => $failed)));
+  }
 }
