diff --git a/plugins/views_plugin_query.inc b/plugins/views_plugin_query.inc
index a82749e..b3bd36a 100644
--- a/plugins/views_plugin_query.inc
+++ b/plugins/views_plugin_query.inc
@@ -28,8 +28,12 @@
    *
    * @param $get_count
    *   Provide a countquery if this is true, otherwise provide a normal query.
+   *
+   * @param $options
+   *   Additional options to control this function.
+   *     count_include_all - Include all fields in the count query.
    */
-  function query($get_count = FALSE) { }
+  function query($get_count = FALSE, $options = array()) { }
 
   /**
    * Let modules modify the query just prior to finalizing it.
diff --git a/plugins/views_plugin_query_default.inc b/plugins/views_plugin_query_default.inc
index 48460c0..8f4b555 100644
--- a/plugins/views_plugin_query_default.inc
+++ b/plugins/views_plugin_query_default.inc
@@ -917,7 +917,7 @@
     return "";
   }
 
-  function compile_fields($fields_array) {
+  function compile_fields($fields_array, $options = array()) {
     $fields = $distinct = array();
     $non_aggregates = array();
 
@@ -965,7 +965,7 @@
         $fields[] = $string;
       }
 
-      if (!empty($get_count_optimized)) {
+      if (empty($options['count_include_all'])) {
         // We only want the first field in this case.
         break;
       }
@@ -983,8 +983,12 @@
    *
    * @param $get_count
    *   Provide a countquery if this is true, otherwise provide a normal query.
+   *
+   * @param $options
+   *   Additional options to control this function.
+   *     count_include_all - Include all fields in the count query.
    */
-  function query($get_count = FALSE) {
+  function query($get_count = FALSE, $options = array()) {
     // Check query distinct value.
     if (empty($this->no_distinct) && $this->distinct && !empty($this->fields)) {
       $base_field_alias = $this->add_field($this->base_table, $this->base_field, NULL, array('distinct' => TRUE));
@@ -1018,8 +1022,10 @@
         $joins .= $table['join']->join($table, $this) . "\n";
       }
     }
-
-    list($distinct, $fields, $non_aggregates) = $this->compile_fields($fields_array);
+    if (!$get_count_optimized) {
+      $options['count_include_all'] = 1;
+    }
+    list($distinct, $fields, $non_aggregates) = $this->compile_fields($fields_array, $options);
 
     if (count($this->having)) {
       $this->has_aggregate = TRUE;
@@ -1089,10 +1095,23 @@
     // Let the pager modify the query to add limits.
     $this->pager->query();
 
+    // The node module and maybe other modules will add a DISTINCT tag to
+    // the query. This check will ensure that multiple field values are not
+    // removed.
+    $query_options = array();
+    foreach ($this->fields as $field) {
+      if (isset($field->options['multiple']) && !$field->options['exclude']) {
+        $query_options['count_include_all'] = TRUE;
+        // Not used, but it would be even better to only include multiple fields
+        // to reduce the number of SELECT fields too (maybe better performance)
+        $query_options['count_fields'][] = $field;
+      }
+    }
+
     $this->query = $this->query();
     if (empty($this->options['disable_sql_rewrite'])) {
       $this->final_query = db_rewrite_sql($this->query, $view->base_table, $view->base_field, array('view' => &$view));
-      $this->count_query = db_rewrite_sql($this->query(TRUE), $view->base_table, $view->base_field, array('view' => &$view));;
+      $this->count_query = db_rewrite_sql($this->query(TRUE, $query_options), $view->base_table, $view->base_field, array('view' => &$view));;
     }
     else {
       $this->final_query = $this->query;