? FIELD-TO-COLUMN-PARTIAL.patch
? Makefile
? constants.pl
? d6-50-nodes.sql.gz
? d7-50-nodes-new.sql.gz
? d7-50-nodes.sql.gz
? head.kpf
? patches
? modules/field/field.delete.inc
? modules/field/modules/combo
? scripts/OLD-generate-autoload.pl
? scripts/generate-autoload.pl
? sites/all/modules/cck
? sites/all/modules/devel
? sites/all/modules/pbs
? sites/all/modules/taint
? sites/default/files
? sites/default/settings.php
Index: modules/field/field.api.php
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/field.api.php,v
retrieving revision 1.14
diff -u -F^[fc] -r1.14 field.api.php
--- modules/field/field.api.php	6 Jun 2009 16:17:30 -0000	1.14
+++ modules/field/field.api.php	9 Jun 2009 15:50:25 -0000
@@ -602,8 +602,8 @@ function hook_field_attach_pre_update($o
  * hook_field_attach_pre_update() to bypass the regular storage engine, to
  * handle field queries.
  *
- * @param $field_name
- *   The name of the field to query.
+ * @param $field_id
+ *   The id of the field to query.
  * @param $conditions
  *   See field_attach_query().
  *   A storage module that doesn't support querying a given column should raise
@@ -623,7 +623,7 @@ function hook_field_attach_pre_update($o
  *   The $skip_field parameter should be set to TRUE if the query has been
  *   handled.
  */
-function hook_field_attach_pre_query($field_name, $conditions, $result_format, $age, &$skip_field) {
+function hook_field_attach_pre_query($field_id, $conditions, $result_format, $age, &$skip_field) {
 }
 
 /**
@@ -781,7 +781,7 @@ function hook_field_storage_delete_revis
  * Handle a field query.
  *
  * @param $field_name
- *   The name of the field to query.
+ *   The id of the field to query.
  * @param $conditions
  *   See field_attach_query().
  *   A storage module that doesn't support querying a given column should raise
@@ -794,7 +794,7 @@ function hook_field_storage_delete_revis
  * @return
  *   See field_attach_query().
  */
-function hook_field_storage_query($field_name, $conditions, $result_format, $age) {
+function hook_field_storage_query($field_id, $conditions, $result_format, $age) {
 }
 
 /**
@@ -829,21 +829,21 @@ function hook_field_storage_create_field
 /**
  * Act on deletion of a field.
  *
- * @param $field_name
- *   The name of the field being deleted.
+ * @param $field_id
+ *   The field id being deleted.
  */
-function hook_field_storage_delete_field($field_name) {
+function hook_field_storage_delete_field($field_id) {
 }
 
 /**
  * Act on deletion of a field instance.
  *
- * @param $field_name
- *   The name of the field in the new instance.
+ * @param $field_id
+ *   The field id of the new instance.
  * @param $bundle
  *   The name of the bundle in the new instance.
  */
-function hook_field_storage_delete_instance($field_name, $bundle) {
+function hook_field_storage_delete_instance($field_id, $bundle) {
 }
 
 /**
Index: modules/field/field.attach.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/field.attach.inc,v
retrieving revision 1.22
diff -u -F^[fc] -r1.22 field.attach.inc
--- modules/field/field.attach.inc	7 Jun 2009 00:00:57 -0000	1.22
+++ modules/field/field.attach.inc	9 Jun 2009 15:50:25 -0000
@@ -184,7 +184,7 @@ function _field_invoke($op, $obj_type, $
 
     // When in 'single field' mode, only act on the specified field.
     if (empty($options['field_name']) || $options['field_name'] == $field_name) {
-      $field = field_info_field($field_name);
+      $field = field_info_field($instance['field_id']);
 
       // Extract the field values into a separate variable, easily accessed by
       // hook implementations.
@@ -236,8 +236,8 @@ function _field_invoke($op, $obj_type, $
  *   Currently always NULL.
  * @param $options
  *   An associative array of additional options, with the following keys:
- *  - 'field_name'
- *    The name of the field whose operation should be invoked. By default, the
+ *  - 'field_id'
+ *    The id of the field whose operation should be invoked. By default, the
  *    operation is invoked on all the fields in the objects' bundles.
  *  - 'default'
  *    A boolean value, specifying which implementation of the operation should
@@ -269,19 +269,20 @@ function _field_invoke_multiple($op, $ob
   foreach ($objects as $object) {
     list($id, $vid, $bundle) = field_attach_extract_ids($obj_type, $object);
     foreach (field_info_instances($bundle) as $instance) {
-      $field_name = $instance['field_name'];
       // When in 'single field' mode, only act on the specified field.
-      if (empty($options['field_name']) || $options['field_name'] == $field_name) {
+      $field_id = $instance['field_id'];
+      if (empty($options['field_id']) || $options['field_id'] == $field_id) {
         // Add the field to the list of fields to invoke the hook on.
-        if (!isset($fields[$field_name])) {
-          $fields[$field_name] = field_info_field($field_name);
+        if (!isset($fields[$field_id])) {
+          $fields[$field_id] = field_info_field($instance['field_id']);
         }
         // Group the corresponding instances and objects.
-        $grouped_instances[$field_name][$id] = $instance;
-        $grouped_objects[$field_name][$id] = $objects[$id];
+        $grouped_instances[$field_id][$id] = $instance;
+        $grouped_objects[$field_id][$id] = $objects[$id];
         // Extract the field values into a separate variable, easily accessed
         // by hook implementations.
-        $grouped_items[$field_name][$id] = isset($object->$field_name) ? $object->$field_name : array();
+        $field_name = $instance['field_name'];
+        $grouped_items[$field_id][$id] = isset($object->$field_name) ? $object->$field_name : array();
       }
     }
     // Initialize the return value for each object.
@@ -289,10 +290,10 @@ function _field_invoke_multiple($op, $ob
   }
 
   // For each field, invoke the field hook and collect results.
-  foreach ($fields as $field_name => $field) {
+  foreach ($fields as $field_id => $field) {
     $function = $options['default'] ? 'field_default_' . $op : $field['module'] . '_field_' . $op;
     if (drupal_function_exists($function)) {
-      $results = $function($obj_type, $grouped_objects[$field_name], $field, $grouped_instances[$field_name], $grouped_items[$field_name], $a, $b);
+      $results = $function($obj_type, $grouped_objects[$field['id']], $field, $grouped_instances[$field['id']], $grouped_items[$field['id']], $a, $b);
       if (isset($results)) {
         // Collect results by object.
         // For hooks with array results, we merge results together.
@@ -310,9 +311,10 @@ function _field_invoke_multiple($op, $ob
 
     // Populate field values back in the objects, but avoid replacing missing
     // fields with an empty array (those are not equivalent on update).
-    foreach ($grouped_objects[$field_name] as $id => $object) {
-      if ($grouped_items[$field_name][$id] !== array() || property_exists($object, $field_name)) {
-        $object->$field_name = $grouped_items[$field_name][$id];
+    $field_name = $field['field_name'];
+    foreach ($grouped_objects[$field['id']] as $id => $object) {
+      if ($grouped_items[$field['id']][$id] !== array() || property_exists($object, $field_name)) {
+        $object->$field_name = $grouped_items[$field['id']][$id];
       }
     }
   }
@@ -735,7 +737,7 @@ function field_attach_delete_revision($o
  * might therefore differ from what could be expected by looking at a regular,
  * fully loaded object.
  *
- * @param $field_name
+ * @param $field_id
  *   The name of the field to query.
  * @param $conditions
  *   An array of query conditions. Each condition is a numerically indexed
@@ -744,7 +746,7 @@ function field_attach_delete_revision($o
  *   with all operators below. A FieldQueryException will be raised if an
  *   unsupported condition is specified.
  *   Supported columns:
- *     - any of the columns for $field_name's field type: condition on field
+ *     - any of the columns for $field_id's field type: condition on field
  *       value,
  *     - 'type': condition on object type (e.g. 'node', 'user'...),
  *     - 'bundle': condition on object bundle (e.g. node type),
@@ -788,7 +790,7 @@ function field_attach_delete_revision($o
  *   values depend on the $result_format parameter:
  *   - FIELD_QUERY_RETURN_IDS: the object id.
  *   - FIELD_QUERY_RETURN_VALUES: a pseudo-object with values for the
- *     $field_name field. This only includes values matching the conditions,
+ *     $field_id field. This only includes values matching the conditions,
  *     and thus might not contain all actual values and actual delta sequence
  *     (although values oprder is preserved).
  *     The pseudo-objects only include properties that the Field API knows
@@ -797,13 +799,13 @@ function field_attach_delete_revision($o
  *   Throws a FieldQueryException if the field's storage doesn't support the
  *   specified conditions.
  */
-function field_attach_query($field_name, $conditions, $result_format = FIELD_QUERY_RETURN_IDS, $age = FIELD_LOAD_CURRENT) {
+function field_attach_query($field_id, $conditions, $result_format = FIELD_QUERY_RETURN_IDS, $age = FIELD_LOAD_CURRENT) {
   // Give a chance to 3rd party modules that bypass the storage engine to
   // handle the query.
   $skip_field = FALSE;
   foreach (module_implements('field_attach_pre_query') as $module) {
     $function = $module . '_field_attach_pre_query';
-    $results = $function($field_name, $conditions, $result_format, $age, $skip_field);
+    $results = $function($field_id, $conditions, $result_format, $age, $skip_field);
     // Stop as soon as a module claims it handled the query.
     if ($skip_field) {
       break;
@@ -811,15 +813,16 @@ function field_attach_query($field_name,
   }
   // If the request hasn't been handled, let the storage engine handle it.
   if (!$skip_field) {
-    $results = module_invoke(variable_get('field_storage_module', 'field_sql_storage'), 'field_storage_query', $field_name, $conditions, $result_format, $age);
+    $results = module_invoke(variable_get('field_storage_module', 'field_sql_storage'), 'field_storage_query', $field_id, $conditions, $result_format, $age);
   }
 
+  $field = field_info_field($field_id);
   if ($result_format == FIELD_QUERY_RETURN_VALUES) {
     foreach ($results as $obj_type => $pseudo_objects) {
       if ($age == FIELD_LOAD_CURRENT) {
         // Invoke hook_field_load().
         $b = NULL;
-        _field_invoke_multiple('load', $obj_type, $pseudo_objects, $age, $b, array('field_name' => $field_name));
+        _field_invoke_multiple('load', $obj_type, $pseudo_objects, $age, $b, array('field_id' => $field_id));
 
         // Invoke hook_field_attach_load().
         foreach (module_implements('field_attach_load') as $module) {
@@ -838,7 +841,7 @@ function field_attach_query($field_name,
 
           // Invoke hook_field_load().
           $b = NULL;
-          _field_invoke_multiple('load', $obj_type, $objects, $age, $b, array('field_name' => $field_name));
+          _field_invoke_multiple('load', $obj_type, $objects, $age, $b, array('field_id' => $field_id));
 
           // Invoke hook_field_attach_load().
           foreach (module_implements('field_attach_load') as $module) {
@@ -858,7 +861,7 @@ function field_attach_query($field_name,
  *
  * See field_attach_query() for more informations.
  *
- * @param $field_name
+ * @param $field_id
  *   The name of the field to query.
  * @param $conditions
  *   See field_attach_query().
@@ -869,8 +872,8 @@ function field_attach_query($field_name,
  * @return
  *   See field_attach_query().
  */
-function field_attach_query_revisions($field_name, $conditions, $result_format = FIELD_QUERY_RETURN_IDS) {
-  return field_attach_query($field_name, $conditions, $result_format, FIELD_LOAD_REVISION);
+function field_attach_query_revisions($field_id, $conditions, $result_format = FIELD_QUERY_RETURN_IDS) {
+  return field_attach_query($field_id, $conditions, $result_format, FIELD_LOAD_REVISION);
 }
 
 /**
@@ -994,7 +997,7 @@ function field_attach_delete_bundle($bun
   // Delete the instances themseves
   $instances = field_info_instances($bundle);
   foreach ($instances as $instance) {
-    field_delete_instance($instance['field_name'], $bundle);
+    field_delete_instance($instance['field_id'], $bundle);
   }
 
   // Let other modules act on deleting the bundle.
Index: modules/field/field.crud.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/field.crud.inc,v
retrieving revision 1.14
diff -u -F^[fc] -r1.14 field.crud.inc
--- modules/field/field.crud.inc	28 May 2009 10:05:32 -0000	1.14
+++ modules/field/field.crud.inc	9 Jun 2009 15:50:25 -0000
@@ -203,6 +203,10 @@
  *   FieldException
  */
 function field_create_field($field) {
+  // Field id is forbidden.
+  if (isset($field['id'])) {
+    throw new FieldException('Attempt to create a field with a specified id.');
+  }
   // Field name is required.
   if (empty($field['field_name'])) {
     throw new FieldException('Attempt to create an unnamed field.');
@@ -227,7 +231,7 @@ function field_create_field($field) {
   // Ensure the field name is unique over active and disabled fields.
   // We do not care about deleted fields.
   // TODO : do we want specific messages when clashing with a disabled or inactive field ?
-  $prior_field = field_read_field($field['field_name'], array('include_inactive' => TRUE));
+  $prior_field = field_read_fields(array('field_name' => $field['field_name']), array('include_inactive' => TRUE));
   if (!empty($prior_field)) {
     throw new FieldException(t('Attempt to create field name %name which already exists.', array('%name' => $field['field_name'])));
   }
@@ -285,8 +289,8 @@ function field_create_field($field) {
  * This function will not return deleted fields. Use
  * field_read_fields() instead for this purpose.
  *
- * @param $field_name
- *   The field name to read.
+ * @param $field_id
+ *   The field id to read.
  * @param array $include_additional
  *   The default behavior of this function is to not return a field that
  *   is inactive. Setting
@@ -295,9 +299,9 @@ function field_create_field($field) {
  * @return
  *   A field structure, or FALSE.
  */
-function field_read_field($field_name, $include_additional = array()) {
-  $fields = field_read_fields(array('field_name' => $field_name), $include_additional);
-  return $fields ? current($fields) : FALSE;
+function field_read_field($field_id, $include_additional = array()) {
+  $fields = field_read_fields(array('id' => $field_id), $include_additional);
+  return $fields ? reset($fields) : FALSE;
 }
 
 /**
@@ -312,9 +316,7 @@ function field_read_field($field_name, $
  *   $include_additional['include_deleted'] to TRUE will override this
  *   behavior.
  * @return
- *   An array of fields matching $params. If
- *   $include_additional['include_deletd'] is TRUE, the array is keyed
- *   by field id, otherwise it is keyed by field name.
+ *   An array of fields matching $params, keyed by field id.
  */
 function field_read_fields($params = array(), $include_additional = array()) {
   $query = db_select('field_config', 'fc', array('fetch' => PDO::FETCH_ASSOC));
@@ -347,11 +349,7 @@ function field_read_fields($params = arr
     $schema += array('columns' => array(), 'indexes' => array());
     $field['columns'] = $schema['columns'];
 
-    $field_name = $field['field_name'];
-    if ($include_deleted) {
-      $field_name = $field['id'];
-    }
-    $fields[$field_name] = $field;
+    $fields[$field['id']] = $field;
   }
   return $fields;
 }
@@ -360,23 +358,23 @@ function field_read_fields($params = arr
  * Mark a field for deletion, including all its instances and all data
  * associated with it.
  *
- * @param $field_name
- *   The field name to delete.
+ * @param $field_id
+ *   The field to delete.
  */
-function field_delete_field($field_name) {
+function field_delete_field($field_id) {
   // Mark field storage for deletion.
-  module_invoke(variable_get('field_storage_module', 'field_sql_storage'), 'field_storage_delete_field', $field_name);
+  module_invoke(variable_get('field_storage_module', 'field_sql_storage'), 'field_storage_delete_field', $field_id);
 
   // Mark any instances of the field for deletion.
   db_update('field_config_instance')
     ->fields(array('deleted' => 1))
-    ->condition('field_name', $field_name)
+    ->condition('field_id', $field_id)
     ->execute();
 
   // Mark the field for deletion.
   db_update('field_config')
     ->fields(array('deleted' => 1))
-    ->condition('field_name', $field_name)
+    ->condition('id', $field_id)
     ->execute();
 
   // Clear the cache.
@@ -387,7 +385,7 @@ function field_delete_field($field_name)
  * Creates an instance of a field, binding it to a bundle.
  *
  * @param $instance
- *   A field instance structure. The field_name and bundle properties are
+ *   A field instance structure. The field_id and bundle properties are
  *   required.
  *   Other properties, if omitted, will be given the following default values:
  *   - label: the field name
@@ -411,19 +409,24 @@ function field_delete_field($field_name)
  *     - settings: each omitted setting is given the default value specified in
  *       hook_field_formatter_info().
  * @return
- *   The $instance structure with the id property filled in.
+ *   The $instance structure with the id and field_name properties filled in.
  * @throw
  *   FieldException
  */
 function field_create_instance($instance) {
+  // Instance id is forbidden.
+  if (isset($instance['id'])) {
+    throw new FieldException('Attempt to create an instance with a specified id.');
+  }
   // Check that the specified field exists.
-  $field = field_read_field($instance['field_name']);
+  $field = field_read_field($instance['field_id']);
   if (empty($field)) {
     throw new FieldException("Attempt to create an instance of a field that doesn't exist.");
   }
 
-  // Set the field id.
+  // Set the field id and name.
   $instance['field_id'] = $field['id'];
+  $instance['field_name'] = $field['field_name'];
 
   // TODO: Check that the specifed bundle exists.
 
@@ -435,7 +438,7 @@ function field_create_instance($instance
 
   // Ensure the field instance is unique.
   // TODO : do we want specific messages when clashing with a disabled or inactive instance ?
-  $prior_instance = field_read_instance($instance['field_name'], $instance['bundle'], array('include_inactive' => TRUE));
+  $prior_instance = field_read_instance($instance['field_id'], $instance['bundle'], array('include_inactive' => TRUE));
   if (!empty($prior_instance)) {
     throw new FieldException('Attempt to create a field instance which already exists.');
   }
@@ -468,14 +471,14 @@ function field_create_instance($instance
  */
 function field_update_instance($instance) {
   // Check that the specified field exists.
-  $field = field_read_field($instance['field_name']);
+  $field = field_read_field($instance['field_id']);
   if (empty($field)) {
     throw new FieldException("Attempt to update an instance of a nonexistent field.");
   }
 
   // Check that the field instance exists (even if it is inactive, since we
   // want to be able to replace inactive widgets with new ones).
-  $prior_instance = field_read_instance($instance['field_name'], $instance['bundle'], array('include_inactive' => TRUE));
+  $prior_instance = field_read_instance($instance['field_id'], $instance['bundle'], array('include_inactive' => TRUE));
   if (empty($prior_instance)) {
     throw new FieldException("Attempt to update a field instance that doesn't exist.");
   }
@@ -498,7 +501,7 @@ function field_update_instance($instance
  *   Whether this is a new or existing instance.
  */
 function _field_write_instance($instance, $update = FALSE) {
-  $field = field_read_field($instance['field_name']);
+  $field = field_read_field($instance['field_id']);
   $field_type = field_info_field_types($field['type']);
 
   // Set defaults.
@@ -507,7 +510,7 @@ function _field_write_instance($instance
     'display' => array(),
     'widget' => array(),
     'required' => FALSE,
-    'label' => $instance['field_name'],
+    'label' => $field['field_name'],
     'description' => '',
     'weight' => 0,
     'deleted' => 0,
@@ -557,7 +560,7 @@ function _field_write_instance($instance
 
   $record = array(
     'field_id' => $instance['field_id'],
-    'field_name' => $instance['field_name'],
+    'field_name' => $field['field_name'],
     'bundle' => $instance['bundle'],
     'widget_type' => $instance['widget']['type'],
     'widget_module' => $widget_module,
@@ -585,8 +588,8 @@ function _field_write_instance($instance
  * This function will not return deleted instances. Use
  * field_read_instances() instead for this purpose.
  *
- * @param $field_name
- *   The field name to read.
+ * @param $field_id
+ *   The field id to read.
  * @param $bundle
  *   The bundle to which the field is bound.
  * @param array $include_additional
@@ -597,8 +600,8 @@ function _field_write_instance($instance
  * @return
  *   An instance structure, or FALSE.
  */
-function field_read_instance($field_name, $bundle, $include_additional = array()) {
-  $instances = field_read_instances(array('field_name' => $field_name, 'bundle' => $bundle), $include_additional);
+function field_read_instance($field_id, $bundle, $include_additional = array()) {
+  $instances = field_read_instances(array('field_id' => $field_id, 'bundle' => $bundle), $include_additional);
   return $instances ? current($instances) : FALSE;
 }
 
@@ -665,21 +668,21 @@ function field_read_instances($params = 
  * Mark a field instance for deletion, including all data associated with
  * it.
  *
- * @param $field_name
- *   The name of the field whose instance will be deleted.
+ * @param $field_id
+ *   The field id whose instance will be deleted.
  * @param $bundle
  *   The bundle for the instance which will be deleted.
  */
-function field_delete_instance($field_name, $bundle) {
+function field_delete_instance($field_id, $bundle) {
   // Mark the field instance for deletion.
   db_update('field_config_instance')
     ->fields(array('deleted' => 1))
-    ->condition('field_name', $field_name)
+    ->condition('field_id', $field_id)
     ->condition('bundle', $bundle)
     ->execute();
 
   // Mark all data associated with the field for deletion.
-  module_invoke(variable_get('field_storage_module', 'field_sql_storage'), 'field_storage_delete_instance', $field_name, $bundle);
+  module_invoke(variable_get('field_storage_module', 'field_sql_storage'), 'field_storage_delete_instance', $field_id, $bundle);
   // Clear the cache.
   field_cache_clear();
 }
Index: modules/field/field.default.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/field.default.inc,v
retrieving revision 1.7
diff -u -F^[fc] -r1.7 field.default.inc
--- modules/field/field.default.inc	3 Jun 2009 02:41:07 -0000	1.7
+++ modules/field/field.default.inc	9 Jun 2009 15:50:25 -0000
@@ -73,6 +73,7 @@ function field_default_insert($obj_type,
  *   $object->content['field_foo']['wrapper'] = array(
  *     '#theme' => 'field',
  *     '#title' => 'label'
+ *     '#field_id' => 'field_id',
  *     '#field_name' => 'field_name',
  *     '#object' => $object,
  *     '#object_type' => $obj_type,
@@ -83,6 +84,7 @@ function field_default_insert($obj_type,
  *         '#item' => $items[0],
  *         // Only for 'single-value' formatters
  *         '#theme' => $theme,
+ *         '#field_id' => 'field_id',
  *         '#field_name' => 'field_name',
  *         '#bundle' => $bundle,
  *         '#formatter' => $formatter_name,
@@ -95,6 +97,7 @@ function field_default_insert($obj_type,
  *         '#item' => $items[1],
  *         // Only for 'single-value' formatters
  *         '#theme' => $theme,
+ *         '#field_id' => 'field_id',
  *         '#field_name' => 'field_name',
  *         '#bundle' => $bundle_name,
  *         '#formatter' => $formatter_name,
@@ -105,6 +108,7 @@ function field_default_insert($obj_type,
  *       ),
  *       // Only for 'multiple-value' formatters
  *       '#theme' => $theme,
+ *       '#field_id' => 'field_id',
  *       '#field_name' => 'field_name',
  *       '#bundle' => $bundle_name,
  *       '#formatter' => $formatter_name,
@@ -146,6 +150,7 @@ function field_default_view($obj_type, $
     }
 
     $info = array(
+      '#field_id' => $field['id'],
       '#field_name' => $field['field_name'],
       '#bundle' => $bundle,
       '#object' => $object,
@@ -208,7 +213,7 @@ function field_default_view($obj_type, $
  * Hide excluded fields from the $content variable in templates.
  */
 function field_wrapper_post_render($content, $element) {
-  $instance = field_info_instance($element['#field_name'], $element['#bundle']);
+  $instance = field_info_instance($element['#field_id'], $element['#bundle']);
   if (theme('field_exclude', $content, $instance, $element['#context'])) {
     return '';
   }
Index: modules/field/field.form.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/field.form.inc,v
retrieving revision 1.10
diff -u -F^[fc] -r1.10 field.form.inc
--- modules/field/field.form.inc	2 Jun 2009 13:47:25 -0000	1.10
+++ modules/field/field.form.inc	9 Jun 2009 15:50:25 -0000
@@ -72,6 +72,7 @@ function field_default_form($obj_type, $
           '#title' => check_plain(t($instance['label'])),
           '#description' => field_filter_xss($instance['description']),
           '#delta' => $delta,
+          '#field_id' => $field['id'],
           '#field_name' => $field['field_name'],
           '#bundle' => $instance['bundle'],
         );
@@ -92,6 +93,7 @@ function field_default_form($obj_type, $
 
   if ($form_element) {
     $defaults = array(
+      '#field_id' => $field['id'],
       '#field_name' => $field['field_name'],
       '#tree' => TRUE,
       '#weight' => $instance['weight'],
@@ -113,7 +115,7 @@ function field_default_form($obj_type, $
  * - drag-n-drop value reordering
  */
 function field_multiple_value_form($field, $instance, $items, &$form, &$form_state) {
-  $field = field_info_field($instance['field_name']);
+  $field = field_info_field($instance['field_id']);
   $field_name = $field['field_name'];
 
   switch ($field['cardinality']) {
@@ -162,6 +164,7 @@ function field_multiple_value_form($fiel
           '#weight' => $delta,
           '#delta' => $delta,
           '#columns' => array_keys($field['columns']),
+          '#field_id' => $field['id'],
           '#field_name' => $field_name,
           '#bundle' => $instance['bundle'],
         );
@@ -203,6 +206,7 @@ function field_multiple_value_form($fiel
           'method' => 'replace',
           'effect' => 'fade',
         ),
+        '#field_id' => $field['id'],
         // When JS is disabled, the field_add_more_submit handler will find
         // the relevant field using these entries.
         '#field_name' => $field_name,
Index: modules/field/field.info.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/field.info.inc,v
retrieving revision 1.6
diff -u -F^[fc] -r1.6 field.info.inc
--- modules/field/field.info.inc	5 Jun 2009 18:25:41 -0000	1.6
+++ modules/field/field.info.inc	9 Jun 2009 15:50:25 -0000
@@ -185,8 +185,8 @@ function _field_info_collate_fields($res
       // Populate instances.
       $instances = field_read_instances();
       foreach ($instances as $instance) {
-        $info['instances'][$instance['bundle']][$instance['field_name']] = $instance;
-        $info['fields'][$instance['field_name']]['bundles'][] = $instance['bundle'];
+        $info['instances'][$instance['bundle']][$instance['field_id']] = $instance;
+        $info['fields'][$instance['field_id']]['bundles'][] = $instance['bundle'];
       }
 
       cache_set('field_info_fields', $info, 'cache_field');
@@ -393,17 +393,17 @@ function field_info_fields() {
 /**
  * Return data about an individual field.
  *
- * @param $field_name
- *   The name of the field to retrieve.
+ * @param $field_id
+ *   The id of the field to retrieve.
  * @return
  *   The named field object, or NULL. The Field object has an additional
  *   property, bundles, which is an array of all the bundles to which
  *   this field belongs.
  */
-function field_info_field($field_name) {
+function field_info_field($field_id) {
   $info = _field_info_collate_fields();
-  if (isset($info['fields'][$field_name])) {
-    return $info['fields'][$field_name];
+  if (isset($info['fields'][$field_id])) {
+    return $info['fields'][$field_id];
   }
 }
 
@@ -428,10 +428,10 @@ function field_info_instances($bundle_na
 /**
  * Return an array of instance data for a specific field and bundle.
  */
-function field_info_instance($field_name, $bundle_name) {
+function field_info_instance($field_id, $bundle_name) {
   $info = _field_info_collate_fields();
-  if (isset($info['instances'][$bundle_name][$field_name])) {
-    return $info['instances'][$bundle_name][$field_name];
+  if (isset($info['instances'][$bundle_name][$field_id])) {
+    return $info['instances'][$bundle_name][$field_id];
   }
 }
 
Index: modules/field/field.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/field.module,v
retrieving revision 1.13
diff -u -F^[fc] -r1.13 field.module
--- modules/field/field.module	6 Jun 2009 16:17:30 -0000	1.13
+++ modules/field/field.module	9 Jun 2009 15:50:25 -0000
@@ -421,7 +421,7 @@ function field_format($obj_type, $object
   if (field_access('view', $field)) {
     // Basically, we need $field, $instance, $obj_type, $object to be able to display a value...
     list(, , $bundle) = field_attach_extract_ids($obj_type, $object);
-    $instance = field_info_instance($field['field_name'], $bundle);
+    $instance = field_info_instance($field['id'], $bundle);
 
     $display = array(
       'type' => $formatter_name,
@@ -433,6 +433,7 @@ function field_format($obj_type, $object
 
       $element = array(
         '#theme' => $theme,
+        '#field_id' => $field['id'],
         '#field_name' => $field['field_name'],
         '#bundle' => $bundle,
         '#formatter' => $display['type'],
@@ -568,8 +569,8 @@ function field_access($op, $field, $acco
 function template_preprocess_field(&$variables) {
   $element = $variables['element'];
   list(, , $bundle) = field_attach_extract_ids($element['#object_type'], $element['#object']);
-  $instance = field_info_instance($element['#field_name'], $bundle);
-  $field = field_info_field($element['#field_name']);
+  $instance = field_info_instance($element['#field_id'], $bundle);
+  $field = field_info_field($element['#field_id']);
 
   $variables['object'] = $element['#object'];
   $variables['field'] = $field;
@@ -611,6 +612,7 @@ function template_preprocess_field(&$var
 
   $additions = array(
     'field_type' => $field['type'],
+    'field_id' => $field['id'],
     'field_name' => $field['field_name'],
     'field_type_css' => strtr($field['type'], '_', '-'),
     'field_name_css' => strtr($field['field_name'], '_', '-'),
Index: modules/field/field.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/field.test,v
retrieving revision 1.25
diff -u -F^[fc] -r1.25 field.test
--- modules/field/field.test	7 Jun 2009 00:00:57 -0000	1.25
+++ modules/field/field.test	9 Jun 2009 15:50:25 -0000
@@ -26,9 +26,10 @@ class FieldAttachTestCase extends Drupal
 
     $this->field_name = drupal_strtolower($this->randomName() . '_field_name');
     $this->field = array('field_name' => $this->field_name, 'type' => 'test_field', 'cardinality' => 4);
-    field_create_field($this->field);
+    $this->field = field_create_field($this->field);
+    $this->field_id = $this->field['id'];
     $this->instance = array(
-      'field_name' => $this->field_name,
+      'field_id' => $this->field_id,
       'bundle' => 'test_bundle',
       'label' => $this->randomName() . '_label',
       'description' => $this->randomName() . '_description',
@@ -44,7 +45,7 @@ class FieldAttachTestCase extends Drupal
         )
       )
     );
-    field_create_instance($this->instance);
+    $this->instance = field_create_instance($this->instance);
   }
 
   /**
@@ -134,10 +135,11 @@ class FieldAttachTestCase extends Drupal
     for ($i = 1; $i <= 3; $i++) {
       $field_names[$i] = 'field_' . $i;
       $field = array('field_name' => $field_names[$i], 'type' => 'test_field');
-      field_create_field($field);
+      $fields[$i] = field_create_field($field);
+      
       foreach ($field_bundles_map[$i] as $bundle) {
         $instance = array(
-          'field_name' => $field_names[$i],
+          'field_id' => $fields[$i]['id'],
           'bundle' => $bundles[$bundle],
           'settings' => array(
             // Configure the instance so that we test hook_field_load()
@@ -154,7 +156,8 @@ class FieldAttachTestCase extends Drupal
       $entities[$index] = field_test_create_stub_entity($index, $index, $bundle);
       $entity = clone($entities[$index]);
       $instances = field_info_instances($bundle);
-      foreach ($instances as $field_name => $instance) {
+      foreach ($instances as $instance) {
+        $field_name = $instance['field_name'];
         $values[$index][$field_name] = mt_rand(1, 127);
         $entity->$field_name = array(array('value' => $values[$index][$field_name]));
       }
@@ -165,7 +168,8 @@ class FieldAttachTestCase extends Drupal
     field_attach_load($entity_type, $entities);
     foreach ($entities as $index => $entity) {
       $instances = field_info_instances($bundles[$index]);
-      foreach ($instances as $field_name => $instance) {
+      foreach ($instances as $instance) {
+        $field_name = $instance['field_name'];
         // The field value loaded matches the one inserted.
         $this->assertEqual($entity->{$field_name}[0]['value'], $values[$index][$field_name], t('Entity %index: expected value was found.', array('%index' => $index)));
         // The value added in hook_field_load() is found.
@@ -296,7 +300,7 @@ class FieldAttachTestCase extends Drupal
     // Query on the object's values.
     for ($delta = 0; $delta < $cardinality; $delta++) {
       $conditions = array(array('value', $values[$delta]));
-      $result = field_attach_query($this->field_name, $conditions);
+      $result = field_attach_query($this->field_id, $conditions);
       $this->assertTrue(isset($result[$entity_types[1]][1]), t('Query on value %delta returns the object', array('%delta' => $delta)));
     }
 
@@ -305,31 +309,31 @@ class FieldAttachTestCase extends Drupal
       $different_value = mt_rand(1, 127);
     } while (in_array($different_value, $values));
     $conditions = array(array('value', $different_value));
-    $result = field_attach_query($this->field_name, $conditions);
+    $result = field_attach_query($this->field_id, $conditions);
     $this->assertFalse(isset($result[$entity_types[1]][1]), t("Query on a value that is not in the object doesn't return the object"));
 
     // Query on the value shared by both objects, and discriminate using
     // additional conditions.
 
     $conditions = array(array('value', $common_value));
-    $result = field_attach_query($this->field_name, $conditions);
+    $result = field_attach_query($this->field_id, $conditions);
     $this->assertTrue(isset($result[$entity_types[1]][1]) && isset($result[$entity_types[2]][2]), t('Query on a value common to both objects returns both objects'));
 
     $conditions = array(array('type', $entity_types[1]), array('value', $common_value));
-    $result = field_attach_query($this->field_name, $conditions);
+    $result = field_attach_query($this->field_id, $conditions);
     $this->assertTrue(isset($result[$entity_types[1]][1]) && !isset($result[$entity_types[2]][2]), t("Query on a value common to both objects and a 'type' condition only returns the relevant object"));
 
     $conditions = array(array('bundle', $entities[1]->fttype), array('value', $common_value));
-    $result = field_attach_query($this->field_name, $conditions);
+    $result = field_attach_query($this->field_id, $conditions);
     $this->assertTrue(isset($result[$entity_types[1]][1]) && !isset($result[$entity_types[2]][2]), t("Query on a value common to both objects and a 'bundle' condition only returns the relevant object"));
 
     $conditions = array(array('entity_id', $entities[1]->ftid), array('value', $common_value));
-    $result = field_attach_query($this->field_name, $conditions);
+    $result = field_attach_query($this->field_id, $conditions);
     $this->assertTrue(isset($result[$entity_types[1]][1]) && !isset($result[$entity_types[2]][2]), t("Query on a value common to both objects and an 'entity_id' condition only returns the relevant object"));
 
     // Test FIELD_QUERY_RETURN_IDS result format.
     $conditions = array(array('value', $values[0]));
-    $result = field_attach_query($this->field_name, $conditions);
+    $result = field_attach_query($this->field_id, $conditions);
     $expected = array(
       $entity_types[1] => array(
         $entities[1]->ftid => $entities[1]->ftid,
@@ -348,7 +352,7 @@ class FieldAttachTestCase extends Drupal
     // Query for one of the values in the 1st object and the value shared by
     // both objects.
     $conditions = array(array('value', array($values[0], $common_value)));
-    $result = field_attach_query($this->field_name, $conditions, FIELD_QUERY_RETURN_VALUES);
+    $result = field_attach_query($this->field_id, $conditions, FIELD_QUERY_RETURN_VALUES);
     $expected = array(
       $entity_types[1] => array(
         $entities[1]->ftid => (object) array(
@@ -402,7 +406,7 @@ class FieldAttachTestCase extends Drupal
     // Query on the object's values.
     for ($delta = 0; $delta < $cardinality; $delta++) {
       $conditions = array(array('value', $values[$delta]));
-      $result = field_attach_query_revisions($this->field_name, $conditions);
+      $result = field_attach_query_revisions($this->field_id, $conditions);
       $this->assertTrue(isset($result[$entity_type][1]), t('Query on value %delta returns the object', array('%delta' => $delta)));
     }
 
@@ -411,23 +415,23 @@ class FieldAttachTestCase extends Drupal
       $different_value = mt_rand(1, 127);
     } while (in_array($different_value, $values));
     $conditions = array(array('value', $different_value));
-    $result = field_attach_query_revisions($this->field_name, $conditions);
+    $result = field_attach_query_revisions($this->field_id, $conditions);
     $this->assertFalse(isset($result[$entity_type][1]), t("Query on a value that is not in the object doesn't return the object"));
 
     // Query on the value shared by both objects, and discriminate using
     // additional conditions.
 
     $conditions = array(array('value', $common_value));
-    $result = field_attach_query_revisions($this->field_name, $conditions);
+    $result = field_attach_query_revisions($this->field_id, $conditions);
     $this->assertTrue(isset($result[$entity_type][1]) && isset($result[$entity_type][2]), t('Query on a value common to both objects returns both objects'));
 
     $conditions = array(array('revision_id', $entities[1]->ftvid), array('value', $common_value));
-    $result = field_attach_query_revisions($this->field_name, $conditions);
+    $result = field_attach_query_revisions($this->field_id, $conditions);
     $this->assertTrue(isset($result[$entity_type][1]) && !isset($result[$entity_type][2]), t("Query on a value common to both objects and a 'revision_id' condition only returns the relevant object"));
 
     // Test FIELD_QUERY_RETURN_IDS result format.
     $conditions = array(array('value', $values[0]));
-    $result = field_attach_query_revisions($this->field_name, $conditions);
+    $result = field_attach_query_revisions($this->field_id, $conditions);
     $expected = array(
       $entity_type => array(
         $entities[1]->ftvid => $entities[1]->ftid,
@@ -444,7 +448,7 @@ class FieldAttachTestCase extends Drupal
     // Query for one of the values in the 1st object and the value shared by
     // both objects.
     $conditions = array(array('value', array($values[0], $common_value)));
-    $result = field_attach_query_revisions($this->field_name, $conditions, FIELD_QUERY_RETURN_VALUES);
+    $result = field_attach_query_revisions($this->field_id, $conditions, FIELD_QUERY_RETURN_VALUES);
     $expected = array(
       $entity_type => array(
         $entities[1]->ftvid => (object) array(
@@ -492,7 +496,7 @@ class FieldAttachTestCase extends Drupal
     $entity->content = field_attach_view($entity_type, $entity);
     $output = drupal_render($entity->content);
     $variables = field_attach_preprocess($entity_type, $entity);
-    $variable = $this->instance['field_name'] . '_rendered';
+    $variable = $this->field['field_name'] . '_rendered';
     $this->assertTrue(isset($variables[$variable]), "Variable $variable is available in templates.");
     $this->content = $output;
     $this->assertRaw($this->instance['label'], "Label is displayed.");
@@ -642,7 +646,7 @@ class FieldAttachTestCase extends Drupal
     field_test_rename_bundle($this->instance['bundle'], $new_bundle);
 
     // Check that the instance definition has been updated.
-    $this->instance = field_info_instance($this->field_name, $new_bundle);
+    $this->instance = field_info_instance($this->field_id, $new_bundle);
     $this->assertIdentical($this->instance['bundle'], $new_bundle, "Bundle name has been updated in the instance.");
 
     // Verify the field data is present on load.
@@ -664,9 +668,9 @@ class FieldAttachTestCase extends Drupal
     // Create a second field for the test bundle
     $field_name = drupal_strtolower($this->randomName() . '_field_name');
     $field = array('field_name' => $field_name, 'type' => 'test_field', 'cardinality' => 1);
-    field_create_field($field);
+    $field = field_create_field($field);
     $instance = array(
-      'field_name' => $field_name,
+      'field_id' => $field['id'],
       'bundle' => $this->instance['bundle'],
       'label' => $this->randomName() . '_label',
       'description' => $this->randomName() . '_description',
@@ -941,22 +945,24 @@ class FieldInfoTestCase extends DrupalWe
       'field_name' => drupal_strtolower($this->randomName()),
       'type' => 'test_field',
     );
-    field_create_field($field);
+    $new_field = field_create_field($field);
+    $field_id = $new_field['id'];
     $fields = field_info_fields();
     $this->assertEqual(count($fields), 1, t('One field exists'));
-    $this->assertEqual($fields[$field['field_name']]['field_name'], $field['field_name'], t('info fields contains field name'));
-    $this->assertEqual($fields[$field['field_name']]['type'], $field['type'], t('info fields contains field type'));
-    $this->assertEqual($fields[$field['field_name']]['module'], 'field_test', t('info fields contains field module'));
+    $this->assertEqual($fields[$field_id]['id'], $field_id, t('info fields contains field id'));
+    $this->assertEqual($fields[$field_id]['field_name'], $field['field_name'], t('info fields contains field name'));
+    $this->assertEqual($fields[$field_id]['type'], $field['type'], t('info fields contains field type'));
+    $this->assertEqual($fields[$field_id]['module'], 'field_test', t('info fields contains field module'));
     $settings = array('test_field_setting' => 'dummy test string');
     foreach ($settings as $key => $val) {
-      $this->assertEqual($fields[$field['field_name']]['settings'][$key], $val, t("Field setting $key has correct default value $val"));
+      $this->assertEqual($fields[$field_id]['settings'][$key], $val, t("Field setting $key has correct default value $val"));
     }
-    $this->assertEqual($fields[$field['field_name']]['cardinality'], 1, t('info fields contains cardinality 1'));
-    $this->assertEqual($fields[$field['field_name']]['active'], 1, t('info fields contains active 1'));
+    $this->assertEqual($fields[$field_id]['cardinality'], 1, t('info fields contains cardinality 1'));
+    $this->assertEqual($fields[$field_id]['active'], 1, t('info fields contains active 1'));
 
     // Create an instance, verify that it shows up
     $instance = array(
-      'field_name' => $field['field_name'],
+      'field_id' => $field_id,
       'bundle' => FIELD_TEST_BUNDLE,
       'label' => $this->randomName(),
       'description' => $this->randomName(),
@@ -970,7 +976,7 @@ class FieldInfoTestCase extends DrupalWe
 
     $instances = field_info_instances($instance['bundle']);
     $this->assertEqual(count($instances), 1, t('One instance shows up in info when attached to a bundle.'));
-    $this->assertTrue($instance < $instances[$instance['field_name']], t('Instance appears in info correctly'));
+    $this->assertTrue($instance < $instances[$instance['field_id']], t('Instance appears in info correctly'));
   }
 
   // Test that the field_info settings convenience functions work
@@ -1033,9 +1039,9 @@ class FieldFormTestCase extends DrupalWe
   function testFieldFormSingle() {
     $this->field = $this->field_single;
     $this->field_name = $this->field['field_name'];
-    $this->instance['field_name'] = $this->field_name;
-    field_create_field($this->field);
-    field_create_instance($this->instance);
+    $this->field = field_create_field($this->field);
+    $this->instance['field_id'] = $this->field['id'];
+    $this->instance = field_create_instance($this->instance);
 
     // Display creation form.
     $this->drupalGet('test-entity/add/test-bundle');
@@ -1085,9 +1091,9 @@ class FieldFormTestCase extends DrupalWe
   function testFieldFormSingleRequired() {
     $this->field = $this->field_single;
     $this->field_name = $this->field['field_name'];
-    $this->instance['field_name'] = $this->field_name;
     $this->instance['required'] = TRUE;
-    field_create_field($this->field);
+    $this->field = field_create_field($this->field);
+    $this->instance['field_id'] = $this->field['id'];
     field_create_instance($this->instance);
 
     // Submit with missing required value.
@@ -1123,8 +1129,8 @@ class FieldFormTestCase extends DrupalWe
   function testFieldFormUnlimited() {
     $this->field = $this->field_unlimited;
     $this->field_name = $this->field['field_name'];
-    $this->instance['field_name'] = $this->field_name;
-    field_create_field($this->field);
+    $this->field = field_create_field($this->field);
+    $this->instance['field_id'] = $this->field['id'];
     field_create_instance($this->instance);
 
     // Display creation form -> 1 widget.
@@ -1203,9 +1209,9 @@ class FieldFormTestCase extends DrupalWe
   function testFieldFormJSAddMore() {
     $this->field = $this->field_unlimited;
     $this->field_name = $this->field['field_name'];
-    $this->instance['field_name'] = $this->field_name;
-    field_create_field($this->field);
-    field_create_instance($this->instance);
+    $this->field = field_create_field($this->field);
+    $this->instance['field_id'] = $this->field['id'];
+    $this->instance = field_create_instance($this->instance);
 
     // Display creation form -> 1 widget.
     $this->drupalGet('test-entity/add/test-bundle');
@@ -1331,9 +1337,10 @@ class FieldCrudTestCase extends DrupalWe
     );
     $field_definition = field_create_field($field_definition);
 
-    $field = field_read_field($field_definition['field_name']);
+    $field = field_read_field($field_definition['id']);
 
     // Ensure that basic properties are preserved.
+    $this->assertEqual($field['id'], $field_definition['id'], t('The field id is properly retrieved.'));
     $this->assertEqual($field['field_name'], $field_definition['field_name'], t('The field name is properly saved.'));
     $this->assertEqual($field['type'], $field_definition['type'], t('The field type is properly saved.'));
 
@@ -1378,8 +1385,8 @@ class FieldCrudTestCase extends DrupalWe
       'field_name' => 'field_1',
       'type' => 'test_field',
     );
-    field_create_field($field_definition);
-    $field = field_read_field($field_definition['field_name']);
+    $field_definition = field_create_field($field_definition);
+    $field = field_info_field($field_definition['id']);
     $expected_indexes = array('value' => array('value'));
     $this->assertEqual($field['indexes'], $expected_indexes, t('Field type indexes saved by default'));
 
@@ -1392,8 +1399,8 @@ class FieldCrudTestCase extends DrupalWe
         'value' => array(),
       ),
     );
-    field_create_field($field_definition);
-    $field = field_read_field($field_definition['field_name']);
+    $field_definition = field_create_field($field_definition);
+    $field = field_info_field($field_definition['id']);
     $expected_indexes = array('value' => array());
     $this->assertEqual($field['indexes'], $expected_indexes, t('Field definition indexes override field type indexes'));
 
@@ -1406,8 +1413,8 @@ class FieldCrudTestCase extends DrupalWe
         'value_2' => array('value'),
       ),
     );
-    field_create_field($field_definition);
-    $field = field_read_field($field_definition['field_name']);
+    $field_definition = field_create_field($field_definition);
+    $field = field_info_field($field_definition['id']);
     $expected_indexes = array('value' => array('value'), 'value_2' => array('value'));
     $this->assertEqual($field['indexes'], $expected_indexes, t('Field definition indexes are merged with field type indexes'));
   }
@@ -1424,13 +1431,13 @@ class FieldCrudTestCase extends DrupalWe
 
     // Create two fields (so we can test that only one is deleted).
     $this->field = array('field_name' => 'field_1', 'type' => 'test_field');
-    field_create_field($this->field);
+    $this->field = field_create_field($this->field);
     $this->another_field = array('field_name' => 'field_2', 'type' => 'test_field');
-    field_create_field($this->another_field);
+    $this->another_field = field_create_field($this->another_field);
 
     // Create instances for each.
     $this->instance_definition = array(
-      'field_name' => $this->field['field_name'],
+      'field_id' => $this->field['id'],
       'bundle' => FIELD_TEST_BUNDLE,
       'widget' => array(
         'type' => 'test_field_widget',
@@ -1438,13 +1445,13 @@ class FieldCrudTestCase extends DrupalWe
     );
     field_create_instance($this->instance_definition);
     $this->another_instance_definition = $this->instance_definition;
-    $this->another_instance_definition['field_name'] = $this->another_field['field_name'];
+    $this->another_instance_definition['field_id'] = $this->another_field['id'];
     field_create_instance($this->another_instance_definition);
 
     // Test that the first field is not deleted, and then delete it.
-    $field = field_read_field($this->field['field_name'], array('include_deleted' => TRUE));
+    $field = field_read_field($this->field['id'], array('include_deleted' => TRUE));
     $this->assertTrue(!empty($field) && empty($field['deleted']), t('A new field is not marked for deletion.'));
-    field_delete_field($this->field['field_name']);
+    field_delete_field($this->field['id']);
 
     // Make sure that the field is marked as deleted when it is specifically
     // loaded.
@@ -1454,30 +1461,32 @@ class FieldCrudTestCase extends DrupalWe
 
     // Make sure that this field's instance is marked as deleted when it is
     // specifically loaded.
-    $instance = field_read_instance($this->instance_definition['field_name'], $this->instance_definition['bundle'], array('include_deleted' => TRUE));
+    $instance = field_read_instance($this->instance_definition['field_id'], $this->instance_definition['bundle'], array('include_deleted' => TRUE));
     $this->assertTrue(!empty($instance['deleted']), t('An instance for a deleted field is marked for deletion.'));
 
     // Try to load the field normally and make sure it does not show up.
-    $field = field_read_field($this->field['field_name']);
+    $field = field_read_field($this->field['id']);
     $this->assertTrue(empty($field), t('A deleted field is not loaded by default.'));
 
     // Try to load the instance normally and make sure it does not show up.
-    $instance = field_read_instance($this->instance_definition['field_name'], $this->instance_definition['bundle']);
+    $instance = field_read_instance($this->instance_definition['field_id'], $this->instance_definition['bundle']);
     $this->assertTrue(empty($instance), t('An instance for a deleted field is not loaded by default.'));
 
     // Make sure the other field (and its field instance) are not deleted.
-    $another_field = field_read_field($this->another_field['field_name']);
+    $another_field = field_read_field($this->another_field['id']);
     $this->assertTrue(!empty($another_field) && empty($another_field['deleted']), t('A non-deleted field is not marked for deletion.'));
-    $another_instance = field_read_instance($this->another_instance_definition['field_name'], $this->another_instance_definition['bundle']);
+    $another_instance = field_read_instance($this->another_instance_definition['field_id'], $this->another_instance_definition['bundle']);
     $this->assertTrue(!empty($another_instance) && empty($another_instance['deleted']), t('An instance of a non-deleted field is not marked for deletion.'));
 
     // Try to create a new field the same name as a deleted field and
     // write data into it.
-    field_create_field($this->field);
+    unset($this->field['id']);
+    $this->field = field_create_field($this->field);
+    $this->instance_definition['field_id'] = $this->field['id'];
     field_create_instance($this->instance_definition);
-    $field = field_read_field($this->field['field_name']);
+    $field = field_read_field($this->field['id']);
     $this->assertTrue(!empty($field) && empty($field['deleted']), t('A new field with a previously used name is created.'));
-    $instance = field_read_instance($this->instance_definition['field_name'], $this->instance_definition['bundle']);
+    $instance = field_read_instance($this->instance_definition['field_id'], $this->instance_definition['bundle']);
     $this->assertTrue(!empty($instance) && empty($instance['deleted']), t('A new instance for a previously used field name is created.'));
 
     // Save an object with data for the field
@@ -1514,9 +1523,9 @@ class FieldInstanceTestCase extends Drup
       'field_name' => drupal_strtolower($this->randomName()),
       'type' => 'test_field',
     );
-    field_create_field($this->field);
+    $this->field = field_create_field($this->field);
     $this->instance_definition = array(
-      'field_name' => $this->field['field_name'],
+      'field_id' => $this->field['id'],
       'bundle' => FIELD_TEST_BUNDLE,
     );
   }
@@ -1527,8 +1536,8 @@ class FieldInstanceTestCase extends Drup
   // defer actual $instance comparison to a helper function, used for the two cases above,
   // and for testUpdateFieldInstance
   function testCreateFieldInstance() {
-    field_create_instance($this->instance_definition);
-    $instance = field_read_instance($this->instance_definition['field_name'], $this->instance_definition['bundle']);
+    $this->instance_definition = field_create_instance($this->instance_definition);
+    $instance = field_read_instance($this->instance_definition['field_id'], $this->instance_definition['bundle']);
     $field_type = field_info_field_types($this->field['type']);
     $widget_type = field_info_widget_types($instance['widget']['type']);
     $formatter_type = field_info_formatter_types($instance['display']['full']['type']);
@@ -1562,7 +1571,7 @@ class FieldInstanceTestCase extends Drup
 
     // Check that the specified field exists.
     try {
-      $this->instance_definition['field_name'] = $this->randomName();
+      $this->instance_definition['field_id'] = 12345;
       field_create_instance($this->instance_definition);
       $this->fail(t('Cannot create an instance of a non-existing field.'));
     }
@@ -1582,7 +1591,7 @@ class FieldInstanceTestCase extends Drup
     $field_type = field_info_field_types($this->field['type']);
 
     // Check that basic changes are saved.
-    $instance = field_read_instance($this->instance_definition['field_name'], $this->instance_definition['bundle']);
+    $instance = field_read_instance($this->instance_definition['field_id'], $this->instance_definition['bundle']);
     $instance['required'] = !$instance['required'];
     $instance['weight']++;
     $instance['label'] = $this->randomName();
@@ -1592,7 +1601,7 @@ class FieldInstanceTestCase extends Drup
     $instance['display']['full']['settings']['test_formatter_setting'] = $this->randomName();
     field_update_instance($instance);
 
-    $instance_new = field_read_instance($this->instance_definition['field_name'], $this->instance_definition['bundle']);
+    $instance_new = field_read_instance($this->instance_definition['field_id'], $this->instance_definition['bundle']);
     $this->assertEqual($instance['required'], $instance_new['required'], t('"required" change is saved'));
     $this->assertEqual($instance['weight'], $instance_new['weight'], t('"weight" change is saved'));
     $this->assertEqual($instance['label'], $instance_new['label'], t('"label" change is saved'));
@@ -1601,12 +1610,12 @@ class FieldInstanceTestCase extends Drup
     $this->assertEqual($instance['display']['full']['settings']['test_formatter_setting'], $instance_new['display']['full']['settings']['test_formatter_setting'], t('Formatter setting change is saved'));
 
     // Check that changing widget and formatter types updates the default settings.
-    $instance = field_read_instance($this->instance_definition['field_name'], $this->instance_definition['bundle']);
+    $instance = field_read_instance($this->instance_definition['field_id'], $this->instance_definition['bundle']);
     $instance['widget']['type'] = 'test_field_widget_multiple';
     $instance['display']['full']['type'] = 'field_test_multiple';
     field_update_instance($instance);
 
-    $instance_new = field_read_instance($this->instance_definition['field_name'], $this->instance_definition['bundle']);
+    $instance_new = field_read_instance($this->instance_definition['field_id'], $this->instance_definition['bundle']);
     $this->assertEqual($instance['widget']['type'], $instance_new['widget']['type'] , t('Widget type change is saved.'));
     $settings = field_info_widget_settings($instance_new['widget']['type']);
     $this->assertIdentical($settings, array_intersect_key($instance_new['widget']['settings'], $settings) , t('Widget type change updates default settings.'));
@@ -1616,11 +1625,11 @@ class FieldInstanceTestCase extends Drup
     $this->assertIdentical($settings, array_intersect_key($instance_new['display']['full']['settings'], $settings) , t('Changing formatter type updates default settings.'));
 
     // Check that adding a new build mode is saved and gets default settings.
-    $instance = field_read_instance($this->instance_definition['field_name'], $this->instance_definition['bundle']);
+    $instance = field_read_instance($this->instance_definition['field_id'], $this->instance_definition['bundle']);
     $instance['display']['teaser'] = array();
     field_update_instance($instance);
 
-    $instance_new = field_read_instance($this->instance_definition['field_name'], $this->instance_definition['bundle']);
+    $instance_new = field_read_instance($this->instance_definition['field_id'], $this->instance_definition['bundle']);
     $this->assertTrue(isset($instance_new['display']['teaser']), t('Display for the new build_mode has been written.'));
     $this->assertIdentical($instance_new['display']['teaser']['type'], $field_type['default_formatter'], t('Default formatter for the new build_mode has been written.'));
     $info = field_info_formatter_types($instance_new['display']['teaser']['type']);
@@ -1643,21 +1652,21 @@ class FieldInstanceTestCase extends Drup
     field_create_instance($this->another_instance_definition);
 
     // Test that the first instance is not deleted, and then delete it.
-    $instance = field_read_instance($this->instance_definition['field_name'], $this->instance_definition['bundle'], array('include_deleted' => TRUE));
+    $instance = field_read_instance($this->instance_definition['field_id'], $this->instance_definition['bundle'], array('include_deleted' => TRUE));
     $this->assertTrue(!empty($instance) && empty($instance['deleted']), t('A new field instance is not marked for deletion.'));
-    field_delete_instance($this->instance_definition['field_name'], $this->instance_definition['bundle']);
+    field_delete_instance($this->instance_definition['field_id'], $this->instance_definition['bundle']);
 
     // Make sure the instance is marked as deleted when the instance is
     // specifically loaded.
-    $instance = field_read_instance($this->instance_definition['field_name'], $this->instance_definition['bundle'], array('include_deleted' => TRUE));
+    $instance = field_read_instance($this->instance_definition['field_id'], $this->instance_definition['bundle'], array('include_deleted' => TRUE));
     $this->assertTrue(!empty($instance['deleted']), t('A deleted field instance is marked for deletion.'));
 
     // Try to load the instance normally and make sure it does not show up.
-    $instance = field_read_instance($this->instance_definition['field_name'], $this->instance_definition['bundle']);
+    $instance = field_read_instance($this->instance_definition['field_id'], $this->instance_definition['bundle']);
     $this->assertTrue(empty($instance), t('A deleted field instance is not loaded by default.'));
 
     // Make sure the other field instance is not deleted.
-    $another_instance = field_read_instance($this->another_instance_definition['field_name'], $this->another_instance_definition['bundle']);
+    $another_instance = field_read_instance($this->another_instance_definition['field_id'], $this->another_instance_definition['bundle']);
     $this->assertTrue(!empty($another_instance) && empty($another_instance['deleted']), t('A non-deleted field instance is not marked for deletion.'));
   }
 }
Index: modules/field/modules/field_sql_storage/field_sql_storage.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/modules/field_sql_storage/field_sql_storage.module,v
retrieving revision 1.13
diff -u -F^[fc] -r1.13 field_sql_storage.module
--- modules/field/modules/field_sql_storage/field_sql_storage.module	7 Jun 2009 00:00:57 -0000	1.13
+++ modules/field/modules/field_sql_storage/field_sql_storage.module	9 Jun 2009 15:50:25 -0000
@@ -190,9 +190,9 @@ function field_sql_storage_field_storage
 /**
  * Implement hook_field_storage_delete_field().
  */
-function field_sql_storage_field_storage_delete_field($field_name) {
+function field_sql_storage_field_storage_delete_field($field_id) {
   // Mark all data associated with the field for deletion.
-  $field = field_info_field($field_name);
+  $field = field_info_field($field_id);
   $table = _field_sql_storage_tablename($field);
   db_update($table)
     ->fields(array('deleted' => 1))
@@ -211,17 +211,18 @@ function field_sql_storage_field_storage
   $delta_count = array();
   foreach ($objects as $obj) {
     list($id, $vid, $bundle) = field_attach_extract_ids($obj_type, $obj);
-    foreach (field_info_instances($bundle) as $field_name => $instance) {
-      if (!isset($skip_fields[$field_name])) {
-        $objects[$id]->{$field_name} = array();
-        $field_ids[$field_name][] = $load_current ? $id : $vid;
-        $delta_count[$id][$field_name] = 0;
+    foreach (field_info_instances($bundle) as $field_id => $instance) {
+      if (!isset($skip_fields[$field_id])) {
+        $objects[$id]->{$instance['field_name']} = array();
+        $field_ids[$field_id][] = $load_current ? $id : $vid;
+        $delta_count[$id][$field_id] = 0;
       }
     }
   }
 
-  foreach ($field_ids as $field_name => $ids) {
-    $field = field_info_field($field_name);
+  foreach ($field_ids as $field_id => $ids) {
+    $field = field_info_field($field_id);
+    $field_name = $field['field_name'];
     $table = $load_current ? _field_sql_storage_tablename($field) : _field_sql_storage_revision_tablename($field);
 
     $results = db_select($table, 't')
@@ -233,7 +234,7 @@ function field_sql_storage_field_storage
       ->execute();
 
     foreach ($results as $row) {
-      if ($field['cardinality'] == FIELD_CARDINALITY_UNLIMITED || $delta_count[$row->entity_id][$field_name] < $field['cardinality']) {
+      if ($field['cardinality'] == FIELD_CARDINALITY_UNLIMITED || $delta_count[$row->entity_id][$field_id] < $field['cardinality']) {
         $item = array();
         // For each column declared by the field, populate the item
         // from the prefixed database column.
@@ -244,7 +245,7 @@ function field_sql_storage_field_storage
 
         // Add the item to the field values for the entity.
         $objects[$row->entity_id]->{$field_name}[] = $item;
-        $delta_count[$row->entity_id][$field_name]++;
+        $delta_count[$row->entity_id][$field_id]++;
       }
     }
   }
@@ -259,12 +260,12 @@ function field_sql_storage_field_storage
 
   $instances = field_info_instances($bundle);
   foreach ($instances as $instance) {
-    $field_name = $instance['field_name'];
-    if (isset($skip_fields[$field_name])) {
+    if (isset($skip_fields[$instance['field_id']])) {
       continue;
     }
 
-    $field = field_info_field($field_name);
+    $field_name = $instance['field_name'];
+    $field = field_info_field($instance['field_id']);
     $table_name = _field_sql_storage_tablename($field);
     $revision_name = _field_sql_storage_revision_tablename($field);
 
@@ -337,7 +338,7 @@ function field_sql_storage_field_storage
   $instances = field_info_instances($bundle);
   foreach ($instances as $instance) {
     $field_name = $instance['field_name'];
-    $field = field_read_field($field_name);
+    $field = field_read_field($instance['field_id']);
     $table_name = _field_sql_storage_tablename($field);
     $revision_name = _field_sql_storage_revision_tablename($field);
     db_delete($table_name)
@@ -355,11 +356,12 @@ function field_sql_storage_field_storage
 /**
  * Implement hook_field_storage_query().
  */
-function field_sql_storage_field_storage_query($field_name, $conditions, $result_format, $age) {
+function field_sql_storage_field_storage_query($field_id, $conditions, $result_format, $age) {
   $load_values = $result_format == FIELD_QUERY_RETURN_VALUES;
   $load_current = $age == FIELD_LOAD_CURRENT;
 
-  $field = field_info_field($field_name);
+  $field = field_info_field($field_id);
+  $field_name = $field['field_name'];
   $table = $load_current ? _field_sql_storage_tablename($field) : _field_sql_storage_revision_tablename($field);
   $field_columns = array_keys($field['columns']);
 
@@ -461,8 +463,8 @@ function field_sql_storage_field_storage
   if (isset($vid)) {
     $instances = field_info_instances($bundle);
     foreach ($instances as $instance) {
-      $field_name = $instance['field_name'];
-      $field = field_read_field($field_name);
+      $field_id = $instance['field_id'];
+      $field = field_read_field($field_id);
       $revision_name = _field_sql_storage_revision_tablename($field);
       db_delete($revision_name)
         ->condition('etid', $etid)
@@ -478,8 +480,8 @@ function field_sql_storage_field_storage
  *
  * This function simply marks for deletion all data associated with the field.
  */
-function field_sql_storage_field_storage_delete_instance($field_name, $bundle) {
-  $field = field_read_field($field_name);
+function field_sql_storage_field_storage_delete_instance($field_id, $bundle) {
+  $field = field_read_field($field_id);
   $table_name = _field_sql_storage_tablename($field);
   $revision_name = _field_sql_storage_revision_tablename($field);
   db_update($table_name)
@@ -498,7 +500,7 @@ function field_sql_storage_field_storage
 function field_sql_storage_field_storage_rename_bundle($bundle_old, $bundle_new) {
   $instances = field_info_instances($bundle_old);
   foreach ($instances as $instance) {
-    $field = field_read_field($instance['field_name']);
+    $field = field_read_field($instance['field_id']);
     $table_name = _field_sql_storage_tablename($field);
     $revision_name = _field_sql_storage_revision_tablename($field);
     db_update($table_name)
Index: modules/field/modules/field_sql_storage/field_sql_storage.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/modules/field_sql_storage/field_sql_storage.test,v
retrieving revision 1.4
diff -u -F^[fc] -r1.4 field_sql_storage.test
--- modules/field/modules/field_sql_storage/field_sql_storage.test	28 May 2009 10:05:32 -0000	1.4
+++ modules/field/modules/field_sql_storage/field_sql_storage.test	9 Jun 2009 15:50:25 -0000
@@ -27,7 +27,7 @@ class FieldSqlStorageTestCase extends Dr
     $this->field = array('field_name' => $this->field_name, 'type' => 'test_field', 'cardinality' => 4);
     $this->field = field_create_field($this->field);
     $this->instance = array(
-      'field_name' => $this->field_name,
+      'field_id' => $this->field['id'],
       'bundle' => 'test_bundle'
     );
     $this->instance = field_create_instance($this->instance);
Index: modules/field/modules/list/list.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/modules/list/list.module,v
retrieving revision 1.6
diff -u -F^[fc] -r1.6 list.module
--- modules/field/modules/list/list.module	27 May 2009 18:33:56 -0000	1.6
+++ modules/field/modules/list/list.module	9 Jun 2009 15:50:25 -0000
@@ -153,7 +153,7 @@ function list_field_formatter_info() {
  * Theme function for 'default' list field formatter.
  */
 function theme_field_formatter_list_default($element) {
-  $field = field_info_field($element['#field_name']);
+  $field = field_info_field($element['#field_id']);
   if (($allowed_values = list_allowed_values($field)) && isset($allowed_values[$element['#item']['value']])) {
     return $allowed_values[$element['#item']['value']];
   }
Index: modules/field/modules/number/number.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/modules/number/number.module,v
retrieving revision 1.10
diff -u -F^[fc] -r1.10 number.module
--- modules/field/modules/number/number.module	28 May 2009 16:44:06 -0000	1.10
+++ modules/field/modules/number/number.module	9 Jun 2009 15:50:25 -0000
@@ -175,8 +175,8 @@ function theme_field_formatter_number_un
  * Proxy theme function for number field formatters.
  */
 function theme_field_formatter_number($element) {
-  $field = field_info_field($element['#field_name']);
-  $instance = field_info_instance($element['#field_name'], $element['#bundle']);
+  $field = field_info_field($element['#field_id']);
+  $instance = field_info_instance($element['#field_id'], $element['#bundle']);
   $value = $element['#item']['value'];
   $settings = $element['#settings'];
   $formatter_type = $element['#formatter'];
@@ -298,8 +298,8 @@ function number_field_widget_error($elem
  */
 function number_elements_process($element, $form_state, $form) {
   $field_name = $element['#field_name'];
-  $field = field_info_field($element['#field_name']);
-  $instance = field_info_instance($element['#field_name'], $element['#bundle']);
+  $field = field_info_field($element['#field_id']);
+  $instance = field_info_instance($element['#field_id'], $element['#bundle']);
   $field_key  = $element['#columns'][0];
 
   $value = isset($element['#value'][$field_key]) ? $element['#value'][$field_key] : '';
@@ -320,6 +320,7 @@ function number_elements_process($elemen
     '#title' => $element['#title'],
     '#description' => $element['#description'],
     '#required' => $element['#required'],
+    '#field_id' => $element['#field_id'],
     '#field_name' => $element['#field_name'],
     '#bundle' => $element['#bundle'],
     '#delta' => $element['#delta'],
@@ -358,8 +359,8 @@ function number_elements_process($elemen
  * FAPI validation of an individual float element.
  */
 function number_float_validate($element, &$form_state) {
-  $field = field_info_field($element['#field_name']);
-  $instance = field_info_instance($element['#field_name'], $element['#bundle']);
+  $field = field_info_field($element['#field_id']);
+  $instance = field_info_instance($element['#field_id'], $element['#bundle']);
   $field_key = $element['#columns'][0];
   $value = $element['#value'][$field_key];
 
@@ -380,8 +381,8 @@ function number_float_validate($element,
  * FAPI validation of an individual integer element.
  */
 function number_integer_validate($element, &$form_state) {
-  $field = field_info_field($element['#field_name']);
-  $instance = field_info_instance($element['#field_name'], $element['#bundle']);
+  $field = field_info_field($element['#field_id']);
+  $instance = field_info_instance($element['#field_id'], $element['#bundle']);
   $field_key = $element['#columns'][0];
   $value = $element['#value'][$field_key];
 
@@ -402,8 +403,8 @@ function number_integer_validate($elemen
  * FAPI validation of an individual decimal element.
  */
 function number_decimal_validate($element, &$form_state) {
-  $field = field_info_field($element['#field_name']);
-  $instance = field_info_instance($element['#field_name'], $element['#bundle']);
+  $field = field_info_field($element['#field_id']);
+  $instance = field_info_instance($element['#field_id'], $element['#bundle']);
   $field_key = $element['#columns'][0];
   $value = $element['#value'][$field_key];
 
Index: modules/field/modules/options/options.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/modules/options/options.module,v
retrieving revision 1.7
diff -u -F^[fc] -r1.7 options.module
--- modules/field/modules/options/options.module	28 May 2009 16:44:06 -0000	1.7
+++ modules/field/modules/options/options.module	9 Jun 2009 15:50:25 -0000
@@ -290,8 +290,8 @@ function options_validate($element, &$fo
  */
 function options_data2form($element, $items, $field) {
   $field_key  = $element['#columns'][0];
-  $field = field_info_field($element['#field_name']);
-  $instance = field_info_instance($element['#field_name'], $element['#bundle']);
+  $field = field_info_field($element['#field_id']);
+  $instance = field_info_instance($element['#field_id'], $element['#bundle']);
   $options    = options_options($field, $instance);
 
   $items_transposed = options_transpose_array_rows_cols($items);
@@ -318,8 +318,8 @@ function options_data2form($element, $it
  */
 function options_form2data($element, $field) {
   $field_key = $element['#columns'][0];
-  $field = field_info_field($element['#field_name']);
-  $instance = field_info_instance($element['#field_name'], $element['#bundle']);
+  $field = field_info_field($element['#field_id']);
+  $instance = field_info_instance($element['#field_id'], $element['#bundle']);
   $items = (array) $element[$field_key]['#value'];
   $options = options_options($field, $instance);
 
Index: modules/field/modules/text/text.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/modules/text/text.module,v
retrieving revision 1.11
diff -u -F^[fc] -r1.11 text.module
--- modules/field/modules/text/text.module	3 Jun 2009 02:38:47 -0000	1.11
+++ modules/field/modules/text/text.module	9 Jun 2009 15:50:25 -0000
@@ -224,8 +224,8 @@ function theme_field_formatter_text_plai
  * Theme function for 'trimmed' text field formatter.
  */
 function theme_field_formatter_text_trimmed($element) {
-  $field = field_info_field($element['#field_name']);
-  $instance = field_info_instance($element['#field_name'], $element['#bundle']);
+  $field = field_info_field($element['#field_id']);
+  $instance = field_info_instance($element['#field_id'], $element['#bundle']);
   return $instance['settings']['text_processing'] ? $element['#item']['format'] : NULL;
 }
 
@@ -369,6 +369,7 @@ function text_textfield_elements_process
     '#title' => $element['#title'],
     '#description' => $element['#description'],
     '#required' => $element['#required'],
+    '#field_id' => $element['#field_id'],
     '#field_name' => $element['#field_name'],
     '#bundle' => $element['#bundle'],
     '#delta' => $element['#delta'],
@@ -410,6 +411,7 @@ function text_textarea_elements_process(
     '#title' => $element['#title'],
     '#description' => $element['#description'],
     '#required' => $element['#required'],
+    '#field_id' => $element['#field_id'],
     '#field_name' => $element['#field_name'],
     '#bundle' => $element['#bundle'],
     '#delta' => $element['#delta'],
Index: modules/field/modules/text/text.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/modules/text/text.test,v
retrieving revision 1.6
diff -u -F^[fc] -r1.6 text.test
--- modules/field/modules/text/text.test	29 Apr 2009 12:08:28 -0000	1.6
+++ modules/field/modules/text/text.test	9 Jun 2009 15:50:26 -0000
@@ -34,9 +34,9 @@ class TextFieldTestCase extends DrupalWe
         'max_length' => $max_length,
       )
     );
-    field_create_field($this->field);
+    $this->field = field_create_field($this->field);
     $this->instance = array(
-      'field_name' => $this->field['field_name'],
+      'field_id' => $this->field['id'],
       'bundle' => FIELD_TEST_BUNDLE,
       'widget' => array(
         'type' => 'text_textfield',
@@ -78,9 +78,9 @@ class TextFieldTestCase extends DrupalWe
     $entity_type = 'test_entity';
     $this->field_name = drupal_strtolower($this->randomName());
     $this->field = array('field_name' => $this->field_name, 'type' => $field_type);
-    field_create_field($this->field);
+    $this->field = field_create_field($this->field);
     $this->instance = array(
-      'field_name' => $this->field_name,
+      'field_id' => $this->field['id'],
       'bundle' => FIELD_TEST_BUNDLE,
       'label' => $this->randomName() . '_label',
       'settings' => array(
@@ -130,9 +130,9 @@ class TextFieldTestCase extends DrupalWe
     $entity_type = 'test_entity';
     $this->field_name = drupal_strtolower($this->randomName());
     $this->field = array('field_name' => $this->field_name, 'type' => $field_type);
-    field_create_field($this->field);
+    $this->field = field_create_field($this->field);
     $this->instance = array(
-      'field_name' => $this->field_name,
+      'field_id' => $this->field['id'],
       'bundle' => FIELD_TEST_BUNDLE,
       'label' => $this->randomName() . '_label',
       'settings' => array(
