diff --git a/modules/field/views_handler_field_field.inc b/modules/field/views_handler_field_field.inc
index b50a0ae..8a3c658 100644
--- a/modules/field/views_handler_field_field.inc
+++ b/modules/field/views_handler_field_field.inc
@@ -678,9 +678,55 @@ class views_handler_field_field extends views_handler_field {
         }
       }
 
-      // Now, transfer the data back into the resultset so it can be easily used.
+      // Adjust the fields of the entities to contain the views output.
+      $views_entities = array();
+      $views_row_entities = array();
       foreach ($values as $row_id => &$value) {
-        $value->{'field_' . $this->options['id']} = $this->set_items($value, $row_id);
+        if (!empty($value->_field_data[$this->field_alias]) && !empty($value->_field_data[$this->field_alias]['entity'])) {
+          if (($entity = $this->get_value($value, 'entity'))) {
+            $entity_type = $value->_field_data[$this->field_alias]['entity_type'];
+            $entity_info = entity_get_info($entity_type);
+            $id = $entity->{$entity_info['entity keys']['id']};
+            $views_row_entities[$id][] = $row_id;
+            $views_entities[$entity_type][$id] = $entity;
+          }
+        }
+        $value->{'field_' . $this->options['id']} = array();
+      }
+      foreach ($views_entities as $entity_type => $entities) {
+        // If grouping is enabled the field structure is changed. Thus it needs
+        // some special attention.
+        if (!empty($this->group_fields)) {
+          // Execute the field load hooks so for example file.module can load
+          // the file entity as needed. Invoke field-type module's
+          // hook_field_load().
+          $null = NULL;
+          $age = FIELD_LOAD_CURRENT;
+          if (!empty($this->definition['is revision'])) {
+            $age = FIELD_LOAD_REVISION;
+          }
+          _field_invoke_multiple('load', $entity_type, $entities, $age, $null, $options = array());
+
+          // Invoke hook_field_attach_load(): let other modules act on loading
+          // the entity.
+          module_invoke_all('field_attach_load', $entity_type, $entities, $age, $options);
+        }
+
+        foreach ($entities as $entity_id => $entity) {
+          foreach ($views_row_entities[$entity_id] as $views_row_id) {
+            $display = array(
+              'type' => $this->options['type'],
+              'settings' => $this->options['settings'],
+              'label' => 'hidden',
+              // Pass the View object in the display so that fields can act on
+              // it.
+              'views_view' => $this->view,
+              'views_field' => $this,
+              'views_row_id' => $views_row_id,
+            );
+            $values[$views_row_id]->{'field_' . $this->options['id']} = $this->set_items($entity_type, $entity, $display);
+          }
+        }
       }
     }
   }
@@ -741,14 +787,17 @@ class views_handler_field_field extends views_handler_field {
         }
       }
 
-      // If any of our aggregated fields have data, fake it:
-      if ($data) {
-        // Now, overwrite the original value with our aggregated value.
-        // This overwrites it so there is always just one entry.
-        $entity->{$this->definition['field_name']}[$langcode] = array($base_value);
-      }
-      else {
-        $entity->{$this->definition['field_name']}[$langcode] = array();
+      // If multiple values of a multi value field are requested don't touch it.
+      if (!$this->multiple) {
+        // If any of our aggregated fields have data, fake it:
+        if ($data) {
+          // Now, overwrite the original value with our aggregated value.
+          // This overwrites it so there is always just one entry.
+          $entity->{$this->definition['field_name']}[$langcode] = array($base_value);
+        }
+        else {
+          $entity->{$this->definition['field_name']}[$langcode] = array();
+        }
       }
     }
 
@@ -818,29 +867,18 @@ class views_handler_field_field extends views_handler_field {
 
   /**
    * Return an array of items for the field.
+   *
+   * @param string $entity_type
+   *   The entity type of the passed entity.
+   * @param stdClass $entity
+   *   The entity to work with.
+   * @param array $display
+   *   The display to use.
+   *
+   * @return array
+   *   Array with the field items.
    */
-  function set_items($values, $row_id) {
-    if (empty($values->_field_data[$this->field_alias]) || empty($values->_field_data[$this->field_alias]['entity'])) {
-      return array();
-    }
-
-    $display = array(
-      'type' => $this->options['type'],
-      'settings' => $this->options['settings'],
-      'label' => 'hidden',
-      // Pass the View object in the display so that fields can act on it.
-      'views_view' => $this->view,
-      'views_field' => $this,
-      'views_row_id' => $row_id,
-    );
-
-
-    $entity_type = $values->_field_data[$this->field_alias]['entity_type'];
-    $entity = $this->get_value($values, 'entity');
-    if (!$entity) {
-      return array();
-    }
-
+  function set_items($entity_type, $entity, $display) {
     $langcode = $this->field_language($entity_type, $entity);
     $render_array = field_view_field($entity_type, $entity, $this->definition['field_name'], $display, $langcode);
 
