diff --git modules/field/field.attach.inc modules/field/field.attach.inc
index e222438..7e60b79 100644
--- modules/field/field.attach.inc
+++ modules/field/field.attach.inc
@@ -185,33 +185,35 @@ function _field_invoke($op, $entity_type, $entity, &$a = NULL, &$b = NULL, $opti
 
   // Iterate through the instances and collect results.
   $return = array();
-  foreach ($instances as $instance) {
-    $field_name = $instance['field_name'];
-    $field = field_info_field($field_name);
-    $function = $options['default'] ? 'field_default_' . $op : $field['module'] . '_field_' . $op;
-    if (function_exists($function)) {
-      // Determine the list of languages to iterate on.
-      $available_languages = field_available_languages($entity_type, $field);
-      $languages = _field_language_suggestion($available_languages, $options['language'], $field_name);
-
-      foreach ($languages as $langcode) {
-        $items = isset($entity->{$field_name}[$langcode]) ? $entity->{$field_name}[$langcode] : array();
-        $result = $function($entity_type, $entity, $field, $instance, $langcode, $items, $a, $b);
-        if (isset($result)) {
-          // For hooks with array results, we merge results together.
-          // For hooks with scalar results, we collect results in an array.
-          if (is_array($result)) {
-            $return = array_merge($return, $result);
-          }
-          else {
-            $return[] = $result;
+  if ($instances) {
+    foreach ($instances as $instance) {
+      $field_name = $instance['field_name'];
+      $field = field_info_field($field_name);
+      $function = $options['default'] ? 'field_default_' . $op : $field['module'] . '_field_' . $op;
+      if (function_exists($function)) {
+        // Determine the list of languages to iterate on.
+        $available_languages = field_available_languages($entity_type, $field);
+        $languages = _field_language_suggestion($available_languages, $options['language'], $field_name);
+
+        foreach ($languages as $langcode) {
+          $items = isset($entity->{$field_name}[$langcode]) ? $entity->{$field_name}[$langcode] : array();
+          $result = $function($entity_type, $entity, $field, $instance, $langcode, $items, $a, $b);
+          if (isset($result)) {
+            // For hooks with array results, we merge results together.
+            // For hooks with scalar results, we collect results in an array.
+            if (is_array($result)) {
+              $return = array_merge($return, $result);
+            }
+            else {
+              $return[] = $result;
+            }
           }
-        }
 
-        // Populate $items back in the field values, but avoid replacing missing
-        // fields with an empty array (those are not equivalent on update).
-        if ($items !== array() || isset($entity->{$field_name}[$langcode])) {
-          $entity->{$field_name}[$langcode] = $items;
+          // Populate $items back in the field values, but avoid replacing missing
+          // fields with an empty array (those are not equivalent on update).
+          if ($items !== array() || isset($entity->{$field_name}[$langcode])) {
+            $entity->{$field_name}[$langcode] = $items;
+          }
         }
       }
     }
