diff --git modules/field/views_handler_field_field.inc modules/field/views_handler_field_field.inc
index baadb3c..a5004bd 100644
--- modules/field/views_handler_field_field.inc
+++ modules/field/views_handler_field_field.inc
@@ -32,6 +32,24 @@ function _field_view_formatter_options($field_type = NULL) {
  * A field that displays fields.
  */
 class views_handler_field_field extends views_handler_field {
+  function init(&$view, $options) {
+    parent::init($view, $options);
+
+    $field = $this->definition['field_info'];
+    $this->multiple = FALSE;
+    $this->limit_values = FALSE;
+
+    if ($field['cardinality'] > 1 || $field['cardinality'] == FIELD_CARDINALITY_UNLIMITED) {
+      $this->multiple = TRUE;
+
+      // We should only limit values if the user hasn't selected "all", or the
+      // value matching field cardinality (which also means "give me everything")
+      if (is_numeric($options['delta_limit']) && ($options['delta_limit'] != $field['cardinality'])) {
+        $this->limit_values = TRUE;
+      }
+    }
+  }
+
   /**
    * Called to add the field to a query.
    *
@@ -82,7 +100,6 @@ class views_handler_field_field extends views_handler_field {
     $this->aliases['entity_type'] = $this->query->add_field(NULL, "'$entity_type'", $entity_type_alias);
 
     $fields = $this->additional_fields;
-
     // We've already added entity_type, so we can remove it from the list.
     $entity_type_key = array_search('entity_type', $fields);
     if ($entity_type_key !== FALSE) {
@@ -100,7 +117,7 @@ class views_handler_field_field extends views_handler_field {
     }
 
     // Add additional fields (and the table join itself) if needed.
-    if ($use_groupby || !empty($this->definition['add fields to query'])) {
+    if ($this->add_field_table($use_groupby)) {
       $this->ensure_my_table();
       $this->add_additional_fields($fields);
 
@@ -111,10 +128,18 @@ class views_handler_field_field extends views_handler_field {
         $this->query->add_where(0, $column, $this->query->options['field_language']);
       }
 
-      // Do we need to filter by delta?
-      if (is_numeric($this->options['delta'])) {
+      // Limiting a multiple value field.
+      if ($this->limit_values) {
         $column = $this->table_alias . ".delta";
-        $this->query->add_where(0, $column, (int) $this->options['delta']);
+        $offset = (int) $this->options['delta_offset'];
+        $or = db_or();
+
+        for ($i = 0; $i < $this->options['delta_limit']; $i++) {
+          $delta = $offset + $i;
+          $or->condition($column, $delta);
+        }
+
+        $this->query->add_where(0, $or);
       }
     }
 
@@ -129,6 +154,38 @@ class views_handler_field_field extends views_handler_field {
   }
 
   /**
+   * Determine if the field table should be added to the query.
+   */
+  function add_field_table($use_groupby) {
+    // Grouping is enabled, or we are explicitly required to do this.
+    if ($use_groupby || !empty($this->definition['add fields to query'])) {
+      return TRUE;
+    }
+    // This a multiple value field, but "group multiple values" is not checked.
+    if ($this->multiple && !$this->options['group_rows']) {
+      return TRUE;
+    }
+    return FALSE;
+  }
+
+  /**
+   * Determine if this field is click sortable.
+   */
+  function click_sortable() {
+    // Not click sortable in any case.
+    if (empty($this->definition['click sortable'])) {
+      return FALSE;
+    }
+    // A field is not click sortable if it's a multiple field with
+    // "group multiple values" checked, since a click sort in that case would
+    // add a join to the field table, which would produce unwanted duplicates.
+    if ($this->multiple && $this->options['group_rows']) {
+      return FALSE;
+    }
+    return TRUE;
+  }
+
+  /**
    * Called to determine what to tell the clicksorter.
    */
   function click_sort($order) {
@@ -148,9 +205,6 @@ class views_handler_field_field extends views_handler_field {
     $field_type = field_info_field_types($field['type']);
     $column_names = array_keys($field['columns']);
 
-    $options['delta'] = array(
-      'default' => '',
-    );
     // If the field has a "value" column, we probably need that one.
     $options['click_sort_column'] = array(
       'default' => in_array('value', $column_names) ? 'value' : '',
@@ -168,6 +222,22 @@ class views_handler_field_field extends views_handler_field {
       'default' => array(),
     );
 
+    // Options used for multiple value fields.
+    $options['group_rows'] = array(
+      'default' => FALSE,
+    );
+    // If we know the exact number of allowed values, then that can be
+    // the default. Otherwise, default to 'all'.
+    $options['delta_limit'] = array(
+      'default' => ($field['cardinality'] > 1) ? $field['cardinality'] : 'all',
+    );
+    $options['delta_offset'] = array(
+      'default' => 0,
+    );
+    $options['delta_reversed'] = array(
+      'default' => FALSE,
+    );
+
     return $options;
   }
 
@@ -178,24 +248,9 @@ class views_handler_field_field extends views_handler_field {
     $formatters = _field_view_formatter_options($field['type']);
     $column_names = array_keys($field['columns']);
 
-    if ($field['cardinality'] > 1 || $field['cardinality'] == FIELD_CARDINALITY_UNLIMITED) {
-      if ($field['cardinality'] == FIELD_CARDINALITY_UNLIMITED) {
-        $type = 'textfield';
-        $options = NULL;
-        $description = t('The sequence number of the value to show. Numbers start from 0. Leave empty to display all values.');
-      }
-      else {
-        $type = 'select';
-        $options = array_merge(array('' => t('All')), range(0, $field['cardinality'] - 1));
-        $description = t('The sequence number of the value to show.');
-      }
-      $form['delta'] = array(
-        '#title' => t('Delta'),
-        '#type' => $type,
-        '#options' => $options,
-        '#default_value' => $this->options['delta'],
-        '#description' => $description,
-      );
+    // If this is a multiple value field, add its options.
+    if ($this->multiple) {
+      $this->multiple_options_form($form, $form_state);
     }
 
     // No need to ask the user anything if the field has only one column.
@@ -255,6 +310,62 @@ class views_handler_field_field extends views_handler_field {
   }
 
   /**
+   * Provide options for multiple value fields.
+   */
+  function multiple_options_form(&$form, &$form_state) {
+    $field = $this->definition['field_info'];
+
+    $form['group_rows'] = array(
+      '#title' => t('Group multiple values'),
+      '#type' => 'checkbox',
+      '#default_value' => $this->options['group_rows'],
+      '#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)'));
+
+    if ($field['cardinality'] == FIELD_CARDINALITY_UNLIMITED) {
+      $type = 'textfield';
+      $options = NULL;
+      $size = 5;
+    }
+    else {
+      $type = 'select';
+      $options = range(1, $field['cardinality']);
+      $size = 1;
+    }
+    $form['delta_limit'] = array(
+      '#type' => $type,
+      '#size' => $size,
+      '#field_prefix' => $prefix,
+      '#field_suffix' => $suffix,
+      '#options' => $options,
+      '#default_value' => $this->options['delta_limit'],
+      '#prefix' => '<div class="container-inline">',
+    );
+    list($prefix, $suffix) = explode('@count', t('starting from @count'));
+    $form['delta_offset'] = array(
+      '#type' => 'textfield',
+      '#size' => 5,
+      '#field_prefix' => $prefix,
+      '#field_suffix' => $suffix,
+      '#default_value' => $this->options['delta_offset'],
+      '#description' => t('(first item is 0)'),
+    );
+    $form['delta_reversed'] = array(
+      '#title' => t('Reversed'),
+      '#type' => 'checkbox',
+      '#default_value' => $this->options['delta_reversed'],
+      '#suffix' => '</div>',
+      '#process' => array('ctools_dependent_process'),
+      '#dependency' => array('edit-options-group-rows' => array(TRUE)),
+      '#description' => t('(start from last values)'),
+    );
+  }
+
+  /**
    * Extend the groupby form with group columns.
    */
   function groupby_form(&$form, &$form_state) {
@@ -339,13 +450,28 @@ class views_handler_field_field extends views_handler_field {
         return '';
       }
 
-      // The user wants to render only one value from a multivalue field.
-      // The Field API doesn't support this, so we just hack out the
-      // values we don't want to render.
-      if (is_numeric($this->options['delta'])) {
-        $delta = (int) $this->options['delta'];
+      if ($this->limit_values) {
+        // Don't let odd usage cause errors.
+        if ($this->options['delta_limit'] == 0) {
+          return '';
+        }
+
+        $all_values = $display_entity->{$this->definition['field_name']}[$langcode];
+        if ($this->options['delta_reversed']) {
+          $all_values = array_reverse($all_values);
+        }
+
+        $offset = (int) $this->options['delta_offset'];
+        $new_values = array();
+        for ($i = 0; $i < $this->options['delta_limit']; $i++) {
+          $new_delta = $offset + $i;
+
+          if (isset($all_values[$new_delta])) {
+            $new_values[] = $all_values[$new_delta];
+          }
+        }
 
-        $display_entity->{$this->definition['field_name']}[$langcode] = array($display_entity->{$this->definition['field_name']}[$langcode][$delta]);
+        $display_entity->{$this->definition['field_name']}[$langcode] = $new_values;
       }
 
       $display = array(
@@ -381,4 +507,21 @@ class views_handler_field_field extends views_handler_field {
       return LANGUAGE_NONE;
     }
   }
+
+  /**
+   * 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->multiple || !$this->options['group_rows']) {
+      return parent::element_type();
+    }
+
+    if (isset($this->definition['element type'])) {
+      return $this->definition['element type'];
+    }
+    return 'div';
+  }
 }
