diff --git a/core/modules/views/templates/views-view-grid.html.twig b/core/modules/views/templates/views-view-grid.html.twig
index 8ba3003..976c1b1 100644
--- a/core/modules/views/templates/views-view-grid.html.twig
+++ b/core/modules/views/templates/views-view-grid.html.twig
@@ -7,10 +7,12 @@
  * - attributes: HTML attributes for the table element.
  * - title: The title of this group of rows.
  * - rows: A list of rows. Each row contains a list of columns.
- * - row_classes: HTML classes for each row including the row number and first
- *   or last.
- * - column_classes: HTML classes for each column including the row number and
- *   first or last.
+ *   - attributes: HTML attributes for each row.
+ *   - columns: A list of columns within the row.
+ *     Each column contains:
+ *     - attributes: HTML attributes for each column including the row number
+ *       and first or last.
+ *     - content: The column contents.
  *
  * @see template_preprocess()
  * @see template_preprocess_views_view_grid()
@@ -23,11 +25,11 @@
 {% endif %}
 <table{{ attributes }}>
   <tbody>
-    {% for row_number, columns in rows %}
-      <tr{{ row_classes[row_number] }}>
-        {% for column_number, item in columns %}
-          <td{{ column_classes[row_number][column_number] }}>
-            {{ item }}
+    {% for row in rows %}
+      <tr{{ row.attributes }}>
+        {% for column in row.columns %}
+          <td{{ column.attributes }}>
+            {{ column.content }}
           </td>
         {% endfor %}
       </tr>
diff --git a/core/modules/views/templates/views-view-list.html.twig b/core/modules/views/templates/views-view-list.html.twig
index 5e2d2eb..b471826 100644
--- a/core/modules/views/templates/views-view-list.html.twig
+++ b/core/modules/views/templates/views-view-list.html.twig
@@ -4,8 +4,10 @@
  * Default theme implementation for a view template to display a list of rows.
  *
  * Available variables:
+ * - attributes: HTML attributes for the container.
  * - rows: A list of rows for this list.
- * - row_classes: The row's HTML attributes correlating with the row's 'id'.
+ *   - attributes: The row's HTML attributes.
+ *   - content: The row's contents.
  * - title: The title of this group of rows. May be empty.
  * - list: @todo.
  *   - type: Starting tag will be either a ul or ol.
@@ -17,8 +19,8 @@
  * @ingroup themeable
  */
 #}
-{% if wrapper_attributes -%}
-  <div{{ wrapper_attributes }}>
+{% if attributes -%}
+  <div{{ attributes }}>
 {% endif %}
   {% if title %}
     <h3>{{ title }}</h3>
@@ -30,15 +32,15 @@
     <ol{{ list.attributes }}>
   {% endif %}
 
-    {% for id, row in rows %}
-      <li{{ row_classes[id] }}>{{ row }}</li>
-    {% endfor %}
+  {% for row in rows %}
+    <li{{ row.attributes }}>{{ row.content }}</li>
+  {% endfor %}
 
   {% if list.type == 'ul' %}
     </ul>
   {% else %}
     </ol>
   {% endif %}
-{% if wrapper_attributes -%}
+{% if attributes -%}
   </div>
 {% endif %}
diff --git a/core/modules/views/templates/views-view-summary-unformatted.html.twig b/core/modules/views/templates/views-view-summary-unformatted.html.twig
index 77f68a8..fa85dd7 100644
--- a/core/modules/views/templates/views-view-summary-unformatted.html.twig
+++ b/core/modules/views/templates/views-view-summary-unformatted.html.twig
@@ -8,8 +8,7 @@
  *   - url: The URL to this row's content.
  *   - count: The number of items this summary item represents.
  *   - separator: A separator between each row.
- * - row_classes: HTML attributes for a row, either containing an 'active' class
- *   or no attributes, that correlate to each row by ID.
+ *   - attributes: HTML attributes for a row.
  * - options: Flags indicating how each row should be displayed. This contains:
  *   - count: A flag indicating whether the row's 'count' should be displayed.
  *   - inline: A flag indicating whether the item should be wrapped in an inline
@@ -21,12 +20,12 @@
  * @ingroup themeable
  */
 #}
-{% for id, row in rows  %}
+{% for row in rows  %}
   {{ options.inline ? '<span' : '<div' }} class="views-summary views-summary-unformatted">
   {% if row.separator -%}
     {{ row.separator }}
   {%- endif %}
-  <a href="{{ row.url }}"{{ row_classes[id] }}>{{ row.link }}</a>
+  <a href="{{ row.url }}"{{ row.attributes }}>{{ row.link }}</a>
   {% if options.count %}
     ({{ row.count }})
   {% endif %}
diff --git a/core/modules/views/templates/views-view-summary.html.twig b/core/modules/views/templates/views-view-summary.html.twig
index cffc2bc..f0a9e20 100644
--- a/core/modules/views/templates/views-view-summary.html.twig
+++ b/core/modules/views/templates/views-view-summary.html.twig
@@ -9,8 +9,7 @@
  *   - url: The summary link URL.
  *   - link: The summary link text.
  *   - count: The number of items under this grouping.
- * - row_classes: HTML classes to apply to each row, indexed by row ID.
- *   This matches the index in rows.
+ *   - attributes: HTML attributes to apply to each row.
  * - options: Flags indicating how the summary should be displayed.
  *   This contains:
  *   - count: A flag indicating whether the count should be displayed.
@@ -23,8 +22,8 @@
 #}
 <div class="item-list">
   <ul class="views-summary">
-  {% for id, row in rows %}
-    <li><a href="{{ row.url }}"{{ row_classes[id] }}>{{ row.link }}</a>
+  {% for row in rows %}
+    <li><a href="{{ row.url }}"{{ row.attributes }}>{{ row.link }}</a>
       {% if options.count %}
         ({{ row.count }})
       {% endif %}
diff --git a/core/modules/views/templates/views-view-table.html.twig b/core/modules/views/templates/views-view-table.html.twig
index 50ae9d6..331454c 100644
--- a/core/modules/views/templates/views-view-table.html.twig
+++ b/core/modules/views/templates/views-view-table.html.twig
@@ -7,17 +7,17 @@
  * - attributes: Remaining HTML attributes for the element.
  *   - class: HTML classes that can be used to style contextually through CSS.
  * - title : The title of this group of rows.
- * - header: Header labels.
- * - header_classes: HTML classes to apply to each header cell, indexed by
+ * - header: The table header columns.
+ *   - attributes: Remaining HTML attributes for the element.
+ *   - content: HTML classes to apply to each header cell, indexed by
  *   the header's key.
- * - rows: Table row items. Rows are keyed by row number, fields within rows
- *   are keyed by field ID.
- *   - field: Table data field ID.
+ * - rows: Table row items. Rows are keyed by row number.
+ *   - column: Table data column ID.
  *   - content: Table data content.
- * - row_classes: HTML classes to apply to each row, indexed by row number.
- *   This matches the index in rows.
- * - field_classes: HTML classes to apply to each row, indexed by row number.
- *   This matches the index in columns and rows.
+ *   - attributes: HTML classes to apply to each row.
+ *   - column: @todo.
+ *     - attributes: HTML classes to apply to each row.
+ *     - content: The header column content.
  *
  * @see template_preprocess()
  * @see template_preprocess_views_view_table()
@@ -32,20 +32,20 @@
   {% if header %}
     <thead>
       <tr>
-        {% for key, field in header %}
-          <th{{ header_classes[key] }} scope="col">
-            {{ field }}
+        {% for column in header %}
+          <th{{ column.attributes }} scope="col">
+            {{ column.content }}
           </th>
         {% endfor %}
       </tr>
     </thead>
   {% endif %}
   <tbody>
-    {% for row_count, row in rows %}
-      <tr{{ row_classes[row_count] }}>
-        {% for field, content in row %}
-          <td{{ field_classes[field][row_count] }}>
-            {{ content }}
+    {% for row in rows %}
+      <tr{{ row.attributes }}>
+        {% for column in row.columns %}
+          <td{{ column.attributes }}>
+            {{ column.content }}
           </td>
         {% endfor %}
       </tr>
diff --git a/core/modules/views/templates/views-view-unformatted.html.twig b/core/modules/views/templates/views-view-unformatted.html.twig
index 47a66cf..eeacc09 100644
--- a/core/modules/views/templates/views-view-unformatted.html.twig
+++ b/core/modules/views/templates/views-view-unformatted.html.twig
@@ -6,7 +6,8 @@
  * Available variables:
  * - title: The title of this group of rows. May be empty.
  * - rows: A list of the view's row items.
- * - row_classes: A list of row class attributes keyed by the row's ID.
+ *   - attributes: The row's HTML attributes.
+ *   - content: The row's content.
  *
  * @see template_preprocess()
  * @see template_preprocess_views_view_unformatted()
@@ -17,8 +18,8 @@
 {% if title %}
   <h3>{{ title }}</h3>
 {% endif %}
-{% for id, row in rows %}
-  <div{{ row_classes[id] }}>
-    {{ row }}
+{% for row in rows %}
+  <div{{ row.attributes }}>
+    {{ row.content }}
   </div>
 {% endfor %}
diff --git a/core/modules/views/views.theme.inc b/core/modules/views/views.theme.inc
index f604637..056907b 100644
--- a/core/modules/views/views.theme.inc
+++ b/core/modules/views/views.theme.inc
@@ -414,7 +414,6 @@ function template_preprocess_views_view_field(&$vars) {
 function template_preprocess_views_view_summary(&$vars) {
   $view = $vars['view'];
   $argument = $view->argument[$view->build_info['summary_level']];
-  $vars['row_classes'] = array();
 
   $url_options = array();
 
@@ -438,6 +437,7 @@ function template_preprocess_views_view_summary(&$vars) {
   $argument->process_summary_arguments($row_args);
 
   foreach ($vars['rows'] as $id => $row) {
+    $vars['rows'][$id]->attributes = array();
     $vars['rows'][$id]->link = $argument->summaryName($row);
     $args = $view->args;
     $args[$argument->position] = $row_args[$id];
@@ -448,11 +448,10 @@ function template_preprocess_views_view_summary(&$vars) {
     }
     $vars['rows'][$id]->url = url($view->getUrl($args, $base_path), $url_options);
     $vars['rows'][$id]->count = intval($row->{$argument->count_alias});
-    $vars['row_classes'][$id] = array();
     if (isset($active_urls[$vars['rows'][$id]->url])) {
-      $vars['row_classes'][$id]['class'][] = 'active';
+      $vars['rows'][$id]->attributes['class'][] = 'active';
     }
-    $vars['row_classes'][$id] = new Attribute($vars['row_classes'][$id]);
+    $vars['rows'][$id]->attributes = new Attribute($vars['rows'][$id]->attributes);
   }
 }
 
@@ -472,7 +471,6 @@ function template_preprocess_views_view_summary(&$vars) {
 function template_preprocess_views_view_summary_unformatted(&$vars) {
   $view = $vars['view'];
   $argument = $view->argument[$view->build_info['summary_level']];
-  $vars['row_classes'] = array();
 
   $url_options = array();
 
@@ -502,6 +500,7 @@ function template_preprocess_views_view_summary_unformatted(&$vars) {
     if ($count++) {
       $vars['rows'][$id]->separator = filter_xss_admin($vars['options']['separator']);
     }
+    $vars['rows'][$id]->attributes = array();
     $vars['rows'][$id]->link = $argument->summaryName($row);
     $args = $view->args;
     $args[$argument->position] = $row_args[$id];
@@ -512,11 +511,10 @@ function template_preprocess_views_view_summary_unformatted(&$vars) {
     }
     $vars['rows'][$id]->url = url($view->getUrl($args, $base_path), $url_options);
     $vars['rows'][$id]->count = intval($row->{$argument->count_alias});
-    $vars['row_classes'][$id] = array();
     if (isset($active_urls[$vars['rows'][$id]->url])) {
-      $vars['row_classes'][$id]['class'][] = 'active';
+      $vars['rows'][$id]->attributes['class'][] = 'active';
     }
-    $vars['row_classes'][$id] = new Attribute($vars['row_classes'][$id]);
+    $vars['rows'][$id]->attributes = new Attribute($vars['rows'][$id]->attributes);
   }
 }
 
@@ -541,7 +539,6 @@ function template_preprocess_views_view_table(&$vars) {
   // Store rows so that they may be used by further preprocess functions.
   $result = $vars['result'] = $vars['rows'];
   $vars['rows'] = array();
-  $vars['field_classes'] = array();
   $vars['header'] = array();
 
   $options = $view->style_plugin->options;
@@ -564,6 +561,8 @@ function template_preprocess_views_view_table(&$vars) {
     $query += $view->exposed_raw_input;
   }
 
+  // A boolean to store whether the table's header has any labels.
+  $has_header_labels = FALSE;
   foreach ($columns as $field => $column) {
     // Create a second variable so we can easily find what fields we have and
     // what the CSS classes should be.
@@ -572,11 +571,11 @@ function template_preprocess_views_view_table(&$vars) {
       $vars['fields'][$field] .= ' active';
     }
 
-    // render the header labels
+    // Render the header labels.
     if ($field == $column && empty($fields[$field]->options['exclude'])) {
       $label = check_plain(!empty($fields[$field]) ? $fields[$field]->label() : '');
       if (empty($options['info'][$field]['sortable']) || !$fields[$field]->click_sortable()) {
-        $vars['header'][$field] = $label;
+        $vars['header'][$field]['content'] = $label;
       }
       else {
         $initial = !empty($options['info'][$field]['default_sort_order']) ? $options['info'][$field]['default_sort_order'] : 'asc';
@@ -597,36 +596,41 @@ function template_preprocess_views_view_table(&$vars) {
           'attributes' => array('title' => $title),
           'query' => $query,
         );
-        $vars['header'][$field] = l($label, current_path(), $link_options);
+        $vars['header'][$field]['content'] = l($label, current_path(), $link_options);
       }
 
       // Set up the header label class.
-      $vars['header_classes'][$field] = array();
+      $vars['header'][$field]['attributes'] = array();
       if ($fields[$field]->options['element_default_classes']) {
-        $vars['header_classes'][$field]['class'][] = 'views-field';
-        $vars['header_classes'][$field]['class'][] = 'views-field-' . $vars['fields'][$field];
+        $vars['header'][$field]['attributes']['class'][] = 'views-field';
+        $vars['header'][$field]['attributes']['class'][] = 'views-field-' . $vars['fields'][$field];
       }
-      $vars['header_classes'][$field] = new Attribute($vars['header_classes'][$field]);
       $class = $fields[$field]->elementLabelClasses(0);
       if ($class) {
-        $vars['header_classes'][$field]['class'][] = $class;
+        $vars['header'][$field]['attributes']['class'][] = $class;
       }
       // Add responsive header classes.
       if (!empty($options['info'][$field]['responsive'])) {
-        $vars['header_classes'][$field]['class'][] = $options['info'][$field]['responsive'];
+        $vars['header'][$field]['attributes']['class'][] = $options['info'][$field]['responsive'];
         $responsive = TRUE;
       }
       // Add a CSS align class to each field if one was set.
       if (!empty($options['info'][$field]['align'])) {
-        $vars['header_classes'][$field]['class'][] = drupal_clean_css_identifier($options['info'][$field]['align']);
+        $vars['header'][$field]['attributes']['class'][] = drupal_clean_css_identifier($options['info'][$field]['align']);
       }
       // Add a header label wrapper if one was selected.
-      if ($vars['header'][$field]) {
+      if ($vars['header'][$field]['content']) {
         $element_label_type = $fields[$field]->element_label_type(TRUE, TRUE);
         if ($element_label_type) {
-          $vars['header'][$field] = '<' . $element_label_type . '>' . $vars['header'][$field] . '</' . $element_label_type . '>';
+          $vars['header'][$field]['content'] = '<' . $element_label_type . '>' . $vars['header'][$field]['content'] . '</' . $element_label_type . '>';
         }
       }
+      // Check if header label is not empty.
+      if (!empty($vars['header'][$field]['content'])) {
+        $has_header_labels = TRUE;
+      }
+
+      $vars['header'][$field]['attributes'] = new Attribute($vars['header'][$field]['attributes']);
     }
 
     // Add a CSS align class to each field if one was set.
@@ -637,19 +641,18 @@ function template_preprocess_views_view_table(&$vars) {
     // Render each field into its appropriate column.
     foreach ($result as $num => $row) {
       // Add field classes.
-      $vars['field_classes'][$field][$num] = array();
+      $vars['rows'][$num]['columns'][$column]['attributes'] = array();
       if ($fields[$field]->options['element_default_classes']) {
-        $vars['field_classes'][$field][$num]['class'][] = 'views-field';
-        $vars['field_classes'][$field][$num]['class'][] = 'views-field-' . $vars['fields'][$field];
+        $vars['rows'][$num]['columns'][$column]['attributes']['class'][] = 'views-field';
+        $vars['rows'][$num]['columns'][$column]['attributes']['class'][] = 'views-field-' . $vars['fields'][$field];
       }
-      $vars['field_classes'][$field][$num] = new Attribute($vars['field_classes'][$field][$num]);
 
       if ($classes = $fields[$field]->element_classes($num)) {
-        $vars['field_classes'][$field][$num]['class'][] = $classes;
+        $vars['rows'][$num]['columns'][$column]['attributes']['class'][] = $classes;
       }
       // Add responsive header classes.
       if (!empty($options['info'][$field]['responsive'])) {
-        $vars['field_classes'][$field][$num]['class'][] = $options['info'][$field]['responsive'];
+        $vars['rows'][$num]['columns'][$column]['attributes']['class'][] = $options['info'][$field]['responsive'];
       }
 
       if (!empty($fields[$field]) && empty($fields[$field]->options['exclude'])) {
@@ -660,21 +663,22 @@ function template_preprocess_views_view_table(&$vars) {
         }
 
         // Don't bother with separators and stuff if the field does not show up.
-        if (empty($field_output) && !empty($vars['rows'][$num][$column])) {
+        if (empty($field_output) && !empty($vars['rows'][$num]['columns'][$column]['content'])) {
           continue;
         }
 
         // Place the field into the column, along with an optional separator.
-        if (!empty($vars['rows'][$num][$column])) {
+        if (!empty($vars['rows'][$num][$column]['content'])) {
           if (!empty($options['info'][$column]['separator'])) {
-            $vars['rows'][$num][$column] .= filter_xss_admin($options['info'][$column]['separator']);
+            $vars['rows'][$num]['columns'][$column]['content'] .= filter_xss_admin($options['info'][$column]['separator']);
           }
         }
         else {
-          $vars['rows'][$num][$column] = '';
+          $vars['rows'][$num]['columns'][$column]['content'] = '';
         }
-        $vars['rows'][$num][$column] .= $field_output;
+        $vars['rows'][$num]['columns'][$column]['content'] .= $field_output;
       }
+      $vars['rows'][$num]['columns'][$column]['attributes'] = new Attribute($vars['rows'][$num]['columns'][$column]['attributes']);
     }
 
     // Remove columns if the option is hide empty column is checked and the
@@ -694,37 +698,36 @@ function template_preprocess_views_view_table(&$vars) {
   }
 
   // Hide table header if all labels are empty.
-  if (!array_filter($vars['header'])) {
+  if (!$has_header_labels) {
     $vars['header'] = array();
   }
 
   $count = 0;
-  $vars['row_classes'] = array();
   foreach ($vars['rows'] as $num => $row) {
-    $vars['row_classes'][$num] = array();
+    $vars['rows'][$num]['attributes'] = array();
     if ($row_class_special) {
-      $vars['row_classes'][$num]['class'][] = ($count++ % 2 == 0) ? 'odd' : 'even';
+      $vars['rows'][$num]['attributes']['class'][] = ($count++ % 2 == 0) ? 'odd' : 'even';
       if ($num === 0) {
-        $vars['row_classes'][$num]['class'][] = 'views-row-first';
+        $vars['rows'][$num]['attributes']['class'][] = 'views-row-first';
       }
       elseif ($num === (count($vars['rows']) - 1)) {
-        $vars['row_classes'][$num]['class'][] = 'views-row-last';
+        $vars['rows'][$num]['attributes']['class'][] = 'views-row-last';
       }
     }
     if ($row_class = $handler->getRowClass($num)) {
-      $vars['row_classes'][$num]['class'][] = $row_class;
+      $vars['rows'][$num]['attributes']['class'][] = $row_class;
     }
-    $vars['row_classes'][$num] = new Attribute($vars['row_classes'][$num]);
+    $vars['rows'][$num]['attributes'] = new Attribute($vars['rows'][$num]['attributes']);
   }
 
   $vars['attributes']['class'][] = 'views-table';
   $vars['attributes']['class'][] = 'views-view-table';
   if (empty($vars['rows']) && !empty($options['empty_table'])) {
     $build = $view->display_handler->renderArea('empty');
-    $vars['rows'][0][0] = drupal_render($build);
-    $vars['row_classes'][0] = new Attribute();
+    $vars['rows'][0]['columns'][0]['content'] = drupal_render($build);
+    $vars['rows'][0]['attributes'] = new Attribute();
     // Calculate the amounts of rows with output.
-    $vars['field_classes'][0][0] = new Attribute(array(
+    $vars['rows'][0]['columns'][0]['attributes'] = new Attribute(array(
       'colspan' => count($vars['header']),
       'class' => 'views-empty',
     ));
@@ -829,42 +832,45 @@ function template_preprocess_views_view_grid(&$vars) {
     }
   }
 
-  // Apply the row classes.
+  // Apply the row and column attributes.
   foreach ($rows as $row_number => $row) {
-    $row_classes = array();
+    $vars['rows'][$row_number] = array();
+    $vars['rows'][$row_number]['columns'] = array();
+    $vars['rows'][$row_number]['attributes'] = array();
     if ($default_row_class) {
-      $row_classes['class'][] = 'row-' . ($row_number + 1);
+      $vars['rows'][$row_number]['attributes']['class'][] = 'row-' . ($row_number + 1);
     }
     if ($row_class_special) {
       if ($row_number == 0) {
-        $row_classes['class'][] = 'row-first';
+        $vars['rows'][$row_number]['attributes']['class'][] = 'row-first';
       }
       if (count($rows) == ($row_number + 1)) {
-        $row_classes['class'][] = 'row-last';
+        $vars['rows'][$row_number]['attributes']['class'][] = 'row-last';
       }
     }
-    $row_classes = new Attribute($row_classes);
 
-    foreach ($rows[$row_number] as $column_number => $item) {
-      $vars['column_classes'][$row_number][$column_number] = array();
+    foreach ($row as $column_number => $item) {
+      $vars['rows'][$row_number]['columns'][$column_number] = array();
+      $vars['rows'][$row_number]['columns'][$column_number]['content'] = $item;
+      $vars['rows'][$row_number]['columns'][$column_number]['attributes'] = array();
       if ($default_row_class) {
-        $vars['column_classes'][$row_number][$column_number]['class'][] = 'col-' . ($column_number + 1);
+        $vars['rows'][$row_number]['columns'][$column_number]['attributes']['class'][] = 'col-' . ($column_number + 1);
       }
       if ($row_class_special) {
         if ($column_number == 0) {
-          $vars['column_classes'][$row_number][$column_number]['class'][] = 'col-first';
+          $vars['rows'][$row_number]['columns'][$column_number]['attributes']['class'][] = 'col-first';
         }
         elseif (count($rows[$row_number]) == ($column_number + 1)) {
-          $vars['column_classes'][$row_number][$column_number]['class'][] = 'col-last';
+          $vars['rows'][$row_number]['columns'][$column_number]['attributes']['class'][] = 'col-last';
         }
       }
       if (isset($row_indexes[$row_number][$column_number]) && $column_class = $view->style_plugin->getRowClass($row_indexes[$row_number][$column_number])) {
-        $vars['column_classes'][$row_number][$column_number]['class'][] = $column_class;
+        $vars['rows'][$row_number]['columns'][$column_number]['attributes']['class'][] = $column_class;
       }
-      $vars['column_classes'][$row_number][$column_number] = new Attribute($vars['column_classes'][$row_number][$column_number]);
+      $vars['rows'][$row_number]['columns'][$column_number]['attributes'] = new Attribute($vars['rows'][$row_number]['columns'][$column_number]['attributes']);
     }
   }
-  $vars['rows'] = $rows;
+
   if (!empty($handler->options['summary'])) {
     $vars['attributes']['summary'] = $handler->options['summary'];
   }
@@ -886,34 +892,33 @@ function template_preprocess_views_view_unformatted(&$vars) {
   $style = $view->style_plugin;
   $options = $style->options;
 
-  $vars['row_classes'] = array();
-  $vars['classes'] = array();
   $default_row_class = isset($options['default_row_class']) ? $options['default_row_class'] : FALSE;
   $row_class_special = isset($options['row_class_special']) ? $options['row_class_special'] : FALSE;
   // Set up striping values.
   $count = 0;
   $max = count($rows);
   foreach ($rows as $id => $row) {
-    $vars['row_classes'][$id] = array();
+    $vars['rows'][$id] = array();
+    $vars['rows'][$id]['content'] = $row;
+    $vars['rows'][$id]['attributes'] = array();
     $count++;
     if ($default_row_class) {
-      $vars['row_classes'][$id]['class'][] = 'views-row';
-      $vars['row_classes'][$id]['class'][] = 'views-row-' . $count;
+      $vars['rows'][$id]['attributes']['class'][] = 'views-row';
+      $vars['rows'][$id]['attributes']['class'][] = 'views-row-' . $count;
     }
     if ($row_class_special) {
-      $vars['row_classes'][$id]['class'][] = 'views-row-' . ($count % 2 ? 'odd' : 'even');
+      $vars['rows'][$id]['attributes']['class'][] = 'views-row-' . ($count % 2 ? 'odd' : 'even');
       if ($count == 1) {
-        $vars['row_classes'][$id]['class'][] = 'views-row-first';
+        $vars['rows'][$id]['attributes']['class'][] = 'views-row-first';
       }
       if ($count == $max) {
-        $vars['row_classes'][$id]['class'][] = 'views-row-last';
+        $vars['rows'][$id]['attributes']['class'][] = 'views-row-last';
       }
     }
-
     if ($row_class = $view->style_plugin->getRowClass($id)) {
-      $vars['row_classes'][$id]['class'][] = $row_class;
+      $vars['rows'][$id]['attributes']['class'][] = $row_class;
     }
-    $vars['row_classes'][$id] = new Attribute($vars['row_classes'][$id]);
+    $vars['rows'][$id]['attributes'] = new Attribute($vars['rows'][$id]['attributes']);
   }
 }
 
@@ -939,7 +944,7 @@ function template_preprocess_views_view_list(&$variables) {
 
   // Initialize a new attribute class for $wrapper_class.
   if ($wrapper_class) {
-    $variables['wrapper_attributes'] = new Attribute(array('class' => $wrapper_class));
+    $variables['attributes'] = new Attribute(array('class' => $wrapper_class));
   }
 
   // Initialize a new attribute class for $class.
