diff --git a/lib/Drupal/configuration/Config/Configuration.php b/lib/Drupal/configuration/Config/Configuration.php
index 631d963..9459fbe 100644
--- a/lib/Drupal/configuration/Config/Configuration.php
+++ b/lib/Drupal/configuration/Config/Configuration.php
@@ -654,10 +654,6 @@ abstract class Configuration {
    */
   public function findDependencies() {
     $handlers = ConfigurationManagement::getConfigurationHandler();
-    $stack = array();
-    // Include this configuration to the stack to avoid add it again
-    // in a circular dependency cycle
-    $stack[$this->getUniqueId()] = TRUE;
 
     foreach ($handlers as $component => $handler) {
       $handler::alterDependencies($this, $stack);
@@ -670,10 +666,8 @@ abstract class Configuration {
    *
    * @param $config
    *   The object that requires all the dependencies.
-   * @param $stack
-   *   A list of already added dependencies, to avoid duplicates.
    */
-  public static function alterDependencies(Configuration $config, &$stack) {
+  public static function alterDependencies(Configuration $config) {
     // Override
   }
 
diff --git a/lib/Drupal/configuration/Config/ContentTypeConfiguration.php b/lib/Drupal/configuration/Config/ContentTypeConfiguration.php
index c419191..23f52f4 100644
--- a/lib/Drupal/configuration/Config/ContentTypeConfiguration.php
+++ b/lib/Drupal/configuration/Config/ContentTypeConfiguration.php
@@ -84,6 +84,25 @@ class ContentTypeConfiguration extends Configuration {
   }
 
   /**
+   * Overrides Drupal\configuration\Config\Configuration::alterDependencies().
+   */
+  public static function alterDependencies(Configuration $config) {
+    if ($config->getComponent() == 'permission') {
+
+      foreach (node_permissions_get_configured_types() as $type) {
+        foreach (array_keys(node_list_permissions($type)) as $permission) {
+          $data = $config->getData();
+          if ($permission == $data['permission']) {
+            $content_type = ConfigurationManagement::createConfigurationInstance('content_type.' . $type);
+            $config->addToDependencies($content_type);
+            break;
+          }
+        }
+      }
+    }
+  }
+
+  /**
    * Implements Drupal\configuration\Config\Configuration::prepareBuild().
    */
   protected function prepareBuild() {
diff --git a/lib/Drupal/configuration/Config/FieldConfiguration.php b/lib/Drupal/configuration/Config/FieldConfiguration.php
index 2448958..ce42782 100644
--- a/lib/Drupal/configuration/Config/FieldConfiguration.php
+++ b/lib/Drupal/configuration/Config/FieldConfiguration.php
@@ -72,7 +72,7 @@ class FieldConfiguration extends Configuration {
   /**
    * Overrides Drupal\configuration\Config\Configuration::alterDependencies().
    */
-  public static function alterDependencies(Configuration $config, &$stack) {
+  public static function alterDependencies(Configuration $config) {
     if ($config->configForEntity()) {
       $entity_type = $config->getEntityType();
       $fields = field_info_instances($entity_type, $config->getIdentifier());
diff --git a/lib/Drupal/configuration/Config/FieldGroupConfiguration.php b/lib/Drupal/configuration/Config/FieldGroupConfiguration.php
index cea7de7..10a5175 100644
--- a/lib/Drupal/configuration/Config/FieldGroupConfiguration.php
+++ b/lib/Drupal/configuration/Config/FieldGroupConfiguration.php
@@ -43,7 +43,7 @@ class FieldGroupConfiguration extends CtoolsConfiguration {
   /**
    * Overrides Drupal\configuration\Config\Configuration::alterDependencies().
    */
-  public static function alterDependencies(Configuration $config, &$stack) {
+  public static function alterDependencies(Configuration $config) {
     // @todo Implement dependency logic related to Content Type.
   }
 
diff --git a/lib/Drupal/configuration/Config/ImageStyleConfiguration.php b/lib/Drupal/configuration/Config/ImageStyleConfiguration.php
index a406549..1041b3d 100644
--- a/lib/Drupal/configuration/Config/ImageStyleConfiguration.php
+++ b/lib/Drupal/configuration/Config/ImageStyleConfiguration.php
@@ -71,7 +71,7 @@ class ImageStyleConfiguration extends Configuration {
   /**
    * Overrides Drupal\configuration\Config\Configuration::alterDependencies().
    */
-  public static function alterDependencies(Configuration $config, &$stack) {
+  public static function alterDependencies(Configuration $config) {
     if ($config->getComponent() == 'field') {
       // Check if the field is using a image style
       $field = $config->data['field_instance'];
@@ -79,12 +79,10 @@ class ImageStyleConfiguration extends Configuration {
         foreach ($field['display'] as $display) {
           if (!empty($display['settings']) && !empty($display['settings']['image_style'])) {
             $identifier = $display['settings']['image_style'];
-            if (empty($stack['image_style.' . $identifier])) {
-              $image_style = new ImageStyleConfiguration($identifier);
-              $image_style->build();
-              $config->addToDependencies($image_style);
-              $stack['image_style.' . $identifier] = TRUE;
-            }
+
+            $image_style = new ImageStyleConfiguration($identifier);
+            $image_style->build();
+            $config->addToDependencies($image_style);
           }
         }
       }
diff --git a/lib/Drupal/configuration/Config/MenuConfiguration.php b/lib/Drupal/configuration/Config/MenuConfiguration.php
index 5359e02..0f330ab 100644
--- a/lib/Drupal/configuration/Config/MenuConfiguration.php
+++ b/lib/Drupal/configuration/Config/MenuConfiguration.php
@@ -55,7 +55,7 @@ class MenuConfiguration extends Configuration {
   /**
    * Overrides Drupal\configuration\Config\Configuration::alterDependencies().
    */
-  public static function alterDependencies(Configuration $config, &$stack) {
+  public static function alterDependencies(Configuration $config) {
     if ($config->getComponent() == 'menu_link') {
       $config_data = $config->getData();
       if (!empty($config_data) && empty($config_data['plid'])) {
diff --git a/lib/Drupal/configuration/Config/MenuLinkConfiguration.php b/lib/Drupal/configuration/Config/MenuLinkConfiguration.php
index a4681ae..383ed45 100644
--- a/lib/Drupal/configuration/Config/MenuLinkConfiguration.php
+++ b/lib/Drupal/configuration/Config/MenuLinkConfiguration.php
@@ -124,7 +124,7 @@ class MenuLinkConfiguration extends Configuration {
   /**
    * Overrides Drupal\configuration\Config\Configuration::alterDependencies().
    */
-  public static function alterDependencies(Configuration $config, &$stack) {
+  public static function alterDependencies(Configuration $config) {
     if ($config->getComponent() == 'menu_link') {
       $mlid = static::getMenuLinkByIdenfifier($config->getIdentifier());
       $menulink = menu_link_load($mlid);
@@ -132,12 +132,9 @@ class MenuLinkConfiguration extends Configuration {
         $parent_menulink = menu_link_load($menulink['plid']);
         if ($parent_menulink) {
           $identifier = sha1(str_replace('-', '_', $parent_menulink['menu_name']) . ':' . $parent_menulink['link_path']);
-          if (empty($stack['menu_link.' . $identifier])) {
-            $menulink_config = new MenuLinkConfiguration($identifier);
-            $menulink_config->build();
-            $config->addToDependencies($menulink_config);
-            $stack['menu_link.' . $identifier] = TRUE;
-          }
+          $menulink_config = new MenuLinkConfiguration($identifier);
+          $menulink_config->build();
+          $config->addToDependencies($menulink_config);
         }
       }
     }
diff --git a/lib/Drupal/configuration/Config/PageManagerHandlerConfiguration.php b/lib/Drupal/configuration/Config/PageManagerHandlerConfiguration.php
index fd3bb29..dd29d65 100644
--- a/lib/Drupal/configuration/Config/PageManagerHandlerConfiguration.php
+++ b/lib/Drupal/configuration/Config/PageManagerHandlerConfiguration.php
@@ -43,17 +43,16 @@ class PageManagerHandlerConfiguration extends CtoolsConfiguration {
   /**
    * Overrides Drupal\configuration\Config\Configuration::alterDependencies().
    */
-  public static function alterDependencies(Configuration $config, &$stack) {
+  public static function alterDependencies(Configuration $config) {
     // Dependencies for Page Manager Pages. Each page has a handler.
     if ($config->getComponent() == 'page_manager_pages' && !$config->broken) {
       $config_data = $config->getData();
       $id = 'page_manager_handlers.page_' . $config_data->name . '_panel_context';
-      if (empty($stack[$id])) {
-        $page_handler = ConfigurationManagement::createConfigurationInstance($id);
-        $page_handler->build();
-        $config->addToDependencies($page_handler);
-        $stack[$id] = TRUE;
-      }
+
+      $page_handler = ConfigurationManagement::createConfigurationInstance($id);
+      $page_handler->build();
+      $config->addToDependencies($page_handler);
+
     }
   }
 
diff --git a/lib/Drupal/configuration/Config/PermissionConfiguration.php b/lib/Drupal/configuration/Config/PermissionConfiguration.php
index d1da728..6ff1951 100644
--- a/lib/Drupal/configuration/Config/PermissionConfiguration.php
+++ b/lib/Drupal/configuration/Config/PermissionConfiguration.php
@@ -64,39 +64,23 @@ class PermissionConfiguration extends Configuration {
   /**
    * Overrides Drupal\configuration\Config\Configuration::alterDependencies().
    */
-  public static function alterDependencies(Configuration $config, &$stack) {
-    if ($config->getComponent() == 'permission') {
-
-      foreach (node_permissions_get_configured_types() as $type) {
-        foreach (array_keys(node_list_permissions($type)) as $permission) {
-          $data = $config->getData();
-          if ($permission == $data['permission']) {
-            $content_type = ConfigurationManagement::createConfigurationInstance('content_type.' . $type);
-            $config->addToDependencies($content_type);
-            break;
-          }
-        }
-      }
-    }
+  public static function alterDependencies(Configuration $config) {
     if ($config->getComponent() == 'content_type') {
       $permissions = node_list_permissions($config->getIdentifier());
 
       foreach (array_keys($permissions) as $permission) {
         $identifier = str_replace(' ', '_', $permission);
-        // Avoid include multiple times the same dependency.
-        if (empty($stack['permission.' . $identifier])) {
-          $perm = new PermissionConfiguration($identifier);
-          $perm->build();
-
-          // Add the content type as a dependency of the permission.
-          $perm->addToDependencies($config);
-
-          // Add the permission as a child configuration of the content type
-          // The permission is not required to load the content type but is
-          // a nice to have.
-          $config->addToOptionalConfigurations($perm);
-          $stack['permission.' . $identifier] = TRUE;
-        }
+
+        $perm = new PermissionConfiguration($identifier);
+        $perm->build();
+
+        // Add the content type as a dependency of the permission.
+        $perm->addToDependencies($config);
+
+        // Add the permission as a child configuration of the content type
+        // The permission is not required to load the content type but is
+        // a nice to have.
+        $config->addToOptionalConfigurations($perm);
       }
     }
     elseif ($config->getComponent() == 'text_format') {
@@ -104,20 +88,17 @@ class PermissionConfiguration extends Configuration {
       $permission = filter_permission_name($format);
       if (!empty($permission)) {
         $identifier = str_replace(' ', '_', $permission);
-        // Avoid include multiple times the same dependency.
-        if (empty($stack['permission.' . $identifier])) {
-          $perm = new PermissionConfiguration($identifier);
-          $perm->build();
-
-          // Add the text format as a dependency of the permission.
-          $perm->addToDependencies($config);
-
-          // Add the permission as a child configuration of the filter
-          // The permission is not required to load the filter format but is
-          // a nice to have.
-          $config->addToOptionalConfigurations($perm);
-          $stack['permission.' . $identifier] = TRUE;
-        }
+
+        $perm = new PermissionConfiguration($identifier);
+        $perm->build();
+
+        // Add the text format as a dependency of the permission.
+        $perm->addToDependencies($config);
+
+        // Add the permission as a child configuration of the filter
+        // The permission is not required to load the filter format but is
+        // a nice to have.
+        $config->addToOptionalConfigurations($perm);
       }
     }
   }
diff --git a/lib/Drupal/configuration/Config/RoleConfiguration.php b/lib/Drupal/configuration/Config/RoleConfiguration.php
index 0dfa27b..fb94c99 100644
--- a/lib/Drupal/configuration/Config/RoleConfiguration.php
+++ b/lib/Drupal/configuration/Config/RoleConfiguration.php
@@ -63,7 +63,7 @@ class RoleConfiguration extends Configuration {
   /**
    * Overrides Drupal\configuration\Config\Configuration::saveToActiveStore().
    */
-  public static function alterDependencies(Configuration $config, &$stack) {
+  public static function alterDependencies(Configuration $config) {
     if ($config->getComponent() == 'permission') {
       $data = $config->getData();
       if (!empty($data['roles'])) {
diff --git a/lib/Drupal/configuration/Config/TextFormatConfiguration.php b/lib/Drupal/configuration/Config/TextFormatConfiguration.php
index 6376894..8ccf8f6 100644
--- a/lib/Drupal/configuration/Config/TextFormatConfiguration.php
+++ b/lib/Drupal/configuration/Config/TextFormatConfiguration.php
@@ -58,6 +58,28 @@ class TextFormatConfiguration extends Configuration {
   }
 
   /**
+   * Overrides Drupal\configuration\Config\Configuration::alterDependencies().
+   */
+  public static function alterDependencies(Configuration $config) {
+    if ($config->getComponent() == 'permission') {
+
+    // Generate permissions for each text format. Warn the administrator that any
+    // of them are potentially unsafe.
+    foreach (filter_formats() as $format) {
+      $permission = filter_permission_name($format);
+      if (!empty($permission)) {
+          $data = $config->getData();
+          if ($permission == $data['permission']) {
+            $text_format = ConfigurationManagement::createConfigurationInstance('text_format.' . $format->format);
+            $config->addToDependencies($text_format);
+            break;
+          }
+        }
+      }
+    }
+  }
+
+  /**
    * Implements Drupal\configuration\Config\Configuration::prepareBuild().
    */
   protected function prepareBuild() {
diff --git a/lib/Drupal/configuration/Config/VariableConfiguration.php b/lib/Drupal/configuration/Config/VariableConfiguration.php
index ff7d96a..32ed44f 100644
--- a/lib/Drupal/configuration/Config/VariableConfiguration.php
+++ b/lib/Drupal/configuration/Config/VariableConfiguration.php
@@ -58,7 +58,7 @@ class VariableConfiguration extends Configuration {
   /**
    * Overrides Drupal\configuration\Config\Configuration::alterDependencies().
    */
-  public static function alterDependencies(Configuration $config, &$stack) {
+  public static function alterDependencies(Configuration $config) {
     if ($config->getComponent() == 'content_type') {
       $variables = array(
         'field_bundle_settings_node_',
@@ -93,18 +93,15 @@ class VariableConfiguration extends Configuration {
       $fields = field_info_instances($entity_type, $config->getIdentifier());
       foreach ($variables as $variable) {
         $identifier = $variable . '_' . $config->getIdentifier();
-        // Avoid include multiple times the same dependency.
-        if (empty($stack['variable.' . $identifier])) {
-          $in_db = db_query("SELECT 1 FROM {variable} WHERE name = :name", array(':name' => $identifier))->fetchField();
-          // Some variables are not in the database and their values are
-          // provided by the second paramenter of variable_get.
-          // Only inform about configurations that are indeed in the database.
-          if ($in_db) {
-            $var_config = new VariableConfiguration($identifier);
-            $var_config->build();
-            $config->addToDependencies($var_config);
-            $stack['variable.' . $identifier] = TRUE;
-          }
+
+        $in_db = db_query("SELECT 1 FROM {variable} WHERE name = :name", array(':name' => $identifier))->fetchField();
+        // Some variables are not in the database and their values are
+        // provided by the second paramenter of variable_get.
+        // Only inform about configurations that are indeed in the database.
+        if ($in_db) {
+          $var_config = new VariableConfiguration($identifier);
+          $var_config->build();
+          $config->addToDependencies($var_config);
         }
       }
     }
diff --git a/lib/Drupal/configuration/Config/ViewConfiguration.php b/lib/Drupal/configuration/Config/ViewConfiguration.php
index 0f9335e..5cbdc15 100644
--- a/lib/Drupal/configuration/Config/ViewConfiguration.php
+++ b/lib/Drupal/configuration/Config/ViewConfiguration.php
@@ -71,7 +71,7 @@ class ViewConfiguration extends CtoolsConfiguration {
   /**
    * Overrides Drupal\configuration\Config\Configuration::alterDependencies().
    */
-  public static function alterDependencies(Configuration $config, &$stack) {
+  public static function alterDependencies(Configuration $config) {
     static $cache;
     if (!isset($cache)) {
       $cache = array();
@@ -105,12 +105,11 @@ class ViewConfiguration extends CtoolsConfiguration {
               // Display block from a view.
               case 'views':
                 $config_id = 'views_view.' . $id;
-                if (empty($stack[$config_id])) {
-                  $view = ConfigurationManagement::createConfigurationInstance($config_id);
-                  $view->build();
-                  $config->addToDependencies($view);
-                  $stack[$config_id] = TRUE;
-                }
+
+                $view = ConfigurationManagement::createConfigurationInstance($config_id);
+                $view->build();
+                $config->addToDependencies($view);
+
                 $config->addToDependencies($view);
                 break;
             }
@@ -118,23 +117,19 @@ class ViewConfiguration extends CtoolsConfiguration {
           // A view added directly.
           case 'views':
             $config_id = 'views_view.' . $object->subtype;
-            if (empty($stack[$config_id])) {
-              $view = ConfigurationManagement::createConfigurationInstance($config_id);
-              $view->build();
-              $config->addToDependencies($view);
-              $stack[$config_id] = TRUE;
-            }
+
+            $view = ConfigurationManagement::createConfigurationInstance($config_id);
+            $view->build();
+            $config->addToDependencies($view);
             break;
           // A view added using the Views content panes module.
           case 'views_panes':
             list($subtype, ) = explode('-', $object->subtype);
             $config_id = 'views_view.' . $subtype;
-            if (empty($stack[$config_id])) {
-              $view = ConfigurationManagement::createConfigurationInstance($config_id);
-              $view->build();
-              $config->addToDependencies($view);
-            }
-            $stack[$config_id] = TRUE;
+
+            $view = ConfigurationManagement::createConfigurationInstance($config_id);
+            $view->build();
+            $config->addToDependencies($view);
             break;
         }
       }
diff --git a/lib/Drupal/configuration/Config/VocabularyConfiguration.php b/lib/Drupal/configuration/Config/VocabularyConfiguration.php
index 62082b1..0a362a0 100644
--- a/lib/Drupal/configuration/Config/VocabularyConfiguration.php
+++ b/lib/Drupal/configuration/Config/VocabularyConfiguration.php
@@ -65,18 +65,17 @@ class VocabularyConfiguration extends Configuration {
   /**
    * Overrides Drupal\configuration\Config\Configuration::alterDependencies().
    */
-  public static function alterDependencies(Configuration $config, &$stack) {
+  public static function alterDependencies(Configuration $config) {
     if ($config->getComponent() == 'field') {
       // Check if the field is using a image style
       $field = $config->data['field_config'];
       if ($field['type'] == 'taxonomy_term_reference' && $field['settings']['allowed_values']) {
         foreach ($field['settings']['allowed_values'] as $vocabulary) {
-          if (empty($stack['vocabulary.' . $vocabulary['vocabulary']])) {
-            $vocabulary_conf = new VocabularyConfiguration($vocabulary['vocabulary']);
-            $vocabulary_conf->build();
-            $config->addToDependencies($vocabulary_conf);
-            $stack['vocabulary.' . $vocabulary['vocabulary']] = TRUE;
-          }
+
+          $vocabulary_conf = new VocabularyConfiguration($vocabulary['vocabulary']);
+          $vocabulary_conf->build();
+          $config->addToDependencies($vocabulary_conf);
+
         }
       }
     }
diff --git a/lib/Drupal/configuration/Config/WysiwygConfiguration.php b/lib/Drupal/configuration/Config/WysiwygConfiguration.php
index a09d868..49e9eb1 100644
--- a/lib/Drupal/configuration/Config/WysiwygConfiguration.php
+++ b/lib/Drupal/configuration/Config/WysiwygConfiguration.php
@@ -61,22 +61,17 @@ class WysiwygConfiguration extends Configuration {
   /**
    * Overrides Drupal\configuration\Config\Configuration::alterDependencies().
    */
-  public static function alterDependencies(Configuration $config, &$stack) {
+  public static function alterDependencies(Configuration $config) {
     if ($config->getComponent() == 'text_format') {
       $formats = filter_formats();
       foreach (array_keys(wysiwyg_profile_load_all()) as $format) {
         // Text format may vanish without deleting the wysiwyg profile.
         if (isset($formats[$format]) && $format == $config->getIdentifier()) {
           $identifier = $format;
-          if (empty($stack['wysiwyg.' . $identifier])) {
-            $wysiwig_profile = new WysiwygConfiguration($identifier);
-            $wysiwig_profile->build();
-
-            $config->addToOptionalConfigurations($wysiwig_profile);
-
-            $wysiwig_profile->addToDependencies($config);
-            $stack['wysiwyg.' . $identifier] = TRUE;
-          }
+          $wysiwig_profile = new WysiwygConfiguration($identifier);
+          $wysiwig_profile->build();
+          $config->addToOptionalConfigurations($wysiwig_profile);
+          $wysiwig_profile->addToDependencies($config);
         }
       }
     }
