Index: features.export.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/features/features.export.inc,v
retrieving revision 1.1.2.47.2.1
diff -u -p -r1.1.2.47.2.1 features.export.inc
--- features.export.inc	7 May 2010 17:11:11 -0000	1.1.2.47.2.1
+++ features.export.inc	9 Sep 2010 20:08:23 -0000
@@ -102,11 +102,16 @@ function _features_export_minimize_depen
  * Iterates over a list of dependencies and maximize the list of modules.
  */
 function _features_export_maximize_dependencies($dependencies, $module_name = '', $first = TRUE) {
-  $maximized = $dependencies;
+  static $maximized;
+  if($first){
+    $maximized = array(); 
+  }
+  $maximized = array_merge($maximized, $dependencies);
   foreach ($dependencies as $k => $v) {
     $module = features_get_modules($v);
     if ($module && !empty($module->info['dependencies'])) {
-      $maximized = array_merge($maximized, _features_export_maximize_dependencies($module->info['dependencies'], $module_name, FALSE));
+      $moreDependencies = array_diff($module->info['dependencies'], $maximized);
+      _features_export_maximize_dependencies($moreDependencies, $module_name, FALSE);
     }
   }
   return array_unique($maximized);
Index: features.info
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/features/features.info,v
retrieving revision 1.1.2.1.2.1
diff -u -p -r1.1.2.1.2.1 features.info
--- features.info	7 May 2010 17:11:11 -0000	1.1.2.1.2.1
+++ features.info	9 Sep 2010 20:08:23 -0000
@@ -23,3 +23,10 @@ files[] = includes/features.views.inc
 files[] = theme/features-admin-components.tpl.php
 files[] = theme/features-form.tpl.php
 files[] = theme/theme.inc
+
+; Information added by drupal.org packaging script on 2010-07-11
+version = "7.x-1.x-dev"
+core = "7.x"
+project = "features"
+datestamp = "1278834211"
+
Index: features.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/features/features.module,v
retrieving revision 1.1.2.63.2.1
diff -u -p -r1.1.2.63.2.1 features.module
--- features.module	7 May 2010 17:11:11 -0000	1.1.2.63.2.1
+++ features.module	9 Sep 2010 20:08:23 -0000
@@ -202,7 +202,7 @@ function features_theme() {
 
   $items['features_component_key'] = $base;
   $items['features_component_list'] = array(
-    'variables' => array('components' => array(), 'source' => null),
+    'variables' => array('components' => array(), 'source' => array()),
   ) + $base;
 
   $items['features_storage_link'] = array(
@@ -290,6 +290,14 @@ function features_permission() {
 }
 
 /**
+ * Implements hook_hook_info().
+ */
+function features_hook_info() {
+  $info['features_api'] = array('group' => 'features_api');
+  return $info;
+}
+
+/**
  * Load includes for any modules that implement the features API and
  * load includes for those provided by features.
  */
Index: includes/features.field.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/features/includes/Attic/features.field.inc,v
retrieving revision 1.1.2.1
diff -u -p -r1.1.2.1 features.field.inc
--- includes/features.field.inc	7 May 2010 17:11:11 -0000	1.1.2.1
+++ includes/features.field.inc	9 Sep 2010 20:08:23 -0000
@@ -18,20 +18,20 @@ function field_features_export($data, &$
   // 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';
-  
- // Collect a module to style map
+
+  // Collect a module to style map
   $map = array();
   $modules = module_implements('field_default_fields');
   foreach ($modules as $module) {
     $fields = module_invoke($module, 'field_default_fields');
     foreach ($fields as $name => $field) {
-      $map["{$field['bundle']}-{$field['field_name']}"] = $module;
+      $instance = reset($field['field_instance']);
+      $map["{$instance['entity_type']}-{$instance['bundle']}-{$field['field_config']['field_name']}"] = $module;
     }
   }
 
-
   foreach ($data as $instance) {
-    list($bundle, $field) = explode('-', $instance);
+    list($entity_type, $bundle, $field) = explode('-', $instance);
     // If this field is already provided by another module, remove the field
     // and add the other module as a dependency.
     if (isset($map[$instance]) && $map[$instance] != $module_name) {
@@ -46,7 +46,7 @@ function field_features_export($data, &$
 
       $export['features']['field'][$instance] = $instance;
 
-      $field_info = field_info_field($field); 
+      $field_info = field_info_field($field);
       if ($field_info) {
         $export['dependencies'][$field_info['module']] = $field_info['module'];
 
@@ -54,11 +54,12 @@ function field_features_export($data, &$
         $export['dependencies'][$storage_module] = $storage_module;
       }
 
-      $instance_info = field_info_instance('node', $field, $bundle);
+      $instance_info = field_info_instance($entity_type, $field, $bundle);
       if ($instance_info) {
         $export['dependencies'][$instance_info['widget']['module']] = $instance_info['widget']['module'];
         foreach ($instance_info['display'] as $key => $display) {
-          $export['dependencies'][$display['module']] = $display['module'];
+          $module = (isset($display['module']))? $display['module'] : NULL;
+          $export['dependencies'][$module] = $module;
 
           // todo : handle the pipe to image styles
         }
@@ -70,22 +71,33 @@ function field_features_export($data, &$
 /**
  * Implementation of hook_features_export_render().
  */
-function field_features_export_render($module = 'foo', $data) {
+function field_features_export_render($module, $data) {
   $translatables = $code = array();
 
   $code[] = '  $fields = array();';
   $code[] = '';
+  $i = 0;
   foreach ($data as $instance) {
-    list($bundle, $field_name) = explode('-', $instance);
-
-    $field = field_info_field($field_name); 
+    list($entity_type, $bundle, $field_name) = explode('-', $instance);
 
+    $field = field_info_field($field_name);
+    if (!$field) {
+      // Outch - something is wrong :|
+      // Jump to next field to keep the code clean
+      continue;
+    }
+    
     unset($field['columns']);
     unset($field['locked']);
     unset($field['storage']);
 
+    $dataArray = array(
+      'field_config' => $field,
+      'field_instance' => field_info_instance($entity_type, $field_name, $bundle),
+    );
+
     $code[] = '  // Exported field: ' . $field_name;
-    $code[] = '  $fields[] = ' . features_var_export($field, '  ') . ';';
+    $code[] = '  $fields[] = ' . features_var_export($dataArray, '  ') . ';';
     $code[] = '';
 
     // Add any labels to translatables array.
@@ -119,23 +131,74 @@ function field_features_rebuild($module)
     field_info_cache_clear();
 
     foreach ($fields as $field) {
-      $existing_field = field_info_field($field['field_name']);
-      if ($existing_field) {
-        field_update_field($field);
+      // Legacy handling
+      if (!isset($field['field_config'])) {
+        _legacy_field_features_rebuild($field);
+        variable_set('menu_rebuild_needed', TRUE);
+        continue;
+      }
+      $field_config = $field['field_config'];
+      $field_instance = $field['field_instance'];
+
+      $existing_field = field_info_field($field_config['field_name']);
+
+      unset($field_config['id']);// Make sure no foreign field is overwritten
+      if (!empty($existing_field)) {
+        field_update_field($field_config);
       }
       else {
-        field_create_field($field);
+        field_create_field($field_config);
       }
 
-      $existing_instance = field_info_instance($field['entity_type'], $field['type_name'], $field['bundle']);
-      if ($existing_instance) {
-        field_update_instance($field);
-      }
-      else {
-        field_create_instance($field);
+      unset($field_instance['id']);// Make sure no foreign field is overwritten
+      $instance = field_info_instance(
+        $field_instance['entity_type'],
+        $field_instance['field_name'],
+        $field_instance['bundle']
+      );
+
+      if ($instance) {
+        field_update_instance($instance);
+      } else {
+        field_create_instance($field_instance);
       }
+      
       variable_set('menu_rebuild_needed', TRUE);
     }
   }
 }
 
+/**
+ * Legacy method to support the former dev release format
+ * @TODO Is this really necessary - should be removed before the first beta/RC release
+ */
+function _legacy_field_features_rebuild($field) {
+
+  $existing_field = field_info_field($field['field_name']);
+  unset($field['id']);
+  if (!empty($existing_field)) {
+    field_update_field($field);
+  }
+  else {
+    field_create_field($field);
+  }
+
+  // update/create field instances
+  if (!empty($field['bundles'])) {
+    foreach ($field['bundles'] as $entity_type => $bundles) {
+      if (is_array($bundles)) {
+        foreach ($bundles as $bundle) {
+          $instance = field_info_instance($entity_type, $field['field_name'], $bundle);
+          if ($instance) {
+            field_update_instance($instance);
+          }
+          else {
+            $field['entity_type'] = $entity_type;
+            $field['bundle'] = $bundle;
+            field_create_instance($field);
+          }
+        }
+      }
+    }
+  }
+}
-\ No newline at end of file
Index: includes/features.node.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/features/includes/features.node.inc,v
retrieving revision 1.1.2.17.2.1
diff -u -p -r1.1.2.17.2.1 features.node.inc
--- includes/features.node.inc	7 May 2010 17:11:11 -0000	1.1.2.17.2.1
+++ includes/features.node.inc	9 Sep 2010 20:08:23 -0000
@@ -43,8 +43,6 @@ function node_features_export($data, &$e
     }
   }
 
-
-
   foreach ($data as $type)  {
     // Poll node module to determine who provides the node type.
     if ($info = $type_map[$type]->base) {
@@ -63,13 +61,10 @@ function node_features_export($data, &$e
 
       $fields = field_info_instances('node', $type);
       foreach ($fields as $name => $field) {
-        $pipe['field'][] = "{$field['bundle']}-{$field['field_name']}";
-      }
-	 	
+        $pipe['field'][] = "node-{$field['bundle']}-{$field['field_name']}";
+      }	 	
     }
   }
-
-
   return $pipe;
 }
 
@@ -83,8 +78,6 @@ function node_features_export_render($mo
     'description' => TRUE,
     'has_title' => FALSE,
     'title_label' => TRUE,
-    'has_body' => FALSE,
-    'body_label' => TRUE,
     'help' => TRUE,
   );
   $output = array();
