diff --git modules/field.views.inc modules/field.views.inc
index 95ee849..2df2fe4 100644
--- modules/field.views.inc
+++ modules/field.views.inc
@@ -115,6 +115,20 @@ function field_views_field_default_views_data($field) {
       'field_name' => $field['field_name'],
       'additional fields' => array('etid'),
     );
+
+    if ($field['cardinality'] > 1 || $field['cardinality'] == FIELD_CARDINALITY_UNLIMITED) {
+      $data[$table][$column . '_multiple'] = $data[$table][$column];
+      $data[$table][$column . '_multiple']['field'] = array(
+        'field' => $column,
+        'table' => $table,
+        'title' => $title_short . t('(Multiple)'),
+        'title_short' => $title_short . t('(Multiple)'),
+        'handler' => 'views_handler_field_field_multiple',
+        'click sortable' => FALSE,
+        'field_name' => $field['field_name'],
+        'additional fields' => array('etid'),
+      );
+    }
   }
 
   foreach ($field['columns'] as $column => $attributes) {
diff --git modules/field/views_handler_field_field.inc modules/field/views_handler_field_field.inc
index 6bce058..5bb05f7 100644
--- modules/field/views_handler_field_field.inc
+++ modules/field/views_handler_field_field.inc
@@ -33,6 +33,16 @@ function _field_view_formatter_options($field_type = NULL) {
  */
 class views_handler_field_field extends views_handler_field {
   /**
+   * Stores the fieldapi field definition.
+   */
+  var $field;
+
+  function init(&$view, &$options) {
+    parent::init($view, $options);
+    $this->field = field_info_field($this->definition['field_name']);
+  }
+
+  /**
    * Called to add the field to a query.
    */
   function query() {
@@ -45,7 +55,7 @@ class views_handler_field_field extends views_handler_field {
   function option_definition() {
     $options = parent::option_definition();
 
-    $field = field_info_field($this->definition['field_name']);
+    $field = $this->field;
     $field_type = field_info_field_types($field['type']);
 
     $options['type'] = array(
@@ -58,7 +68,7 @@ class views_handler_field_field extends views_handler_field {
   function options_form(&$form, &$form_state) {
     parent::options_form($form, $form_state);
 
-    $field = field_info_field($this->definition['field_name']);
+    $field = $this->field;
     $formatters = _field_view_formatter_options($field['type']);
 
     $form['type'] = array(
diff --git modules/field/views_handler_field_field_multiple.inc modules/field/views_handler_field_field_multiple.inc
new file mode 100644
index 0000000..e326010
--- /dev/null
+++ modules/field/views_handler_field_field_multiple.inc
@@ -0,0 +1,185 @@
+<?php
+// $Id$
+
+class views_handler_field_field_multiple extends views_handler_field_field {
+  var $defer_query;
+
+  function init(&$view, $options) {
+    parent::init($view, $options);
+
+    $field = $this->field;
+    // This checks whether a field is multiple.
+    $multiple = $field['cardinality'] > 1 || $field['cardinality'] == FIELD_CARDINALITY_UNLIMITED;
+    $this->defer_query = !empty($options['multiple']['group']) && $multiple;
+
+    if ($this->defer_query) {
+      // Grouped field: ditch the existing additional_fields (field columns + delta).
+      // In the main query we'll only need:
+      // - entity_id, which will be used to retrieve the actual values in pre_render,
+      // - bundle, which wil be used in the pseudo-node used when rendering.
+      // @TODO the revision
+
+      // Load the entity info to get the base table,base field and bundle field.
+      $entity_type_info = entity_get_info($this->view->base_table);
+
+      $this->additional_fields = array(
+        'entity_id' => array('table' => $entity_type_info['base table'], 'field' => $entity_type_info['entity keys']['id']),
+        'bundle' => array('table' => $entity_type_info['base table'], 'field' => $entity_type_info['entity keys']['bundle'])
+      );
+    }
+  }
+
+  function option_definition() {
+    $options = parent::option_definition();
+
+    $options['multiple'] = array(
+      'contains' => array(
+        'group' => array('default' => TRUE),
+        'multiple_number' => array('default' => ''),
+        'multiple_from' => array('default' => ''),
+        'multiple_reversed' => array('default' => FALSE),
+      ),
+    );
+
+    return $options;
+  }
+
+  /**
+   * Provide 'group multiple values' option.
+   */
+  function options_form(&$form, &$form_state) {
+    parent::options_form($form, $form_state);
+
+    $field = $this->field;
+    $options = $this->options;
+
+    $form['multiple'] = array(
+      '#access' => $field['multiple'],
+      '#weight' => 1,
+    );
+    $form['multiple']['group'] = array(
+      '#title' => t('Group multiple values'),
+      '#type' => 'checkbox',
+      '#default_value' => $options['multiple']['group'],
+      '#description' => t('If unchecked, each item in the field will create a new row, which may appear to cause duplicates. This setting is not compatible with click-sorting in table displays.'),
+    );
+    // Make the string translatable by keeping it as a whole rather than
+    // translating prefix and suffix separately.
+    list($prefix, $suffix) = explode('@count', t('Show @count value(s)'));
+    $form['multiple']['multiple_number'] = array(
+      '#type' => 'textfield',
+      '#size' => 5,
+      '#field_prefix' => $prefix,
+      '#field_suffix' => $suffix,
+      '#default_value' => $options['multiple']['multiple_number'],
+      '#prefix' => '<div class="container-inline">',
+      '#process' => array('views_process_dependency'),
+      '#dependency' => array('edit-options-multiple-group' => array(TRUE)),
+    );
+    list($prefix, $suffix) = explode('@count', t('starting from @count'));
+    $form['multiple']['multiple_from'] = array(
+      '#type' => 'textfield',
+      '#size' => 5,
+      '#field_prefix' => $prefix,
+      '#field_suffix' => $suffix,
+      '#default_value' => $options['multiple']['multiple_from'],
+      '#process' => array('views_process_dependency'),
+      '#dependency' => array('edit-options-multiple-group' => array(TRUE)),
+      '#description' => t('(first item is 0)'),
+    );
+    $form['multiple']['multiple_reversed'] = array(
+      '#title' => t('Reversed'),
+      '#type' => 'checkbox',
+      '#default_value' => $options['multiple']['multiple_reversed'],
+      '#suffix' => '</div>',
+      '#process' => array('views_process_dependency'),
+      '#dependency' => array('edit-options-multiple-group' => array(TRUE)),
+      '#description' => t('(start from last values)'),
+    );
+  }
+
+  /**
+   * Determine if this field is click sortable.
+   */
+  function click_sortable() {
+    $field = $this->field;
+    $options = $this->options;
+
+    // Grouped fields are not click-sortable.
+    return !empty($this->definition['click sortable']) && !$this->defer_query;
+  }
+
+  function query() {
+    // If this is not a grouped field, use the generic query().
+    if (!$this->defer_query) {
+      return parent::query();
+    }
+
+    // Grouped field: do NOT call ensure_my_table, only add additional fields.
+    $this->add_additional_fields();
+    $this->field_alias = $this->aliases['entity_id'];
+  }
+
+  /**
+   * Loads the objects providing the field information necessary to render the
+   *   field in the View.
+   * @TODO
+   *   Try to use parent::pre_render().
+   */
+  function pre_render($values) {
+    static $entity_type_map;
+
+    // @TODO Figure out why $this->field get's changed to to entity_id.
+
+    $field = field_info_field($this->definition['field_name']);
+    // If there are no values to render (displaying a summary, or query returned no results),
+    // or if this is not a grouped field, do nothing specific.
+    if (isset($this->view->build_info['summary']) || empty($values) || !$this->defer_query) {
+      return parent::pre_render($values);
+    }
+
+    // Build the list of entity-ids to retrieve.
+    $entity_ids = array();
+    $this->field_values = array();
+
+    foreach ($values as $result) {
+      if (isset($result->{$this->field_alias})) {
+        $entity_ids[] = $result->{$this->field_alias};
+      }
+    }
+
+    // It may happend that the multiple values field is related to a non
+    // required relation for which no node data related to the field being
+    // processed here is available.
+    if (empty($entity_ids)) {
+      return parent::pre_render($values);
+    }
+
+    $entities = entity_load($this->view->base_table, $entity_ids);
+
+    foreach ($values as $key => $object){
+      $entity_type = $this->view->base_table;
+      $values[$key]->_field_cache[$this->field_alias] = array(
+        'entity_type' => $entity_type,
+        'object' => $entities[$object->{$this->field_alias}],
+      );
+    }
+  }
+
+  /**
+   * Return DIV or SPAN based upon the field's element type.
+   *
+   * Fields rendered with the 'group multiple' option use <div> markers,
+   * and thus shouldn't be wrapped in a <span>.
+   */
+  function element_type() {
+    if (!$this->defer_query) {
+      return parent::element_type();
+    }
+
+    if (isset($this->definition['element type'])) {
+      return $this->definition['element type'];
+    }
+    return 'div';
+  }
+}
diff --git views.info views.info
index 05c5717..ad7e298 100644
--- views.info
+++ views.info
@@ -107,6 +107,7 @@ files[] = modules/contact.views.inc
 files[] = modules/field.views.inc
 files[] = modules/field/views_handler_field_field.inc
 files[] = modules/field/views_handler_filter_field_list.inc
+files[] = modules/field/views_handler_field_field_multiple.inc
 files[] = modules/filter/views_handler_field_filter_format_name.inc
 files[] = modules/filter.views.inc
 files[] = modules/locale.views.inc
