diff --git a/field_collection.module b/field_collection.module
index b5cfc07..71fec2b 100644
--- a/field_collection.module
+++ b/field_collection.module
@@ -404,6 +404,26 @@ function field_collection_field_settings_form($field, $instance) {
 }
 
 /**
+ * Implements hook_field_presave().
+ */
+function field_collection_field_presave($host_entity_type, $host_entity, $field, $instance, $langcode, &$items) {
+  // Set/update the host entity on presave so that changes to the host entity
+  // are available for other modules during insert/update.
+  foreach ($items as &$item) {
+    if (isset($item['entity'])) {
+      if ($entity = field_collection_field_get_entity($item)) {
+        if (!empty($entity->is_new)) {
+          $entity->setHostEntity($host_entity_type, $host_entity, $langcode, FALSE);
+        }
+        else {
+          $entity->updateHostEntity($host_entity);
+        }
+      }
+    }
+  }
+}
+
+/**
  * Implements hook_field_insert().
  */
 function field_collection_field_insert($host_entity_type, $host_entity, $field, $instance, $langcode, &$items) {
@@ -457,13 +477,6 @@ function field_collection_field_update($host_entity_type, $host_entity, $field,
 
       if ($entity = field_collection_field_get_entity($item)) {
 
-        if (!empty($entity->is_new)) {
-          $entity->setHostEntity($host_entity_type, $host_entity, LANGUAGE_NONE, FALSE);
-        }
-        else {
-          $entity->updateHostEntity($host_entity);
-        }
-
         // If the host entity is saved as new revision, do the same for the item.
         if (!empty($host_entity->revision)) {
           $entity->revision = TRUE;
