How to change the saving order of field_collection fields I have a node with field1 and field2 (field_collection)

I am using hook_entity_presave($entity, $type) like this:

function txs_entity_presave($entity, $type)
{
    if ($type == 'field_collection_item') {
      ...do some stuff
    }
}


For now, this hook is called firstly for field1 and, only after field1 is saved, this hook is called for field2.

I would like the opposite because I need to retrieve the value of field2 to handle the "field1_presave".

Here are the details:

Here is the code inside the hook_entity_presave, when field1 is being presaved. This code is showing why I need that field2 must be saved before field1

if ($entity-&gt;field_name == 'field1'){
    $entity_w = entity_metadata_wrapper('field_collection_item', $entity);
    $node = $entity_w-&gt;host_entity-&gt;value();
    $node_w = entity_metadata_wrapper('node', $node);

    //HERE I NEED THAT field2 was already saved...
    //This is not the case... 
    //the following line does not works in all cases
    $used_value=node_w-&gt;field2[0]-&gt;myfield-&gt;value();
    //as field2 is not yet saved, $used_value could be wrong
    if ($used_value=='something'){
        ...change something in field1
    }
}
The only way I could solve my problem was to handle the logic in the form_validate function.
Unfortunately, I couldn't update the field collection from there... this is why I added a validation function for my field collection:

/**
 * Implements hook_field_widget_form_alter().
 */
function MYMODULE_field_widget_form_alter(&amp;$element, &amp;$form_state, $context) {
  // Add custom validation hooks for Field Collections.
  if ($context['field']['field_name'] == 'field1') {
    array_unshift($element['#element_validate'], 
'MYMODULE_field1_validate');
  }
}


Then I could insert my logic there:

/**
 * Custom validate function for field_assignments.
 *
 *  @see MYMODULE_field_widget_form_alter()
 */
 function MYMODULE_field1_validate($element, &amp;$form_state, $form) {   
    if (...){ 
       form_set_value($form["field1"][LANGUAGE_NONE][0]['field_to_change'], array(LANGUAGE_NONE =&gt; array(0 =&gt; array('value' =&gt; 123.456))), $form_state);
    }
  }