diff --git a/features.export.inc b/features.export.inc
index 740a58a..140964a 100644
--- a/features.export.inc
+++ b/features.export.inc
@@ -337,11 +337,13 @@ function features_get_default_hooks($component = NULL, $reset = FALSE) {
  * Return a code string representing an implementation of a defaults module hook.
  */
 function features_export_render_defaults($module, $hook, $code) {
+  // add argument for _alter functions
+  $args = (strrpos($hook,'_alter') === strlen($hook)-6) ? '&$data' : '';
   $output = array();
   $output[] = "/**";
   $output[] = " * Implements hook_{$hook}().";
   $output[] = " */";
-  $output[] = "function {$module}_{$hook}() {";
+  $output[] = "function {$module}_{$hook}({$args}) {";
   $output[] = $code;
   $output[] = "}";
   return implode("\n", $output);
@@ -564,13 +566,14 @@ function features_semaphore($op, $component) {
 /**
  * Get normal objects for a given module/component pair.
  */
-function features_get_normal($component, $module_name, $reset = FALSE) {
+function features_get_normal($component, $module_name, $reset = FALSE, $alter = TRUE) {
   static $cache;
   if (!isset($cache) || $reset) {
     $cache = array();
   }
   if (!isset($cache[$module_name][$component])) {
     features_include();
+    features_include_overrides();
     $code = NULL;
     $module = features_get_features($module_name);
 
@@ -584,6 +587,9 @@ function features_get_normal($component, $module_name, $reset = FALSE) {
       if ($module && $default_hook && isset($module->info['features'][$component]) && features_hook($component, 'features_export_render')) {
         $code = features_invoke($component, 'features_export_render', $module_name, $module->info['features'][$component], NULL);
         $cache[$module_name][$component] = isset($code[$default_hook]) ? eval($code[$default_hook]) : FALSE;
+        if ($alter && isset($code[$default_hook])) {
+          drupal_alter($default_hook, $cache[$module_name][$component]);
+        }
       }
     }
 
@@ -601,6 +607,7 @@ function features_get_default($component, $module_name = NULL, $alter = TRUE, $r
   static $cache = array();
   features_include();
   features_include_defaults($component);
+  features_include_overrides();
   $default_hook = features_get_default_hooks($component);
   $components = features_get_components();
 
diff --git a/features.module b/features.module
index c2a5c1e..3bb2b27 100644
--- a/features.module
+++ b/features.module
@@ -317,6 +317,7 @@ function features_include($reset = FALSE) {
 
     // Clear static cache, since we've now included new implementers.
     module_implements('features_api', FALSE, TRUE);
+    features_include_overrides();
   }
 }
 
@@ -345,7 +346,7 @@ function features_include_defaults($components = NULL, $reset = FALSE) {
   }
   // Use all include components if none are explicitly specified.
   else {
-    $components = $include_components;
+    $components = array_keys($include_components);
   }
   foreach ($components as $component) {
     if (isset($include_components[$component]) && (!isset($included[$component]) || $reset)) {
@@ -374,6 +375,28 @@ function features_include_defaults($components = NULL, $reset = FALSE) {
 }
 
 /**
+ * Load features includes for all components that always require includes 
+ */
+function features_include_overrides($reset = FALSE) {
+  static $included = array();
+  static $include_components;
+  if (!isset($include_components) || $reset) {
+    $include_components = features_get_components();
+  }
+  foreach ($include_components as $component => $info) {
+    if ((!isset($included[$component]) || $reset) && isset($info['include_file']) && ($info['include_file'])) {
+      $features = isset($features) ? $features : features_get_features(NULL, $reset);
+      foreach ($features as $feature) {
+        if (isset($feature->info['features'][$component])) {
+          module_load_include('inc', $feature->name, "{$feature->name}.features.{$component}");
+        }
+      }
+    $included[$component] = TRUE;
+    }
+  }
+}
+
+/**
  * Feature object loader.
  */
 function feature_load($name, $reset = FALSE) {
diff --git a/includes/features.field.inc b/includes/features.field.inc
index 96b22b4..9e5255a 100644
--- a/includes/features.field.inc
+++ b/includes/features.field.inc
@@ -156,7 +156,9 @@ function field_features_revert($module) {
  * Rebuilds fields from code defaults.
  */
 function field_features_rebuild($module) {
-  if ($fields = features_get_default('field', $module)) {
+  // make sure we are using the most current code
+  // call features_get_default with reset=TRUE to use new code and not cached
+  if ($fields = features_get_default('field', $module, TRUE, TRUE)) {
     field_info_cache_clear();
 
     foreach ($fields as $field) {
