diff --git a/features.export.inc b/features.export.inc
index cc11478..a4fed89 100644
--- a/features.export.inc
+++ b/features.export.inc
@@ -301,7 +301,7 @@ function features_detect_overrides($module) {
 /**
  * Gets the available default hooks keyed by components.
  */
-function features_get_default_hooks($component = NULL, $reset = FALSE) {
+function features_get_default_hooks($component = NULL, $reset = FALSE, $normal_hooks = FALSE) {
   static $hooks;
   if (!isset($hooks) || $reset) {
     $hooks = array();
@@ -312,6 +312,9 @@ function features_get_default_hooks($component = NULL, $reset = FALSE) {
         if (isset($v['default_hook'])) {
           $hooks[$k] = $v['default_hook'];
         }
+        if ($normal_hooks && isset($v['normal_hook'])) {
+          $hooks[$k] = $v['normal_hook'];
+        }
       }
     }
   }
@@ -322,14 +325,23 @@ function features_get_default_hooks($component = NULL, $reset = FALSE) {
 }
 
 /**
+ * Gets the available default hooks keyed by components.
+ */
+function features_get_normal_hooks($component = NULL, $reset = FALSE) {
+  return features_get_default_hooks($component, $reset, TRUE);  
+}
+
+/**
  * 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[] = " * Implementation of hook_{$hook}().";
+  $output[] = " * Implementation of hook_{$hook}({$args}).";
   $output[] = " */";
-  $output[] = "function {$module}_{$hook}() {";
+  $output[] = "function {$module}_{$hook}({$args}) {";
   $output[] = $code;
   $output[] = "}";
   return implode("\n", $output);
@@ -568,7 +580,7 @@ function features_get_normal($component, $module_name, $reset = FALSE) {
     }
     // All other components.
     else {
-      $default_hook = features_get_default_hooks($component);
+      $default_hook = features_get_normal_hooks($component);
       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;
diff --git a/features.module b/features.module
index 908a58c..7258cd8 100644
--- a/features.module
+++ b/features.module
@@ -318,10 +318,17 @@ function features_include_defaults($components = NULL, $reset = FALSE) {
   // If components are specified, only include for the specified components.
   if (isset($components)) {
     $components = is_array($components) ? $components : array($components);
+    // add components that override this one
+    foreach ($include_components as $key => $info) {
+      if (isset($info['override']) && (in_array($info['override'],$components)) &&
+        (!in_array($key, $components))) {
+        $components[] = $key;
+      }
+    }
   }
   // 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)) {
@@ -762,3 +769,13 @@ function features_hook_info() {
   );
   return $hooks;
 }
+
+/** 
+ * called by various exportables to allow other modules to alter the data
+ */
+function features_alter_component(&$data, $component, $hook) {
+  features_include_defaults($component);  // ensure alter functions have been included
+  drupal_alter('features_'.$component.'_'.$hook, $data);
+}
+
+
diff --git a/includes/features.field.inc b/includes/features.field.inc
index c11d0d0..3742db4 100644
--- a/includes/features.field.inc
+++ b/includes/features.field.inc
@@ -38,7 +38,6 @@ function field_features_export_options() {
 function field_features_export($data, &$export, $module_name = '') {
   $pipe = array();
   $map = features_get_default_map('field');
-
   // The field_default_fields() hook integration is provided by the
   // features module so we need to add it as a dependency.
   $export['dependencies']['features'] = 'features';
@@ -75,11 +74,13 @@ function field_features_export($data, &$export, $module_name = '') {
  * Implementation of hook_features_export_render().
  */
 function field_features_export_render($module, $data, $export = NULL) {
-  $translatables = $code = array();
+  $translatables = $code = $alters = array();
 
   $code[] = '  $fields = array();';
   $code[] = '';
   foreach ($data as $identifier) {
+    list($entity_type, $bundle, $field_name) = explode('-', $identifier);
+    $alters[$bundle] = $bundle; // mark entity-bundle as needing call to features_alter
     if ($field = features_field_load($identifier)) {
       unset($field['field_config']['columns']);
       unset($field['field_config']['locked']);
@@ -104,6 +105,12 @@ function field_features_export_render($module, $data, $export = NULL) {
   if (!empty($translatables)) {
     $code[] = features_translatables_export($translatables, '  ');
   }
+  
+  // call alter hooks for each bundle we exported a field for
+  foreach ($alters as $bundle) {
+    $id = features_var_export($bundle);
+    $code[] = "  features_alter_component(\$fields, 'field', {$id});";
+  }
   $code[] = '  return $fields;';
   $code = implode("\n", $code);
   return array('field_default_fields' => $code);
@@ -131,9 +138,10 @@ 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) {
       // Create or update field.
       $field_config = $field['field_config'];
