diff --git includes/content.node_form.inc includes/content.node_form.inc
index 6515fde..9e0778d 100644
--- includes/content.node_form.inc
+++ includes/content.node_form.inc
@@ -257,9 +257,13 @@ function content_add_more_js($type_name_url, $field_name) {
     exit;
   }
 
-  // Reorder values to account for drag-n-drop reordering.
-  $_POST[$field_name] = _content_sort_items($field, $_POST[$field_name]);
-  $delta = max(array_keys($_POST[$field_name])) + 1;
+  // Remember the original delta order for later reordering.
+  $sorted_values = $_POST[$field_name];
+  foreach ($sorted_values as $delta => $item) {
+    $sorted_values[$delta]['original_delta'] = $delta;
+  }
+  $sorted_values = _content_sort_items($field, $sorted_values);
+
   // Retrieve the cached form.
   $form_state = array(
     'submitted' => FALSE,
@@ -273,6 +277,29 @@ function content_add_more_js($type_name_url, $field_name) {
     drupal_json(array('data' => ''));
     exit;
   }
+  // Poor man's submit: Just build the form, in order to execute value callbacks.
+  $form = form_builder($_POST['form_id'], $form, $form_state);
+
+  if (module_exists('fieldgroup')) {
+    $group_name = _fieldgroup_field_get_group($type['type'], $field_name);
+  }
+
+  // Reorder values to account for drag-n-drop reordering.
+  $old_form = $form;
+  $old_form_state = $form_state;
+
+  foreach ($sorted_values as $delta => $item) {
+    $original_delta = $item['original_delta'];
+    unset($sorted_values[$delta]['original_delta']);
+    $form_state['values'][$field_name][$delta] = $old_form_state['values'][$field_name][$original_delta];
+
+    if (empty($group_name)) {
+      $form[$field_name][$delta] = $old_form[$field_name][$original_delta];
+    }
+    else {
+      $form[$group_name][$field_name][$delta] = $old_form[$group_name][$field_name][$original_delta];
+    }
+  }
 
   // Build our new form element for the whole field,
   // and let other modules alter it.
@@ -280,11 +307,11 @@ function content_add_more_js($type_name_url, $field_name) {
   drupal_alter('form', $form_element, array(), 'content_add_more_js');
 
   // Add the new element at the right place in the form.
-  if (module_exists('fieldgroup') && ($group_name = _fieldgroup_field_get_group($type['type'], $field_name))) {
-    $form[$group_name][$field_name] = $form_element[$field_name];
+  if (empty($group_name)) {
+    $form[$field_name] = $form_element[$field_name];
   }
   else {
-    $form[$field_name] = $form_element[$field_name];
+    $form[$group_name][$field_name] = $form_element[$field_name];
   }
 
   // Save the new definition of the form.
@@ -292,6 +319,8 @@ function content_add_more_js($type_name_url, $field_name) {
   form_set_cache($form_build_id, $form, $form_state);
 
   // Build the new form so that we can render the new element.
+  $delta = max(array_keys($sorted_values)) + 1;
+  $_POST[$field_name] = $sorted_values;
   $_POST[$field_name][$delta]['_weight'] = $delta;   // TODO : Hack !!
   $form_state = array('submitted' => FALSE);
   $form += array(
