diff --git a/field_collection.module b/field_collection.module
index 645093a..2f1d5e5 100644
--- a/field_collection.module
+++ b/field_collection.module
@@ -1680,28 +1680,30 @@ function field_collection_field_widget_embed_validate($element, &$form_state, $c
       }
     }
   }
+}
 
-  // Only if the form is being submitted, finish the collection entity and
-  // prepare it for saving.
-  if ($form_state['submitted'] && !form_get_errors()) {
-
-    field_attach_submit('field_collection_item', $field_collection_item, $element, $form_state);
-
-    // Load initial form values into $item, so any other form values below the
-    // same parents are kept.
-    $item = drupal_array_get_nested_value($form_state['values'], $element['#parents']);
+/**
+ * Implements hook_field_attach_submit().
+ */
+function field_collection_field_attach_submit($entity_type, $field_collection_item, $element, &$form_state) {
+  // Finish the collection entity and prepare it for saving.
+  $field = field_widget_field($element, $form_state);
+  field_attach_submit('field_collection_item', $field_collection_item, $element, $form_state);
 
-    // Set the _weight if it is a multiple field.
-    if (isset($element['_weight']) && ($field['cardinality'] > 1 || $field['cardinality'] == FIELD_CARDINALITY_UNLIMITED)) {
-      $item['_weight'] = $element['_weight']['#value'];
-    }
+  // Load initial form values into $item, so any other form values below the
+  // same parents are kept.
+  $item = drupal_array_get_nested_value($form_state['values'], $element['#parents']);
 
-    // Put the field collection item in $item['entity'], so it is saved with
-    // the host entity via hook_field_presave() / field API if it is not empty.
-    // @see field_collection_field_presave()
-    $item['entity'] = $field_collection_item;
-    form_set_value($element, $item, $form_state);
+  // Set the _weight if it is a multiple field.
+  if (isset($element['_weight']) && ($field['cardinality'] > 1 || $field['cardinality'] == FIELD_CARDINALITY_UNLIMITED)) {
+    $item['_weight'] = $element['_weight']['#value'];
   }
+
+  // Put the field collection item in $item['entity'], so it is saved with
+  // the host entity via hook_field_presave() / field API if it is not empty.
+  // @see field_collection_field_presave()
+  $item['entity'] = $field_collection_item;
+  form_set_value($element, $item, $form_state);
 }
 
 /**
