diff --git modules/field/field.default.inc modules/field/field.default.inc
index 5af8889..130498d 100644
--- modules/field/field.default.inc
+++ modules/field/field.default.inc
@@ -13,9 +13,13 @@
 
 function field_default_extract_form_values($entity_type, $entity, $field, $instance, $langcode, &$items, $form, &$form_state) {
   $field_name = $field['field_name'];
+  $field_info = $form_state['field'][$field_name][$langcode];
 
-  if (isset($form_state['values'][$field_name][$langcode])) {
-    $items = $form_state['values'][$field_name][$langcode];
+  // Get the form element and the form values of the field.
+  $element = drupal_array_get_nested_value($form, $field_info['array_parents']);
+  $values = drupal_array_get_nested_value($form_state['values'], $element['#parents']);
+  if (isset($values)) {
+    $items = $values;
     // Remove the 'value' of the 'add more' button.
     unset($items['add_more']);
   }
diff --git modules/field/field.form.inc modules/field/field.form.inc
index e042fd7..6512b75 100644
--- modules/field/field.form.inc
+++ modules/field/field.form.inc
@@ -324,11 +324,8 @@ function field_default_form_errors($entity_type, $entity, $field, $instance, $la
     $function = $instance['widget']['module'] . '_field_widget_error';
     $function_exists = function_exists($function);
 
-    // Walk the form down to where the widget lives.
-    $element = $form;
-    foreach ($field_info['array_parents'] as $key) {
-      $element = $element[$key];
-    }
+    // Get the form element of the field.
+    $element = drupal_array_get_nested_value($form, $field_info['array_parents']);
 
     $multiple_widget = field_behaviors_widget('multiple values', $instance) != FIELD_BEHAVIOR_DEFAULT;
     foreach ($field_info['errors'] as $delta => $delta_errors) {
@@ -386,12 +383,8 @@ function field_add_more_js($form, $form_state) {
     return;
   }
 
-  // Navigate to the right element in the the form.
-  $element = $form;
-
-  foreach ($field_info['array_parents'] as $key) {
-    $element = $element[$key];
-  }
+  // Get the form element of the field.
+  $element = drupal_array_get_nested_value($form, $field_info['array_parents']);
 
   // Add a DIV around the new field to receive the AJAX effect.
   $delta = $element['#max_delta'];
