diff --git a/features.admin.inc b/features.admin.inc
index d74dc3c..909ae2e 100644
--- a/features.admin.inc
+++ b/features.admin.inc
@@ -90,7 +90,7 @@ function features_export_form($form, $form_state, $feature = NULL) {
     '#theme' => 'features_form_components',
   );
   foreach ($components as $component => $component_info) {
-    $options = features_invoke($component, 'features_export_options');
+    $options = features_export_options($component);
     if ($component === 'dependencies') {
       $default_value = !empty($feature->info['dependencies']) ? $feature->info['dependencies'] : array();
     }
diff --git a/features.api.php b/features.api.php
index 66a0250..54ccddc 100644
--- a/features.api.php
+++ b/features.api.php
@@ -73,12 +73,10 @@ function hook_features_api() {
  *   plugins to determine which modules need to be added as dependencies.
  *
  * 2. Correctly add components to the export array. In general this is usually
- *   adding all of the items in $data to $export['features']['my_key'], but
- *   can become more complicated if components are shared between features
- *   or modules.
+ *   adding all of the items in $data to $export['features']['my_key'].
  *
- * 3. Delegating further detection and export tasks to related or derivative
- *   components.
+ * Any further Delegating further detection and export tasks to related 
+ * or derivative should use hook_features_pipe_suggestions.
  *
  * Each export processor can kickoff further export processors by returning a
  * keyed array (aka the "pipe") where the key is the next export processor hook
@@ -111,10 +109,39 @@ function hook_features_api() {
 function hook_features_export($data, &$export, $module_name) {
   // The following is the simplest implementation of a straight object export
   // with no further export processors called.
+  $export['features']['component'] = isset($export['features']['component']) ? $export['features']['component'] : array();
+  $export['features']['component'] += array_combine($data, $data);
+  return array();
+}
+
+/**
+ * Component hook. The hook should be implemented using the name ot the
+ * component, not the module, eg. [component]_features_export() rather than
+ * [module]_features_export().
+ *
+ * Add suggestions for additional items to add to the export.
+ *
+ * Each suggestion processor should kickoff returning a keyed array (aka the 
+ * "pipe") where the key is the next export processor hook to call and the value
+ * is an array to be passed to that processor's $data argument. If another feature
+ * already exports a value, that value will be ignored.
+ *
+ * @param array $data
+ *   An array of machine names for the component in question to be exported.
+ * @param array &$export
+ *   By reference. An array of all components to be exported with a given
+ *   feature.
+ * @param string $module_name
+ *   The name of the feature module to be generated.
+ * @return array
+ *   The pipe array of further processors that should be called.
+ */
+function hook_features_pipe_suggestions($data, &$export, $module_name) {
+  $pipe = array();
   foreach ($data as $component) {
-    $export['mycomponent'][$component] = $component;
+    $pipe['othercomponent'][$component] = $component;
   }
-  return array();
+  return $pipe;
 }
 
 /**
@@ -235,10 +262,10 @@ function hook_features_export_alter(&$export, $module_name) {
 }
 
 /**
- * Alter the pipe array for a given component. This hook should be implemented
- * with the name of the component type in place of `component` in the function
- * name, e.g. `features_pipe_views_alter()` will alter the pipe for the Views
- * component.
+ * Alter the pipe (new depedent and suggested components) array for a given
+ * component. This hook should be implemented with the name of the component
+ * type in place of `component` in the function name, e.g. 
+ * `features_pipe_node_alter()` will alter the pipe for the node component.
  *
  * @param array &$pipe
  *   By reference. The pipe array of further processors that should be called.
@@ -255,7 +282,7 @@ function hook_features_pipe_COMPONENT_alter(&$pipe, $data, $export) {
 }
 
 /**
- * Alter the pipe array for a given component.
+ * Alter the pipe (new depedent and suggested components) array.
  *
  * @param array &$pipe
  *   By reference. The pipe array of further processors that should be called.
@@ -274,6 +301,41 @@ function hook_features_pipe_alter(&$pipe, $data, $export) {
 }
 
 /**
+ * Alter the suggestions for a given component.
+ *
+ * @param array &$pipe
+ *   By reference. The pipe array of further processors that should be called.
+ * @param array $data
+ *   An array of machine names for the component in question to be exported.
+ * @param array &$export
+ *   By reference. An array of all components to be exported with a given
+ *   feature.
+ */
+function hook_features_pipe_suggestions_COMPONENT_alter(&$pipe, $data, $export) {
+  if (in_array($data, 'my-node-type')) {
+    $pipe['dependencies'][] = 'mymodule';
+  }
+}
+
+
+/**
+ * Alter the suggestions.
+ *
+ * @param array &$pipe
+ *   By reference. The pipe array of further processors that should be called.
+ * @param array $data
+ *   An array of machine names for the component in question to be exported.
+ * @param array &$export
+ *   By reference. An array of all components to be exported with a given
+ *   feature.
+ */
+function hook_features_pipe_suggestions_alter(&$pipe, $data, $export) {
+  if (in_array($data, 'my-node-type')) {
+    $pipe['dependencies'][] = 'mymodule';
+  }
+}
+
+/**
  * @defgroup features_component_alter_hooks Feature's component alter hooks
  * @{
  * Hooks to modify components defined by other features. These come in the form
diff --git a/features.drush.inc b/features.drush.inc
index c5e4bed..331f25a 100644
--- a/features.drush.inc
+++ b/features.drush.inc
@@ -211,8 +211,9 @@ function drush_features_components() {
  */
 function _drush_features_component_list() {
   $components = array();
+  module_load_include('export.inc', 'features');
   foreach (features_get_feature_components() as $source => $info) {
-    if ($options = features_invoke($source, 'features_export_options')) {
+    if ($options = features_export_options($source)) {
       foreach ($options as $name => $title) {
         $components[$source][$name] = $title;
       }
diff --git a/features.export.inc b/features.export.inc
index 7d7a5f8..5cbb614 100644
--- a/features.export.inc
+++ b/features.export.inc
@@ -45,17 +45,36 @@ function _features_populate($pipe, &$export, $module_name = '') {
   foreach ($pipe as $component => $data) {
     static $processed = array();
     // Convert already defined items to dependencies.
-    _features_resolve_dependencies($data, $export, $module_name, $component);
+    _features_resolve_component_conflicts($data, $export, $module_name, $component);
     if (!empty($data) && $function = features_hook($component, 'features_export')) {
       // Pass module-specific data and export array.
       // We don't use features_invoke() here since we need to pass $export by reference.
       $more = $function($data, $export, $module_name, $component);
       // Add the context information.
       $export['component'] = $component;
+
+      // Gather any suggestions for items to add to feature if not already provided.
+      $suggestions = array();
+      if ($function = features_hook($component, 'features_pipe_suggestions')) {
+        $suggestions = $function($data, $export, $module_name, $component);
+      }
+
+      // Even if empty suggestions, call alter so new suggestions can be added.
+      drupal_alter(array('features_pipe_suggestions', 'features_pipe_suggestions_' . $component), $suggestions, $data, $export);
+      foreach ($suggestions as $component_type => $suggestion) {
+        _features_resolve_component_conflicts($suggestion, $export, $module_name, $component_type, FALSE);
+        if ($suggestion) {
+          $more[$component_type] = isset($more[$component_type]) ? $more[$component_type] : array();
+          $more[$component_type] = array_merge($more[$component_type], $suggestion);
+        }
+      }
+
       // Allow other modules to manipulate the pipe to add in additional modules.
       drupal_alter(array('features_pipe', 'features_pipe_' . $component), $more, $data, $export);
+
       // Remove the component information.
       unset($export['component']);
+
       // Allow for export functions to request additional exports, but avoid
       // circular references on already processed components.
       $processed[$component] = isset($processed[$component]) ? array_merge($processed[$component], $data) : $data;
@@ -79,12 +98,17 @@ function _features_populate($pipe, &$export, $module_name = '') {
 /**
  * Iterates over data and convert to dependencies if already defined elsewhere.
  */
-function _features_resolve_dependencies(&$data, &$export, $module_name, $component) {
+function _features_resolve_component_conflicts(&$data, &$export, $module_name, $component, $add_dependency = TRUE) {
+  // Clean out any invalid options.
+  $options = features_export_options($component);
+  $data = array_intersect($data, array_keys($options));
   if ($map = features_get_default_map($component)) {
     foreach ($data as $key => $item) {
       // If this node type is provided by a different module, add it as a dependency
-      if (isset($map[$item]) && $map[$item] != $module_name) {
-        $export['dependencies'][$map[$item]] = $map[$item];
+      if (isset($map[$item]) && $map[$item] != $module_name && module_exists($module_name)) {
+        if ($add_dependency) {
+          $export['dependencies'][$map[$item]] = $map[$item];
+        }
         unset($data[$key]);
       }
     }
@@ -879,3 +903,17 @@ function _features_sanitize(&$array) {
 function _features_is_assoc($array) {
   return (is_array($array) && (0 !== count(array_diff_key($array, array_keys(array_keys($array)))) || count($array)==0));
 }
+
+/**
+ * Returns options for a given component.
+ */
+function features_export_options($component) {
+  $options = &drupal_static(__FUNCTION__, array());
+  if (!isset($options[$component])) {
+    $options[$component] = features_invoke($component, 'features_export_options');
+    if (!isset($options[$component])) {
+      $options[$component] = array();
+    }
+  }
+  return $options[$component];
+}
diff --git a/includes/features.context.inc b/includes/features.context.inc
index 2da59a7..5e7e445 100644
--- a/includes/features.context.inc
+++ b/includes/features.context.inc
@@ -1,9 +1,9 @@
 <?php
 
 /**
- * Implements hook_features_export().
+ * Implements hook_features_pipe_suggestions().
  */
-function context_features_export($data, &$export, $module_name = '') {
+function context_features_pipe_suggestions($data, &$export, $module_name = '') {
   $pipe = ctools_component_features_export('context', $data, $export, $module_name);
 
   $contexts = context_load();
diff --git a/includes/features.field.inc b/includes/features.field.inc
index 96b22b4..0672569 100644
--- a/includes/features.field.inc
+++ b/includes/features.field.inc
@@ -37,7 +37,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.
@@ -45,33 +44,21 @@ function field_features_export($data, &$export, $module_name = '') {
 
   foreach ($data as $identifier) {
     if ($field = features_field_load($identifier)) {
-      // If this field is already provided by another module, remove the field
-      // and add the other module as a dependency.
-      if (isset($map[$identifier]) && $map[$identifier] != $module_name) {
-        if (isset($export['features']['field'][$identifier])) {
-          unset($export['features']['field'][$identifier]);
+      $export['features']['field'][$identifier] = $identifier;
+      $export['dependencies'][$field['field_config']['module']] = $field['field_config']['module'];
+      $export['dependencies'][$field['field_config']['storage']['module']] = $field['field_config']['storage']['module'];
+      $export['dependencies'][$field['field_instance']['widget']['module']] = $field['field_instance']['widget']['module'];
+      foreach ($field['field_instance']['display'] as $key => $display) {
+        if (isset($display['module'])) {
+          $export['dependencies'][$display['module']] = $display['module'];
+          // @TODO: handle the pipe to image styles
         }
-        $module = $map[$identifier];
-        $export['dependencies'][$module] = $module;
       }
-      // If the field has not yet been exported, add it
-      else {
-        $export['features']['field'][$identifier] = $identifier;
-        $export['dependencies'][$field['field_config']['module']] = $field['field_config']['module'];
-        $export['dependencies'][$field['field_config']['storage']['module']] = $field['field_config']['storage']['module'];
-        $export['dependencies'][$field['field_instance']['widget']['module']] = $field['field_instance']['widget']['module'];
-        foreach ($field['field_instance']['display'] as $key => $display) {
-          if (isset($display['module'])) {
-            $export['dependencies'][$display['module']] = $display['module'];
-            // @TODO: handle the pipe to image styles
-          }
-        }
-        // If taxonomy field, add in the vocabulary
-        if ($field['field_config']['type'] == 'taxonomy_term_reference' && !empty($field['field_config']['settings']['allowed_values'])) {
-          foreach ($field['field_config']['settings']['allowed_values'] as $allowed_values) {
-            if (!empty($allowed_values['vocabulary'])) {
-              $pipe['taxonomy'][] = $allowed_values['vocabulary'];
-            }
+      // If taxonomy field, add in the vocabulary
+      if ($field['field_config']['type'] == 'taxonomy_term_reference' && !empty($field['field_config']['settings']['allowed_values'])) {
+        foreach ($field['field_config']['settings']['allowed_values'] as $allowed_values) {
+          if (!empty($allowed_values['vocabulary'])) {
+            $pipe['taxonomy'][] = $allowed_values['vocabulary'];
           }
         }
       }
diff --git a/includes/features.image.inc b/includes/features.image.inc
index 9eee8db..286b2a2 100644
--- a/includes/features.image.inc
+++ b/includes/features.image.inc
@@ -30,19 +30,9 @@ function image_features_export_options() {
  */
 function image_features_export($data, &$export, $module_name = '') {
   $pipe = array();
-  $map = features_get_default_map('image');
-  foreach ($data as $style) {
-    $export['dependencies']['image'] = 'image';
-    // If another module provides this style, add it as a dependency
-    if (isset($map[$style]) && $map[$style] != $module_name) {
-      $module = $map[$style];
-      $export['dependencies'][$module] = $module;
-    }
-    // Otherwise, export the style
-    elseif (image_style_load($style)) {
-      $export['features']['image'][$style] = $style;
-    }
-  }
+  $export['dependencies']['image'] = 'image';
+  $export['features']['image'] = isset($export['features']['image']) ? $export['features']['image'] : array();
+  $export['features']['image'] += array_combine($data, $data);
   return $pipe;
 }
 
diff --git a/includes/features.menu.inc b/includes/features.menu.inc
index 3060aa0..35d47ca 100644
--- a/includes/features.menu.inc
+++ b/includes/features.menu.inc
@@ -56,23 +56,16 @@ function menu_custom_features_export_options() {
  * Implements hook_features_export().
  */
 function menu_custom_features_export($data, &$export, $module_name = '') {
+  $pipe = array();
   // Default hooks are provided by the feature module so we need to add
   // it as a dependency.
   $export['dependencies']['features'] = 'features';
   $export['dependencies']['menu'] = 'menu';
+  $export['features']['menu_custom'] = isset($export['features']['menu_custom']) ? $export['features']['menu_custom'] : array();
+  $export['features']['menu_custom'] += array_combine($data, $data);
 
   // Collect a menu to module map
-  $pipe = array();
-  $map = features_get_default_map('menu_custom', 'menu_name');
-  foreach ($data as $menu_name) {
-    // If this menu is provided by a different module, add it as a dependency.
-    if (isset($map[$menu_name]) && $map[$menu_name] != $module_name) {
-      $export['dependencies'][$map[$menu_name]] = $map[$menu_name];
-    }
-    else {
-      $export['features']['menu_custom'][$menu_name] = $menu_name;
-    }
-  }
+
   return $pipe;
 }
 
@@ -160,29 +153,22 @@ function menu_links_features_identifier($link) {
  * Implements hook_features_export().
  */
 function menu_links_features_export($data, &$export, $module_name = '') {
+  $pipe = array();
   // Default hooks are provided by the feature module so we need to add
   // it as a dependency.
   $export['dependencies']['features'] = 'features';
   $export['dependencies']['menu'] = 'menu';
+  $export['features']['menu_links'] = isset($export['features']['menu_links']) ? $export['features']['menu_links'] : array();
+  $export['features']['menu_links'] += array_combine($data, $data);
 
   // Collect a link to module map
-  $pipe = array();
-  $map = features_get_default_map('menu_links', 'menu_links_features_identifier');
   foreach ($data as $identifier) {
-    if ($link = features_menu_link_load($identifier)) {
-      // If this link is provided by a different module, add it as a dependency.
-      if (isset($map[$identifier]) && $map[$identifier] != $module_name) {
-        $export['dependencies'][$map[$identifier]] = $map[$identifier];
-      }
-      else {
-        $export['features']['menu_links'][$identifier] = $identifier;
-      }
-      // For now, exclude a variety of common menus from automatic export.
-      // They may still be explicitly included in a Feature if the builder
-      // chooses to do so.
-      if (!in_array($link['menu_name'], array('features', 'primary-links', 'secondary-links', 'navigation', 'admin', 'devel'))) {
-        $pipe['menu_custom'][] = $link['menu_name'];
-      }
+    $link = features_menu_link_load($identifier);
+    // For now, exclude a variety of common menus from automatic export.
+    // They may still be explicitly included in a Feature if the builder
+    // chooses to do so.
+    if ($link && !in_array($link['menu_name'], array('features', 'primary-links', 'secondary-links', 'navigation', 'admin', 'devel'))) {
+      $pipe['menu_custom'][] = $link['menu_name'];
     }
   }
   return $pipe;
diff --git a/includes/features.node.inc b/includes/features.node.inc
index af35e25..e6223cb 100644
--- a/includes/features.node.inc
+++ b/includes/features.node.inc
@@ -23,28 +23,26 @@ function node_features_export_options() {
 /**
  * Implements hook_features_export.
  */
-function node_features_export($data, &$export, $module_name = '') {
+function node_features_export(&$data, &$export, $module_name = '') {
   $pipe = array();
-  $map = features_get_default_map('node');
 
-  foreach ($data as $type) {
-    // Poll node module to determine who provides the node type.
-    if ($info = node_type_get_type($type)) {
-      // If this node type is provided by a different module, add it as a dependency
-      if (isset($map[$type]) && $map[$type] != $module_name) {
-        $export['dependencies'][$map[$type]] = $map[$type];
-      }
-      // Otherwise export the node type.
-      elseif (in_array($info->base, array('node_content', 'features'))) {
-        $export['features']['node'][$type] = $type;
-        $export['dependencies']['node'] = 'node';
-        $export['dependencies']['features'] = 'features';
-      }
+  $export['dependencies']['node'] = 'node';
+  $export['dependencies']['features'] = 'features';
+  $export['features']['node'] = isset($export['features']['node']) ? $export['features']['node'] : array();
+  $export['features']['node'] += array_combine($data, $data);
 
-      $fields = field_info_instances('node', $type);
-      foreach ($fields as $name => $field) {
-        $pipe['field'][] = "node-{$field['bundle']}-{$field['field_name']}";
-      }
+  return $pipe;
+}
+
+/**
+ * Implements hook_features_pipe_suggestions().
+ */
+function node_features_pipe_suggestions($data, &$export, $module_name = '') {
+  $pipe = array();
+
+  foreach ($data as $type) {
+    foreach (field_info_instances('node', $type) as $name => $field) {
+      $pipe['field'][] = "node-{$field['bundle']}-{$field['field_name']}";
     }
   }
 
diff --git a/includes/features.taxonomy.inc b/includes/features.taxonomy.inc
index 5ac4ec5..6daccf3 100644
--- a/includes/features.taxonomy.inc
+++ b/includes/features.taxonomy.inc
@@ -36,20 +36,19 @@ function taxonomy_features_export($data, &$export, $module_name = '') {
   // taxonomy_default_vocabularies integration is provided by Features.
   $export['dependencies']['features'] = 'features';
   $export['dependencies']['taxonomy'] = 'taxonomy';
+  $export['features']['taxonomy'] = isset($export['features']['taxonomy']) ? $export['features']['taxonomy'] : array();
+  $export['features']['taxonomy'] += array_combine($data, $data);
+  return $pipe;
+}
 
-  // Add dependencies for each vocabulary.
-  $map = features_get_default_map('taxonomy');
+/**
+ * Implements hook_features_pipe_suggestions().
+ */
+function taxonomy_features_pipe_suggestions($data, &$export, $module_name = '') {
+  $pipe = array();
   foreach ($data as $machine_name) {
-    if (isset($map[$machine_name]) && $map[$machine_name] != $module_name) {
-      $export['dependencies'][$map[$machine_name]] = $map[$machine_name];
-    }
-    else {
-      $export['features']['taxonomy'][$machine_name] = $machine_name;
-
-      $fields = field_info_instances('taxonomy_term', $machine_name);
-      foreach ($fields as $name => $field) {
-        $pipe['field'][] = "taxonomy_term-{$field['bundle']}-{$field['field_name']}";
-      }
+    foreach (field_info_instances('taxonomy_term', $machine_name) as $name => $field) {
+      $pipe['field'][] = "taxonomy_term-{$field['bundle']}-{$field['field_name']}";
     }
   }
   return $pipe;
diff --git a/includes/features.user.inc b/includes/features.user.inc
index c76455d..c67874d 100644
--- a/includes/features.user.inc
+++ b/includes/features.user.inc
@@ -147,17 +147,8 @@ function user_permission_features_rebuild($module) {
  */
 function user_role_features_export($data, &$export, $module_name = '') {
   $export['dependencies']['features'] = 'features';
-  $map = features_get_default_map('user_role', 'name');
-  foreach ($data as $role) {
-    // Role is provided by another module. Add dependency.
-    if (isset($map[$role]) && $map[$role] != $module_name) {
-      $export['dependencies'][$map[$role]] = $map[$role];
-    }
-    // Export.
-    elseif(user_role_load_by_name($role)) {
-      $export['features']['user_role'][$role] = $role;
-    }
-  }
+  $export['features']['user_role'] = isset($export['features']['user_role']) ? $export['features']['user_role'] : array();
+  $export['features']['user_role'] += array_combine($data, $data);
   return array();
 }
 
diff --git a/tests/features.test b/tests/features.test
index 5057a2b..a3db6ab 100644
--- a/tests/features.test
+++ b/tests/features.test
@@ -167,3 +167,101 @@ class FeaturesUserTestCase extends DrupalWebTestCase {
     }
   }
 }
+
+/**
+ * User permission component tests for Features
+ */
+class FeaturesBuildTestCase extends DrupalWebTestCase {
+  protected $profile = 'testing';
+
+  /**
+   * Test info.
+   */
+  public static function getInfo() {
+    return array(
+      'name' => t('Building tests'),
+      'description' => t('Run tests for building of Features.') ,
+      'group' => t('Features'),
+    );
+  }
+
+  /**
+   * Set up test.
+   */
+  public function setUp() {
+    parent::setUp(array(
+      'field',
+      'filter',
+      'image',
+      'taxonomy',
+      'views',
+      'features',
+      'features_test',
+      'features_tests_additional',
+    ));
+
+    // Run a features rebuild to ensure our feature is fully installed.
+    features_rebuild();
+
+    $admin_user = $this->drupalCreateUser(array('administer features'));
+    $this->drupalLogin($admin_user);
+  }
+
+  /**
+   * Run test.
+   */
+  public function test() {
+    module_load_include('inc', 'features', 'features.export');
+
+    // Add a new field to the features_test content type.
+    _features_test_add_field('features_test');
+    $feature = features_get_features('features_test');
+    $export = features_populate($feature->info['features'], $feature->info['dependencies'], 'features_test');
+
+    // Make sure the new field got suggested and added to export.
+    $this->assertTrue(!empty($export['features']['field']['node-features_test-field_features_test_3']), t('Field added to export.'));
+
+    // Since features_tests_additional defines a field for node type defined in features_test,
+    // test to make sure dependency from features_tests_additional did not get added.
+    $this->assertTrue(!in_array('features_tests_additional', $export['dependencies']), t('Circular dependency in piped suggestions prevented.'));
+  }
+}
+
+function _features_test_add_field($type, $field_info = array(), $field_instance_info = array()) {
+  // Add or remove the body field, as needed.
+  $field_name = isset($field_info['field_name']) ? $field_info['field_name'] : 'field_features_test_3';
+  $field = field_info_field($field_name);
+  $instance = field_info_instance('node', $field_name, $type);
+  if (empty($field)) {
+    $field = $field_info + array(
+      'field_name' => $field_name, 
+      'type' => 'text_with_summary', 
+      'entity_types' => array('node'),
+    );
+    $field = field_create_field($field);
+  }
+
+  if (empty($instance)) {
+    $instance = $field_instance_info + array(
+      'field_name' => $field_name, 
+      'entity_type' => 'node', 
+      'bundle' => $type, 
+      'label' => 'Features test field', 
+      'widget' => array('type' => 'text_textarea_with_summary'), 
+      'settings' => array('display_summary' => TRUE), 
+      'display' => array(
+        'default' => array(
+          'label' => 'hidden', 
+          'type' => 'text_default',
+        ), 
+        'teaser' => array(
+          'label' => 'hidden', 
+          'type' => 'text_summary_or_trimmed',
+        ),
+      ),
+    );
+    $instance = field_create_instance($instance);
+  }
+
+  return $instance;
+}
diff --git a/tests/features_tests_additional/features_tests_additional.features.field.inc b/tests/features_tests_additional/features_tests_additional.features.field.inc
new file mode 100644
index 0000000..5d7fe8c
--- /dev/null
+++ b/tests/features_tests_additional/features_tests_additional.features.field.inc
@@ -0,0 +1,86 @@
+<?php
+/**
+ * @file
+ * features_tests_additional.features.field.inc
+ */
+
+/**
+ * Implements hook_field_default_fields().
+ */
+function features_tests_additional_field_default_fields() {
+  $fields = array();
+
+  // Exported field: 'node-features_test-field_features_test_2'
+  $fields['node-features_test-field_features_test_2'] = array(
+    'field_config' => array(
+      'active' => '1',
+      'cardinality' => '1',
+      'deleted' => '0',
+      'entity_types' => array(),
+      'field_name' => 'field_features_test_2',
+      'foreign keys' => array(
+        'format' => array(
+          'columns' => array(
+            'format' => 'format',
+          ),
+          'table' => 'filter_format',
+        ),
+      ),
+      'indexes' => array(
+        'format' => array(
+          0 => 'format',
+        ),
+      ),
+      'module' => 'text',
+      'settings' => array(
+        'max_length' => '255',
+      ),
+      'translatable' => '0',
+      'type' => 'text',
+    ),
+    'field_instance' => array(
+      'bundle' => 'features_test',
+      'default_value' => NULL,
+      'deleted' => '0',
+      'description' => '',
+      'display' => array(
+        'default' => array(
+          'label' => 'above',
+          'module' => 'text',
+          'settings' => array(),
+          'type' => 'text_default',
+          'weight' => 1,
+        ),
+        'teaser' => array(
+          'label' => 'above',
+          'settings' => array(),
+          'type' => 'hidden',
+          'weight' => 0,
+        ),
+      ),
+      'entity_type' => 'node',
+      'field_name' => 'field_features_test_2',
+      'label' => 'Test 2',
+      'required' => 0,
+      'settings' => array(
+        'text_processing' => '0',
+        'user_register_form' => FALSE,
+      ),
+      'widget' => array(
+        'active' => 1,
+        'module' => 'text',
+        'settings' => array(
+          'size' => '60',
+        ),
+        'type' => 'text_textfield',
+        'weight' => '-3',
+      ),
+    ),
+  );
+
+  // Translatables
+  // Included for use with string extractors like potx.
+  t('Test 2');
+
+  return $fields;
+}
diff --git a/tests/features_tests_additional/features_tests_additional.info b/tests/features_tests_additional/features_tests_additional.info
new file mode 100644
index 0000000..6826919
--- /dev/null
+++ b/tests/features_tests_additional/features_tests_additional.info
@@ -0,0 +1,7 @@
+name = "Features Tests Additional"
+description = "Test module for additional Features testing"
+core = "7.x"
+package = "Testing"
+dependencies[] = "features"
+dependencies[] = "features_test"
+features[field][] = "node-features_test-field_features_test_2"
diff --git a/tests/features_tests_additional/features_tests_additional.module b/tests/features_tests_additional/features_tests_additional.module
new file mode 100644
index 0000000..8b958b0
--- /dev/null
+++ b/tests/features_tests_additional/features_tests_additional.module
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @file
+ */
+
+// Drupal needs this blank file.
