diff --git features.export.inc features.export.inc
index 00df0d5..ec29fdd 100644
--- features.export.inc
+++ features.export.inc
@@ -321,6 +321,29 @@ function features_get_default_hooks($component = NULL, $reset = FALSE) {
 }
 
 /**
+ * Gets the type of alter to run for the component
+ *
+ * single = run per single component.
+ * none = do not alter (or alter is taken care
+ */
+function features_get_alter_state($component = NULL, $reset = FALSE) {
+  static $hooks;
+  if (!isset($hooks) || $reset) {
+    $hooks = array();
+    features_include();
+    foreach (module_implements('features_api') as $module) {
+      $info = module_invoke($module, 'features_api');
+      foreach ($info as $k => $v) {
+        $hooks[$k] = (!empty($v['alter_state']) ? $v['alter_state'] : 'single');
+      }
+    }
+  }
+  if (isset($component)) {
+    return isset($hooks[$component]) ? $hooks[$component] : FALSE;
+  }
+  return $hooks;
+}
+/**
  * Return a code string representing an implementation of a defaults module hook.
  */
 function features_export_render_defaults($module, $hook, $code) {
@@ -589,7 +612,8 @@ function features_get_default($component, $module_name = NULL, $alter = TRUE, $r
   features_include_defaults($component);
   $default_hook = features_get_default_hooks($component);
   $components = features_get_components();
-
+  $alter_key = ($alter? 1 : 0);
+  $alter_state = features_get_alter_state($component);
   // Collect defaults for all modules if no module name was specified.
   if (isset($module_name)) {
     $modules = array($module_name);
@@ -600,23 +624,23 @@ function features_get_default($component, $module_name = NULL, $alter = TRUE, $r
 
   // Collect and cache information for each specified module.
   foreach ($modules as $m) {
-    if (!isset($cache[$component][$m]) || $reset) {
+    if (!isset($cache[$component][$alter_key][$m]) || $reset) {
       // Special handling for dependencies component.
       if ($component === 'dependencies') {
         $module = features_get_features($m);
-        $cache[$component][$m] = isset($module->info['dependencies']) ? $module->info['dependencies'] : array();
+        $cache[$component][$alter_key][$m] = isset($module->info['dependencies']) ? $module->info['dependencies'] : array();
         unset($module);
       }
       // All other components
       else {
         if ($default_hook && module_hook($m, $default_hook)) {
-          $cache[$component][$m] = module_invoke($m, $default_hook);
-          if ($alter) {
-            drupal_alter($default_hook, $cache[$component][$m]);
+          $cache[$component][$alter_key][$m] = module_invoke($m, $default_hook);
+          if ($alter && $alter_state == 'single') {
+            drupal_alter($default_hook, $cache[$component][$alter_key][$m]);
           }
         }
         else {
-          $cache[$component][$m] = FALSE;
+          $cache[$component][$alter_key][$m] = FALSE;
         }
       }
     }
@@ -624,12 +648,12 @@ function features_get_default($component, $module_name = NULL, $alter = TRUE, $r
 
   // A specific module was specified. Retrieve only its components.
   if (isset($module_name)) {
-    return isset($cache[$component][$module_name]) ? $cache[$component][$module_name] : FALSE;
+    return isset($cache[$component][$alter_key][$module_name]) ? $cache[$component][$alter_key][$module_name] : FALSE;
   }
   // No module was specified. Retrieve all components.
   $all_defaults = array();
-  if (isset($cache[$component])) {
-    foreach (array_filter($cache[$component]) as $module_components) {
+  if (isset($cache[$component][$alter_key])) {
+    foreach (array_filter($cache[$component][$alter_key]) as $module_components) {
       $all_defaults = array_merge($all_defaults, $module_components);
     }
   }
diff --git includes/features.node.inc includes/features.node.inc
index 06907cf..c54a413 100644
--- includes/features.node.inc
+++ includes/features.node.inc
@@ -10,6 +10,7 @@ function node_features_api() {
       'name' => t('Content types'),
       'feature_source' => TRUE,
       'default_hook' => 'node_info',
+      'alter_state' => 'inside_hook',
     ),
   );
 }
@@ -120,6 +121,7 @@ function node_features_export_render($module, $data, $export = NULL) {
     }
   }
   $output[] = '  );';
+  $output[] = '  drupal_alter(\'node_info\', $items);';
   $output[] = '  return $items;';
   $output = implode("\n", $output);
   return array('node_info' => $output);
