diff --git a/views_json.module b/views_json.module
index 6ddd2f4..ebc9724 100644
--- a/views_json.module
+++ b/views_json.module
@@ -58,79 +58,23 @@ function views_json_views_pre_render(&$view) {
  * We almost duplicate the content_handler_field_multiple::render function
  * to get the multiple rendered field values in an array
  * @param $field
+ * @param $field_id
  * @param $values
  * @return unknown_type
  */
-function _views_json_render_multiple_field($field, $values) {
+function _views_json_render_multiple_field($field, $field_id, $values) {
   $options = $field->options;
-  // If this is not a grouped field, use content_handler_field::render().
-  if (!$field->defer_query) {
-    return $field->render($values);
-  }
   // We're down to a single node here, so we can retrieve the actual field
   // definition for the node type being considered.
-  $content_field = content_fields($field->content_field['field_name'], $values->{$field->aliases['type']});
-  $vid = $values->{$field->field_alias};
-  if (isset($field->field_values[$vid])) {
+
+  if (isset($values->{'field_' . $field_id})) {
     // Gather items, respecting the 'Display n values starting from m' settings.
     $count_skipped = 0;
     $items = array();
-    foreach ($field->field_values[$vid] as $item) {
-      if (empty($options['multiple']['multiple_from']) || ($count_skipped >= $options['multiple']['multiple_from'])) {
-        if (empty($options['multiple']['multiple_number']) || (count($items) < $options['multiple']['multiple_number'])) {
-          // Grab the nid - needed for render_link().
-          $nid = $item['_nid'];
-          unset($item['_nid']);
-          $items[] = $item;
-        }
-        else {
-          break;
-        }
-      }
-      $count_skipped++;
-    }
-
-    // Build a pseudo-node from the retrieved values.
-    $node = drupal_clone($values);
-    // content_format and formatters will need a 'type'.
-    $node->type = $values->{$field->aliases['type']};
-    $node->nid = $values->{$field->aliases['nid']};
-    $node->vid = $values->{$field->aliases['vid']};
-
-    // Some formatters need to behave differently depending on the build_mode
-    // (for instance: preview), so we provide one.
-    $node->build_mode = NODE_BUILD_NORMAL;
-
-    // Render items.
-    $formatter_name = $options['format'];
-    if ($items && ($formatter = _content_get_formatter($formatter_name, $content_field['type']))) {
-      $rendered = array();
-      if (content_handle('formatter', 'multiple values', $formatter) == CONTENT_HANDLE_CORE) {
-        // Single-value formatter.
-        $n = 0;
-        foreach ($items as $item) {
-          $output = content_format($content_field, $item, $formatter_name, $node);
-          if (!empty($output)) {
-            $rendered[++$n] = $field->render_link($output, (object) array('nid' => $nid));
-          }
-        }
-      }
-      else {
-        // Multiple values formatter.
-        $output = content_format($content_field, $items, $formatter_name, $values);
-        if (!empty($output)) {
-          $rendered[++$n] = $field->render_link($output, (object) array('nid' => $nid));
-        }
-      }
-      if (count($rendered) > 1) {
-        // TODO: could we use generic field display ?
-        //return theme('content_view_multiple_field', $rendered, $content_field, $values);
-        return $rendered;
-      }
-      elseif ($rendered) {
-        return $rendered[1];
-      }
+    foreach ($values->{'field_' . $field_id} as $item) {
+      $items[] = drupal_render($item['rendered']);
     }
+    return $items;
   }
 
   return '';
@@ -153,16 +97,9 @@ function _views_json_render_fields($view, $row) {
     $field = $view->field[$id];
     $field_is_multiple = FALSE;
     $field_raw = array();
-    if ((isset($field->options['multiple']['group']))&& isset($field->field_values)) {
-      $field_output = _views_json_render_multiple_field($field, $row);
-      $n = 0;
-      if (is_array($field_output)) {
-        foreach ($field->field_values[$row->{$field->field_alias}] as $item) {
-          $field_raw[++$n] = $item["value"];
-        }
-        $field_is_multiple = TRUE;
-      }
-      else $field_raw = $view->field[$field->options['id']]->advanced_render($row);
+    if (isset($field->multiple) && $field->multiple && !empty($field->options['group_rows'])) {
+      $field_output = _views_json_render_multiple_field($field, $id, $row);
+      $field_is_multiple = TRUE;
     }
     else {
       $field_output = $view->field[$field->options['id']]->advanced_render($row);
diff --git a/views_rdf.module b/views_rdf.module
index 3910f20..473d55c 100644
--- a/views_rdf.module
+++ b/views_rdf.module
@@ -20,82 +20,26 @@ function views_rdf_views_api() {
  * We almost duplicate the content_handler_field_multiple::render function
  * to get the multiple rendered field values in an array
  * @param $field
+ * @param $field_id
  * @param $values
  * @return unknown_type
  */
 function _views_rdf_render_multiple_field($field, $values) {
-    $options = $field->options;
-    // If this is not a grouped field, use content_handler_field::render().
-    if (!$field->defer_query) {
-      return $field->render($values);
-    }
-    // We're down to a single node here, so we can retrieve the actual field
-    // definition for the node type being considered.
-    $content_field = content_fields($field->content_field['field_name'], $values->{$field->aliases['type']});
-    $vid = $values->{$field->field_alias};
-    if (isset($field->field_values[$vid])) {
-      // Gather items, respecting the 'Display n values starting from m' settings.
-      $count_skipped = 0;
-      $items = array();
-      foreach ($field->field_values[$vid] as $item) {
-        if (empty($options['multiple']['multiple_from']) || ($count_skipped >= $options['multiple']['multiple_from'])) {
-          if (empty($options['multiple']['multiple_number']) || (count($items) < $options['multiple']['multiple_number'])) {
-            // Grab the nid - needed for render_link().
-            $nid = $item['_nid'];
-            unset($item['_nid']);
-            $items[] = $item;
-          }
-          else {
-            break;
-          }
-        }
-        $count_skipped++;
-      }
-
-      // Build a pseudo-node from the retrieved values.
-      $node = drupal_clone($values);
-      // content_format and formatters will need a 'type'.
-      $node->type = $values->{$field->aliases['type']};
-      $node->nid = $values->{$field->aliases['nid']};
-      $node->vid = $values->{$field->aliases['vid']};
-
-      // Some formatters need to behave differently depending on the build_mode
-      // (for instance: preview), so we provide one.
-      $node->build_mode = NODE_BUILD_NORMAL;
-
-      // Render items.
-      $formatter_name = $options['format'];
-      if ($items && ($formatter = _content_get_formatter($formatter_name, $content_field['type']))) {
-        $rendered = array();
-        if (content_handle('formatter', 'multiple values', $formatter) == CONTENT_HANDLE_CORE) {
-          // Single-value formatter.
-          $n = 0;
-          foreach ($items as $item) {
-            $output = content_format($content_field, $item, $formatter_name, $node);
-            if (!empty($output)) {
-              $rendered[++$n] = $field->render_link($output, (object) array('nid' => $nid));
-            }
-          }
-        }
-        else {
-          // Multiple values formatter.
-          $output = content_format($content_field, $items, $formatter_name, $values);
-          if (!empty($output)) {
-            $rendered[++$n] = $field->render_link($output, (object) array('nid' => $nid));
-          }
-        }
-        if (count($rendered) > 1) {
-          // TODO: could we use generic field display ?
-          //return theme('content_view_multiple_field', $rendered, $content_field, $values);
-          return $rendered;
-        }
-        elseif ($rendered) {
-          return $rendered[1];
-        }
-      }
+  $options = $field->options;
+  // We're down to a single node here, so we can retrieve the actual field
+  // definition for the node type being considered.
+
+  if (isset($values->{'field_' . $field_id})) {
+    // Gather items, respecting the 'Display n values starting from m' settings.
+    $count_skipped = 0;
+    $items = array();
+    foreach ($values->{'field_' . $field_id} as $item) {
+      $items[] = drupal_render($item['rendered']);
     }
+    return $items;
+  }
 
-    return '';
+  return '';
 }
 
 /**
@@ -115,16 +59,9 @@ function _views_rdf_render_fields($view, $row) {
     $field = $view->field[$id];
     $field_is_multiple = FALSE;
     $field_raw = array();
-    if ((isset($field->options['multiple']['group']))&& isset($field->field_values)) {
-      $field_output = _views_rdf_render_multiple_field($field, $row);
-      $n = 0;
-      if (is_array($field_output)) {
-        foreach ($field->field_values[$row->{$field->field_alias}] as $item) {
-          $field_raw[++$n] = $item["value"];
-        }
-        $field_is_multiple = TRUE;
-      }
-      else $field_raw = $view->field[$field->options['id']]->advanced_render($row);
+    if (isset($field->multiple) && $field->multiple && !empty($field->options['group_rows'])) {
+      $field_output = _views_rdf_render_multiple_field($field, $id, $row);
+      $field_is_multiple = TRUE;
     }
     else {
       $field_output = $view->field[$field->options['id']]->advanced_render($row);
diff --git a/views_xhtml.module b/views_xhtml.module
index f076a3a..3a6d8d7 100644
--- a/views_xhtml.module
+++ b/views_xhtml.module
@@ -24,79 +24,21 @@ function views_xhtml_views_api() {
  * @return unknown_type
  */
 function _views_xhtml_render_multiple_field($field, $values) {
-    $options = $field->options;
-    // If this is not a grouped field, use content_handler_field::render().
-    if (!$field->defer_query) {
-      return $field->render($values);
-    }
-    // We're down to a single node here, so we can retrieve the actual field
-    // definition for the node type being considered.
-    $content_field = content_fields($field->content_field['field_name'], $values->{$field->aliases['type']});
-    $vid = $values->{$field->field_alias};
-    if (isset($field->field_values[$vid])) {
-      // Gather items, respecting the 'Display n values starting from m' settings.
-      $count_skipped = 0;
-      $items = array();
-      foreach ($field->field_values[$vid] as $item) {
-        if (empty($options['multiple']['multiple_from']) || ($count_skipped >= $options['multiple']['multiple_from'])) {
-          if (empty($options['multiple']['multiple_number']) || (count($items) < $options['multiple']['multiple_number'])) {
-            // Grab the nid - needed for render_link().
-            $nid = $item['_nid'];
-            unset($item['_nid']);
-            $items[] = $item;
-          }
-          else {
-            break;
-          }
-        }
-        $count_skipped++;
-      }
-
-      // Build a pseudo-node from the retrieved values.
-      $node = drupal_clone($values);
-      // content_format and formatters will need a 'type'.
-      $node->type = $values->{$field->aliases['type']};
-      $node->nid = $values->{$field->aliases['nid']};
-      $node->vid = $values->{$field->aliases['vid']};
-
-      // Some formatters need to behave differently depending on the build_mode
-      // (for instance: preview), so we provide one.
-      $node->build_mode = NODE_BUILD_NORMAL;
-
-      // Render items.
-      $formatter_name = $options['format'];
-      if ($items && ($formatter = _content_get_formatter($formatter_name, $content_field['type']))) {
-        $rendered = array();
-        if (content_handle('formatter', 'multiple values', $formatter) == CONTENT_HANDLE_CORE) {
-          // Single-value formatter.
-          $n = 0;
-          foreach ($items as $item) {
-            $output = content_format($content_field, $item, $formatter_name, $node);
-            if (!empty($output)) {
-              $rendered[++$n] = $field->render_link($output, (object) array('nid' => $nid));
-
-            }
-          }
-        }
-        else {
-          // Multiple values formatter.
-          $output = content_format($content_field, $items, $formatter_name, $values);
-          if (!empty($output)) {
-            $rendered[++$n] = $field->render_link($output, (object) array('nid' => $nid));
-          }
-        }
-        if (count($rendered) > 1) {
-          // TODO: could we use generic field display ?
-          //return theme('content_view_multiple_field', $rendered, $content_field, $values);
-          return $rendered;
-        }
-        elseif ($rendered) {
-          return $rendered[1];
-        }
-      }
+  $options = $field->options;
+  // We're down to a single node here, so we can retrieve the actual field
+  // definition for the node type being considered.
+
+  if (isset($values->{'field_' . $field->field})) {
+    // Gather items, respecting the 'Display n values starting from m' settings.
+    $count_skipped = 0;
+    $items = array();
+    foreach ($values->{'field_' . $field->field} as $item) {
+      $items[] = drupal_render($item['rendered']);
     }
+    return $items;
+  }
 
-    return '';
+  return '';
 }
 /**
  * Takes each field from a row object and renders the field as determined by the field's theme
@@ -116,16 +58,9 @@ function _views_xhtml_render_fields($view, $row) {
     $field = $view->field[$id];
     $field_is_multiple = FALSE;
     $field_raw = array();
-    if ((isset($field->options['multiple']['group']))&& isset($field->field_values)) {
-      $field_output = _views_xhtml_render_multiple_field($field, $row);
-      $n = 0;
-      if (is_array($field_output)) {
-        foreach ($field->field_values[$row->{$field->field_alias}] as $item) {
-          $field_raw[++$n] = $item["value"];
-        }
-        $field_is_multiple = TRUE;
-      }
-      else $field_raw = $view->field[$field->options['id']]->advanced_render($row);
+    if (isset($field->multiple) && $field->multiple && !empty($field->options['group_rows'])) {
+      $field_output = _views_xtml_render_multiple_field($field, $row);
+      $field_is_multiple = TRUE;
     }
     else {
       $field_output = $view->field[$field->options['id']]->advanced_render($row);
diff --git a/views_xml.module b/views_xml.module
index 7e492c6..3fc8b23 100644
--- a/views_xml.module
+++ b/views_xml.module
@@ -20,79 +20,23 @@ function views_xml_views_api() {
  * We almost duplicate the content_handler_field_multiple::render function
  * to get the multiple rendered field values in an array
  * @param $field
+ * @param $field_id
  * @param $values
  * @return unknown_type
  */
-function _views_xml_render_multiple_field($field, $values) {
+function _views_xml_render_multiple_field($field, $field_id, $values) {
   $options = $field->options;
-  // If this is not a grouped field, use content_handler_field::render().
-  if (!$field->defer_query) {
-    return $field->render($values);
-  }
   // We're down to a single node here, so we can retrieve the actual field
   // definition for the node type being considered.
-  $content_field = content_fields($field->content_field['field_name'], $values->{$field->aliases['type']});
-  $vid = $values->{$field->field_alias};
-  if (isset($field->field_values[$vid])) {
+
+  if (isset($values->{'field_' . $field_id})) {
     // Gather items, respecting the 'Display n values starting from m' settings.
     $count_skipped = 0;
     $items = array();
-    foreach ($field->field_values[$vid] as $item) {
-      if (empty($options['multiple']['multiple_from']) || ($count_skipped >= $options['multiple']['multiple_from'])) {
-        if (empty($options['multiple']['multiple_number']) || (count($items) < $options['multiple']['multiple_number'])) {
-          // Grab the nid - needed for render_link().
-          $nid = $item['_nid'];
-          unset($item['_nid']);
-          $items[] = $item;
-        }
-        else {
-          break;
-        }
-      }
-      $count_skipped++;
-    }
-
-    // Build a pseudo-node from the retrieved values.
-    $node = drupal_clone($values);
-    // content_format and formatters will need a 'type'.
-    $node->type = $values->{$field->aliases['type']};
-    $node->nid = $values->{$field->aliases['nid']};
-    $node->vid = $values->{$field->aliases['vid']};
-
-    // Some formatters need to behave differently depending on the build_mode
-    // (for instance: preview), so we provide one.
-    $node->build_mode = NODE_BUILD_NORMAL;
-
-    // Render items.
-    $formatter_name = $options['format'];
-    if ($items && ($formatter = _content_get_formatter($formatter_name, $content_field['type']))) {
-      $rendered = array();
-      if (content_handle('formatter', 'multiple values', $formatter) == CONTENT_HANDLE_CORE) {
-        // Single-value formatter.
-        $n = 0;
-        foreach ($items as $item) {
-          $output = content_format($content_field, $item, $formatter_name, $node);
-          if (!empty($output)) {
-            $rendered[++$n] = $field->render_link($output, (object) array('nid' => $nid));
-          }
-        }
-      }
-      else {
-        // Multiple values formatter.
-        $output = content_format($content_field, $items, $formatter_name, $values);
-        if (!empty($output)) {
-          $rendered[++$n] = $field->render_link($output, (object) array('nid' => $nid));
-        }
-      }
-      if (count($rendered) > 1) {
-        // TODO: could we use generic field display ?
-        //return theme('content_view_multiple_field', $rendered, $content_field, $values);
-        return $rendered;
-      }
-      elseif ($rendered) {
-        return $rendered[1];
-      }
+    foreach ($values->{'field_' . $field_id} as $item) {
+      $items[] = drupal_render($item['rendered']);
     }
+    return $items;
   }
 
   return '';
@@ -115,16 +59,9 @@ function _views_xml_render_fields($view, $row) {
     $field = $view->field[$id];
     $field_is_multiple = FALSE;
     $field_raw = array();
-    if ((isset($field->options['multiple']['group']))&& isset($field->field_values)) {
-      $field_output = _views_xml_render_multiple_field($field, $row);
-      $n = 0;
-      if (is_array($field_output)) {
-        foreach ($field->field_values[$row->{$field->field_alias}] as $item) {
-          $field_raw[++$n] = $item["value"];
-        }
-        $field_is_multiple = TRUE;
-      }
-      else $field_raw = $view->field[$field->options['id']]->advanced_render($row);
+    if (isset($field->multiple) && $field->multiple && !empty($field->options['group_rows'])) {
+      $field_output = _views_xml_render_multiple_field($field, $id, $row);
+      $field_is_multiple = TRUE;
     }
     else {
       $field_output = $view->field[$field->options['id']]->advanced_render($row);
