diff --git a/sites/all/modules/views/README.txt b/sites/all/modules/views/README.txt
index 21278fc22c6c568aa33d9ba454ad3d5319a748fd..8097eb453ce8a5ea337ae7369f1a61f8a3e75fb6 100644
--- a/sites/all/modules/views/README.txt
+++ b/sites/all/modules/views/README.txt
@@ -15,7 +15,5 @@ Navigate to administer >> build >> modules. Enable Views and Views UI.
 If you're new to Views, try the Simple Views module which can create some
 often used Views for you, this might save you some time.
 
-Recommended modules for use with Views:
-  Voting API
-  Views Bonus Pack
-  Views Bulk Operations
+Here you can find many modules extending the functionality of Views:
+  http://drupal.org/taxonomy/term/89
diff --git a/sites/all/modules/views/docs/views.api.php b/sites/all/modules/views/docs/views.api.php
index 5dae945b1c158e1107e4fed2085bb5dfec230e08..d99ecc4a5aa0ab305ce9a92d514851a86c2b7ad2 100644
--- a/sites/all/modules/views/docs/views.api.php
+++ b/sites/all/modules/views/docs/views.api.php
@@ -277,7 +277,7 @@ function hook_views_plugins_alter(&$plugins) {
  */
 function hook_views_api() {
   return array(
-    'api' => 2,
+    'api' => 3,
     'path' => drupal_get_path('module', 'example') . '/includes/views',
     'template path' => drupal_get_path('module', 'example') . 'themes',
   );
@@ -742,6 +742,20 @@ function hook_views_ui_display_top_links_alter(&$links, $view, $display_id) {
   // example code here
 }
 
+/**
+ * This hook allows to alter the commands which are used on a views ajax
+ * request.
+ *
+ * @param $commands
+ *   An array of ajax commands
+ * @param $view view
+ *   The view which is requested.
+ */
+function hook_views_ajax_data_alter(&$commands, $view) {
+}
+
+
+
 /**
  * @}
  */
diff --git a/sites/all/modules/views/drush/views.drush.inc b/sites/all/modules/views/drush/views.drush.inc
index 569cf6dcb278c3bd629cf7429d29c9fc051b9f76..4116d30abb4f87063aa52eea54515e1622e450d8 100644
--- a/sites/all/modules/views/drush/views.drush.inc
+++ b/sites/all/modules/views/drush/views.drush.inc
@@ -243,6 +243,7 @@ function views_development_settings() {
   variable_set('views_show_additional_queries', TRUE);
   variable_set('views_devel_output', TRUE);
   variable_set('views_devel_region', 'message');
+  variable_set('views_ui_display_embed', TRUE);
   $message = dt("Setup the new views settings.");
   drush_log($message, 'success');
 }
diff --git a/sites/all/modules/views/handlers/views_handler_area.inc b/sites/all/modules/views/handlers/views_handler_area.inc
index d0a9e0c848531ee2e75533220916ea60e6ecf19d..295e14db6966038ac6d139c077f489df7340401e 100644
--- a/sites/all/modules/views/handlers/views_handler_area.inc
+++ b/sites/all/modules/views/handlers/views_handler_area.inc
@@ -84,6 +84,8 @@ class views_handler_area extends views_handler {
 
 /**
  * A special handler to take the place of missing or broken handlers.
+ *
+ * @ingroup views_area_handlers
  */
 class views_handler_area_broken extends views_handler_area {
   function ui_name($short = FALSE) {
diff --git a/sites/all/modules/views/handlers/views_handler_area_result.inc b/sites/all/modules/views/handlers/views_handler_area_result.inc
new file mode 100644
index 0000000000000000000000000000000000000000..a52aa8c4d62f39eadfd9b38c1ff812afec47ae5c
--- /dev/null
+++ b/sites/all/modules/views/handlers/views_handler_area_result.inc
@@ -0,0 +1,93 @@
+<?php
+
+/**
+ * @file
+ * Contains views_handler_area_result handler.
+ */
+
+/**
+ * Views area handler to display some configurable result summary.
+ *
+ * @ingroup views_area_handlers Views' area handlers
+ */
+class views_handler_area_result extends views_handler_area {
+
+  function option_definition() {
+    $options = parent::option_definition();
+
+    $options['content'] = array(
+      'default' => 'Displaying @start - @end of @total',
+      'translatable' => TRUE,
+    );
+
+    return $options;
+  }
+
+  function options_form(&$form, &$form_state) {
+    parent::options_form($form, $form_state);
+    $variables = array(
+      'items' => array(
+        '@start -- the initial record number in the set',
+        '@end -- the last record number in the set',
+        '@total -- the total records in the set',
+        '@name -- the human-readable name of the view',
+        '@per_page -- the number of items per page',
+        '@current_page -- the current page number',
+        '@page_count -- the total page count',
+      ),
+    );
+    $list = theme('item_list', $variables);
+    $form['content'] = array(
+      '#title' => t('Display'),
+      '#type' => 'textarea',
+      '#rows' => 3,
+      '#default_value' => $this->options['content'],
+      '#description' => t('You may use HTML code in this field. The following tokens are supported:') . $list,
+    );
+  }
+
+
+  /**
+   * Find out the information to render.
+   */
+  function render($empty = FALSE) {
+    // Must have options and does not work on summaries.
+    if (!isset($this->options['content']) || $this->view->plugin_name == 'default_summary') {
+      return;
+    }
+    $output = '';
+    $format = $this->options['content'];
+    // Calculate the page totals.
+    $current_page = (int) $this->view->get_current_page() + 1;
+    $per_page = (int) $this->view->get_items_per_page();
+    $count = count($this->view->result);
+    $total = $this->view->total_rows;
+    $name = check_plain($this->view->human_name);
+    if ($per_page === 0) {
+      $page_count = 1;
+      $start = 1;
+      $end = $total;
+    }
+    else {
+      $page_count = (int) ceil($total / $per_page);
+      $total_count = $current_page * $per_page;
+      if ($total_count > $total) {
+        $total_count = $total;
+      }
+      $start = ($current_page - 1) * $per_page + 1;
+      $end = $total_count;
+    }
+    // Get the search information.
+    $items = array('start', 'end', 'total', 'name', 'per_page', 'current_page', 'page_count');
+    $replacements = array();
+    foreach ($items as $item) {
+      $replacements["@$item"] = ${$item};
+    }
+    // Send the output.
+    if (!empty($total)) {
+      $output .= filter_xss_admin(str_replace(array_keys($replacements), array_values($replacements), $format));
+    }
+    return $output;
+  }
+}
+
diff --git a/sites/all/modules/views/handlers/views_handler_area_text.inc b/sites/all/modules/views/handlers/views_handler_area_text.inc
index 425d0a901d2038edaf063e010eac219b9b0b1d16..2b9adb36693a81ba32ba8aefb71bf25acd03ed64 100644
--- a/sites/all/modules/views/handlers/views_handler_area_text.inc
+++ b/sites/all/modules/views/handlers/views_handler_area_text.inc
@@ -1,14 +1,14 @@
 <?php
 
 /**
-* @file
-* Views area text handler.
-*/
+ * @file
+ * Contains views_handler_area_text handler.
+ */
 
 /**
+ * Views area text handler.
  * @ingroup views_area_handlers Views' area handlers
 */
-
 class views_handler_area_text extends views_handler_area {
 
   function option_definition() {
diff --git a/sites/all/modules/views/handlers/views_handler_area_view.inc b/sites/all/modules/views/handlers/views_handler_area_view.inc
index 7e79ee081b0dbf7efa1f4bda8850f549c906318a..b8fad3f5e8a12c5ca8a58263882f70b04fecb11e 100644
--- a/sites/all/modules/views/handlers/views_handler_area_view.inc
+++ b/sites/all/modules/views/handlers/views_handler_area_view.inc
@@ -2,7 +2,12 @@
 
 /**
  * @file
+ * Contains views_handler_area_view handler.
+ */
+/**
  * Views area handlers. Insert a view inside of an area.
+ *
+ * @ingroup views_area_handlers
  */
 class views_handler_area_view extends views_handler_area {
 
diff --git a/sites/all/modules/views/handlers/views_handler_argument.inc b/sites/all/modules/views/handlers/views_handler_argument.inc
index e58954298c25b962180f71126cd3f5e8b8163627..72c07e222eb950f83a2da2b949b4d3c38bf69297 100644
--- a/sites/all/modules/views/handlers/views_handler_argument.inc
+++ b/sites/all/modules/views/handlers/views_handler_argument.inc
@@ -30,8 +30,23 @@
  * @ingroup views_argument_handlers
  */
 class views_handler_argument extends views_handler {
-  var $name_field = NULL;
   var $validator = NULL;
+  var $argument = NULL;
+  var $value = NULL;
+
+  /**
+   * The table to use for the name, should it not be in the same table as the argument.
+   * @var string
+   */
+  var $name_table;
+
+  /**
+   * The field to use for the name to use in the summary, which is
+   * the displayed output. For example, for the node: nid argument,
+   * the argument itself is the nid, but node.title is displayed.
+   * @var string
+   */
+  var $name_field;
 
   /**
    * Constructor
@@ -446,6 +461,12 @@ class views_handler_argument extends views_handler {
       // Copy the now submitted options to their final resting place so they get saved.
       $form_state['values']['options']['validate_options'] = $options;
     }
+
+    // Clear out the content of title if it's not enabled.
+    $options =& $form_state['values']['options'];
+    if (empty($options['title_enable'])) {
+      $options['title'] = '';
+    }
   }
 
   /**
@@ -467,6 +488,7 @@ class views_handler_argument extends views_handler {
         'form method' => 'default_argument_form',
         'has default argument' => TRUE,
         'default only' => TRUE, // this can only be used for missing argument, not validation failure
+        'breadcrumb' => TRUE, // generate a breadcrumb to here
       ),
       'not found' => array(
         'title' => t('Hide view'),
@@ -568,7 +590,7 @@ class views_handler_argument extends views_handler {
     $summary_plugins = array();
     $format_options = array();
     foreach ($style_plugins as $key => $plugin) {
-      if ($plugin['type'] == 'summary') {
+      if (isset($plugin['type']) && $plugin['type'] == 'summary') {
         $summary_plugins[$key] = $plugin;
         $format_options[$key] = $plugin['title'];
       }
diff --git a/sites/all/modules/views/handlers/views_handler_argument_group_by_numeric.inc b/sites/all/modules/views/handlers/views_handler_argument_group_by_numeric.inc
index d44af12454748fee7874a9af027e837e46fdd8a8..2ecccaf97baa7c1b88fbec6b989f4ef77cdd891c 100644
--- a/sites/all/modules/views/handlers/views_handler_argument_group_by_numeric.inc
+++ b/sites/all/modules/views/handlers/views_handler_argument_group_by_numeric.inc
@@ -2,13 +2,16 @@
 
 /**
  * Simple handler for arguments using group by.
+ *
+ * @ingroup views_argument_handlers
  */
 class views_handler_argument_group_by_numeric extends views_handler_argument  {
   function query($group_by = FALSE) {
     $this->ensure_my_table();
     $field = $this->get_field();
+    $placeholder = $this->placeholder();
 
-    $this->query->add_having(0, $field, $this->argument);
+    $this->query->add_having_expression(0, "$field = $placeholder", array($placeholder => $this->argument));
   }
 
   function ui_name($short = FALSE) {
diff --git a/sites/all/modules/views/handlers/views_handler_argument_null.inc b/sites/all/modules/views/handlers/views_handler_argument_null.inc
index 5914031130c624024761051d769010568e56a7e7..e4804dc08a3b9b76f8c5f66a42fd0e02d827d6e9 100644
--- a/sites/all/modules/views/handlers/views_handler_argument_null.inc
+++ b/sites/all/modules/views/handlers/views_handler_argument_null.inc
@@ -1,6 +1,8 @@
 <?php
 /**
  * Argument handler that ignores the argument.
+ *
+ * @ingroup views_argument_handlers
  */
 class views_handler_argument_null extends views_handler_argument {
   function option_definition() {
diff --git a/sites/all/modules/views/handlers/views_handler_argument_numeric.inc b/sites/all/modules/views/handlers/views_handler_argument_numeric.inc
index d8f813c780cb56151e3f013dbe78a10faf3b7e91..5b91232f3890bfa4544e4e6952cee6dfd490379d 100644
--- a/sites/all/modules/views/handlers/views_handler_argument_numeric.inc
+++ b/sites/all/modules/views/handlers/views_handler_argument_numeric.inc
@@ -11,6 +11,18 @@
  * @ingroup views_argument_handlers
  */
 class views_handler_argument_numeric extends views_handler_argument {
+  /**
+   * The operator used for the query: or|and.
+   * @var string
+   */
+  var $operator;
+
+  /**
+   * The actual value which is used for querying.
+   * @var array
+   */
+  var $value;
+
   function option_definition() {
     $options = parent::option_definition();
 
@@ -67,6 +79,8 @@ class views_handler_argument_numeric extends views_handler_argument {
 
   /**
    * Override for specific title lookups.
+   * @return array
+   *    Returns all titles, if it's just one title it's an array with one entry.
    */
   function title_query() {
     return $this->value;
diff --git a/sites/all/modules/views/handlers/views_handler_field.inc b/sites/all/modules/views/handlers/views_handler_field.inc
index 7fa9d3ecfe19f607d29e94b6f5d273cf4b2689eb..ff2c32d01b4767fc681f5b9d6f4d66894fd0f063 100644
--- a/sites/all/modules/views/handlers/views_handler_field.inc
+++ b/sites/all/modules/views/handlers/views_handler_field.inc
@@ -6,6 +6,23 @@
  *
  */
 
+/**
+ * Indicator of the render_text() mehtod for rendering a single item.
+ * (If no render_item() is present).
+ */
+define('VIEWS_HANDLER_RENDER_TEXT_PHASE_SINGLE_ITEM', 0);
+
+/**
+ * Indicator of the render_text() method for rendering the whole element.
+ * (if no render_item() method is available).
+ */
+define('VIEWS_HANDLER_RENDER_TEXT_PHASE_COMPLETELY', 1);
+
+/**
+ * Indicator of the render_text() method for rendering the empty text.
+ */
+define('VIEWS_HANDLER_RENDER_TEXT_PHASE_EMPTY', 2);
+
 /**
  * Base field handler that has no options and renders an unformatted field.
  *
@@ -331,6 +348,9 @@ class views_handler_field extends views_handler {
   /**
    * Get the value that's supposed to be rendered.
    *
+   * This api exists so that other modules can easy set the values of the field
+   * without having the need to change the render method as well.
+   *
    * @param $values
    *   An object containing all retrieved values.
    * @param $field
@@ -369,6 +389,9 @@ class views_handler_field extends views_handler {
         'max_length' => array('default' => ''),
         'word_boundary' => array('default' => TRUE),
         'ellipsis' => array('default' => TRUE),
+        'more_link' => array('default' => FALSE),
+        'more_link_text' => array('default' => '', 'translatable' => TRUE),
+        'more_link_path' => array('default' => ''),
         'strip_tags' => array('default' => FALSE),
         'trim' => array('default' => FALSE),
         'preserve_tags' => array('default' => ''),
@@ -788,6 +811,7 @@ If you would like to have the characters %5B and %5D please use the html entity
         '#dependency' => array(
           'edit-options-alter-make-link' => array(1),
           'edit-options-alter-alter-text' => array(1),
+          'edit-options-alter-more-link' => array(1),
         ),
       );
 
@@ -828,6 +852,39 @@ If you would like to have the characters %5B and %5D please use the html entity
         ),
       );
 
+      $form['alter']['more_link'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Add a read-more link if output is trimmed.'),
+        '#description' => t('If checked, a read-more link will be added at the end of the trimmed output'),
+        '#default_value' => $this->options['alter']['more_link'],
+        '#dependency' => array(
+          'edit-options-alter-trim' => array(1),
+        ),
+      );
+
+      $form['alter']['more_link_text'] = array(
+        '#type' => 'textfield',
+        '#title' => t('More link text'),
+        '#default_value' => $this->options['alter']['more_link_text'],
+        '#description' => t('The text which will be displayed on the more link. You may enter data from this view as per the "Replacement patterns" above.'),
+        '#dependency_count' => 2,
+        '#dependency' => array(
+          'edit-options-alter-trim' => array(1),
+          'edit-options-alter-more-link' => array(1),
+        ),
+      );
+      $form['alter']['more_link_path'] = array(
+        '#type' => 'textfield',
+        '#title' => t('More link path'),
+        '#default_value' => $this->options['alter']['more_link_path'],
+        '#description' => t('The path which is used for the more link. You may enter data from this view as per the "Replacement patterns" above.'),
+        '#dependency_count' => 2,
+        '#dependency' => array(
+          'edit-options-alter-trim' => array(1),
+          'edit-options-alter-more-link' => array(1),
+        ),
+      );
+
       $form['alter']['html'] = array(
         '#type' => 'checkbox',
         '#title' => t('Field can contain HTML'),
@@ -844,12 +901,7 @@ If you would like to have the characters %5B and %5D please use the html entity
         '#description' => t('If checked, all HTML tags will be stripped.'),
         '#default_value' => $this->options['alter']['strip_tags'],
       );
-      $form['alter']['trim_whitespace'] = array(
-        '#type' => 'checkbox',
-        '#title' => t('Remove whitespace'),
-        '#description' => t('If checked, all whitespaces at the beginning and the end of the output will be removed.'),
-        '#default_value' => $this->options['alter']['trim_whitespace'],
-      );
+
       $form['alter']['preserve_tags'] = array(
         '#type' => 'textfield',
         '#title' => t('Preserve certain tags'),
@@ -860,6 +912,13 @@ If you would like to have the characters %5B and %5D please use the html entity
         ),
       );
 
+      $form['alter']['trim_whitespace'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Remove whitespace'),
+        '#description' => t('If checked, all whitespaces at the beginning and the end of the output will be removed.'),
+        '#default_value' => $this->options['alter']['trim_whitespace'],
+      );
+
       $form['alter']['nl2br'] = array(
         '#type' => 'checkbox',
         '#title' => t('Convert newlines to HTML &lt;br&gt; tags'),
@@ -970,13 +1029,15 @@ If you would like to have the characters %5B and %5D please use the html entity
           $this->original_value = $this->last_render;
 
           $alter = $item + $this->options['alter'];
+          $alter['phase'] = VIEWS_HANDLER_RENDER_TEXT_PHASE_SINGLE_ITEM;
           $items[] = $this->render_text($alter);
         }
 
         $value = $this->render_items($items);
       }
       else {
-        $value = $this->render_text($this->options['alter']);
+        $alter = array('phase' => VIEWS_HANDLER_RENDER_TEXT_PHASE_COMPLETELY) + $this->options['alter'];
+        $value = $this->render_text($alter);
       }
 
       if (is_array($value)) {
@@ -992,6 +1053,7 @@ If you would like to have the characters %5B and %5D please use the html entity
         $alter = $this->options['alter'];
         $alter['alter_text'] = 1;
         $alter['text'] = $this->options['empty'];
+        $alter['phase'] = VIEWS_HANDLER_RENDER_TEXT_PHASE_EMPTY;
         $this->last_render = $this->render_text($alter);
       }
     }
@@ -1007,30 +1069,67 @@ If you would like to have the characters %5B and %5D please use the html entity
    */
   function render_text($alter) {
     $value = $this->last_render;
-    if (!empty($this->options['alter']['trim_whitespace'])) {
-      $value = trim($value);
-    }
 
     if (!empty($alter['alter_text']) && $alter['text'] !== '') {
       $tokens = $this->get_render_tokens($alter);
       $value = $this->render_altered($alter, $tokens);
     }
 
-    if ((($this->options['hide_empty'] && empty($value)) || ($this->options['hide_alter_empty'] && empty($this->original_value))) && ($value !== 0 || $this->options['empty_zero'])) {
+    if (!empty($this->options['alter']['trim_whitespace'])) {
+      $value = trim($value);
+    }
+
+    // Check if there should be no further rewrite for empty values.
+    $no_rewrite_for_empty = $this->options['hide_alter_empty'] && empty($this->original_value);
+
+    // Check whether the value is empty and return nothing, so the field isn't rendered.
+    // First check whether the field should be hidden if the value(hide_alter_empty = TRUE) /the rewrite is empty (hide_alter_empty = FALSE).
+    // For numeric values you can specify whether "0"/0 should be empty.
+    if ((($this->options['hide_empty'] && empty($value))
+        || ($alter['phase'] != VIEWS_HANDLER_RENDER_TEXT_PHASE_EMPTY && $no_rewrite_for_empty))
+      && (($value !== 0 && $value !== '0')
+        || $this->options['empty_zero'])) {
       return '';
     }
+    // Only in empty phase.
+    if ($alter['phase'] == VIEWS_HANDLER_RENDER_TEXT_PHASE_EMPTY && $no_rewrite_for_empty) {
+      // If we got here then $alter contains the value of "No results text"
+      // and so there is nothing left to do.
+      return $value;
+    }
 
     if (!empty($alter['strip_tags'])) {
       $value = strip_tags($value, $alter['preserve_tags']);
     }
 
+    $suffix = '';
     if (!empty($alter['trim']) && !empty($alter['max_length'])) {
+      $length = strlen($value);
       $value = $this->render_trim_text($alter, $value);
+      if ($this->options['alter']['more_link'] && strlen($value) < $length) {
+        $tokens = $this->get_render_tokens($alter);
+        $more_link_text = $this->options['alter']['more_link_text'] ? $this->options['alter']['more_link_text'] : t('more');
+        $more_link_text = strtr(filter_xss_admin($more_link_text), $tokens);
+        $more_link_path = $this->options['alter']['more_link_path'];
+        $more_link_path = strip_tags(decode_entities(strtr($more_link_path, $tokens)));
+
+        // Take sure that paths which was runned through url() does work as well.
+        $base_path = base_path();
+        // Checks whether the path starts with the base_path.
+        if (strpos($more_link_path, $base_path) === 0) {
+          $more_link_path = drupal_substr($more_link_path, drupal_strlen($base_path));
+        }
+
+        $more_link = l($more_link_text, $more_link_path);
+
+        $suffix .= " " . $more_link;
+      }
     }
 
     if (!empty($alter['nl2br'])) {
       $value = nl2br($value);
     }
+    $this->last_render_text = $value;
 
     if (!empty($alter['make_link']) && !empty($alter['path'])) {
       if (!isset($tokens)) {
@@ -1039,7 +1138,7 @@ If you would like to have the characters %5B and %5D please use the html entity
       $value = $this->render_as_link($alter, $value, $tokens);
     }
 
-    return $value;
+    return $value . $suffix;
   }
 
   /**
@@ -1324,6 +1423,8 @@ If you would like to have the characters %5B and %5D please use the html entity
 
 /**
  * A special handler to take the place of missing or broken handlers.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_broken extends views_handler_field {
   function ui_name($short = FALSE) {
@@ -1346,6 +1447,8 @@ class views_handler_field_broken extends views_handler_field {
 
 /**
  * Render a numeric value as a size.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_file_size extends views_handler_field {
   function option_definition() {
@@ -1386,7 +1489,9 @@ class views_handler_field_file_size extends views_handler_field {
 }
 
 /**
- * A handler to run a field through simple XSS filtering
+ * A handler to run a field through simple XSS filtering.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_xss extends views_handler_field {
   function render($values) {
diff --git a/sites/all/modules/views/handlers/views_handler_field_boolean.inc b/sites/all/modules/views/handlers/views_handler_field_boolean.inc
index 5b50af1af24ea7852a51d21db9819275e5554a18..c388d4f959a246854782eba9c35fe899565fd50a 100644
--- a/sites/all/modules/views/handlers/views_handler_field_boolean.inc
+++ b/sites/all/modules/views/handlers/views_handler_field_boolean.inc
@@ -33,6 +33,7 @@ class views_handler_field_boolean extends views_handler_field {
       'true-false' => array(t('True'), t('False')),
       'on-off' => array(t('On'), t('Off')),
       'enabled-disabled' => array(t('Enabled'), t('Disabled')),
+      'unicode-yes-no' => array('✔', '✖'),
     );
     $output_formats = isset($this->definition['output formats']) ? $this->definition['output formats'] : array();
     $this->formats = array_merge($default_formats, $output_formats);
diff --git a/sites/all/modules/views/handlers/views_handler_field_contextual_links.inc b/sites/all/modules/views/handlers/views_handler_field_contextual_links.inc
new file mode 100644
index 0000000000000000000000000000000000000000..a55ac583e0057c4d39c8497535c45faa7900b1ba
--- /dev/null
+++ b/sites/all/modules/views/handlers/views_handler_field_contextual_links.inc
@@ -0,0 +1,87 @@
+<?php
+
+class views_handler_field_contextual_links extends views_handler_field {
+  function option_definition() {
+    $options = parent::option_definition();
+
+    $options['fields'] = array('default' => array());
+    $options['destination'] = array('default' => 1);
+
+    return $options;
+  }
+
+  function options_form(&$form, &$form_state) {
+    $all_fields = $this->view->display_handler->get_field_labels();
+    // Offer to include only those fields that follow this one.
+    $field_options = array_slice($all_fields, 0, array_search($this->options['id'], array_keys($all_fields)));
+    $form['fields'] = array(
+      '#type' => 'checkboxes',
+      '#title' => t('Fields'),
+      '#description' => t('Fields to be included as contextual links.'),
+      '#options' => $field_options,
+      '#default_value' => $this->options['fields'],
+    );
+    $form['destination'] = array(
+      '#type' => 'select',
+      '#title' => t('Include destination'),
+      '#description' => t('Include a "destination" parameter in the link to return the user to the original view upon completing the contextual action.'),
+      '#options' => array(
+        '0' => t('No'),
+        '1' => t('Yes'),
+      ),
+      '#default_value' => $this->options['destination'],
+    );
+  }
+
+  function pre_render(&$values) {
+    // Add a row plugin css class for the contextual link.
+    $class = 'contextual-links-region';
+    if (!empty($this->view->style_plugin->options['row_class'])) {
+      $this->view->style_plugin->options['row_class'] .= " $class";
+    }
+    else {
+      $this->view->style_plugin->options['row_class'] = $class;
+    }
+  }
+
+  /**
+   * Render the contextual fields.
+   */
+  function render($values) {
+    $links = array();
+    foreach ($this->options['fields'] as $field) {
+      if (empty($this->view->field[$field]->last_render_text)) {
+        continue;
+      }
+      $title = $this->view->field[$field]->last_render_text;
+      $path = '';
+      if (!empty($this->view->field[$field]->options['alter']['path'])) {
+        $path = $this->view->field[$field]->options['alter']['path'];
+      }
+      if (!empty($title)) {
+        $links[$field] = array(
+          'href' => $path,
+          'title' => $title,
+        );
+        if (!empty($this->options['destination'])) {
+          $links[$field]['query'] = drupal_get_destination();
+        }
+      }
+    }
+    $build = array(
+      '#prefix' => '<div class="contextual-links-wrapper">',
+      '#suffix' => '</div>',
+      '#theme' => 'links__contextual',
+      '#links' => $links,
+      '#attributes' => array('class' => array('contextual-links')),
+      '#attached' => array(
+        'library' => array(array('contextual', 'contextual-links')),
+      ),
+      '#access' => user_access('access contextual links'),
+    );
+
+    return drupal_render($build);
+  }
+
+  function query() { }
+}
diff --git a/sites/all/modules/views/handlers/views_handler_field_counter.inc b/sites/all/modules/views/handlers/views_handler_field_counter.inc
index bd0db1d8aa18e471397ae4ca27ff65db821bdfa2..d4e52fc3cf76d8cc47ebf09eebe3eec899dbe8bb 100644
--- a/sites/all/modules/views/handlers/views_handler_field_counter.inc
+++ b/sites/all/modules/views/handlers/views_handler_field_counter.inc
@@ -1,5 +1,10 @@
 <?php
 
+/**
+ * Field handler to show a counter of the current row.
+ *
+ * @ingroup views_field_handlers
+ */
 class views_handler_field_counter extends views_handler_field {
   function option_definition() {
     $options = parent::option_definition();
diff --git a/sites/all/modules/views/handlers/views_handler_field_entity.inc b/sites/all/modules/views/handlers/views_handler_field_entity.inc
index 259a45fc3f9dfa283d9a72bd65ffa6c0f11a4056..0e13b2325d158a4b773f0de365a558fa839a3431 100644
--- a/sites/all/modules/views/handlers/views_handler_field_entity.inc
+++ b/sites/all/modules/views/handlers/views_handler_field_entity.inc
@@ -62,6 +62,8 @@ class views_handler_field_entity extends views_handler_field {
     if (method_exists($this->query, 'add_field')) {
       $this->field_alias = $this->query->add_field($this->table_alias, $this->base_field, '');
     }
+
+    $this->add_additional_fields();
   }
 
   /**
@@ -74,9 +76,23 @@ class views_handler_field_entity extends views_handler_field {
   }
 
   /**
-   * Overridden to return the entity object.
+   * Overridden to return the entity object, or a certain property of the entity.
    */
   function get_value($values, $field = NULL) {
-    return isset($this->entities[$this->view->row_index]) ? $this->entities[$this->view->row_index] : FALSE;
+    if (isset($this->entities[$this->view->row_index])) {
+      $entity = $this->entities[$this->view->row_index];
+      // Support to get a certain part of the entity.
+      if (isset($field) && isset($entity->{$field})) {
+        return $entity->{$field};
+      }
+      // Support to get a part of the values as the normal get_value.
+      elseif (isset($field) && isset($values->{$this->aliases[$field]})) {
+        return $values->{$this->aliases[$field]};
+      }
+      else {
+        return $entity;
+      }
+    }
+    return FALSE;
   }
 }
diff --git a/sites/all/modules/views/handlers/views_handler_field_machine_name.inc b/sites/all/modules/views/handlers/views_handler_field_machine_name.inc
new file mode 100644
index 0000000000000000000000000000000000000000..96a0cf7d85ea713bff7255755dc60fd7ffddeab0
--- /dev/null
+++ b/sites/all/modules/views/handlers/views_handler_field_machine_name.inc
@@ -0,0 +1,68 @@
+<?php
+
+/**
+ * Field handler whichs allows to show machine name content as human name.
+ * @ingroup views_field_handlers
+ *
+ * Definition items:
+ * - options callback: The function to call in order to generate the value options. If omitted, the options 'Yes' and 'No' will be used.
+ * - options arguments: An array of arguments to pass to the options callback.
+ */
+class views_handler_field_machine_name extends views_handler_field {
+  /**
+   * @var array Stores the available options.
+   */
+  var $value_options;
+
+  function get_value_options() {
+    if (isset($this->value_options)) {
+      return;
+    }
+
+    if (isset($this->definition['options callback']) && is_callable($this->definition['options callback'])) {
+      if (isset($this->definition['options arguments']) && is_array($this->definition['options arguments'])) {
+        $this->value_options = call_user_func_array($this->definition['options callback'], $this->definition['options arguments']);
+      }
+      else {
+        $this->value_options = call_user_func($this->definition['options callback']);
+      }
+    }
+    else {
+      $this->value_options = array();
+    }
+  }
+
+  function option_definition() {
+    $options = parent::option_definition();
+    $options['machine_name'] = array('default' => FALSE);
+
+    return $options;
+  }
+
+  function options_form(&$form, &$form_state) {
+    parent::options_form($form, $form_state);
+
+    $form['machine_name'] = array(
+      '#title' => t('Output machine name'),
+      '#description' => t('Display field as machine name.'),
+      '#type' => 'checkbox',
+      '#default_value' => !empty($this->options['machine_name']),
+    );
+  }
+
+  function pre_render(&$values) {
+    $this->get_value_options();
+  }
+
+  function render($values) {
+    $value = $values->{$this->field_alias};
+    if (!empty($this->options['machine_name']) || !isset($this->value_options[$value])) {
+      $result = check_plain($value);
+    }
+    else {
+      $result = $this->value_options[$value];
+    }
+
+    return $result;
+  }
+}
diff --git a/sites/all/modules/views/handlers/views_handler_field_prerender_list.inc b/sites/all/modules/views/handlers/views_handler_field_prerender_list.inc
index 98ac30ffae36045bbbd06d41d93b303916132009..16b30b6ac66a64aac36e23968069d620e78551ad 100644
--- a/sites/all/modules/views/handlers/views_handler_field_prerender_list.inc
+++ b/sites/all/modules/views/handlers/views_handler_field_prerender_list.inc
@@ -11,6 +11,16 @@
  * @ingroup views_field_handlers
  */
 class views_handler_field_prerender_list extends views_handler_field {
+  /**
+   * Stores all items which are used to render the items.
+   * It should be keyed first by the id of the base table, for example nid.
+   * The second key is the id of the thing which is displayed multiple times
+   * per row, for example the tid.
+   *
+   * @var array
+   */
+  var $items = array();
+
   function option_definition() {
     $options = parent::option_definition();
 
diff --git a/sites/all/modules/views/handlers/views_handler_field_serialized.inc b/sites/all/modules/views/handlers/views_handler_field_serialized.inc
index d53c1477d5294f8536e4febab188faa5c66d8a98..01dd0c06700599f44d1f16092c23455a6bd9a6db 100644
--- a/sites/all/modules/views/handlers/views_handler_field_serialized.inc
+++ b/sites/all/modules/views/handlers/views_handler_field_serialized.inc
@@ -1,5 +1,10 @@
 <?php
 
+/**
+ * Field handler to show data of serialized fields.
+ *
+ * @ingroup views_field_handlers
+ */
 class views_handler_field_serialized extends views_handler_field {
 
   function option_definition() {
diff --git a/sites/all/modules/views/handlers/views_handler_filter.inc b/sites/all/modules/views/handlers/views_handler_filter.inc
index 541e5df3d7dcbd5eabf6b45f2a143019f4f039dd..b267976f6085d6fbe8d4a7999f2c5f7c17e286c8 100644
--- a/sites/all/modules/views/handlers/views_handler_filter.inc
+++ b/sites/all/modules/views/handlers/views_handler_filter.inc
@@ -24,6 +24,35 @@
  * Base class for filters.
  */
 class views_handler_filter extends views_handler {
+  /**
+   * Contains the actual value of the field,either configured in the views ui
+   * or entered in the exposed filters.
+   */
+  var $value = NULL;
+
+  /**
+   * Contains the operator which is used on the query.
+   */
+  var $operator = '=';
+
+  /**
+   * @var bool
+   * Disable the possibility to force a single value.
+   */
+  var $always_multiple = FALSE;
+
+  /**
+   * @var bool
+   * Disable the possibility to use operators.
+   */
+  var $no_operator = FALSE;
+
+  /**
+   * @var bool
+   * Disable the possibility to allow a exposed input to be optional.
+   */
+  var $always_required = FALSE;
+
   /**
    * Provide some extra help to get the operator/value easier to use.
    *
@@ -60,7 +89,7 @@ class views_handler_filter extends views_handler {
 
     $options['operator'] = array('default' => '=');
     $options['value'] = array('default' => '');
-    $options['group'] = array('default' => '0');
+    $options['group'] = array('default' => '1');
     $options['exposed'] = array('default' => FALSE);
     $options['expose'] = array(
       'contains' => array(
@@ -104,12 +133,15 @@ class views_handler_filter extends views_handler {
     $form['clear_markup_start'] = array(
       '#markup' => '<div class="clearfix">',
     );
+    // Add the subform from operator_form().
     $this->show_operator_form($form, $form_state);
+    // Add the subform from value_form().
     $this->show_value_form($form, $form_state);
     $form['clear_markup_end'] = array(
       '#markup' => '</div>',
     );
     if ($this->can_expose()) {
+      // Add the subform from expose_form().
       $this->show_expose_form($form, $form_state);
     }
   }
@@ -147,10 +179,12 @@ class views_handler_filter extends views_handler {
   }
 
   /**
-   * Provide a form for setting the operator.
+   * Options form subform for setting the operator.
    *
    * This may be overridden by child classes, and it must
    * define $form['operator'];
+   *
+   * @see options_form().
    */
   function operator_form(&$form, &$form_state) {
     $options = $this->operator_options();
@@ -193,10 +227,12 @@ class views_handler_filter extends views_handler {
   }
 
   /**
-   * Provide a form for setting options.
+   * Options form subform for setting options.
    *
    * This should be overridden by all child classes and it must
    * define $form['value']
+   *
+   * @see options_form().
    */
   function value_form(&$form, &$form_state) { $form['value'] = array(); }
 
@@ -260,6 +296,11 @@ class views_handler_filter extends views_handler {
     }
   }
 
+  /**
+   * Options form subform for exposed filter options.
+   *
+   * @see options_form().
+   */
   function expose_form(&$form, &$form_state) {
     $form['#theme'] = 'views_ui_expose_filter_form';
     // #flatten will move everything from $form['expose'][$key] to $form[$key]
@@ -470,7 +511,7 @@ class views_handler_filter extends views_handler {
    * Tell the renderer about our exposed form. This only needs to be
    * overridden for particularly complex forms. And maybe not even then.
    *
-   * @return
+   * @return array|null
    *   An array with the following keys:
    *   - operator: The $form key of the operator. Set to NULL if no operator.
    *   - value: The $form key of the value. Set to NULL if no value.
@@ -600,6 +641,8 @@ class views_handler_filter extends views_handler {
    * with OR groups. Some filters must also use HAVING which also makes
    * them not groupable. These filters will end up in a special group
    * if OR grouping is in use.
+   *
+   * @return bool
    */
    function can_group() {
      return TRUE;
@@ -609,6 +652,8 @@ class views_handler_filter extends views_handler {
 
 /**
  * A special handler to take the place of missing or broken handlers.
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_broken extends views_handler_filter {
   function ui_name($short = FALSE) {
diff --git a/sites/all/modules/views/handlers/views_handler_filter_boolean_operator.inc b/sites/all/modules/views/handlers/views_handler_filter_boolean_operator.inc
index 5f8013e2767f2c18b444d611c0a8f8e2d8a641af..f795b9f8408b31a1159a6be9a48d6fa1d387a588 100644
--- a/sites/all/modules/views/handlers/views_handler_filter_boolean_operator.inc
+++ b/sites/all/modules/views/handlers/views_handler_filter_boolean_operator.inc
@@ -10,6 +10,10 @@
  *    - on-off: On/Off
  *    - enabled-disabled: Enabled/Disabled
  * - accept null: Treat a NULL value as false.
+ * - use equal: If you use this flag the query will use = 1 instead of <> 0.
+ *   This might be helpful for performance reasons.
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_boolean_operator extends views_handler_filter {
   // exposed filter options
@@ -102,7 +106,7 @@ class views_handler_filter_boolean_operator extends views_handler_filter {
         $form_state['input'][$identifier] = $this->value;
       }
       // If we're configuring an exposed filter, add an <Any> option.
-      if (empty($form_state['exposed']) || empty($this->options['required'])) {
+      if (empty($form_state['exposed']) || empty($this->options['expose']['required'])) {
         $any_label = variable_get('views_exposed_filter_any_label', 'new_any') == 'old_any' ? '<Any>' : t('- Any -');
         if ($form['value']['#type'] != 'select') {
           $any_label = check_plain($any_label);
diff --git a/sites/all/modules/views/handlers/views_handler_filter_boolean_operator_string.inc b/sites/all/modules/views/handlers/views_handler_filter_boolean_operator_string.inc
index bd7bd87ef172691705cf6bcaf016bb7bcdccdf20..b27cae4f4b24fa27f9f9eca12f9337bbd2a7fb5e 100644
--- a/sites/all/modules/views/handlers/views_handler_filter_boolean_operator_string.inc
+++ b/sites/all/modules/views/handlers/views_handler_filter_boolean_operator_string.inc
@@ -7,6 +7,8 @@
  *
  * Definition items:
  * - label: (REQUIRED) The label for the checkbox.
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_boolean_operator_string extends views_handler_filter_boolean_operator {
   function query() {
diff --git a/sites/all/modules/views/handlers/views_handler_filter_date.inc b/sites/all/modules/views/handlers/views_handler_filter_date.inc
index e95bc6230663d8fc90d84e4f39d2462e61d73605..b89d003d64f6dcba75a88afcae2e1212ccd4df9b 100644
--- a/sites/all/modules/views/handlers/views_handler_filter_date.inc
+++ b/sites/all/modules/views/handlers/views_handler_filter_date.inc
@@ -2,6 +2,8 @@
 
 /**
  * Filter to handle dates stored as a timestamp.
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_date extends views_handler_filter_numeric {
   function option_definition() {
diff --git a/sites/all/modules/views/handlers/views_handler_filter_equality.inc b/sites/all/modules/views/handlers/views_handler_filter_equality.inc
index a212eb6becde75852ef12829ddc3482ea3c37d07..dfe244507f1b792290fdbb4a855a5c81a824e5e9 100644
--- a/sites/all/modules/views/handlers/views_handler_filter_equality.inc
+++ b/sites/all/modules/views/handlers/views_handler_filter_equality.inc
@@ -1,6 +1,8 @@
 <?php
 /**
  * Simple filter to handle equal to / not equal to filters
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_equality extends views_handler_filter {
   // exposed filter options
diff --git a/sites/all/modules/views/handlers/views_handler_filter_group_by_numeric.inc b/sites/all/modules/views/handlers/views_handler_filter_group_by_numeric.inc
index 60e5bced81cf82b54b21f6c9dbfaaab032fb4aa3..2332d39831f2d75b8d42d861bee91afa22b16f3b 100644
--- a/sites/all/modules/views/handlers/views_handler_filter_group_by_numeric.inc
+++ b/sites/all/modules/views/handlers/views_handler_filter_group_by_numeric.inc
@@ -2,6 +2,8 @@
 
 /**
  * Simple filter to handle greater than/less than filters
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_group_by_numeric extends views_handler_filter_numeric {
   function query() {
diff --git a/sites/all/modules/views/handlers/views_handler_filter_in_operator.inc b/sites/all/modules/views/handlers/views_handler_filter_in_operator.inc
index 0426a7c3a790995a27c6fbc33e2045bc13e052c1..80545421ebe506e60cf247c9151b6ae5d71407eb 100644
--- a/sites/all/modules/views/handlers/views_handler_filter_in_operator.inc
+++ b/sites/all/modules/views/handlers/views_handler_filter_in_operator.inc
@@ -6,6 +6,7 @@
  * - options callback: The function to call in order to generate the value options. If omitted, the options 'Yes' and 'No' will be used.
  * - options arguments: An array of arguments to pass to the options callback.
  *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_in_operator extends views_handler_filter {
   var $value_form_type = 'checkboxes';
diff --git a/sites/all/modules/views/handlers/views_handler_filter_many_to_one.inc b/sites/all/modules/views/handlers/views_handler_filter_many_to_one.inc
index 58fb0d0b0e4d60d5463943d5c05b7d686617d556..c6d6d20db0a2c0575e55362267259c15e8ffde7c 100644
--- a/sites/all/modules/views/handlers/views_handler_filter_many_to_one.inc
+++ b/sites/all/modules/views/handlers/views_handler_filter_many_to_one.inc
@@ -7,8 +7,17 @@
  * The construct method needs to be overridden to provide a list of options;
  * alternately, the value_form and admin_summary methods need to be overriden
  * to provide something that isn't just a select list.
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_many_to_one extends views_handler_filter_in_operator {
+  /**
+   * @var views_many_to_one_helper
+   *
+   * Stores the Helper object which handles the many_to_one complexity.
+   */
+  var $helper = NULL;
+
   function init(&$view, &$options) {
     parent::init($view, $options);
     $this->helper = new views_many_to_one_helper($this);
diff --git a/sites/all/modules/views/handlers/views_handler_filter_numeric.inc b/sites/all/modules/views/handlers/views_handler_filter_numeric.inc
index 767654b864d521772b17a2d2d37b25a4434a4db2..71d8b9e301d08364044a0e8dd0235089ac059a88 100644
--- a/sites/all/modules/views/handlers/views_handler_filter_numeric.inc
+++ b/sites/all/modules/views/handlers/views_handler_filter_numeric.inc
@@ -2,6 +2,8 @@
 
 /**
  * Simple filter to handle greater than/less than filters
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_numeric extends views_handler_filter {
   var $always_multiple = TRUE;
diff --git a/sites/all/modules/views/handlers/views_handler_filter_string.inc b/sites/all/modules/views/handlers/views_handler_filter_string.inc
index d3bc60da5ba93135f814b933ba26d96500cde92a..eec7a07d4aa17901cb4c52ce90e0ff0e051361bb 100644
--- a/sites/all/modules/views/handlers/views_handler_filter_string.inc
+++ b/sites/all/modules/views/handlers/views_handler_filter_string.inc
@@ -3,6 +3,8 @@
 /**
  * Basic textfield filter to handle string filtering commands
  * including equality, like, not like, etc.
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_string extends views_handler_filter {
   // exposed filter options
@@ -250,6 +252,11 @@ class views_handler_filter_string extends views_handler_filter {
   function op_word($field) {
     $where = $this->operator == 'word' ? db_or() : db_and();
 
+    // Don't filter on empty strings.
+    if (empty($this->value)) {
+      return;
+    }
+
     preg_match_all('/ (-?)("[^"]+"|[^" ]+)/i', ' ' . $this->value, $matches, PREG_SET_ORDER);
     foreach ($matches as $match) {
       $phrase = false;
@@ -262,7 +269,7 @@ class views_handler_filter_string extends views_handler_filter {
       $words = $phrase ? array($words) : preg_split('/ /', $words, -1, PREG_SPLIT_NO_EMPTY);
       foreach ($words as $word) {
         $placeholder = $this->placeholder();
-        $where->where("$field LIKE $placeholder", array($placeholder => '%' . db_like(trim($word, " ,!?")) . '%'));
+        $where->condition($field, '%' . db_like(trim($word, " ,!?")) . '%', 'LIKE');
       }
     }
 
diff --git a/sites/all/modules/views/handlers/views_handler_relationship.inc b/sites/all/modules/views/handlers/views_handler_relationship.inc
index afeaba82d9761451268c6cdd6e51c364b8ca3fdc..18f21f88da2b7a27acc908a4574d2b22c018ac5d 100644
--- a/sites/all/modules/views/handlers/views_handler_relationship.inc
+++ b/sites/all/modules/views/handlers/views_handler_relationship.inc
@@ -118,6 +118,10 @@ class views_handler_relationship extends views_handler {
       $def['type'] = 'INNER';
     }
 
+    if (!empty($this->definition['extra'])) {
+      $def['extra'] = $this->definition['extra'];
+    }
+
     if (!empty($def['join_handler']) && class_exists($def['join_handler'])) {
       $join = new $def['join_handler'];
     }
@@ -152,6 +156,8 @@ class views_handler_relationship extends views_handler {
 
 /**
  * A special handler to take the place of missing or broken handlers.
+ *
+ * @ingroup views_relationship_handlers
  */
 class views_handler_relationship_broken extends views_handler_relationship {
   function ui_name($short = FALSE) {
diff --git a/sites/all/modules/views/handlers/views_handler_relationship_groupwise_max.inc b/sites/all/modules/views/handlers/views_handler_relationship_groupwise_max.inc
index cdfd0bdc6795b8b4fb60e97fb571359830537b51..b027357721ad1b4c3f0d441b5b9f5a6ef0ea6fda 100644
--- a/sites/all/modules/views/handlers/views_handler_relationship_groupwise_max.inc
+++ b/sites/all/modules/views/handlers/views_handler_relationship_groupwise_max.inc
@@ -50,6 +50,8 @@
  * If your use of this relationship handler is likely to result in large
  * data sets, you might want to consider storing statistics in a separate table,
  * in the same way as node_comment_statistics.
+ *
+ * @ingroup views_relationship_handlers
  */
 class views_handler_relationship_groupwise_max extends views_handler_relationship {
 
@@ -190,10 +192,7 @@ class views_handler_relationship_groupwise_max extends views_handler_relationshi
   function left_query($options) {
     // Either load another view, or create one on the fly.
     if ($options['subquery_view']) {
-      // We don't use views_get_view because we want our own class of view.
-      views_include('view');
-      $temp_view = view::load($options['subquery_view']);
-
+      $temp_view = views_get_view($options['subquery_view']);
       // Remove all fields from default display
       unset($temp_view->display['default']->display_options['fields']);
     }
diff --git a/sites/all/modules/views/handlers/views_handler_sort.inc b/sites/all/modules/views/handlers/views_handler_sort.inc
index f767b9939b87f73dbc7bf945e4d06f52f3649bcf..3587290e6e172ba4fa9fbeef7d1ba1d09dcfa94a 100644
--- a/sites/all/modules/views/handlers/views_handler_sort.inc
+++ b/sites/all/modules/views/handlers/views_handler_sort.inc
@@ -204,6 +204,8 @@ class views_handler_sort extends views_handler {
 
 /**
  * A special handler to take the place of missing or broken handlers.
+ *
+ * @ingroup views_sort_handlers
  */
 class views_handler_sort_broken extends views_handler_sort {
   function ui_name($short = FALSE) {
diff --git a/sites/all/modules/views/handlers/views_handler_sort_group_by_numeric.inc b/sites/all/modules/views/handlers/views_handler_sort_group_by_numeric.inc
index 61b3409d401c8fc3d862e126b24e0e6e38c3a575..1d1be4163e315b3ab9a64cd72007d4254ec24ef1 100644
--- a/sites/all/modules/views/handlers/views_handler_sort_group_by_numeric.inc
+++ b/sites/all/modules/views/handlers/views_handler_sort_group_by_numeric.inc
@@ -1,6 +1,8 @@
 <?php
 /**
  * Handler for GROUP BY on simple numeric fields.
+ *
+ * @ingroup views_sort_handlers
  */
 class views_handler_sort_group_by_numeric extends views_handler_sort {
   function init(&$view, &$options) {
diff --git a/sites/all/modules/views/handlers/views_handler_sort_random.inc b/sites/all/modules/views/handlers/views_handler_sort_random.inc
index 3b670cb9eb7444f2c0b3b084b66fec3040db88c7..75f3153efdbf6618879aee7c00de74825e6b7996 100644
--- a/sites/all/modules/views/handlers/views_handler_sort_random.inc
+++ b/sites/all/modules/views/handlers/views_handler_sort_random.inc
@@ -2,6 +2,8 @@
 
 /**
  * Handle a random sort.
+ *
+ * @ingroup views_sort_handlers
  */
 class views_handler_sort_random extends views_handler_sort {
   function query() {
diff --git a/sites/all/modules/views/help/about.html b/sites/all/modules/views/help/about.html
index df0ad848df5decd3e1b0b679e2f86701fd2e5d06..fd0a576891077560d6a06f58a4c26d06f948013a 100644
--- a/sites/all/modules/views/help/about.html
+++ b/sites/all/modules/views/help/about.html
@@ -1,4 +1,6 @@
-The views module allows administrators and site designers to create, manage, and display lists of content. Each list managed by the views module is known as a "view", and the output of a view is known as a "display". Displays are provided in either block or page form, and a single view may have multiple displays. Optional navigation aids, including a system path and menu item, can be set for each page-based display of a view. By default, views may be created that list content (a <em>Node</em> view type), content revisions (a <em>Node revisions</em> view type) or users (a <em>User</em> view type). A view may be restricted to members of specific user roles, and may be added, edited or deleted at the <a href="base_url:admin/structure/views">views administration page</a>
+The views module allows administrators and site designers to create, manage, and display lists of content. Each list managed by the views module is known as a "view", and the output of a view is known as a "display". Displays are provided in either block or page form, and a single view may have multiple displays. Optional navigation aids, including a system path and menu item, can be set for each page-based display of a view. By default, views may be created that list content (a <em>Node</em> view type), content revisions (a <em>Node revisions</em> view type) or users (a <em>User</em> view type). A view may be restricted to members of specific user roles, and may be added, edited or deleted at the <a href="base_url:admin/structure/views">views administration page</a>. 
+
+For more technical users and in terms views can be understood simple as a user interface to compose SQL-queries and to pull information (Content, Users, etc.) from the database and show it on a screen as desired.   
 
 The "building block" design of the views system provides power and flexibility, allowing parameters to be specified only when needed. While an advanced view may use all of available parameters to create complex and highly interactive applications, a simple content listing may specify only a few options. All views rely on a conceptual framework that includes:
 
diff --git a/sites/all/modules/views/help/aggregation.html b/sites/all/modules/views/help/aggregation.html
new file mode 100644
index 0000000000000000000000000000000000000000..83ad880d88fda5996b44b22d74061c71bc83b4c8
--- /dev/null
+++ b/sites/all/modules/views/help/aggregation.html
@@ -0,0 +1 @@
+See: <a href="topic:views/group-by">Group by</a>
diff --git a/sites/all/modules/views/help/api-forms.html b/sites/all/modules/views/help/api-forms.html
index 749c5653840d1a66770c0a06d1bf80910aa6343a..f7f4ff6818167f8a7f3d692726855a9cf936e349 100644
--- a/sites/all/modules/views/help/api-forms.html
+++ b/sites/all/modules/views/help/api-forms.html
@@ -11,19 +11,31 @@ The views handler can also implement views_form_validate() and views_form_submit
     return '&lt;!--form-item-' . $this-&gt;options['id'] . '--' . $this-&gt;view-&gt;row_index . '--&gt;';
   }
 
+  function form_element_name() {
+    // Make sure this value is unique for all the view fields
+    return $this-&gt;options['id'];
+  }
+
+  function form_element_row_id($row_id) {
+    // You could use values from $this-&gt;view-&gt;result[$row_id]
+    // to provide complex row ids.
+    return $row_id;
+  }
+
   function views_form(&$form, &$form_state) {
     // The view is empty, abort.
     if (empty($this-&gt;view-&gt;result)) {
       return;
     }
 
-    $field_name = $this-&gt;options['id'];
+    $field_name = $this-&gt;form_element_name();
     $form[$field_name] = array(
       '#tree' => TRUE,
     );
     // At this point, the query has already been run, so we can access the results
     foreach ($this-&gt;view-&gt;result as $row_id => $row) {
-      $form[$field_name][$row_id] = array(
+      $form_element_row_id = $this-&gt;form_element_row_id($row_id);
+      $form[$field_name][$form_element_row_id] = array(
         '#type' => 'textfield',
         '#title' => t('Your name'),
         '#default_value' => '',
@@ -33,7 +45,7 @@ The views handler can also implement views_form_validate() and views_form_submit
 
   // Optional validate function.
   function views_form_validate($form, &$form_state) {
-    $field_name = $this-&gt;options['id'];
+    $field_name = $this->form_element_name();
     foreach ($form_state['values'][$field_name] as $row_id => $value) {
       if ($value == 'Drupal') {
         form_set_error($field_name . '][' . $row_id, "You can't be named Drupal. That's my name.");
diff --git a/sites/all/modules/views/help/api-handlers.html b/sites/all/modules/views/help/api-handlers.html
index eda52ae6cdeb1dc6cb20f7b4d2e2e0031828fa3b..9eca851c885364949cc20556f1e05986cf27d600 100644
--- a/sites/all/modules/views/help/api-handlers.html
+++ b/sites/all/modules/views/help/api-handlers.html
@@ -32,6 +32,8 @@ Most handlers are just extensions of existing classes with a few tweaks that are
 <pre>
 /**
  * Filter by node type
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_node_type extends views_handler_filter_in_operator {
   function get_value_options() {
diff --git a/sites/all/modules/views/help/api-plugins.html b/sites/all/modules/views/help/api-plugins.html
index 25fbffbe727bb6faec0fbd5c463f9f3d1bc88ca7..4d1c120d06b6d9865e6ccde2289735a522ff9149 100644
--- a/sites/all/modules/views/help/api-plugins.html
+++ b/sites/all/modules/views/help/api-plugins.html
@@ -1,6 +1,6 @@
 In Views, a plugin is a bit like a handler, but plugins are not directly responsible for building the query. Instead, they are objects that are used to display the view or make other modifications.
 
-There are 6 types of plugins in Views:
+There are 10 types of plugins in Views:
 <dl>
 <dt>Display</dt>
 <dd>Display plugins are responsible for controlling <strong>where</strong> a view lives. Page and block are the most common displays, as well as the ubiquitous 'default' display which is likely what will be embedded.</dd>
@@ -14,9 +14,30 @@ There are 6 types of plugins in Views:
 <dd>Validator plugins can ensure arguments are valid, and even do transformations on the arguments.</dd>
 <dt>Access</dt>
 <dd>Access plugins are responsible for controlling access to the view.</dd>
+<dt>Query</dt>
+<dd>Query plugins generate and execute a query, it can be seen as a data backend. The default implementation
+is using sql.</dd>
+<dt>Cache</dt>
+<dd>Cache plugins control the storage and loading of caches. Currently they can do both result and render caching,
+but maybe one day cache the generated query</dd>
+<dt>Pager plugins</dt>
+<dd>Pager plugins take care of everything regarding pagers. From getting and setting the total amount of items
+to render the pager and setting the global pager arrays.</dd>
+<dt>Exposed form plugins</dt>
+<dd>Exposed form plugins are responsible for building, rendering and controlling exposed forms. They can expose new
+parts of the view to the user and more.</dd>
+<dt>Localization plugins</dt>
+<dd>Localization plugins take care how the view options are translated. There are example implementations
+for t(), none translation and i18n.</dd>
 </dl>
 
 Plugins are registered by implementing <strong>hook_views_plugins()</strong> in your modulename.views.inc file and returning an array of data.
+For examples please look at views_views_plugins() in views/includes/plugins.inc as it has examples
+for all of them.
+
+For example plugins please look at the one provided by views, too.
+
+Similar to handlers take sure that you added the plugin file to the module.info.
 
 The array will look something like this:
 <pre>
@@ -39,6 +60,21 @@ The array will look something like this:
      'access' =&gt; array(
       // ... list of access plugins,
      ),
+     'query' =&gt; array(
+       // ... list of query plugins,
+      ),,
+     'cache' =&gt; array(
+       // ... list of cache plugins,
+      ),,
+     'pager' =&gt; array(
+       // ... list of pager plugins,
+      ),,
+     'exposed_form' =&gt; array(
+       // ... list of exposed_form plugins,
+      ),,
+     'localization' =&gt; array(
+       // ... list of localization plugins,
+      ),
   );
 </pre>
 
diff --git a/sites/all/modules/views/help/group-by.html b/sites/all/modules/views/help/group-by.html
new file mode 100644
index 0000000000000000000000000000000000000000..d90ed62a98efd1e1a04622cdf5c1fa278de325d3
--- /dev/null
+++ b/sites/all/modules/views/help/group-by.html
@@ -0,0 +1,17 @@
+This is another major new feature for Views that has been long requested. It incorporates another module that has seen a relatively wide amount of use: views_groupby. This feature provides multiple new options for manipulating data. First, it includes the important “group” SQL functionality, and then enables aggregation functions for Views, such as SUM and COUNT.
+<div class="help-box" style="text-align:center">
+<a href="path:images/views3-group-aggregation.png"><img src="path:images/views3-group-aggregation.png" /></a>
+<em>Where to set aggregation to get group settings</em>
+</div>
+
+Grouping is available for sorts and filters. To use grouping, “Use grouping” must be enabled on a per-view basis in the Views UI. This is toggled in the Advanced settings box by clicking the link next to “Use grouping”. Once you activate this checkbox (be sure to read the notes in the UI!), functions for aggregating particular fields will become available. The gear icon that should be familiar to users with any amount of Views experience will now appear next to any sorted or filtered field with aggregation capabilities. Choosing that icon will open up the configuration for the aggregation functions. As an example, this could be used to count things like number of posts in a day, or number of published posts. This could also be used to sum the values of a row, instead of everything in the view.
+
+Setting only the "Use aggregation" turned on itself does nothing. It only gives the possibility to set Aggregation types.    
+
+<div class="help-box" style="text-align:center">
+<a href="path:images/views3-group-aggregation-types.png"><img src="path:images/views3-group-aggregation-types.png" /></a>
+<em>Different aggregation possibilities</em>
+</div>
+
+
+It should be noted that modules that are providing data to Views are responsible for noting whether a field supports aggregation or not; modules that do not provide this information may not have all of their fields available to Views if this data is not in place.
diff --git a/sites/all/modules/views/help/images/views3-group-aggregation-types.png b/sites/all/modules/views/help/images/views3-group-aggregation-types.png
new file mode 100644
index 0000000000000000000000000000000000000000..ac6f32fe598e484ba41d36268a5da21db0bb4732
Binary files /dev/null and b/sites/all/modules/views/help/images/views3-group-aggregation-types.png differ
diff --git a/sites/all/modules/views/help/images/views3-group-aggregation.png b/sites/all/modules/views/help/images/views3-group-aggregation.png
new file mode 100644
index 0000000000000000000000000000000000000000..ef93bba66e1683101dc6f9f039f32ca7e8a9be3c
Binary files /dev/null and b/sites/all/modules/views/help/images/views3-group-aggregation.png differ
diff --git a/sites/all/modules/views/help/images/views3-jump-style-menu.png b/sites/all/modules/views/help/images/views3-jump-style-menu.png
new file mode 100644
index 0000000000000000000000000000000000000000..6945b94efeb49026cbc2edf90ae2f8e9ca28952c
Binary files /dev/null and b/sites/all/modules/views/help/images/views3-jump-style-menu.png differ
diff --git a/sites/all/modules/views/help/new.html b/sites/all/modules/views/help/new.html
index 0951f3384842aaf078c6b60818f28b0347c81846..bee52e9f039e5c35e7652a413ee5c32cecda22b9 100644
--- a/sites/all/modules/views/help/new.html
+++ b/sites/all/modules/views/help/new.html
@@ -1,10 +1,10 @@
 Views 3 is the newest major release of Views and is coded for Drupal 6. Views 3 retains all of the core functionality of previous releases, together with a completely revamped user interface and a large set of new features.
 
-
 Major new features (these need help files):
 <ol>
 <li>Views Or has been incorporated.</li>
 <li><a href="topic:views/semantic-views">Semantic views</a> have been incorporated.</li>
+<li><a href="topic:views/group-by">Group by</a> possibility.</li>
 <li>The Jump Menu style has been added.</li>
 <li>The Panel Fields style has been added.</li>
 <li>Pluggable back ends</li>
diff --git a/sites/all/modules/views/help/reports.html b/sites/all/modules/views/help/reports.html
index 2a585fab26ea33e4b1106e4399390c8c638273f3..2a6087355cd10317c96ae39bfa1c140d75631863 100644
--- a/sites/all/modules/views/help/reports.html
+++ b/sites/all/modules/views/help/reports.html
@@ -1,3 +1,3 @@
-Visit <a href="admin/reports/views-fields">admin/reports/views-fields</a> to see an overview of fields usage across all the views.
+Visit <a href="/admin/reports/views-fields">admin/reports/views-fields</a> to see an overview of fields usage across all the views.
 
 It's useful to check for unused or misused fields.
diff --git a/sites/all/modules/views/help/style-jump.html b/sites/all/modules/views/help/style-jump.html
index a579b8b5c000e151f785c02beb51efb494472c74..d08e67fce52c948967ad5ac5893f20c385808ce3 100644
--- a/sites/all/modules/views/help/style-jump.html
+++ b/sites/all/modules/views/help/style-jump.html
@@ -1,3 +1,7 @@
+With the <strong>jump menu</strong> style can you create selectbox menus for the content of your site.
+
+<a href="path:images/views3-jump-style-menu.png"><img src="path:images/views3-jump-style-menu.png" /></a> 
+
 The <strong>jump menu</strong> style will display each row of your view within a jump menu.  This style requires that your view's <a href="topic:views/style-row">row style</a> is set to <a href="topic:views/style-fields">fields</a>.
 
 To properly configure a jump menu, you must select one field that will represent the path to utilize.  In most cases, you will need to rewrite the output of this field.  You should set that field to exclude from display.  All other displayed fields will be part of the menu.  Please note that all HTML will be stripped from this output as select boxes cannot show HTML.
diff --git a/sites/all/modules/views/help/views.help.ini b/sites/all/modules/views/help/views.help.ini
index e0a1d770aa2d53b963b120346b9f15a2475f0703..4a249f5def0f5f190070abecf374136f03ef9603 100644
--- a/sites/all/modules/views/help/views.help.ini
+++ b/sites/all/modules/views/help/views.help.ini
@@ -177,6 +177,10 @@ weight = 20
 title = "Semantic Views"
 parent = style-settings
 
+[group-by]
+title = "Group by"
+parent = field
+
 [menu]
 title = "Menu options (page display)"
 parent = display-page
@@ -209,6 +213,10 @@ weight = 80
 title = "Relationships"
 weight = 90
 
+[aggregation]
+title = "Aggregation"
+weight = 90
+
 [argument]
 title = "Arguments/Contextual Filters"
 weight = 100
diff --git a/sites/all/modules/views/includes/admin.inc b/sites/all/modules/views/includes/admin.inc
index 6ae420ebcb513b0d062e9ed8fcaab9a164b23c73..80aa592e5ced565872d34f3209648bb6b60618f2 100644
--- a/sites/all/modules/views/includes/admin.inc
+++ b/sites/all/modules/views/includes/admin.inc
@@ -311,7 +311,7 @@ function views_ui_add_form($form, &$form_state) {
   );
   $form['name'] = array(
     '#type' => 'machine_name',
-    '#maxlength' => 32,
+    '#maxlength' => 128,
     '#machine_name' => array(
       'exists' => 'views_get_view',
       'source' => array('human_name'),
@@ -743,7 +743,15 @@ function views_ui_add_form_store_edit_submit($form, &$form_state) {
   }
   // Just cache it temporarily to edit it.
   views_ui_cache_set($view);
-  $form_state['redirect'] = 'admin/structure/views/view/' . $view->name;
+
+  // If there is a destination query, ensure we still redirect the user to the
+  // edit view page, and then redirect the user to the destination.
+  $destination = array();
+  if (isset($_GET['destination'])) {
+    $destination = drupal_get_destination();
+    unset($_GET['destination']);
+  }
+  $form_state['redirect'] = array('admin/structure/views/view/' . $view->name, array('query' => $destination));
 }
 
 /**
@@ -1188,8 +1196,8 @@ function views_ui_preview_form($form, &$form_state, $view, $display_id = 'defaul
   // Add the preview button
   $form['button'] = array(
     '#type' => 'submit',
-      '#value' => t('Update preview'),
-      '#attributes' => array('class' => array('arguments-preview', 'ctools-auto-submit-click')),
+    '#value' => t('Update preview'),
+    '#attributes' => array('class' => array('arguments-preview', 'ctools-auto-submit-click')),
     '#pre_render' => array('ctools_dependent_pre_render'),
     '#prefix' => '<div id="preview-submit-wrapper">',
     '#suffix' => '</div>',
@@ -1947,6 +1955,11 @@ function views_ui_import_page($form, &$form_state) {
     '#description' => t('Enter the name to use for this view if it is different from the source view. Leave blank to use the name of the view.'),
   );
 
+  $form['name_override'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Replace an existing view if one exists with the same name'),
+  );
+
   $form['view'] = array(
     '#type' => 'textarea',
     '#title' => t('Paste view code here'),
@@ -2000,8 +2013,15 @@ function views_ui_import_validate($form, &$form_state) {
   }
 
   $test = views_get_view($view->name);
-  if ($test && $test->type != t('Default')) {
-    form_set_error('', t('A view by that name already exists; please choose a different name'));
+  if (!$form_state['values']['name_override']) {
+    if ($test && $test->type != t('Default')) {
+      form_set_error('', t('A view by that name already exists; please choose a different name'));
+    }
+  }
+  else {
+    if ($test->vid) {
+      $view->vid = $test->vid;
+    }
   }
 
   // Make sure base table gets set properly if it got moved.
@@ -3612,7 +3632,7 @@ function views_ui_rearrange_filter_form($form, &$form_state) {
     );
 
     $form['remove_groups'][$id] = array(); // to prevent a notice
-    if ($id != 0) {
+    if ($id != 1) {
       $form['remove_groups'][$id] = array(
         '#type' => 'submit',
         '#value' => t('Remove group @group', array('@group' => $id)),
@@ -3623,7 +3643,7 @@ function views_ui_rearrange_filter_form($form, &$form_state) {
         '#group' => $id,
       );
     }
-    $group_options[$id] = $id == 0 ? t('Default group') : t('Group @group', array('@group' => $id));
+    $group_options[$id] = $id == 1 ? t('Default group') : t('Group @group', array('@group' => $id));
     $form['#group_renders'][$id] = array();
   }
 
@@ -3635,7 +3655,7 @@ function views_ui_rearrange_filter_form($form, &$form_state) {
   foreach ($handlers as $id => $field) {
     // If the group does not exist, move the filters to the default group.
     if (empty($field['group']) || empty($groups['groups'][$field['group']])) {
-      $field['group'] = 0;
+      $field['group'] = 1;
     }
 
     $handler = $display->handler->get_handler($type, $id);
@@ -3647,7 +3667,7 @@ function views_ui_rearrange_filter_form($form, &$form_state) {
     // the default group to prevent weird errors from having it be in its
     // own group:
     if (!$grouping && $field['group'] == 'ungroupable') {
-      $field['group'] = 0;
+      $field['group'] = 1;
     }
 
     // Place this item into the proper group for rendering.
@@ -3883,11 +3903,11 @@ function views_ui_rearrange_filter_form_submit($form, &$form_state) {
     // The actual update button was clicked. Remove the empty groups, and
     // renumber them sequentially.
     ksort($remember_groups);
-    $groups['groups'] = array_values(array_intersect_key($groups['groups'], $remember_groups));
+    $groups['groups'] = views_array_key_plus(array_values(array_intersect_key($groups['groups'], $remember_groups)));
     // Change the 'group' key on each field to match. Here, $mapping is an
     // array whose keys are the old group numbers and whose values are the new
     // (sequentially numbered) ones.
-    $mapping = array_flip(array_keys($remember_groups));
+    $mapping = array_flip(views_array_key_plus(array_keys($remember_groups)));
     foreach ($new_fields as &$new_field) {
       $new_field['group'] = $mapping[$new_field['group']];
     }
@@ -4254,9 +4274,11 @@ function views_ui_config_item_form_submit_temporary($form, &$form_state) {
   $item = $form_state['handler']->options;
   $types = views_object_types();
 
-  $type = $form_state['type'];
+  // For footer/header $handler_type is area but $type is footer/header.
+  // For all other handle types it's the same.
+  $handler_type = $type = $form_state['type'];
   if (!empty($types[$type]['type'])) {
-    $type = $types[$type]['type'];
+    $handler_type = $types[$type]['type'];
   }
 
   $override = NULL;
@@ -4272,7 +4294,7 @@ function views_ui_config_item_form_submit_temporary($form, &$form_state) {
 
   // Create a new handler and unpack the options from the form onto it. We
   // can use that for storage.
-  $handler = views_get_handler($item['table'], $item['field'], $type, $override);
+  $handler = views_get_handler($item['table'], $item['field'], $handler_type, $override);
   $handler->init($form_state['view'], $item);
 
 
@@ -4307,9 +4329,11 @@ function views_ui_config_item_form_submit($form, &$form_state) {
   $item = $form_state['handler']->options;
   $types = views_object_types();
 
-  $type = $form_state['type'];
+  // For footer/header $handler_type is area but $type is footer/header.
+  // For all other handle types it's the same.
+  $handler_type = $type = $form_state['type'];
   if (!empty($types[$type]['type'])) {
-    $type = $types[$type]['type'];
+    $handler_type = $types[$type]['type'];
   }
 
   $override = NULL;
@@ -4325,7 +4349,7 @@ function views_ui_config_item_form_submit($form, &$form_state) {
 
   // Create a new handler and unpack the options from the form onto it. We
   // can use that for storage.
-  $handler = views_get_handler($item['table'], $item['field'], $type, $override);
+  $handler = views_get_handler($item['table'], $item['field'], $handler_type, $override);
   $handler->init($form_state['view'], $item);
 
 
@@ -4473,7 +4497,7 @@ function views_ui_config_item_extra_form($form, &$form_state) {
   $item = $view->get_item($display_id, $type, $id);
 
   if ($item) {
-    $handler = views_get_handler($item['table'], $item['field'], $type);
+    $handler = $view->display_handler->get_handler($type, $id);
     if (empty($handler)) {
       $form['markup'] = array('#markup' => t("Error: handler for @table > @field doesn't exist!", array('@table' => $item['table'], '@field' => $item['field'])));
     }
@@ -4651,6 +4675,13 @@ function views_ui_admin_settings_basic() {
     '#default_value' => variable_get('views_ui_show_advanced_column', FALSE),
   );
 
+  $form['basic']['views_ui_display_embed'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Show the embed display in the ui.'),
+    '#description' => t('Allow advanced user to use the embed view display. The plugin itself works if it\'s not visible in the ui'),
+    '#default_value' => variable_get('views_ui_display_embed', FALSE),
+  );
+
   $form['basic']['views_ui_custom_theme'] = array(
     '#type' => 'select',
     '#title' => t('Custom admin theme for the Views UI'),
@@ -4761,7 +4792,8 @@ function views_ui_admin_settings_advanced() {
   $form['debug']['views_sql_signature'] = array(
     '#type' => 'checkbox',
     '#title' => t('Add Views signature to all SQL queries'),
-    '#description' => t("All Views-generated queries will include a special 'VIEWS' = 'VIEWS' string in the WHERE clause. This makes identifying Views queries in database server logs simpler, but should only be used when troubleshooting."),
+    '#description' => t("All Views-generated queries will include the name of the views and display 'view-name:display-name' as a string  at the end of the SELECT clause. This makes identifying Views queries in database server logs simpler, but should only be used when troubleshooting."),
+
     '#default_value' => variable_get('views_sql_signature', FALSE),
   );
 
@@ -4792,7 +4824,7 @@ function views_ui_admin_settings_advanced() {
     '#description' => t('Select a translation method to use for Views data like header, footer, and empty text.'),
   );
 
-  $regions = system_region_list(variable_get('theme_default', 'garland'));
+  $regions = array();
   $regions['watchdog'] = t('Watchdog');
   if (module_exists('devel')) {
     $regions['message'] = t('Devel message(dpm)');
diff --git a/sites/all/modules/views/includes/handlers.inc b/sites/all/modules/views/includes/handlers.inc
index 35484f9590f9029bab5d0cca637e0c989a915416..45a3a45eff55df348a37fee92d776700fff8d166 100644
--- a/sites/all/modules/views/includes/handlers.inc
+++ b/sites/all/modules/views/includes/handlers.inc
@@ -10,16 +10,35 @@
 function _views_create_handler($definition, $type = 'handler', $handler_type = NULL) {
 //  debug('Instantiating handler ' . $definition['handler']);
   if (empty($definition['handler'])) {
+    vpr('_views_create_handler - type: @type - failed: handler has not been provided.',
+      array('@type' => isset($handler_type) ? ( $type . '(handler type: ' . $handler_type . ')' ) : $type)
+    );
     return;
   }
 
   // class_exists will automatically load the code file.
   if (!empty($definition['override handler']) &&
       !class_exists($definition['override handler'])) {
+    vpr(
+      '_views_create_handler - loading override handler @type failed: class @override_handler could not be loaded. ' .
+      'Verify the class file has been registered in the corresponding .info-file (files[]).',
+      array(
+        '@type' => isset($handler_type) ? ( $type . '(handler type: ' . $handler_type . ')' ) : $type,
+        '@override_handler' => $definition['override handler']
+      )
+    );
     return;
   }
 
   if (!class_exists($definition['handler'])) {
+    vpr(
+      '_views_create_handler - loading handler @type failed: class @handler could not be loaded. ' .
+      'Verify the class file has been registered in the corresponding .info-file (files[]).',
+      array(
+        '@type' => isset($handler_type) ? ( $type . '(handler type: ' . $handler_type . ')' ) : $type,
+        '@handler' => $definition['handler']
+      )
+    );
     return;
   }
 
@@ -155,6 +174,17 @@ class views_handler extends views_object {
    */
   public $table_alias;
 
+  /**
+   * The actual field in the database table, maybe different
+   * on other kind of query plugins/special handlers.
+   */
+  var $real_field;
+
+  /**
+   * The relationship used for this field.
+   */
+  var $relationship = NULL;
+
   /**
    * init the handler with necessary data.
    * @param $view
@@ -265,9 +295,11 @@ class views_handler extends views_object {
     // If grouping, check to see if the aggregation method needs to modify the field.
     if ($this->view->display_handler->use_group_by()) {
       $this->view->init_query();
-      $info = $this->query->get_aggregation_info();
-      if (!empty($info[$this->options['group_type']]['method']) && function_exists($info[$this->options['group_type']]['method'])) {
-        return $info[$this->options['group_type']]['method']($this->options['group_type'], $field);
+      if ($this->query) {
+        $info = $this->query->get_aggregation_info();
+        if (!empty($info[$this->options['group_type']]['method']) && function_exists($info[$this->options['group_type']]['method'])) {
+          return $info[$this->options['group_type']]['method']($this->options['group_type'], $field);
+        }
       }
     }
 
diff --git a/sites/all/modules/views/includes/plugins.inc b/sites/all/modules/views/includes/plugins.inc
index 9f6459f29b615af08a9ec905d2520026e1d999bd..51d0e93f8ef5fbc9c26341291b8935ff9ee8afe2 100644
--- a/sites/all/modules/views/includes/plugins.inc
+++ b/sites/all/modules/views/includes/plugins.inc
@@ -82,6 +82,17 @@ function views_views_plugins() {
         'admin' => t('Feed'),
         'help topic' => 'display-feed',
       ),
+      'embed' => array(
+        'title' => t('Embed'),
+        'help' => t('Provide a display which can be embedded using the views api.'),
+        'handler' => 'views_plugin_display_embed',
+        'uses hook menu' => FALSE,
+        'use ajax' => TRUE,
+        'use pager' => TRUE,
+        'accept attachments' => FALSE,
+        'admin' => t('Embed'),
+        'no ui' => !variable_get('views_ui_display_embed', FALSE),
+      ),
     ),
     'display_extender' => array(
       // Default settings for all display_extender plugins.
@@ -452,9 +463,9 @@ class views_plugin extends views_object {
   var $view = NULL;
 
   /**
-   * The current used display plugin.
+   * The current used views display.
    *
-   * @var views_plugin_display
+   * @var views_display
    */
   var $display = NULL;
 
diff --git a/sites/all/modules/views/includes/view.inc b/sites/all/modules/views/includes/view.inc
index 602e90ed5487a09aaf13e3f4483792359dcf0f71..4848879f4b8fd5215435fe5fd7ae483f5929dedd 100644
--- a/sites/all/modules/views/includes/view.inc
+++ b/sites/all/modules/views/includes/view.inc
@@ -27,6 +27,60 @@ class view extends views_db_object {
    */
   var $name = "";
 
+  /**
+   * The id of the view, which is used only for views in the database.
+   *
+   * @var number
+   */
+  var $vid;
+
+  /**
+   * The description of the view, which is used only in the interface.
+   *
+   * @var string
+   */
+  var $description;
+
+  /**
+   * The "tags" of a view.
+   * The tags are stored as a single string, though it is used as multiple tags
+   * for example in the views overview.
+   *
+   * @var string
+   */
+  var $tag;
+
+  /**
+   * The human readable name of the view.
+   *
+   * @var string
+   */
+  var $human_name;
+
+  /**
+   * The core version the view was created for.
+   * @var int
+   */
+  var $core;
+
+  /**
+   * The views-api version this view was created by.
+   *
+   * Some examples of the variable are 3.0 or 3.0-alpha1
+   *
+   * @var string
+   */
+  var $api_version;
+
+  /**
+   * Is the view disabled.
+   *
+   * This value is used for exported view, to provide some default views which aren't enabled.
+   *
+   * @var bool
+   */
+  var $disabled;
+
   // State variables
   var $built = FALSE;
   var $executed = FALSE;
@@ -53,13 +107,18 @@ class view extends views_db_object {
   // Exposed widget input
   var $exposed_data = array();
   var $exposed_input = array();
+  // Exposed widget input directly from the $form_state['values'].
+  var $exposed_raw_input = array();
 
   // Used to store views that were previously running if we recurse.
   var $old_view = array();
 
-  // To avoid recursion in views embebed into areas
+  // To avoid recursion in views embedded into areas.
   var $parent_views = array();
 
+  // Is the current stored view runned as an attachment to another view.
+  var $is_attachment = NULL;
+
   // Stores the next steps of form items to handle.
   // It's an array of stack items, which contain the form id, the type of form,
   // the view, the display and some additional arguments.
@@ -87,6 +146,13 @@ class view extends views_db_object {
    */
   var $display_handler;
 
+  /**
+   * Stores all display handlers of this view.
+   *
+   * @var array[views_display]
+   */
+  var $display;
+
   /**
    * The current used style plugin.
    *
@@ -94,6 +160,21 @@ class view extends views_db_object {
    */
    var $style_plugin;
 
+  /**
+   * Stored the changed options of the style plugin.
+   *
+   * @deprecated Better use $view->style_plugin->options
+   * @var array
+   */
+  var $style_options;
+
+  /**
+   * Stores the current active row while rendering.
+   *
+   * @var int
+   */
+  var $row_index;
+
    /**
    * Allow to override the url of the current view.
    *
@@ -113,6 +194,58 @@ class view extends views_db_object {
    */
   var $base_database = NULL;
 
+  /**
+   * Here comes a list of the possible handler which are active on this view.
+   */
+
+  /**
+   * Stores the field handlers which are initialized on this view.
+   * @var array[views_handler_field]
+   */
+  var $field;
+
+  /**
+   * Stores the argument handlers which are initialized on this view.
+   * @var array[views_handler_argument]
+   */
+  var $argument;
+
+  /**
+   * Stores the sort handlers which are initialized on this view.
+   * @var array[views_handler_sort]
+   */
+  var $sort;
+
+  /**
+   * Stores the filter handlers which are initialized on this view.
+   * @var array[views_handler_filter]
+   */
+  var $filter;
+
+  /**
+   * Stores the relationship handlers which are initialized on this view.
+   * @var array[views_handler_relationship]
+   */
+  var $relationship;
+
+  /**
+   * Stores the area handlers for the header which are initialized on this view.
+   * @var array[views_handler_area]
+   */
+  var $header;
+
+  /**
+   * Stores the area handlers for the footer which are initialized on this view.
+   * @var array[views_handler_area]
+   */
+  var $footer;
+
+  /**
+   * Stores the area handlers for the empty text which are initialized on this view.
+   * @var array[views_handler_area]
+   */
+  var $empty;
+
   /**
    * Constructor
    */
@@ -608,39 +741,6 @@ class view extends views_db_object {
     }
   }
 
-  /**
-   * Prepare arguments and set default args to args.
-   */
-  function _pre_query_argument() {
-    // build arguments.
-    $position = -1;
-
-    // Iterate through each argument and process.
-    foreach ($this->argument as $id => $arg) {
-      $position++;
-      $argument = &$this->argument[$id];
-
-      if ($argument->broken()) {
-        continue;
-      }
-
-      $arg = isset($this->args[$position]) ? $this->args[$position] : NULL;
-      $argument->position = $position;
-
-      if (isset($arg) || $argument->has_default_argument()) {
-        if (!isset($arg)) {
-          $arg = $argument->get_default_argument();
-          // make sure default args get put back.
-          if (isset($arg)) {
-            $this->args[$position] = $arg;
-          }
-          // remember that this argument was computed, not passed on the URL.
-          $argument->is_default = TRUE;
-        }
-      }
-    }
-  }
-
   /**
    * Build all the arguments.
    */
@@ -677,7 +777,17 @@ class view extends views_db_object {
       $arg = isset($this->args[$position]) ? $this->args[$position] : NULL;
       $argument->position = $position;
 
-      if (isset($arg)) {
+      if (isset($arg) || $argument->has_default_argument()) {
+        if (!isset($arg)) {
+          $arg = $argument->get_default_argument();
+          // make sure default args get put back.
+          if (isset($arg)) {
+            $this->args[$position] = $arg;
+          }
+          // remember that this argument was computed, not passed on the URL.
+          $argument->is_default = TRUE;
+        }
+
         // Set the argument, which will also validate that the argument can be set.
         if (!$argument->set_argument($arg)) {
           $status = $argument->validate_fail($arg);
@@ -817,9 +927,6 @@ class view extends views_db_object {
     // Run through our handlers and ensure they have necessary information.
     $this->init_handlers();
 
-    // Setup the default arguments.
-    $this->_pre_query_argument();
-
     // Let the handlers interact with each other if they really want.
     $this->_pre_query();
 
@@ -1039,6 +1146,11 @@ class view extends views_db_object {
         $cache->cache_start();
       }
 
+      // Run pre_render for the pager as it might change the result.
+      if (!empty($this->query->pager)) {
+        $this->query->pager->pre_render($this->result);
+      }
+
       // Initialize the style plugin.
       $this->init_style();
 
@@ -1167,19 +1279,17 @@ class view extends views_db_object {
     views_set_current_view($this);
     $display_id = $this->current_display;
 
-    // Let modules modify the view just prior to executing it.
-    foreach (module_implements('views_pre_view') as $module) {
-      $function = $module . '_views_pre_view';
-      $function($this, $display_id, $args);
-    }
-
     // Prepare the view with the information we have, but only if we were
     // passed arguments, as they may have been set previously.
     if ($args) {
       $this->set_arguments($args);
     }
 
-//    $this->attach_displays();
+    // Let modules modify the view just prior to executing it.
+    foreach (module_implements('views_pre_view') as $module) {
+      $function = $module . '_views_pre_view';
+      $function($this, $display_id, $this->args);
+    }
 
     // Allow the display handler to set up for execution
     $this->display_handler->pre_execute();
@@ -1537,69 +1647,6 @@ class view extends views_db_object {
     $this->additional_queries = $temp;
   }
 
-  /**
-   * Load a view from the database based upon either vid or name.
-   *
-   * This is a static factory method that implements internal caching for
-   * view objects.
-   *
-   * @param $arg
-   *  The name of the view or its internal view id (vid)
-   * @param $reset
-   *  If TRUE, reset this entry in the load cache.
-   * @return view
-   *   A view object or NULL if it was not available.
-   */
-  static function &load($arg, $reset = FALSE) {
-    static $cache = array();
-
-    // We want a NULL value to return TRUE here, so we can't use isset() or empty().
-    if (!array_key_exists($arg, $cache) || $reset) {
-      $result = db_select('views_view', 'v')
-        ->fields('v')
-        ->condition(is_numeric($arg) ? 'vid' : 'name', $arg)
-        ->execute();
-      if ($result->rowCount() == 0) {
-        $cache[$arg] = NULL;
-      }
-      else {
-        $view = new view();
-        $view->load_row($result->fetchObject());
-        $view->type = t('Normal');
-        // Load all of our subtables.
-        foreach ($view->db_objects() as $key) {
-          $object_name = "views_$key";
-          $result = db_select($object_name, 'v')
-            ->fields('v')
-            ->condition('vid', $view->vid)
-            ->orderBy('position')
-            ->execute();
-          foreach ($result as $data) {
-            $object = new $object_name(FALSE);
-            $object->load_row($data);
-
-            // Because it can get complicated with this much indirection,
-            // make a shortcut reference.
-            $location = &$view->$key;
-
-            // If we have a basic id field, load the item onto the view based on
-            // this ID, otherwise push it on.
-            if (!empty($object->id)) {
-              $location[$object->id] = $object;
-            }
-            else {
-              $location[] = $object;
-            }
-          }
-        }
-        $view->loaded = TRUE;
-        $cache[$arg] = $view;
-      }
-    }
-
-    return $cache[$arg];
-  }
-
   /**
    * Static factory method to load a list of views based upon a $where clause.
    *
@@ -1967,6 +2014,8 @@ class view extends views_db_object {
  * Base class for views' database objects.
  */
 class views_db_object {
+  public $db_table;
+
   /**
    * Initialize this object, setting values from schema defaults.
    *
@@ -2377,6 +2426,13 @@ class views_display extends views_db_object {
    */
   var $handler;
 
+  /**
+   * Stores all options of the display, like fields, filters etc.
+   *
+   * @var array
+   */
+  var $display_options;
+
   var $db_table = 'views_display';
   function views_display($init = TRUE) {
     parent::init($init);
diff --git a/sites/all/modules/views/js/ajax_view.js b/sites/all/modules/views/js/ajax_view.js
index c22bbf0d045cdde7dcaefbcfd6404e6ebd80df4c..a89d4aa94afe9a0679aa21f89434038498bf47cd 100644
--- a/sites/all/modules/views/js/ajax_view.js
+++ b/sites/all/modules/views/js/ajax_view.js
@@ -35,8 +35,19 @@ Drupal.views.ajaxView = function(settings) {
     ajax_path = ajax_path[0];
   }
 
+  // Check if there are any GET parameters to send to views.
+  var queryString = window.location.search || '';
+  if (queryString !== '') {
+    // Remove the question mark and Drupal path component if any.
+    var queryString = queryString.slice(1).replace(/q=[^&]+&?|&?render=[^&]+/, '');
+    if (queryString !== '') {
+      // If there is a '?' in ajax_path, clean url are on and & should be used to add parameters.
+      queryString = ((/\?/.test(ajax_path)) ? '&' : '?') + queryString;
+    }
+  }
+
   this.element_settings = {
-    url: ajax_path + window.location.search,
+    url: ajax_path + queryString,
     submit: settings,
     setClick: true,
     event: 'click',
@@ -115,7 +126,7 @@ Drupal.ajax.prototype.commands.viewsScrollTop = function (ajax, response, status
   // and scroll the first element that has a non-zero top.
   var scrollTarget = response.selector;
   while ($(scrollTarget).scrollTop() == 0 && $(scrollTarget).parent()) {
-    scrollTarget = $(scrollTarget).parent()
+    scrollTarget = $(scrollTarget).parent();
   }
   // Only scroll upward
   if (offset.top - 10 < $(scrollTarget).scrollTop()) {
diff --git a/sites/all/modules/views/js/views-admin.js b/sites/all/modules/views/js/views-admin.js
index 104239aed681a0cdd22b401120425879bf70b9de..e2cd16f33d812867782590007accf19eb420eb1c 100644
--- a/sites/all/modules/views/js/views-admin.js
+++ b/sites/all/modules/views/js/views-admin.js
@@ -1,5 +1,17 @@
 Drupal.viewsUi = {};
 
+Drupal.behaviors.viewsUiEditView = {};
+
+/**
+ * Improve the user experience of the views edit interface.
+ */
+Drupal.behaviors.viewsUiEditView.attach = function (context, settings) {
+  // Only show the SQL rewrite warning when the user has chosen the
+  // corresponding checkbox.
+  jQuery('#edit-query-options-disable-sql-rewrite').click(function () {
+    jQuery('.sql-rewrite-warning').toggleClass('js-hide');
+  });
+};
 
 Drupal.behaviors.viewsUiAddView = {};
 
@@ -547,7 +559,7 @@ Drupal.viewsUi.rearrangeFilterHandler.prototype.duplicateGroupsOperator = functi
   dropdowns = this.operator;
 
   // Move the operator to a new row just above the second group.
-  titleRow = $('tr#views-group-title-1');
+  titleRow = $('tr#views-group-title-2');
   newRow = $('<tr class="filter-group-operator-row"><td colspan="5"></td></tr>');
   newRow.find('td').append(this.operator);
   newRow.insertBefore(titleRow);
diff --git a/sites/all/modules/views/modules/aggregator/views_handler_argument_aggregator_category_cid.inc b/sites/all/modules/views/modules/aggregator/views_handler_argument_aggregator_category_cid.inc
index 7d64f3ef2685874471735af2460e0071ba2c7efc..c67832cdcdd6bef0ac06df117ca175fbfb721e98 100644
--- a/sites/all/modules/views/modules/aggregator/views_handler_argument_aggregator_category_cid.inc
+++ b/sites/all/modules/views/modules/aggregator/views_handler_argument_aggregator_category_cid.inc
@@ -2,6 +2,8 @@
 
 /**
  * Argument handler to accept an aggregator category id.
+ *
+ * @ingroup views_argument_handlers
  */
 class views_handler_argument_aggregator_category_cid extends views_handler_argument_numeric {
   /**
diff --git a/sites/all/modules/views/modules/aggregator/views_handler_argument_aggregator_fid.inc b/sites/all/modules/views/modules/aggregator/views_handler_argument_aggregator_fid.inc
index 6a3a9d8187e35914d638eec948b596309de7e1d6..ed1128841902210a6899c6e80f198f297837f2d2 100644
--- a/sites/all/modules/views/modules/aggregator/views_handler_argument_aggregator_fid.inc
+++ b/sites/all/modules/views/modules/aggregator/views_handler_argument_aggregator_fid.inc
@@ -2,6 +2,8 @@
 
 /**
  * Argument handler to accept an aggregator feed id.
+ *
+ * @ingroup views_argument_handlers
  */
 class views_handler_argument_aggregator_fid extends views_handler_argument_numeric {
   /**
diff --git a/sites/all/modules/views/modules/aggregator/views_handler_argument_aggregator_iid.inc b/sites/all/modules/views/modules/aggregator/views_handler_argument_aggregator_iid.inc
index 575e74307d41b0b096641facffbc1385ae9b7d61..fe19ab68ef90f5917643e2efa1c2649c3b4840c1 100644
--- a/sites/all/modules/views/modules/aggregator/views_handler_argument_aggregator_iid.inc
+++ b/sites/all/modules/views/modules/aggregator/views_handler_argument_aggregator_iid.inc
@@ -2,6 +2,8 @@
 
 /**
  * Argument handler to accept an aggregator item id.
+ *
+ * @ingroup views_argument_handlers
  */
 class views_handler_argument_aggregator_iid extends views_handler_argument_numeric {
   /**
diff --git a/sites/all/modules/views/modules/aggregator/views_handler_field_aggregator_category.inc b/sites/all/modules/views/modules/aggregator/views_handler_field_aggregator_category.inc
index b0ca9c5d6fa50afca89421fcc8c3ceb537c86533..0564810be4ae6d973e63d841a7218241463b39d7 100644
--- a/sites/all/modules/views/modules/aggregator/views_handler_field_aggregator_category.inc
+++ b/sites/all/modules/views/modules/aggregator/views_handler_field_aggregator_category.inc
@@ -3,6 +3,8 @@
 /**
  * Field handler to provide simple renderer that allows linking to aggregator
  * category.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_aggregator_category extends views_handler_field {
   /**
diff --git a/sites/all/modules/views/modules/aggregator/views_handler_field_aggregator_title_link.inc b/sites/all/modules/views/modules/aggregator/views_handler_field_aggregator_title_link.inc
index e3e4c51cfedd0a992d0385204c8a524c0e66838c..d428f4427fa8ab60baf4a9dd450d919db6e02770 100644
--- a/sites/all/modules/views/modules/aggregator/views_handler_field_aggregator_title_link.inc
+++ b/sites/all/modules/views/modules/aggregator/views_handler_field_aggregator_title_link.inc
@@ -3,6 +3,8 @@
  /**
  * Field handler that turns an item's title into a clickable link to the original
  * source article.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_aggregator_title_link extends views_handler_field {
   function construct() {
diff --git a/sites/all/modules/views/modules/aggregator/views_handler_field_aggregator_xss.inc b/sites/all/modules/views/modules/aggregator/views_handler_field_aggregator_xss.inc
index 3fa87c48fee3a50bf0cb6adf9c3ca45304345ebf..0813e35fafee1455dc4a6137f6bf49b2cd844462 100644
--- a/sites/all/modules/views/modules/aggregator/views_handler_field_aggregator_xss.inc
+++ b/sites/all/modules/views/modules/aggregator/views_handler_field_aggregator_xss.inc
@@ -1,9 +1,9 @@
 <?php
 /**
- * @file
- *   Filters htmls tags from item.
+ * Filters htmls tags from item.
+ *
+ * @ingroup views_field_handlers
  */
-
 class views_handler_field_aggregator_xss extends views_handler_field {
   function render($values) {
     $value = $this->get_value($values);
diff --git a/sites/all/modules/views/modules/aggregator/views_handler_filter_aggregator_category_cid.inc b/sites/all/modules/views/modules/aggregator/views_handler_filter_aggregator_category_cid.inc
index 2f797a80bac5b786f64f3296fb6d9bd9f4511b52..27cf6749dd8520334d67260d8103a26cb24131c8 100644
--- a/sites/all/modules/views/modules/aggregator/views_handler_filter_aggregator_category_cid.inc
+++ b/sites/all/modules/views/modules/aggregator/views_handler_filter_aggregator_category_cid.inc
@@ -1,6 +1,8 @@
 <?php
 /**
  * Filter by aggregator category cid
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_aggregator_category_cid extends views_handler_filter_in_operator {
   function get_value_options() {
diff --git a/sites/all/modules/views/modules/comment.views.inc b/sites/all/modules/views/modules/comment.views.inc
index 772ac24392d0cfc4cdb3e3d22d6bfb457dc2f7c2..e22ccd54efcaa6e4efd5ef988efc3b606f48a47a 100644
--- a/sites/all/modules/views/modules/comment.views.inc
+++ b/sites/all/modules/views/modules/comment.views.inc
@@ -256,6 +256,9 @@ function comment_views_data() {
     'field' => array(
       'handler' => 'views_handler_field_boolean',
       'click sortable' => TRUE,
+      'output formats' => array(
+        'approved-not-approved' => array(t('Approved'), t('Not Approved')),
+      ),
     ),
     'filter' => array(
       'handler' => 'views_handler_filter_boolean_operator',
@@ -606,6 +609,7 @@ function comment_views_plugins() {
         'theme' => 'views_view_row_rss',
         'path' => drupal_get_path('module', 'views') . '/modules/comment', // not necessary for most modules
         'base' => array('comment'), // only works with 'comment' as base.
+        'uses options' => TRUE,
         'type' => 'feed',
         'help topic' => 'style-comment-rss',
       ),
diff --git a/sites/all/modules/views/modules/comment.views_default.inc b/sites/all/modules/views/modules/comment.views_default.inc
index 5a4587cc92398dcfd651928025b6000fc4141ad9..44ebac9017e3b42bf853f6d6454dcf456a8ebc18 100644
--- a/sites/all/modules/views/modules/comment.views_default.inc
+++ b/sites/all/modules/views/modules/comment.views_default.inc
@@ -182,6 +182,10 @@ function comment_views_default_views() {
   );
   $handler->display->display_options['style_options']['override'] = 1;
   $handler->display->display_options['style_options']['order'] = 'desc';
+  /* Relationship: Content: Author */
+  $handler->display->display_options['relationships']['uid']['id'] = 'uid';
+  $handler->display->display_options['relationships']['uid']['table'] = 'node';
+  $handler->display->display_options['relationships']['uid']['field'] = 'uid';
   /* Field: Content: Type */
   $handler->display->display_options['fields']['type']['id'] = 'type';
   $handler->display->display_options['fields']['type']['table'] = 'node';
@@ -194,6 +198,7 @@ function comment_views_default_views() {
   $handler->display->display_options['fields']['name']['id'] = 'name';
   $handler->display->display_options['fields']['name']['table'] = 'users';
   $handler->display->display_options['fields']['name']['field'] = 'name';
+  $handler->display->display_options['fields']['name']['relationship'] = 'uid';
   $handler->display->display_options['fields']['name']['label'] = 'Author';
   /* Field: Content: Comment count */
   $handler->display->display_options['fields']['comment_count']['id'] = 'comment_count';
diff --git a/sites/all/modules/views/modules/comment/views_handler_argument_comment_user_uid.inc b/sites/all/modules/views/modules/comment/views_handler_argument_comment_user_uid.inc
index dfba09ca48d756deb5a19667d0e78d953e72fe7a..11144a9d96f4b36d0c9c455ee49236092bb5e50c 100644
--- a/sites/all/modules/views/modules/comment/views_handler_argument_comment_user_uid.inc
+++ b/sites/all/modules/views/modules/comment/views_handler_argument_comment_user_uid.inc
@@ -3,6 +3,8 @@
 /**
  * Argument handler to accept a user id to check for nodes that
  * user posted or commented on.
+ *
+ * @ingroup views_argument_handlers
  */
 class views_handler_argument_comment_user_uid extends views_handler_argument {
   function title() {
diff --git a/sites/all/modules/views/modules/comment/views_handler_field_comment.inc b/sites/all/modules/views/modules/comment/views_handler_field_comment.inc
index 9458bad5eedbe516b84d968ff813fc3ea81df5b8..b855b63357b5bd9fc880ff1d2ff8fbc7ccbd20aa 100644
--- a/sites/all/modules/views/modules/comment/views_handler_field_comment.inc
+++ b/sites/all/modules/views/modules/comment/views_handler_field_comment.inc
@@ -1,6 +1,8 @@
 <?php
 /**
- * Field handler to allow linking to a comment
+ * Field handler to allow linking to a comment.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_comment extends views_handler_field {
   /**
diff --git a/sites/all/modules/views/modules/comment/views_handler_field_comment_depth.inc b/sites/all/modules/views/modules/comment/views_handler_field_comment_depth.inc
index 17b080a9fff8779adbcd3148d0a510642e66151f..8872a6ad4afadee0a16f4e62545f21f5919553c4 100644
--- a/sites/all/modules/views/modules/comment/views_handler_field_comment_depth.inc
+++ b/sites/all/modules/views/modules/comment/views_handler_field_comment_depth.inc
@@ -1,12 +1,15 @@
 <?php
 /**
- * Field handler to display the depth of a comment
+ * Field handler to display the depth of a comment.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_comment_depth extends views_handler_field {
   /**
    * Work out the depth of this comment
    */
   function render($values) {
-    return count(explode('.', $values->comments_thread)) - 1;
+    $comment_thread = $this->get_value($values);
+    return count(explode('.', $comment_thread)) - 1;
   }
 }
diff --git a/sites/all/modules/views/modules/comment/views_handler_field_comment_link.inc b/sites/all/modules/views/modules/comment/views_handler_field_comment_link.inc
index fd4ed7a82dd49f197a7c128be5587a2c99c965b7..e0e0ba713ca35ae9aaef99e44440a608519df3bf 100644
--- a/sites/all/modules/views/modules/comment/views_handler_field_comment_link.inc
+++ b/sites/all/modules/views/modules/comment/views_handler_field_comment_link.inc
@@ -1,12 +1,12 @@
 <?php
 /**
  * Base field handler to present a link.
+ *
+ * @ingroup views_field_handlers
  */
-class views_handler_field_comment_link extends views_handler_field {
+class views_handler_field_comment_link extends views_handler_field_entity {
   function construct() {
     parent::construct();
-    $this->additional_fields['cid'] = 'cid';
-    $this->additional_fields['nid'] = 'nid';
   }
 
   function option_definition() {
@@ -42,8 +42,9 @@ class views_handler_field_comment_link extends views_handler_field {
 
   function render_link($data, $values) {
     $text = !empty($this->options['text']) ? $this->options['text'] : t('view');
-    $nid = $this->get_value($values, 'nid');
-    $cid = $this->get_value($values, 'cid');
+    $comment = $this->get_value($values);
+    $nid = $comment->nid;
+    $cid = $comment->cid;
 
     $this->options['alter']['make_link'] = TRUE;
     $this->options['alter']['html'] = TRUE;
diff --git a/sites/all/modules/views/modules/comment/views_handler_field_comment_link_approve.inc b/sites/all/modules/views/modules/comment/views_handler_field_comment_link_approve.inc
index bd39fa9d8cfb45d58e80b20ed6e2402533c6f99c..8063e2012e2391fd2c85fa0997ab40d3bc567664 100644
--- a/sites/all/modules/views/modules/comment/views_handler_field_comment_link_approve.inc
+++ b/sites/all/modules/views/modules/comment/views_handler_field_comment_link_approve.inc
@@ -2,12 +2,10 @@
 /**
  * @file
  * Provides a comment approve link.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_comment_link_approve extends views_handler_field_comment_link {
-  function construct() {
-    parent::construct();
-    $this->additional_fields['status'] = 'status';
-  }
   function access() {
     //needs permission to administer comments in general
     return user_access('administer comments');
diff --git a/sites/all/modules/views/modules/comment/views_handler_field_comment_link_delete.inc b/sites/all/modules/views/modules/comment/views_handler_field_comment_link_delete.inc
index da669a08cda1c511cb82ab15d8de227e9a8e8fca..b74661b3259ca63971b1a51ba14661838d6807ab 100644
--- a/sites/all/modules/views/modules/comment/views_handler_field_comment_link_delete.inc
+++ b/sites/all/modules/views/modules/comment/views_handler_field_comment_link_delete.inc
@@ -1,6 +1,8 @@
 <?php
 /**
  * Field handler to present a link to delete a node.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_comment_link_delete extends views_handler_field_comment_link {
   function access() {
diff --git a/sites/all/modules/views/modules/comment/views_handler_field_comment_link_edit.inc b/sites/all/modules/views/modules/comment/views_handler_field_comment_link_edit.inc
index 2cac79b55f327e3d76537019ac66168fb6fb0134..ffd1f935c991fe02f9c36da3756a379431e4b0b7 100644
--- a/sites/all/modules/views/modules/comment/views_handler_field_comment_link_edit.inc
+++ b/sites/all/modules/views/modules/comment/views_handler_field_comment_link_edit.inc
@@ -1,13 +1,10 @@
 <?php
 /**
  * Field handler to present a link node edit.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_comment_link_edit extends views_handler_field_comment_link {
-  function construct() {
-    parent::construct();
-    $this->additional_fields['uid'] = 'uid';
-  }
-
   function option_definition() {
     $options = parent::option_definition();
     $options['destination'] = array('default' => FALSE);
@@ -30,9 +27,7 @@ class views_handler_field_comment_link_edit extends views_handler_field_comment_
   function render_link($data, $values) {
     parent::render_link($data, $values);
     // ensure user has access to edit this comment.
-    $comment = new stdClass();
-    $comment->cid = $this->get_value($values, 'cid');
-    $comment->uid = $this->get_value($values, 'uid');
+    $comment = $this->get_value($values);
     if (!comment_access('edit', $comment)) {
       return;
     }
diff --git a/sites/all/modules/views/modules/comment/views_handler_field_comment_link_reply.inc b/sites/all/modules/views/modules/comment/views_handler_field_comment_link_reply.inc
index 1b922c7168d816c197647b0b943b2aaf89aa8f77..15641646837987b7ee5329cb6d518c07031abd7f 100644
--- a/sites/all/modules/views/modules/comment/views_handler_field_comment_link_reply.inc
+++ b/sites/all/modules/views/modules/comment/views_handler_field_comment_link_reply.inc
@@ -2,6 +2,8 @@
 
 /**
  * Field handler to present a link to delete a node.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_comment_link_reply extends views_handler_field_comment_link {
   function access() {
diff --git a/sites/all/modules/views/modules/comment/views_handler_field_comment_node_link.inc b/sites/all/modules/views/modules/comment/views_handler_field_comment_node_link.inc
index 4cd78de773f41a0f90d3154b4a16e501f2be4ba3..0e4f6101e43a2db4390c8c4dadf3657d206a0258 100644
--- a/sites/all/modules/views/modules/comment/views_handler_field_comment_node_link.inc
+++ b/sites/all/modules/views/modules/comment/views_handler_field_comment_node_link.inc
@@ -1,8 +1,10 @@
 <?php
 /**
-* Handler for showing comment module's node link.
+ * Handler for showing comment module's node link.
+ *
+ * @ingroup views_field_handlers
  */
-class views_handler_field_comment_node_link extends views_handler_field {
+class views_handler_field_comment_node_link extends views_handler_field_entity {
   function construct() {
     parent::construct();
 
@@ -43,10 +45,7 @@ class views_handler_field_comment_node_link extends views_handler_field {
 
   function render($values) {
     // Build fake $node.
-    $node = new stdClass();
-    $node->nid      = $this->get_value($values, 'nid');
-    $node->type     = $this->get_value($values, 'type');
-    $node->comment  = $this->get_value($values, 'comment');
+    $node = $this->get_value($values);
 
     // Call comment.module's hook_link: comment_link($type, $node = NULL, $teaser = FALSE)
     // Call node by reference so that something is changed here
diff --git a/sites/all/modules/views/modules/comment/views_handler_field_comment_username.inc b/sites/all/modules/views/modules/comment/views_handler_field_comment_username.inc
index 7362643aed22b4df858b1722ac97d1e00e01b97c..6b6186e44b003ab9ff72a98ddd1519b92b463b32 100644
--- a/sites/all/modules/views/modules/comment/views_handler_field_comment_username.inc
+++ b/sites/all/modules/views/modules/comment/views_handler_field_comment_username.inc
@@ -1,6 +1,8 @@
 <?php
 /**
- * Field handler to allow linking to a user account or homepage
+ * Field handler to allow linking to a user account or homepage.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_comment_username extends views_handler_field {
   /**
diff --git a/sites/all/modules/views/modules/comment/views_handler_field_last_comment_timestamp.inc b/sites/all/modules/views/modules/comment/views_handler_field_last_comment_timestamp.inc
index 64ed7dd1398b9801cef6cb38ff2a1951453f3647..2bfa970bbcdba29305afc85def17429e2bda6e33 100644
--- a/sites/all/modules/views/modules/comment/views_handler_field_last_comment_timestamp.inc
+++ b/sites/all/modules/views/modules/comment/views_handler_field_last_comment_timestamp.inc
@@ -1,5 +1,10 @@
 <?php
 
+/**
+ * Field handler to display the timestamp of a comment with the count of comments.
+ *
+ * @ingroup views_field_handlers
+ */
 class views_handler_field_last_comment_timestamp extends views_handler_field_date {
   function construct() {
     parent::construct();
diff --git a/sites/all/modules/views/modules/comment/views_handler_field_ncs_last_comment_name.inc b/sites/all/modules/views/modules/comment/views_handler_field_ncs_last_comment_name.inc
index 648be92bad55c96253971944af5b011af1d86c2f..63f948f0bb52df652abf80da0e59ef70026111a1 100644
--- a/sites/all/modules/views/modules/comment/views_handler_field_ncs_last_comment_name.inc
+++ b/sites/all/modules/views/modules/comment/views_handler_field_ncs_last_comment_name.inc
@@ -1,7 +1,9 @@
 <?php
 
 /**
- * Field handler to present the name of the last comment poster
+ * Field handler to present the name of the last comment poster.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_ncs_last_comment_name extends views_handler_field {
   function query() {
diff --git a/sites/all/modules/views/modules/comment/views_handler_field_ncs_last_updated.inc b/sites/all/modules/views/modules/comment/views_handler_field_ncs_last_updated.inc
index 6c3e139dcc9d9ea8a0d2a331ee981e35256c79af..3950ffbbddbe43e7a71bc1e1a695dbdf68c1df77 100644
--- a/sites/all/modules/views/modules/comment/views_handler_field_ncs_last_updated.inc
+++ b/sites/all/modules/views/modules/comment/views_handler_field_ncs_last_updated.inc
@@ -1,6 +1,8 @@
 <?php
 /**
- * Field handler to display the newer of last comment / node updated
+ * Field handler to display the newer of last comment / node updated.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_ncs_last_updated extends views_handler_field_date {
   function query() {
diff --git a/sites/all/modules/views/modules/comment/views_handler_field_node_comment.inc b/sites/all/modules/views/modules/comment/views_handler_field_node_comment.inc
index 4f89d64c6dcfcaf31b1a20beafff307d01d80bf7..6892feda42994de47a384e8bf86a3c596855e93a 100644
--- a/sites/all/modules/views/modules/comment/views_handler_field_node_comment.inc
+++ b/sites/all/modules/views/modules/comment/views_handler_field_node_comment.inc
@@ -1,7 +1,9 @@
 <?php
 
 /**
- * Display node comment status
+ * Display node comment status.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_node_comment extends views_handler_field {
   function render($values) {
diff --git a/sites/all/modules/views/modules/comment/views_handler_field_node_new_comments.inc b/sites/all/modules/views/modules/comment/views_handler_field_node_new_comments.inc
index 6c5835f007b39c27917371d6d814997be0984eaa..0ecdfc657a54816ebda54fb1f94117ebcac7e4a4 100644
--- a/sites/all/modules/views/modules/comment/views_handler_field_node_new_comments.inc
+++ b/sites/all/modules/views/modules/comment/views_handler_field_node_new_comments.inc
@@ -1,7 +1,9 @@
 <?php
 
 /**
- * Field handler to display the number of new comments
+ * Field handler to display the number of new comments.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_node_new_comments extends views_handler_field_numeric {
   function init(&$view, &$options) {
diff --git a/sites/all/modules/views/modules/comment/views_handler_filter_comment_user_uid.inc b/sites/all/modules/views/modules/comment/views_handler_filter_comment_user_uid.inc
index 8d83b2559c5395ab89da2d5137e4e8efd7aa7321..4f9e71189156f22abfd1e22a205e46638e6ef961 100644
--- a/sites/all/modules/views/modules/comment/views_handler_filter_comment_user_uid.inc
+++ b/sites/all/modules/views/modules/comment/views_handler_filter_comment_user_uid.inc
@@ -3,6 +3,8 @@
 /**
  * Filter handler to accept a user id to check for nodes that user posted or
  * commented on.
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_comment_user_uid extends views_handler_filter_user_name {
   function query() {
@@ -17,6 +19,6 @@ class views_handler_filter_comment_user_uid extends views_handler_filter_user_na
       ->condition("$this->table_alias.uid", $this->value, $this->operator)
       ->exists($subselect);
 
-    $this->query->add_where(0, $condition);
+    $this->query->add_where($this->options['group'], $condition);
   }
 }
diff --git a/sites/all/modules/views/modules/comment/views_handler_filter_ncs_last_updated.inc b/sites/all/modules/views/modules/comment/views_handler_filter_ncs_last_updated.inc
index f931fe97c573ddb26ef7c48027f807a811b1f3d8..3818db9663bd3096b84d0964e52c390e66a831e8 100644
--- a/sites/all/modules/views/modules/comment/views_handler_filter_ncs_last_updated.inc
+++ b/sites/all/modules/views/modules/comment/views_handler_filter_ncs_last_updated.inc
@@ -1,6 +1,8 @@
 <?php
 /**
  * Filter handler for the newer of last comment / node updated
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_ncs_last_updated extends views_handler_filter_date {
   function query() {
diff --git a/sites/all/modules/views/modules/comment/views_handler_filter_node_comment.inc b/sites/all/modules/views/modules/comment/views_handler_filter_node_comment.inc
index 9351c185e75f8dce28963ca1a03b1631967cddba..659eaa6431edecf64d9667f7e95fee1c1afb6afb 100644
--- a/sites/all/modules/views/modules/comment/views_handler_filter_node_comment.inc
+++ b/sites/all/modules/views/modules/comment/views_handler_filter_node_comment.inc
@@ -2,6 +2,8 @@
 
 /**
  * Filter based on comment node status
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_node_comment extends views_handler_filter_in_operator {
   function get_value_options() {
diff --git a/sites/all/modules/views/modules/comment/views_handler_sort_ncs_last_comment_name.inc b/sites/all/modules/views/modules/comment/views_handler_sort_ncs_last_comment_name.inc
index 397bb6c68cb48efdc594cca81053777302add76d..8eca177305421903ac589864fc775e9cee071d3c 100644
--- a/sites/all/modules/views/modules/comment/views_handler_sort_ncs_last_comment_name.inc
+++ b/sites/all/modules/views/modules/comment/views_handler_sort_ncs_last_comment_name.inc
@@ -1,7 +1,9 @@
 <?php
 /**
  * Sort handler to sort by last comment name which might be in 2 different
- * fields
+ * fields.
+ *
+ * @ingroup views_sort_handlers
  */
 class views_handler_sort_ncs_last_comment_name extends views_handler_sort {
   function query() {
diff --git a/sites/all/modules/views/modules/comment/views_handler_sort_ncs_last_updated.inc b/sites/all/modules/views/modules/comment/views_handler_sort_ncs_last_updated.inc
index 39ab749a685cc8605726afac714b616a075de14e..04b01a1e5ab49bd7a1b585bee55f92dbc9d82381 100644
--- a/sites/all/modules/views/modules/comment/views_handler_sort_ncs_last_updated.inc
+++ b/sites/all/modules/views/modules/comment/views_handler_sort_ncs_last_updated.inc
@@ -1,6 +1,8 @@
 <?php
 /**
- * Sort handler for the newer of last comment / node updated
+ * Sort handler for the newer of last comment / node updated.
+ *
+ * @ingroup views_sort_handlers
  */
 class views_handler_sort_ncs_last_updated extends views_handler_sort_date {
   function query() {
diff --git a/sites/all/modules/views/modules/comment/views_plugin_row_comment_rss.inc b/sites/all/modules/views/modules/comment/views_plugin_row_comment_rss.inc
index 46a9d871434165ebd97be00bad6efbeb10de4780..7576bb51bff0894f73ace4cd9b40cee891450d5e 100644
--- a/sites/all/modules/views/modules/comment/views_plugin_row_comment_rss.inc
+++ b/sites/all/modules/views/modules/comment/views_plugin_row_comment_rss.inc
@@ -11,6 +11,32 @@ class views_plugin_row_comment_rss extends views_plugin_row {
    var $base_table = 'comment';
    var $base_field = 'cid';
 
+  function option_definition() {
+    $options = parent::option_definition();
+
+    $options['item_length'] = array('default' => 'default');
+    $options['links'] = FALSE;
+
+    return $options;
+  }
+
+  function options_form(&$form, &$form_state) {
+    parent::options_form($form, $form_state);
+
+    $form['item_length'] = array(
+      '#type' => 'select',
+      '#title' => t('Display type'),
+      '#options' => $this->options_form_summary_options(),
+      '#default_value' => $this->options['item_length'],
+    );
+    $form['links'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Display links'),
+      '#default_value' => $this->options['links'],
+    );
+  }
+
+
   function pre_render($result) {
     $cids = array();
     $nids = array();
@@ -28,6 +54,27 @@ class views_plugin_row_comment_rss extends views_plugin_row {
     $this->nodes = node_load_multiple($nids);
   }
 
+  /**
+   * Return the main options, which are shown in the summary title
+   *
+   * @see views_plugin_row_node_rss::options_form_summary_options()
+   * @todo: Maybe provide a views_plugin_row_rss_entity and reuse this method
+   * in views_plugin_row_comment|node_rss.inc
+   */
+  function options_form_summary_options() {
+    $entity_info = entity_get_info('node');
+    $options = array();
+    if (!empty($entity_info['view modes'])) {
+      foreach ($entity_info['view modes'] as $mode => $settings) {
+        $options[$mode] = $settings['label'];
+      }
+    }
+    $options['title'] = t('Title only');
+    $options['default'] = t('Use site default RSS settings');
+    return $options;
+  }
+
+
   function render($row) {
     global $base_url;
 
@@ -70,7 +117,7 @@ class views_plugin_row_comment_rss extends views_plugin_row {
 
     // The comment gets built and modules add to or modify
     // $comment->rss_elements and $comment->rss_namespaces.
-    $build = comment_view($comment, $this->nodes[$comment->cid], 'rss');
+    $build = comment_view($comment, $this->nodes[$comment->nid], 'rss');
     unset($build['#theme']);
 
     if (!empty($comment->rss_namespaces)) {
diff --git a/sites/all/modules/views/modules/contact/views_handler_field_contact_link.inc b/sites/all/modules/views/modules/contact/views_handler_field_contact_link.inc
index 3bf0ad15d006884f3160bf0f615457954c8eda1d..0a44f21b2e251068345b146e365d86faa7c090e2 100644
--- a/sites/all/modules/views/modules/contact/views_handler_field_contact_link.inc
+++ b/sites/all/modules/views/modules/contact/views_handler_field_contact_link.inc
@@ -1,25 +1,12 @@
 <?php
 /**
  * A field that links to the user contact page, if access is permitted.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_contact_link extends views_handler_field_user_link {
 
-  function option_definition() {
-    $options = parent::option_definition();
-    $options['link_display'] = array('default' => 'link', 'translatable' => FALSE);
-    return $options;
-  }
-
   function options_form(&$form, &$form_state) {
-    $form['link_display'] = array(
-      '#title' => t('Type of link'),
-      '#default_value' => $this->options['link_display'],
-      '#type' => 'select',
-      '#options' => array(
-        'link' => t('Link'),
-        'icon' => t('Icon'),
-      ),
-    );
     $form['text']['#title'] = t('Link label');
     $form['text']['#required'] = TRUE;
     $form['text']['#default_value'] = empty($this->options['text']) ? t('contact') : $this->options['text'];
@@ -30,14 +17,7 @@ class views_handler_field_contact_link extends views_handler_field_user_link {
   // We must override the access method in the parent class, as that requires
   // the 'access user profiles' permission, which the contact form does not.
   function access() {
-    global $user;
-
-    // Only registered users can view other registered user's contact page.
-    if (empty($user->uid)) {
-      return FALSE;
-    }
-
-    return TRUE;
+    return user_access('access user contact forms');
   }
 
   function render_link($data, $values) {
@@ -56,20 +36,15 @@ class views_handler_field_contact_link extends views_handler_field_user_link {
     // Check access when we pull up the user account so we know
     // if the user has made the contact page available.
     $menu_item = menu_get_item("user/$uid/contact");
-    if (!$menu_item['access'] || empty($account->contact)) {
+    if (!$menu_item['access'] || empty($account->data['contact'])) {
       return;
     }
 
-    $this->options['alter']['path'] = 'user/'. $account->uid .'/contact';
+    $this->options['alter']['make_link'] = TRUE;
+    $this->options['alter']['path'] = 'user/' . $account->uid . '/contact';
     $this->options['alter']['attributes'] = array('title' => t('Contact %user', array('%user' => $account->name)));
 
-    if ($this->options['link_display'] == 'icon') {
-      $text = theme('image', array('path' => 'misc/forum-new.png'));
-      $this->options['alter']['html'] = TRUE;
-    }
-    else {
-      $text = $this->options['text'];
-    }
+    $text = $this->options['text'];
 
     return $text;
   }
diff --git a/sites/all/modules/views/modules/field.views.inc b/sites/all/modules/views/modules/field.views.inc
index 7dc5cb20cccc68ca6e30c48a220651e07069cd5e..dd4363fd1ca8e1e1b046c445372068548c43faac 100644
--- a/sites/all/modules/views/modules/field.views.inc
+++ b/sites/all/modules/views/modules/field.views.inc
@@ -373,6 +373,9 @@ function field_views_field_default_views_data($field) {
           'title short' => $title_short_delta,
           'help' => t('Delta - Appears in: @bundles.', array('@bundles' => implode(', ', $bundles_names))),
         );
+        $data[$table]['delta']['field'] = array(
+          'handler' => 'views_handler_field_numeric',
+        );
         $data[$table]['delta']['argument'] = array(
           'field' => 'delta',
           'table' => $table,
@@ -413,6 +416,9 @@ function list_field_views_data($field) {
       if (isset($field_data['filter']) && $field != 'delta') {
         $data[$table_name][$field]['filter']['handler'] = 'views_handler_filter_field_list';
       }
+      if (isset($field_data['argument']) && $field != 'delta') {
+        $data[$table_name][$field]['argument']['handler'] = 'views_handler_argument_field_list';
+      }
     }
   }
   return $data;
diff --git a/sites/all/modules/views/modules/field/views_handler_argument_field_list.inc b/sites/all/modules/views/modules/field/views_handler_argument_field_list.inc
new file mode 100644
index 0000000000000000000000000000000000000000..f8f10e9612799816154f91dcfc1d9c3ae79ad3b3
--- /dev/null
+++ b/sites/all/modules/views/modules/field/views_handler_argument_field_list.inc
@@ -0,0 +1,56 @@
+<?php
+/**
+ * @file
+ * Contains views_handler_argument_field_list handler
+ */
+
+/**
+ * Argument handler for list field to show the human readable name in the summary.
+ *
+ * @ingroup views_argument_handlers
+ */
+class views_handler_argument_field_list extends views_handler_argument_numeric {
+  /**
+   * @var array
+   * Stores the allowed values of this field.
+   */
+  var $allowed_values = NULL;
+
+  function init(&$view, &$options) {
+    parent::init($view, $options);
+    $field = field_info_field($this->definition['field_name']);
+    $this->allowed_values = list_allowed_values($field);
+  }
+
+  function option_definition() {
+    $options = parent::option_definition();
+    $options['summary']['contains']['human'] = array('default' => FALSE);
+
+    return $options;
+  }
+
+  function options_form(&$form, &$form_state) {
+    parent::options_form($form, $form_state);
+
+    $form['summary']['human'] = array(
+      '#title' => t('Display list value as human readable'),
+      '#type' => 'checkbox',
+      '#default_value' => $this->options['summary']['human'],#
+      '#dependency' => array('radio:options[default_action]' => array('summary')),
+    );
+  }
+
+
+  function summary_name($data) {
+    $value = $data->{$this->name_alias};
+    // If the list element has a human readable name show it,
+    if (isset($this->allowed_values[$value]) && !empty($this->options['summary']['human'])) {
+      return field_filter_xss($this->allowed_values[$value]);
+    }
+    // else fallback to the key.
+    else {
+      return check_plain($value);
+    }
+  }
+}
+
diff --git a/sites/all/modules/views/modules/field/views_handler_field_field.inc b/sites/all/modules/views/modules/field/views_handler_field_field.inc
index 26c54fcdc9a495415e10f4cf1f6f5dd522963415..8e0b767507e01bb61bbf6972080b3e7b31afd475 100644
--- a/sites/all/modules/views/modules/field/views_handler_field_field.inc
+++ b/sites/all/modules/views/modules/field/views_handler_field_field.inc
@@ -147,7 +147,7 @@ class views_handler_field_field extends views_handler_field {
     }
     else {
       $this->field_alias = $this->query->add_field($this->base_table_alias, $entity_info['entity keys']['revision'], '', $params);
-      $this->aliases['entity id'] = $this->query->add_field($this->base_table_alias, $entity_info['entity keys']['id'], '', $params);
+      $this->aliases['entity_id'] = $this->query->add_field($this->base_table_alias, $entity_info['entity keys']['id'], '', $params);
     }
 
 
@@ -166,7 +166,7 @@ class views_handler_field_field extends views_handler_field {
       // Add the fields that we're actually grouping on.
       $options = array();
 
-      if ($this->options['group_column'] != 'entity id') {
+      if ($this->options['group_column'] != 'entity_id') {
         $options = array($this->options['group_column'] => $this->options['group_column']);
       }
 
@@ -195,11 +195,24 @@ class views_handler_field_field extends views_handler_field {
 
       // Filter by language, if field translation is enabled.
       $field = $this->field_info;
-      if (field_is_translatable($entity_type, $field) && !empty($this->query->options['field_language_add_to_query'])) {
+      if (field_is_translatable($entity_type, $field) && !empty($this->view->display_handler->options['field_language_add_to_query'])) {
         $column = $this->table_alias . '.language';
         // By the same reason as field_language the field might be LANGUAGE_NONE in reality so allow it as well.
         // @see this::field_language()
-        $this->query->add_where(0, $column, array($this->query->options['field_language'], LANGUAGE_NONE));
+        global $language_content;
+        $default_language = language_default('language');
+        $language = str_replace(array('***CURRENT_LANGUAGE***', '***DEFAULT_LANGUAGE***'),
+                                array($language_content->language, $default_language),
+                                $this->view->display_handler->options['field_language']);
+        $placeholder = $this->placeholder();
+        $language_fallback_candidates = array($language);
+        if (variable_get('locale_field_language_fallback', TRUE) && module_exists('locale')) {
+          $language_fallback_candidates = array_merge($language_fallback_candidates, language_fallback_get_candidates());
+        }
+        else {
+          $language_fallback_candidates[] = LANGUAGE_NONE;
+        }
+        $this->query->add_where_expression(0, "$column IN($placeholder) OR $column IS NULL", array($placeholder => $language_fallback_candidates));
       }
     }
 
@@ -520,7 +533,7 @@ class views_handler_field_field extends views_handler_field {
     // With "field API" fields, the column target of the grouping function
     // and any additional grouping columns must be specified.
     $group_columns = array(
-      'entity id' => t('Entity ID'),
+      'entity_id' => t('Entity ID'),
     ) + drupal_map_assoc(array_keys($this->field_info['columns']), 'ucfirst');
 
     $form['group_column'] = array(
@@ -569,7 +582,7 @@ class views_handler_field_field extends views_handler_field {
           }
           else {
             $revision_id = $object->{$this->field_alias};
-            $entity_id = $object->{$this->aliases['entity id']};
+            $entity_id = $object->{$this->aliases['entity_id']};
             $entities_by_type[$entity_type][$key] = array($entity_id, $revision_id);
           }
         }
@@ -697,10 +710,15 @@ class views_handler_field_field extends views_handler_field {
       // Offset is calculated differently when row grouping for a field is
       // not enabled. Since there are multiple rows, the delta needs to be
       // taken into account, so that different values are shown per row.
-      if (!$this->options['group_rows'] && isset($values->{$this->aliases['delta']})) {
+      if (!$this->options['group_rows'] && isset($this->aliases['delta']) && isset($values->{$this->aliases['delta']})) {
         $delta_limit = 1;
         $offset = $values->{$this->aliases['delta']};
       }
+      // Single fields don't have a delta available so choose 0.
+      elseif (!$this->options['group_rows'] && !$this->multiple) {
+        $delta_limit = 1;
+        $offset = 0;
+      }
       else {
         $delta_limit = $this->options['delta_limit'];
         $offset = intval($this->options['delta_offset']);
diff --git a/sites/all/modules/views/modules/field/views_handler_filter_field_list.inc b/sites/all/modules/views/modules/field/views_handler_filter_field_list.inc
index dcae181647052ce6df12aad1473948ad25d8ffed..971fb353e128ce7546200ea0a21ff018340d55bf 100644
--- a/sites/all/modules/views/modules/field/views_handler_filter_field_list.inc
+++ b/sites/all/modules/views/modules/field/views_handler_filter_field_list.inc
@@ -1,5 +1,10 @@
 <?php
 
+/**
+ * Filter handler which uses list-fields as options.
+ *
+ * @ingroup views_filter_handlers
+ */
 class views_handler_filter_field_list extends views_handler_filter_in_operator {
   function get_value_options() {
     $field = field_info_field($this->definition['field_name']);
diff --git a/sites/all/modules/views/modules/field/views_handler_relationship_entity_reverse.inc b/sites/all/modules/views/modules/field/views_handler_relationship_entity_reverse.inc
index 72b54da0e1c68b9f461b04ae5626eb3316a92c03..c83fa11fea394b6c8c678d11fb6eb886e44e4d5c 100644
--- a/sites/all/modules/views/modules/field/views_handler_relationship_entity_reverse.inc
+++ b/sites/all/modules/views/modules/field/views_handler_relationship_entity_reverse.inc
@@ -4,6 +4,11 @@
  * Views' relationship handlers.
  */
 
+/**
+ * A relationship handlers which reverse entity references.
+ *
+ * @ingroup views_relationship_handlers
+ */
 class views_handler_relationship_entity_reverse extends views_handler_relationship  {
   function init(&$view, &$options) {
     parent::init($view, $options);
diff --git a/sites/all/modules/views/modules/filter/views_handler_field_filter_format_name.inc b/sites/all/modules/views/modules/filter/views_handler_field_filter_format_name.inc
index dec6dacc71847f1d9d27fc6b1bba765a2194cfc7..9b7b4570b077c64e306a34b2e18a18fb1159a189 100644
--- a/sites/all/modules/views/modules/filter/views_handler_field_filter_format_name.inc
+++ b/sites/all/modules/views/modules/filter/views_handler_field_filter_format_name.inc
@@ -1,6 +1,8 @@
 <?php
 /**
  * Field handler to output the name of an input format.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_filter_format_name extends views_handler_field {
   function construct() {
diff --git a/sites/all/modules/views/modules/locale/views_handler_argument_locale_group.inc b/sites/all/modules/views/modules/locale/views_handler_argument_locale_group.inc
index 0b092b401bcd99a09a442fdca607918ca655e682..15255603414fa8e68d1fc1eeac802703ea55ee70 100644
--- a/sites/all/modules/views/modules/locale/views_handler_argument_locale_group.inc
+++ b/sites/all/modules/views/modules/locale/views_handler_argument_locale_group.inc
@@ -2,6 +2,8 @@
 
 /**
  * Argument handler to accept a language.
+ *
+ * @ingroup views_argument_handlers
  */
 class views_handler_argument_locale_group extends views_handler_argument {
   function construct() {
diff --git a/sites/all/modules/views/modules/locale/views_handler_argument_locale_language.inc b/sites/all/modules/views/modules/locale/views_handler_argument_locale_language.inc
index 42afbe78c51f6eabd2c87276ef0aa0fde2fbfd8b..8d4f38c76ac44afc3b1ca86ce6b47762298ed6a0 100644
--- a/sites/all/modules/views/modules/locale/views_handler_argument_locale_language.inc
+++ b/sites/all/modules/views/modules/locale/views_handler_argument_locale_language.inc
@@ -2,6 +2,8 @@
 
 /**
  * Argument handler to accept a language.
+ *
+ * @ingroup views_argument_handlers
  */
 class views_handler_argument_locale_language extends views_handler_argument {
   function construct() {
diff --git a/sites/all/modules/views/modules/locale/views_handler_field_locale_group.inc b/sites/all/modules/views/modules/locale/views_handler_field_locale_group.inc
index a8e7a32e9f71dca414de5863190ada43ef382560..22339e81f817c4febac9832711c3f9951976231f 100644
--- a/sites/all/modules/views/modules/locale/views_handler_field_locale_group.inc
+++ b/sites/all/modules/views/modules/locale/views_handler_field_locale_group.inc
@@ -2,6 +2,8 @@
 
 /**
  * Field handler to translate a group into its readable form.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_locale_group extends views_handler_field {
   function render($values) {
diff --git a/sites/all/modules/views/modules/locale/views_handler_field_locale_language.inc b/sites/all/modules/views/modules/locale/views_handler_field_locale_language.inc
index 140c23adf540de3721f2823bfea4982d593448a3..0ff36a877578253f4834db457fb899c81818f27d 100644
--- a/sites/all/modules/views/modules/locale/views_handler_field_locale_language.inc
+++ b/sites/all/modules/views/modules/locale/views_handler_field_locale_language.inc
@@ -2,6 +2,8 @@
 
 /**
  * Field handler to translate a language into its readable form.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_locale_language extends views_handler_field {
   function option_definition() {
diff --git a/sites/all/modules/views/modules/locale/views_handler_field_locale_link_edit.inc b/sites/all/modules/views/modules/locale/views_handler_field_locale_link_edit.inc
index 271f858e63505d66d00148f71323e77a87d94166..6c8f8f42078a3100a58bf7d58233803b1cc2b9a3 100644
--- a/sites/all/modules/views/modules/locale/views_handler_field_locale_link_edit.inc
+++ b/sites/all/modules/views/modules/locale/views_handler_field_locale_link_edit.inc
@@ -2,6 +2,8 @@
 
 /**
  * Field handler to present a link to edit a translation.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_locale_link_edit extends views_handler_field {
   function construct() {
diff --git a/sites/all/modules/views/modules/locale/views_handler_filter_locale_group.inc b/sites/all/modules/views/modules/locale/views_handler_filter_locale_group.inc
index 75820edfe60e5993de10aad7e4e9076432bb1313..1941549b2a71e949a23b10a73cebc84aafce6e09 100644
--- a/sites/all/modules/views/modules/locale/views_handler_filter_locale_group.inc
+++ b/sites/all/modules/views/modules/locale/views_handler_filter_locale_group.inc
@@ -2,6 +2,8 @@
 
 /**
  * Filter by locale group.
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_locale_group extends views_handler_filter_in_operator {
   function get_value_options() {
diff --git a/sites/all/modules/views/modules/locale/views_handler_filter_locale_language.inc b/sites/all/modules/views/modules/locale/views_handler_filter_locale_language.inc
index ed18bce11eb7e5e0885819adcc3382517ca5ebee..9c7ba9098bd4e865218ed51a4825233f32357d89 100644
--- a/sites/all/modules/views/modules/locale/views_handler_filter_locale_language.inc
+++ b/sites/all/modules/views/modules/locale/views_handler_filter_locale_language.inc
@@ -2,6 +2,8 @@
 
 /**
  * Filter by language.
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_locale_language extends views_handler_filter_in_operator {
   function get_value_options() {
diff --git a/sites/all/modules/views/modules/locale/views_handler_filter_locale_version.inc b/sites/all/modules/views/modules/locale/views_handler_filter_locale_version.inc
index 7a472cf7b0a7885f7aabb96d3a5d35e576ac3aa1..d828b2c7fbfca35ec05c21849ecaaecbc899c6e3 100644
--- a/sites/all/modules/views/modules/locale/views_handler_filter_locale_version.inc
+++ b/sites/all/modules/views/modules/locale/views_handler_filter_locale_version.inc
@@ -2,6 +2,8 @@
 
 /**
  * Filter by version.
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_locale_version extends views_handler_filter_in_operator {
   function get_value_options() {
diff --git a/sites/all/modules/views/modules/node.views.inc b/sites/all/modules/views/modules/node.views.inc
index 917df0cef3097531d1fa6bfe7207c0e73336928b..bff3544da95803643cfe3bafb41fb0f6e76c614a 100644
--- a/sites/all/modules/views/modules/node.views.inc
+++ b/sites/all/modules/views/modules/node.views.inc
@@ -692,6 +692,7 @@ function node_views_query_substitutions() {
   return array(
     '***ADMINISTER_NODES***' => intval(user_access('administer nodes')),
     '***VIEW_OWN_UNPUBLISHED_NODES***' => intval(user_access('view own unpublished content')),
+    '***BYPASS_NODE_ACCESS***' =>  intval(user_access('bypass node access')),
   );
 }
 
diff --git a/sites/all/modules/views/modules/node.views_template.inc b/sites/all/modules/views/modules/node.views_template.inc
index 67b1986d3c93f28c20d849cce530d2448e4f86ab..ca0ed75bb4cdba6fc1ac548ca7c3863943fc8fa2 100644
--- a/sites/all/modules/views/modules/node.views_template.inc
+++ b/sites/all/modules/views/modules/node.views_template.inc
@@ -15,7 +15,7 @@ function node_views_templates() {
   $view->base_table = 'node';
   $view->human_name = 'Image Gallery';
   $view->core = 7;
-  $view->api_version = '3.0-alpha1';
+  $view->api_version = '3.0';
   $view->disabled = TRUE; /* Edit this to true to make a default view disabled initially */
 
   /* Display: Defaults */
diff --git a/sites/all/modules/views/modules/node/views_handler_field_history_user_timestamp.inc b/sites/all/modules/views/modules/node/views_handler_field_history_user_timestamp.inc
index 196d443cac30f78e71b67ad7e80f3a9690888d5f..45f6c5684d99cb7d71bf48d070ce915f4da33e2e 100644
--- a/sites/all/modules/views/modules/node/views_handler_field_history_user_timestamp.inc
+++ b/sites/all/modules/views/modules/node/views_handler_field_history_user_timestamp.inc
@@ -3,6 +3,8 @@
  * Field handler to display the marker for new content.
  *
  * The handler is named history_user, because of compability reasons, the table is history.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_history_user_timestamp extends views_handler_field_node {
   function init(&$view, &$options) {
diff --git a/sites/all/modules/views/modules/node/views_handler_field_node.inc b/sites/all/modules/views/modules/node/views_handler_field_node.inc
index 49ac468c9d33e889d38c2e7b1fcf41e2dbd4dcd1..eb90f01365cf6781a91724977e50cc7be1270a37 100644
--- a/sites/all/modules/views/modules/node/views_handler_field_node.inc
+++ b/sites/all/modules/views/modules/node/views_handler_field_node.inc
@@ -8,13 +8,15 @@
  * Field handler to provide simple renderer that allows linking to a node.
  * Definition terms:
  * - link_to_node default: Should this field have the checkbox "link to node" enabled by default.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_node extends views_handler_field {
 
   function init(&$view, &$options) {
     parent::init($view, $options);
     // Don't add the additional fields to groupby
-    if (!empty($this->options['link_to_node']) && !$this->view->display_handler->use_group_by()) {
+    if (!empty($this->options['link_to_node'])) {
       $this->additional_fields['nid'] = array('table' => 'node', 'field' => 'nid');
       if (module_exists('translation')) {
         $this->additional_fields['language'] = array('table' => 'node', 'field' => 'language');
diff --git a/sites/all/modules/views/modules/node/views_handler_field_node_link.inc b/sites/all/modules/views/modules/node/views_handler_field_node_link.inc
index 8bff50a4de7b0fc8d993dc47a34c265de38e1fde..ee9c2b9e470423b63328269e624702cc9b5042c5 100644
--- a/sites/all/modules/views/modules/node/views_handler_field_node_link.inc
+++ b/sites/all/modules/views/modules/node/views_handler_field_node_link.inc
@@ -1,6 +1,8 @@
 <?php
 /**
  * Field handler to present a link to the node.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_node_link extends views_handler_field_entity {
 
diff --git a/sites/all/modules/views/modules/node/views_handler_field_node_link_delete.inc b/sites/all/modules/views/modules/node/views_handler_field_node_link_delete.inc
index 2748862014e1be12f29c91fdf72b12fccc234fe4..3e8075cb9215ced594e68f915e039c1175898aee 100644
--- a/sites/all/modules/views/modules/node/views_handler_field_node_link_delete.inc
+++ b/sites/all/modules/views/modules/node/views_handler_field_node_link_delete.inc
@@ -1,6 +1,8 @@
 <?php
 /**
  * Field handler to present a link to delete a node.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_node_link_delete extends views_handler_field_node_link {
 
diff --git a/sites/all/modules/views/modules/node/views_handler_field_node_link_edit.inc b/sites/all/modules/views/modules/node/views_handler_field_node_link_edit.inc
index de9e8a49ce9208211537e4a43af6074bb8970788..f082c31499b85d80951f1694db25f6df41ee8a00 100644
--- a/sites/all/modules/views/modules/node/views_handler_field_node_link_edit.inc
+++ b/sites/all/modules/views/modules/node/views_handler_field_node_link_edit.inc
@@ -1,6 +1,8 @@
 <?php
 /**
  * Field handler to present a link node edit.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_node_link_edit extends views_handler_field_node_link {
 
diff --git a/sites/all/modules/views/modules/node/views_handler_field_node_path.inc b/sites/all/modules/views/modules/node/views_handler_field_node_path.inc
index b0cc5fb8cc4c77702249c245f7560ce280679749..725869ba2dc84535e9621a90d331b10b8a9dfcc4 100644
--- a/sites/all/modules/views/modules/node/views_handler_field_node_path.inc
+++ b/sites/all/modules/views/modules/node/views_handler_field_node_path.inc
@@ -7,6 +7,8 @@
 
 /**
  * Field handler to present the path to the node.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_node_path extends views_handler_field {
 
diff --git a/sites/all/modules/views/modules/node/views_handler_field_node_revision.inc b/sites/all/modules/views/modules/node/views_handler_field_node_revision.inc
index f4ca17d45e0f257bf064bed6ecb9e82da5b97dbc..3195e64ea4192480d0df266178c99f6e56d7b22f 100644
--- a/sites/all/modules/views/modules/node/views_handler_field_node_revision.inc
+++ b/sites/all/modules/views/modules/node/views_handler_field_node_revision.inc
@@ -1,9 +1,13 @@
 <?php
 /**
- * @file
  * Contains the basic 'node_revision' field handler.
  */
 
+/**
+ * A basic node_revision handler.
+ *
+ * @ingroup views_field_handlers
+ */
 class views_handler_field_node_revision extends views_handler_field_node {
   function init(&$view, &$options) {
     parent::init($view, $options);
diff --git a/sites/all/modules/views/modules/node/views_handler_field_node_revision_link_delete.inc b/sites/all/modules/views/modules/node/views_handler_field_node_revision_link_delete.inc
index 87000caa47f7a23a46eb684d62020f340735fea6..b005c2e0ea325330cfa89eb9e05aaf833aa41e63 100644
--- a/sites/all/modules/views/modules/node/views_handler_field_node_revision_link_delete.inc
+++ b/sites/all/modules/views/modules/node/views_handler_field_node_revision_link_delete.inc
@@ -1,14 +1,13 @@
 <?php
 /**
  * Field handler to present delete a node revision.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_node_revision_link_delete extends views_handler_field_node_link {
   function construct() {
     parent::construct();
-    $this->additional_fields['uid'] = array('table' => 'node', 'field' => 'uid');
     $this->additional_fields['node_vid'] = array('table' => 'node', 'field' => 'vid');
-    $this->additional_fields['vid'] = 'vid';
-    $this->additional_fields['type'] = array('table' => 'node', 'field' => 'type');
   }
 
   function access() {
@@ -17,11 +16,7 @@ class views_handler_field_node_revision_link_delete extends views_handler_field_
 
   function render_link($data, $values) {
     // ensure user has access to delete this node.
-    $node = new stdClass();
-    $node->nid = $this->get_value($values, 'nid');
-    $node->vid = $this->get_value($values, 'vid');
-    $node->uid = $this->get_value($values, 'uid');
-    $node->type = $this->get_value($values, 'type');
+    $node = $this->get_value($values);
     $node->status = 1; // unpublished nodes ignore access control
     if (!node_access('delete', $node)) {
       return;
diff --git a/sites/all/modules/views/modules/node/views_handler_field_node_revision_link_revert.inc b/sites/all/modules/views/modules/node/views_handler_field_node_revision_link_revert.inc
index a7fcb737119cb34a935408c5a9db9d0946db3acc..f26c0a3ae9c8ef58fff6983f9cbfa892dcb67a46 100644
--- a/sites/all/modules/views/modules/node/views_handler_field_node_revision_link_revert.inc
+++ b/sites/all/modules/views/modules/node/views_handler_field_node_revision_link_revert.inc
@@ -1,13 +1,13 @@
 <?php
 /**
- * Field handler to present a link to revert a node to a revision
+ * Field handler to present a link to revert a node to a revision.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_node_revision_link_revert extends views_handler_field_node_link {
   function construct() {
     parent::construct();
-    $this->additional_fields['uid'] = array('table' => 'node', 'field' => 'uid');
     $this->additional_fields['node_vid'] = array('table' => 'node', 'field' => 'vid');
-    $this->additional_fields['vid'] = 'vid';
   }
 
   function access() {
@@ -16,10 +16,7 @@ class views_handler_field_node_revision_link_revert extends views_handler_field_
 
   function render_link($data, $values) {
     // ensure user has access to edit this node.
-    $node = new stdClass();
-    $node->nid = $this->get_value($values, 'nid');
-    $node->vid = $this->get_value($values, 'vid');
-    $node->uid = $this->get_value($values, 'uid');
+    $node = $this->get_value($values);
     $node->status = 1; // unpublished nodes ignore access control
     if (!node_access('update', $node)) {
       return;
diff --git a/sites/all/modules/views/modules/node/views_handler_field_node_type.inc b/sites/all/modules/views/modules/node/views_handler_field_node_type.inc
index 3c8f66f188bed765c8af0a2b93d89182effb01c6..6d6202afb70abaa192ff17e3af986cd9282a3006 100644
--- a/sites/all/modules/views/modules/node/views_handler_field_node_type.inc
+++ b/sites/all/modules/views/modules/node/views_handler_field_node_type.inc
@@ -2,6 +2,8 @@
 
 /**
  * Field handler to translate a node type into its readable form.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_node_type extends views_handler_field_node {
   function option_definition() {
diff --git a/sites/all/modules/views/modules/node/views_handler_filter_history_user_timestamp.inc b/sites/all/modules/views/modules/node/views_handler_filter_history_user_timestamp.inc
index f725b4c8f5efefef1e3f2675906b38cd5d1bc834..a13f5319d2920f98b661e576bed3ef174cebadc2 100644
--- a/sites/all/modules/views/modules/node/views_handler_filter_history_user_timestamp.inc
+++ b/sites/all/modules/views/modules/node/views_handler_filter_history_user_timestamp.inc
@@ -3,6 +3,8 @@
  * Filter for new content
  *
  * The handler is named history_user, because of compability reasons, the table is history.
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_history_user_timestamp extends views_handler_filter {
   // Don't display empty space where the operator would be.
diff --git a/sites/all/modules/views/modules/node/views_handler_filter_node_access.inc b/sites/all/modules/views/modules/node/views_handler_filter_node_access.inc
index 333b9b2b96e731fa60916491cd15e2c2a6225f47..37306f8af8cb9cd87afbe9144d72dc538a12fb5f 100644
--- a/sites/all/modules/views/modules/node/views_handler_filter_node_access.inc
+++ b/sites/all/modules/views/modules/node/views_handler_filter_node_access.inc
@@ -1,6 +1,8 @@
 <?php
 /**
  * Filter by node_access records.
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_node_access extends views_handler_filter {
   function admin_summary() { }
diff --git a/sites/all/modules/views/modules/node/views_handler_filter_node_status.inc b/sites/all/modules/views/modules/node/views_handler_filter_node_status.inc
index 2b79b9e9548472655531c66a3a8c7b06b410c6c7..0babe5b282cdcc0496cec3f75b84bbc1ed9ad41e 100644
--- a/sites/all/modules/views/modules/node/views_handler_filter_node_status.inc
+++ b/sites/all/modules/views/modules/node/views_handler_filter_node_status.inc
@@ -1,6 +1,8 @@
 <?php
 /**
  * Filter by published status
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_node_status extends views_handler_filter {
   function admin_summary() { }
@@ -9,6 +11,6 @@ class views_handler_filter_node_status extends views_handler_filter {
 
   function query() {
     $table = $this->ensure_my_table();
-    $this->query->add_where_expression($this->options['group'], "$table.status = 1 OR ($table.uid = ***CURRENT_USER*** AND ***CURRENT_USER*** <> 0 AND ***VIEW_OWN_UNPUBLISHED_NODES*** = 1) OR ***ADMINISTER_NODES*** = 1");
+    $this->query->add_where_expression($this->options['group'], "$table.status = 1 OR ($table.uid = ***CURRENT_USER*** AND ***CURRENT_USER*** <> 0 AND ***VIEW_OWN_UNPUBLISHED_NODES*** = 1) OR ***BYPASS_NODE_ACCESS*** = 1");
   }
 }
diff --git a/sites/all/modules/views/modules/node/views_handler_filter_node_type.inc b/sites/all/modules/views/modules/node/views_handler_filter_node_type.inc
index c287697c095806ec6547e556c5f447a5bb6044e2..83126915b132aa77bc92350b7c060cacc1a96c5d 100644
--- a/sites/all/modules/views/modules/node/views_handler_filter_node_type.inc
+++ b/sites/all/modules/views/modules/node/views_handler_filter_node_type.inc
@@ -1,6 +1,8 @@
 <?php
 /**
  * Filter by node type
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_node_type extends views_handler_filter_in_operator {
   function get_value_options() {
diff --git a/sites/all/modules/views/modules/node/views_handler_filter_node_uid_revision.inc b/sites/all/modules/views/modules/node/views_handler_filter_node_uid_revision.inc
index 56441b55e8ed5e86e776a9f481b6f04165a4d400..9c6055c4f7ff6bfd6ee4caa4640f6fdad57e41b2 100644
--- a/sites/all/modules/views/modules/node/views_handler_filter_node_uid_revision.inc
+++ b/sites/all/modules/views/modules/node/views_handler_filter_node_uid_revision.inc
@@ -1,8 +1,13 @@
 <?php
-// $Id$
 /**
  * @file
+ * Contains handler views_handler_filter_node_uid_revision.
+ */
+
+/**
  * Filter handler to check for revisions a certain user has created.
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_node_uid_revision extends views_handler_filter_user_name {
   function query($group_by = FALSE) {
diff --git a/sites/all/modules/views/modules/node/views_plugin_row_node_rss.inc b/sites/all/modules/views/modules/node/views_plugin_row_node_rss.inc
index c1086ccb2cb3a043d9b33fbf5e20547bc2577e3a..189ff1f2ea7ac919066b1a530776963c70b44803 100644
--- a/sites/all/modules/views/modules/node/views_plugin_row_node_rss.inc
+++ b/sites/all/modules/views/modules/node/views_plugin_row_node_rss.inc
@@ -25,6 +25,17 @@ class views_plugin_row_node_rss extends views_plugin_row {
     return $options;
   }
 
+  /**
+   * Override init function to convert fulltext view-mode to full.
+   */
+  function init(&$view, &$display, $options = NULL) {
+    parent::init($view, $display, $options);
+
+    if ($this->options['item_length'] == 'fulltext') {
+      $this->options['item_length'] = 'full';
+    }
+  }
+
   function options_form(&$form, &$form_state) {
     parent::options_form($form, $form_state);
 
@@ -45,12 +56,16 @@ class views_plugin_row_node_rss extends views_plugin_row {
    * Return the main options, which are shown in the summary title.
    */
   function options_form_summary_options() {
-    return array(
-      'fulltext' => t('Full text'),
-      'teaser' => t('Title plus teaser'),
-      'title' => t('Title only'),
-      'default' => t('Use default RSS settings'),
-    );
+    $entity_info = entity_get_info('node');
+    $options = array();
+    if (!empty($entity_info['view modes'])) {
+      foreach ($entity_info['view modes'] as $mode => $settings) {
+        $options[$mode] = $settings['label'];
+      }
+    }
+    $options['title'] = t('Title only');
+    $options['default'] = t('Use site default RSS settings');
+    return $options;
   }
 
   function summary_title() {
@@ -78,9 +93,9 @@ class views_plugin_row_node_rss extends views_plugin_row {
       return;
     }
 
-    $item_length = $this->options['item_length'];
-    if ($item_length == 'default') {
-      $item_length = variable_get('feed_item_length', 'teaser');
+    $display_mode = $this->options['item_length'];
+    if ($display_mode == 'default') {
+      $display_mode = variable_get('feed_item_length', 'teaser');
     }
 
     // Load the specified node:
@@ -112,11 +127,16 @@ class views_plugin_row_node_rss extends views_plugin_row {
 
     // The node gets built and modules add to or modify $node->rss_elements
     // and $node->rss_namespaces.
-    $build = node_view($node, 'rss');
+
+    $build_mode = $display_mode;
+
+    $build = node_view($node, $build_mode);
     unset($build['#theme']);
 
     if (!empty($node->rss_namespaces)) {
       $this->view->style_plugin->namespaces = array_merge($this->view->style_plugin->namespaces, $node->rss_namespaces);
+    } else if (module_exists('rdf')) {
+      $this->view->style_plugin->namespaces = array_merge($this->view->style_plugin->namespaces, rdf_get_namespaces());
     }
 
     // Hide the links if desired.
@@ -124,7 +144,7 @@ class views_plugin_row_node_rss extends views_plugin_row {
       hide($build['links']);
     }
 
-    if ($item_length != 'title') {
+    if ($display_mode != 'title') {
       // We render node contents and force links to be last.
       $build['links']['#weight'] = 1000;
       $item_text .= drupal_render($build);
diff --git a/sites/all/modules/views/modules/node/views_plugin_row_node_view.inc b/sites/all/modules/views/modules/node/views_plugin_row_node_view.inc
index 040e7bd4bfd7e9b50459c207d71d9a24e2b1ed79..d745addd020113a38926af2a7fce1d4f5c81c227 100644
--- a/sites/all/modules/views/modules/node/views_plugin_row_node_view.inc
+++ b/sites/all/modules/views/modules/node/views_plugin_row_node_view.inc
@@ -8,6 +8,8 @@
  * Plugin which performs a node_view on the resulting object.
  *
  * Most of the code on this object is in the theme function.
+ *
+ * @ingroup views_row_plugins
  */
 class views_plugin_row_node_view extends views_plugin_row {
   // Basic properties that let the row style follow relationships.
diff --git a/sites/all/modules/views/modules/profile/views_handler_field_profile_date.inc b/sites/all/modules/views/modules/profile/views_handler_field_profile_date.inc
index 6c1cc6684b52ff44eb6a53759bc857a27ec90b83..e6b5fbc14bdde11e0f7308974d81a2ee911eb1f6 100644
--- a/sites/all/modules/views/modules/profile/views_handler_field_profile_date.inc
+++ b/sites/all/modules/views/modules/profile/views_handler_field_profile_date.inc
@@ -4,6 +4,8 @@
  *
  * The dates are stored serialized, which makes them mostly useless from
  * SQL. About all we can do is unserialize and display them.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_profile_date extends views_handler_field_date {
   function options_form(&$form, &$form_state) {
diff --git a/sites/all/modules/views/modules/profile/views_handler_field_profile_list.inc b/sites/all/modules/views/modules/profile/views_handler_field_profile_list.inc
index bb09015dd2e60c4226ec6624b3d70da0a6c48640..e3eaa30f22e3a885155e474517a8774c2b30cbbf 100644
--- a/sites/all/modules/views/modules/profile/views_handler_field_profile_list.inc
+++ b/sites/all/modules/views/modules/profile/views_handler_field_profile_list.inc
@@ -1,6 +1,8 @@
 <?php
 /**
  * Field handler display a profile list item.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_profile_list extends views_handler_field_prerender_list {
   /**
diff --git a/sites/all/modules/views/modules/profile/views_handler_filter_profile_selection.inc b/sites/all/modules/views/modules/profile/views_handler_filter_profile_selection.inc
index 77c34f433bb1f19b5ed91c42ceff19d0a294b00f..99067535d3f960c52adaf2f39cbc431658faff94 100644
--- a/sites/all/modules/views/modules/profile/views_handler_filter_profile_selection.inc
+++ b/sites/all/modules/views/modules/profile/views_handler_filter_profile_selection.inc
@@ -2,6 +2,8 @@
 
 /**
  * Filter by a selection widget in the profile.
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_profile_selection extends views_handler_filter_in_operator {
   function get_value_options() {
diff --git a/sites/all/modules/views/modules/search/views_handler_argument_search.inc b/sites/all/modules/views/modules/search/views_handler_argument_search.inc
index 7fbdebb38862a76c0c4531a999e42478e921de3a..1b2c6e565b36055a9bca1127921daa9154c8b41d 100644
--- a/sites/all/modules/views/modules/search/views_handler_argument_search.inc
+++ b/sites/all/modules/views/modules/search/views_handler_argument_search.inc
@@ -2,6 +2,8 @@
 
 /**
  * Argument that accepts query keys for search.
+ *
+ * @ingroup views_argument_handlers
  */
 class views_handler_argument_search extends views_handler_argument {
 
diff --git a/sites/all/modules/views/modules/search/views_handler_field_search_score.inc b/sites/all/modules/views/modules/search/views_handler_field_search_score.inc
index b3d6fe3ab671abd6afa62fc4bf66bcc6c2af53bb..96f124dbf31c8e12c697760f5888c6724ba480ae 100644
--- a/sites/all/modules/views/modules/search/views_handler_field_search_score.inc
+++ b/sites/all/modules/views/modules/search/views_handler_field_search_score.inc
@@ -1,6 +1,8 @@
 <?php
 /**
  * Field handler to provide simple renderer that allows linking to a node.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_search_score extends views_handler_field_numeric {
   function option_definition() {
diff --git a/sites/all/modules/views/modules/search/views_handler_filter_search.inc b/sites/all/modules/views/modules/search/views_handler_filter_search.inc
index 4ed228dac036d5727ba50894cacc8e001698e7cf..c5defd816a3a73a56d5565bf50542a9ae2723e65 100644
--- a/sites/all/modules/views/modules/search/views_handler_filter_search.inc
+++ b/sites/all/modules/views/modules/search/views_handler_filter_search.inc
@@ -2,6 +2,8 @@
 
 /**
  * Field handler to provide simple renderer that allows linking to a node.
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_search extends views_handler_filter {
   var $always_multiple = TRUE;
diff --git a/sites/all/modules/views/modules/search/views_handler_sort_search_score.inc b/sites/all/modules/views/modules/search/views_handler_sort_search_score.inc
index b34a60bb4f3bb327634cb9f2fce4c6f659e2e6e4..614d83acc177503765deb94330b0caf7db2060c0 100644
--- a/sites/all/modules/views/modules/search/views_handler_sort_search_score.inc
+++ b/sites/all/modules/views/modules/search/views_handler_sort_search_score.inc
@@ -2,6 +2,8 @@
 
 /**
  * Field handler to provide simple renderer that allows linking to a node.
+ *
+ * @ingroup views_sort_handlers
  */
 class views_handler_sort_search_score extends views_handler_sort {
   function query() {
diff --git a/sites/all/modules/views/modules/statistics/views_handler_field_accesslog_path.inc b/sites/all/modules/views/modules/statistics/views_handler_field_accesslog_path.inc
index 674eb34cbc04dcbc534d62553811125018dc56eb..d0daa69415d2609f089ab00261edcc037d9bbe7f 100644
--- a/sites/all/modules/views/modules/statistics/views_handler_field_accesslog_path.inc
+++ b/sites/all/modules/views/modules/statistics/views_handler_field_accesslog_path.inc
@@ -1,6 +1,8 @@
 <?php
 /**
  * Field handler to provide simple renderer that turns a URL into a clickable link.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_accesslog_path extends views_handler_field {
   /**
diff --git a/sites/all/modules/views/modules/system.views.inc b/sites/all/modules/views/modules/system.views.inc
index d7975cdc07a64d2e7f63c21d33330085fe02cd7a..d49385cf615a2b800ca99bc0267f66e4eaf2b27c 100644
--- a/sites/all/modules/views/modules/system.views.inc
+++ b/sites/all/modules/views/modules/system.views.inc
@@ -253,7 +253,7 @@ function system_views_data() {
       'base' => 'node',
       'base field' => 'nid',
       'relationship field' => 'id',
-      'extra' => array(array('table' => 'file_usage', 'field' => 'type', 'operator' => '=', 'value' => 'node')),
+      'extra' => array(array('field' => 'type', 'value' => 'node')),
     ),
   );
   $data['file_usage']['node_to_file'] = array(
diff --git a/sites/all/modules/views/modules/system/views_handler_argument_file_fid.inc b/sites/all/modules/views/modules/system/views_handler_argument_file_fid.inc
index f24f0920c22469e3c77ef17e972d2350fdd47887..8a4088f8156a9be4cd738b0f821324c31ea9f81b 100644
--- a/sites/all/modules/views/modules/system/views_handler_argument_file_fid.inc
+++ b/sites/all/modules/views/modules/system/views_handler_argument_file_fid.inc
@@ -1,6 +1,8 @@
 <?php
 /**
  * Argument handler to accept multiple file ids.
+ *
+ * @ingroup views_argument_handlers
  */
 class views_handler_argument_file_fid extends views_handler_argument_numeric {
   /**
diff --git a/sites/all/modules/views/modules/system/views_handler_field_file.inc b/sites/all/modules/views/modules/system/views_handler_field_file.inc
index aeef6ad9a653f4786420cd344d2a3c026f419606..f642b89133ea1bdc6c34231ac86a701acfcc85a1 100644
--- a/sites/all/modules/views/modules/system/views_handler_field_file.inc
+++ b/sites/all/modules/views/modules/system/views_handler_field_file.inc
@@ -1,6 +1,8 @@
 <?php
 /**
  * Field handler to provide simple renderer that allows linking to a file.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_file extends views_handler_field {
   /**
diff --git a/sites/all/modules/views/modules/system/views_handler_field_file_extension.inc b/sites/all/modules/views/modules/system/views_handler_field_file_extension.inc
index f26dee8686746b99cda0b47e1000ec0578a268ff..e64fbc91dd0771827b14314c98774c8997ca106e 100644
--- a/sites/all/modules/views/modules/system/views_handler_field_file_extension.inc
+++ b/sites/all/modules/views/modules/system/views_handler_field_file_extension.inc
@@ -1,9 +1,9 @@
 <?php
+
 /**
- * @file
  * Returns a pure file extension of the file, for example 'module'.
+ * @ingroup views_field_handlers
  */
-
 class views_handler_field_file_extension extends views_handler_field {
   function render($values) {
     $value = $this->get_value($values);
diff --git a/sites/all/modules/views/modules/system/views_handler_field_file_filemime.inc b/sites/all/modules/views/modules/system/views_handler_field_file_filemime.inc
index 74dba9ef213d78e8accf12766f9e63602fd09176..0b29c79a232891d9d142152051e1c9b67ad3b6cb 100644
--- a/sites/all/modules/views/modules/system/views_handler_field_file_filemime.inc
+++ b/sites/all/modules/views/modules/system/views_handler_field_file_filemime.inc
@@ -2,6 +2,8 @@
 
 /**
  * Field handler to add rendering MIME type images as an option on the filemime field.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_file_filemime extends views_handler_field_file {
   function option_definition() {
diff --git a/sites/all/modules/views/modules/system/views_handler_field_file_status.inc b/sites/all/modules/views/modules/system/views_handler_field_file_status.inc
index 8b42aa8094376e340cf39213c0f73b5e851990ab..84d9148aa0ee2ed8d3ae47c3be24d28f17cdcb23 100644
--- a/sites/all/modules/views/modules/system/views_handler_field_file_status.inc
+++ b/sites/all/modules/views/modules/system/views_handler_field_file_status.inc
@@ -1,6 +1,8 @@
 <?php
 /**
  * Field handler to translate a node type into its readable form.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_file_status extends views_handler_field {
   function render($values) {
diff --git a/sites/all/modules/views/modules/system/views_handler_filter_file_status.inc b/sites/all/modules/views/modules/system/views_handler_filter_file_status.inc
index e24531a51c2dff4b3af41a166e2313d86d4900a6..31337550f001b9e1d98c3bd0a3f3acf14deb3319 100644
--- a/sites/all/modules/views/modules/system/views_handler_filter_file_status.inc
+++ b/sites/all/modules/views/modules/system/views_handler_filter_file_status.inc
@@ -1,6 +1,8 @@
 <?php
 /**
- * Filter by file status
+ * Filter by file status.
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_file_status extends views_handler_filter_in_operator {
   function get_value_options() {
diff --git a/sites/all/modules/views/modules/taxonomy.views.inc b/sites/all/modules/views/modules/taxonomy.views.inc
index 5dcbc18e86b5410b60f2bec2acbe39171819f67b..7dd225bbd6a9b0d31b43b72631263d1b9f0e8e3f 100644
--- a/sites/all/modules/views/modules/taxonomy.views.inc
+++ b/sites/all/modules/views/modules/taxonomy.views.inc
@@ -214,6 +214,9 @@ function taxonomy_views_data() {
       'handler' => 'views_handler_field_markup',
       'format' => array('field' => 'format'),
     ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_string',
+    ),
   );
 
   // Term vocabulary
diff --git a/sites/all/modules/views/modules/taxonomy/views_handler_argument_taxonomy.inc b/sites/all/modules/views/modules/taxonomy/views_handler_argument_taxonomy.inc
index 7f14e4d21ec1b851b8c22f9949e2bde3bf3cfa1f..5c32ea4c216f54a517132984e8706eaa67ce9601 100644
--- a/sites/all/modules/views/modules/taxonomy/views_handler_argument_taxonomy.inc
+++ b/sites/all/modules/views/modules/taxonomy/views_handler_argument_taxonomy.inc
@@ -2,6 +2,8 @@
 
 /**
  * Argument handler for basic taxonomy tid.
+ *
+ * @ingroup views_argument_handlers
  */
 class views_handler_argument_taxonomy extends views_handler_argument_numeric {
 
diff --git a/sites/all/modules/views/modules/taxonomy/views_handler_argument_term_node_tid.inc b/sites/all/modules/views/modules/taxonomy/views_handler_argument_term_node_tid.inc
index cf83d46efcdc0cae25e95b0b065f3c041716c6c0..e36c7789a11ef8b222cd3fc2c01c1705129862cd 100644
--- a/sites/all/modules/views/modules/taxonomy/views_handler_argument_term_node_tid.inc
+++ b/sites/all/modules/views/modules/taxonomy/views_handler_argument_term_node_tid.inc
@@ -1,6 +1,8 @@
 <?php
 /**
- * Allow taxonomy term ID(s) as argument
+ * Allow taxonomy term ID(s) as argument.
+ *
+ * @ingroup views_argument_handlers
  */
 class views_handler_argument_term_node_tid extends views_handler_argument_many_to_one {
   function option_definition() {
diff --git a/sites/all/modules/views/modules/taxonomy/views_handler_argument_term_node_tid_depth.inc b/sites/all/modules/views/modules/taxonomy/views_handler_argument_term_node_tid_depth.inc
index ab519612fec04751a15e7e49ae5c325b210cf07e..03b14099af18cc36ad1aaac4089f203f520a18cd 100644
--- a/sites/all/modules/views/modules/taxonomy/views_handler_argument_term_node_tid_depth.inc
+++ b/sites/all/modules/views/modules/taxonomy/views_handler_argument_term_node_tid_depth.inc
@@ -3,7 +3,9 @@
  * Argument handler for taxonomy terms with depth.
  *
  * This handler is actually part of the node table and has some restrictions,
- * because it uses a subquery to find nodes with
+ * because it uses a subquery to find nodes with.
+ *
+ * @ingroup views_argument_handlers
  */
 class views_handler_argument_term_node_tid_depth extends views_handler_argument {
   function option_definition() {
diff --git a/sites/all/modules/views/modules/taxonomy/views_handler_argument_term_node_tid_depth_modifier.inc b/sites/all/modules/views/modules/taxonomy/views_handler_argument_term_node_tid_depth_modifier.inc
index 3f31864997c22eaa7fcbadf6ed89070f03610ca1..da717962dd06cc6918d75bc6e913749c1bc0d425 100644
--- a/sites/all/modules/views/modules/taxonomy/views_handler_argument_term_node_tid_depth_modifier.inc
+++ b/sites/all/modules/views/modules/taxonomy/views_handler_argument_term_node_tid_depth_modifier.inc
@@ -4,7 +4,9 @@
  * Argument handler for to modify depth for a previous term.
  *
  * This handler is actually part of the node table and has some restrictions,
- * because it uses a subquery to find nodes with
+ * because it uses a subquery to find nodes with.
+ *
+ * @ingroup views_argument_handlers
  */
 class views_handler_argument_term_node_tid_depth_modifier extends views_handler_argument {
   function options_form(&$form, &$form_state) { }
diff --git a/sites/all/modules/views/modules/taxonomy/views_handler_argument_vocabulary_machine_name.inc b/sites/all/modules/views/modules/taxonomy/views_handler_argument_vocabulary_machine_name.inc
index 4999d274ed61103189191e2ba23500f57ac24904..b91b08faf8535e78b04c252c3958381641aa1eb0 100644
--- a/sites/all/modules/views/modules/taxonomy/views_handler_argument_vocabulary_machine_name.inc
+++ b/sites/all/modules/views/modules/taxonomy/views_handler_argument_vocabulary_machine_name.inc
@@ -2,6 +2,8 @@
 
 /**
  * Argument handler to accept a vocabulary machine name.
+ *
+ * @ingroup views_argument_handlers
  */
 class views_handler_argument_vocabulary_machine_name extends views_handler_argument_string {
   /**
diff --git a/sites/all/modules/views/modules/taxonomy/views_handler_argument_vocabulary_vid.inc b/sites/all/modules/views/modules/taxonomy/views_handler_argument_vocabulary_vid.inc
index 5b6358822ef53f78b3e8df25c8c7e8b28e318b47..d79859b864f76fe88b8e198dcda58c6b045f5199 100644
--- a/sites/all/modules/views/modules/taxonomy/views_handler_argument_vocabulary_vid.inc
+++ b/sites/all/modules/views/modules/taxonomy/views_handler_argument_vocabulary_vid.inc
@@ -2,6 +2,8 @@
 
 /**
  * Argument handler to accept a vocabulary id.
+ *
+ * @ingroup views_argument_handlers
  */
 class views_handler_argument_vocabulary_vid extends views_handler_argument_numeric {
   /**
diff --git a/sites/all/modules/views/modules/taxonomy/views_handler_field_taxonomy.inc b/sites/all/modules/views/modules/taxonomy/views_handler_field_taxonomy.inc
index b910e395ecaf6575d9e8de3c623eede851778ba3..c1ccb6d69fd6ff258d9b532362698f4533ed0dbf 100644
--- a/sites/all/modules/views/modules/taxonomy/views_handler_field_taxonomy.inc
+++ b/sites/all/modules/views/modules/taxonomy/views_handler_field_taxonomy.inc
@@ -3,6 +3,8 @@
 /**
  * Field handler to provide simple renderer that allows linking to a taxonomy
  * term.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_taxonomy extends views_handler_field {
   /**
diff --git a/sites/all/modules/views/modules/taxonomy/views_handler_field_term_link_edit.inc b/sites/all/modules/views/modules/taxonomy/views_handler_field_term_link_edit.inc
index 31cc0ea1651ee828eab45a1d12310f003271110d..ae1f0a5c11450797e80798524a037d07df02e999 100644
--- a/sites/all/modules/views/modules/taxonomy/views_handler_field_term_link_edit.inc
+++ b/sites/all/modules/views/modules/taxonomy/views_handler_field_term_link_edit.inc
@@ -1,7 +1,9 @@
 <?php
 
 /**
- * Field handler to present a term edit link .
+ * Field handler to present a term edit link.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_term_link_edit extends views_handler_field {
   function construct() {
diff --git a/sites/all/modules/views/modules/taxonomy/views_handler_field_term_node_tid.inc b/sites/all/modules/views/modules/taxonomy/views_handler_field_term_node_tid.inc
index e46add8c5b8a0de08dc37d3aca0015e23f507527..4a6c7a44980b178a9b88badc2a9795fa9be947dc 100644
--- a/sites/all/modules/views/modules/taxonomy/views_handler_field_term_node_tid.inc
+++ b/sites/all/modules/views/modules/taxonomy/views_handler_field_term_node_tid.inc
@@ -1,8 +1,9 @@
 <?php
 
 /**
- * @file
  * Field handler to display all taxonomy terms of a node.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_term_node_tid extends views_handler_field_prerender_list {
   function init(&$view, &$options) {
diff --git a/sites/all/modules/views/modules/taxonomy/views_handler_filter_term_node_tid.inc b/sites/all/modules/views/modules/taxonomy/views_handler_filter_term_node_tid.inc
index 5e0467342ebb923fe993cf660d67ae1893a352d6..25f9a7bcdc9b2093540297bef9d5ceda926628c9 100644
--- a/sites/all/modules/views/modules/taxonomy/views_handler_filter_term_node_tid.inc
+++ b/sites/all/modules/views/modules/taxonomy/views_handler_filter_term_node_tid.inc
@@ -1,9 +1,14 @@
 <?php
 
 /**
- * Filter by term id
+ * Filter by term id.
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_term_node_tid extends views_handler_filter_many_to_one {
+  // Stores the exposed input for this filter.
+  var $validated_exposed_input = NULL;
+
   function init(&$view, &$options) {
     parent::init($view, $options);
     if (!empty($this->definition['vocabulary'])) {
@@ -11,7 +16,7 @@ class views_handler_filter_term_node_tid extends views_handler_filter_many_to_on
     }
 
     // Convert legacy vid option to machine name vocabulary.
-    if (!empty($this->options['vid']) & empty($this->options['vocabulary'])) {
+    if (isset($this->options['vid']) && !empty($this->options['vid']) & empty($this->options['vocabulary'])) {
       $vocabularies = taxonomy_get_vocabularies();
       $vid = $this->options['vid'];
       if (isset($vocabularies[$vid], $vocabularies[$vid]->machine_name)) {
@@ -38,13 +43,14 @@ class views_handler_filter_term_node_tid extends views_handler_filter_many_to_on
 
   function extra_options_form(&$form, &$form_state) {
     $vocabularies = taxonomy_get_vocabularies();
+    $options = array();
     foreach ($vocabularies as $voc) {
       $options[$voc->machine_name] = check_plain($voc->name);
     }
 
     if ($this->options['limit']) {
       // We only do this when the form is displayed.
-      if ($this->options['vocabulary'] == 0) {
+      if (empty($this->options['vocabulary'])) {
         $first_vocabulary = reset($vocabularies);
         $this->options['vocabulary'] = $first_vocabulary->machine_name;
       }
@@ -177,7 +183,7 @@ class views_handler_filter_term_node_tid extends views_handler_filter_many_to_on
         '#default_value' => $default_value,
       );
 
-      if (!empty($form_state['exposed']) && !isset($form_state['input'][$identifier])) {
+      if (!empty($form_state['exposed']) && isset($identifier) && !isset($form_state['input'][$identifier])) {
         $form_state['input'][$identifier] = $default_value;
       }
     }
@@ -261,6 +267,14 @@ class views_handler_filter_term_node_tid extends views_handler_filter_many_to_on
    * Validate the user string. Since this can come from either the form
    * or the exposed filter, this is abstracted out a bit so it can
    * handle the multiple input sources.
+   *
+   * @param $form
+   *   The form which is used, either the views ui or the exposed filters.
+   * @param $values
+   *   The taxonomy names which will be converted to tids.
+   *
+   * @return array
+   *   The taxonomy ids fo all validated terms.
    */
   function validate_term_strings(&$form, $values) {
     if (empty($values)) {
@@ -268,16 +282,15 @@ class views_handler_filter_term_node_tid extends views_handler_filter_many_to_on
     }
 
     $tids = array();
-    $placeholders = array();
-    $args = array();
-    $results = array();
+    $names = array();
+    $missing = array();
     foreach ($values as $value) {
       $missing[strtolower($value)] = TRUE;
       $names[] = $value;
     }
 
     if (!$names) {
-      return;
+      return FALSE;
     }
 
     $query = db_select('taxonomy_term_data', 'td');
diff --git a/sites/all/modules/views/modules/taxonomy/views_handler_filter_term_node_tid_depth.inc b/sites/all/modules/views/modules/taxonomy/views_handler_filter_term_node_tid_depth.inc
index 96a991cc0113d18c918ab972a89beb94fbc747ee..39552695ff2533997a0d45b8ffb935513168d382 100644
--- a/sites/all/modules/views/modules/taxonomy/views_handler_filter_term_node_tid_depth.inc
+++ b/sites/all/modules/views/modules/taxonomy/views_handler_filter_term_node_tid_depth.inc
@@ -3,7 +3,9 @@
  * Filter handler for taxonomy terms with depth.
  *
  * This handler is actually part of the node table and has some restrictions,
- * because it uses a subquery to find nodes with
+ * because it uses a subquery to find nodes with.
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_term_node_tid_depth extends views_handler_filter_term_node_tid {
   function operator_options($which = 'title') {
@@ -87,6 +89,6 @@ class views_handler_filter_term_node_tid_depth extends views_handler_filter_term
     }
 
     $subquery->condition($where);
-    $this->query->add_where(0, "$this->table_alias.$this->real_field", $subquery, 'IN');
+    $this->query->add_where($this->options['group'], "$this->table_alias.$this->real_field", $subquery, 'IN');
   }
 }
diff --git a/sites/all/modules/views/modules/taxonomy/views_handler_filter_vocabulary_machine_name.inc b/sites/all/modules/views/modules/taxonomy/views_handler_filter_vocabulary_machine_name.inc
index e75d6a730230ddb7bead5b80544178d55b056e0a..5d2c9f591f1269cdecaf8c82d82fd6b7ecf2c6b6 100644
--- a/sites/all/modules/views/modules/taxonomy/views_handler_filter_vocabulary_machine_name.inc
+++ b/sites/all/modules/views/modules/taxonomy/views_handler_filter_vocabulary_machine_name.inc
@@ -1,7 +1,9 @@
 <?php
 
 /**
- * Filter by vocabulary machine name
+ * Filter by vocabulary machine name.
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_vocabulary_machine_name extends views_handler_filter_in_operator {
   function get_value_options() {
diff --git a/sites/all/modules/views/modules/taxonomy/views_handler_filter_vocabulary_vid.inc b/sites/all/modules/views/modules/taxonomy/views_handler_filter_vocabulary_vid.inc
index cb624dca28ed4c4d4de63c3d8c6d01c0e71b260e..a02f7b217a8163d69249894da9cdcfddaa17c0bf 100644
--- a/sites/all/modules/views/modules/taxonomy/views_handler_filter_vocabulary_vid.inc
+++ b/sites/all/modules/views/modules/taxonomy/views_handler_filter_vocabulary_vid.inc
@@ -1,7 +1,9 @@
 <?php
 
 /**
- * Filter by vocabulary id
+ * Filter by vocabulary id.
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_vocabulary_vid extends views_handler_filter_in_operator {
   function get_value_options() {
diff --git a/sites/all/modules/views/modules/taxonomy/views_handler_relationship_node_term_data.inc b/sites/all/modules/views/modules/taxonomy/views_handler_relationship_node_term_data.inc
index 2f013daf7c6ba89ff412c654c7d824b468000992..1855caee02babfc12fbb76134e6f1feb3c7a27a5 100644
--- a/sites/all/modules/views/modules/taxonomy/views_handler_relationship_node_term_data.inc
+++ b/sites/all/modules/views/modules/taxonomy/views_handler_relationship_node_term_data.inc
@@ -4,6 +4,12 @@
  * Views' relationship handlers.
  */
 
+
+/**
+ * Relationship handler to return the taxonomy terms of nodes.
+ *
+ * @ingroup views_relationship_handlers
+ */
 class views_handler_relationship_node_term_data extends views_handler_relationship  {
   function init(&$view, &$options) {
     parent::init($view, $options);
diff --git a/sites/all/modules/views/modules/translation/views_handler_argument_node_tnid.inc b/sites/all/modules/views/modules/translation/views_handler_argument_node_tnid.inc
index 483ce6f7f3baa6c440f084fc3d857522680fb1b2..9dd29a1082c3f49e7efd075f5ede8f8e04255eaa 100644
--- a/sites/all/modules/views/modules/translation/views_handler_argument_node_tnid.inc
+++ b/sites/all/modules/views/modules/translation/views_handler_argument_node_tnid.inc
@@ -6,6 +6,8 @@
 
 /**
  * Argument handler to accept a node translation id.
+ *
+ * @ingroup views_argument_handlers
  */
 class views_handler_argument_node_tnid extends views_handler_argument_numeric {
   /**
diff --git a/sites/all/modules/views/modules/translation/views_handler_field_node_language.inc b/sites/all/modules/views/modules/translation/views_handler_field_node_language.inc
index 93bd8832727cba015e669fc8ceb934174457d604..b2e8d9c3888dce9d655326d08e0aeb2d7fb2a7e2 100644
--- a/sites/all/modules/views/modules/translation/views_handler_field_node_language.inc
+++ b/sites/all/modules/views/modules/translation/views_handler_field_node_language.inc
@@ -2,6 +2,8 @@
 
 /**
  * Field handler to translate a language into its readable form.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_node_language extends views_handler_field_node {
   function option_definition() {
diff --git a/sites/all/modules/views/modules/translation/views_handler_field_node_link_translate.inc b/sites/all/modules/views/modules/translation/views_handler_field_node_link_translate.inc
index 6e356ea28e7efe1d2395898d75fb4b4cac9381cf..962b4f9397489aa449e51d84ba0efa2a6490d852 100644
--- a/sites/all/modules/views/modules/translation/views_handler_field_node_link_translate.inc
+++ b/sites/all/modules/views/modules/translation/views_handler_field_node_link_translate.inc
@@ -1,22 +1,13 @@
 <?php
 /**
  * Field handler to present a link node translate.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_node_link_translate extends views_handler_field_node_link {
-  function construct() {
-    parent::construct();
-    $this->additional_fields['uid'] = 'uid';
-    $this->additional_fields['type'] = 'type';
-    $this->additional_fields['language'] = 'language';
-  }
-
   function render_link($data, $values) {
     // ensure user has access to edit this node.
-    $node = new stdClass();
-    $node->nid = $this->get_value($values, 'nid');
-    $node->uid = $this->get_value($values, 'uid');
-    $node->type = $this->get_value($values, 'type');
-    $node->language = $this->get_value($values, 'language');
+    $node = $this->get_value($values);
     $node->status = 1; // unpublished nodes ignore access control
     if (empty($node->language) || !translation_supported_type($node->type) || !node_access('view', $node) || !user_access('translate content')) {
       return;
diff --git a/sites/all/modules/views/modules/translation/views_handler_field_node_translation_link.inc b/sites/all/modules/views/modules/translation/views_handler_field_node_translation_link.inc
index cefeec0b922df3433fa1696ada5002f23965b062..537ba60701e17d9122a543d7a10e57c71e4b7d6a 100644
--- a/sites/all/modules/views/modules/translation/views_handler_field_node_translation_link.inc
+++ b/sites/all/modules/views/modules/translation/views_handler_field_node_translation_link.inc
@@ -1,6 +1,8 @@
 <?php
 /**
  * Field handler to present a link to the node.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_node_translation_link extends views_handler_field {
   function construct() {
diff --git a/sites/all/modules/views/modules/translation/views_handler_filter_node_language.inc b/sites/all/modules/views/modules/translation/views_handler_filter_node_language.inc
index b4c17b9c9c1e021b1cac75555e7f772b766119f8..73af1636aa9de3a0e16bb531b004df6a3c98caa5 100644
--- a/sites/all/modules/views/modules/translation/views_handler_filter_node_language.inc
+++ b/sites/all/modules/views/modules/translation/views_handler_filter_node_language.inc
@@ -1,6 +1,8 @@
 <?php
 /**
- * Filter by language
+ * Filter by language.
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_node_language extends views_handler_filter_in_operator {
   function get_value_options() {
diff --git a/sites/all/modules/views/modules/translation/views_handler_filter_node_tnid.inc b/sites/all/modules/views/modules/translation/views_handler_filter_node_tnid.inc
index 460e16f06883455ce9ee069f9ee65acc1085a79e..6d8cfe7aafd22dd4da6f52e1e4d010af23f5ff66 100644
--- a/sites/all/modules/views/modules/translation/views_handler_filter_node_tnid.inc
+++ b/sites/all/modules/views/modules/translation/views_handler_filter_node_tnid.inc
@@ -1,6 +1,8 @@
 <?php
 /**
  * Filter by whether the node is the original translation.
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_node_tnid extends views_handler_filter {
   function admin_summary() { }
diff --git a/sites/all/modules/views/modules/translation/views_handler_filter_node_tnid_child.inc b/sites/all/modules/views/modules/translation/views_handler_filter_node_tnid_child.inc
index e1cda3ac934c4b0d7941283b12607af5f530d6e4..f0d953b559b7defff07cd3f8cbf43458baae5b80 100644
--- a/sites/all/modules/views/modules/translation/views_handler_filter_node_tnid_child.inc
+++ b/sites/all/modules/views/modules/translation/views_handler_filter_node_tnid_child.inc
@@ -1,6 +1,8 @@
 <?php
 /**
  * Filter by whether the node is not the original translation.
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_node_tnid_child extends views_handler_filter {
   function admin_summary() { }
diff --git a/sites/all/modules/views/modules/translation/views_handler_relationship_translation.inc b/sites/all/modules/views/modules/translation/views_handler_relationship_translation.inc
index ab47132369d62b46efb1e9b1101b8c5adcbde022..b7d26411da8ac6a277bdf3bcd21152ae2cd6deac 100644
--- a/sites/all/modules/views/modules/translation/views_handler_relationship_translation.inc
+++ b/sites/all/modules/views/modules/translation/views_handler_relationship_translation.inc
@@ -3,6 +3,8 @@
 /**
  * Handles relationships for content translation sets and provides multiple
  * options.
+ *
+ * @ingroup views_relationship_handlers
  */
 class views_handler_relationship_translation extends views_handler_relationship {
   function option_definition() {
diff --git a/sites/all/modules/views/modules/user.views.inc b/sites/all/modules/views/modules/user.views.inc
index 8ecc8f5e66157c3ccc3be7dca36da48a80fd957e..1d7f161342e64ad3345f141bc60a34aa70e72790 100644
--- a/sites/all/modules/views/modules/user.views.inc
+++ b/sites/all/modules/views/modules/user.views.inc
@@ -182,6 +182,15 @@ function user_views_data() {
     ),
   );
 
+  // link
+  $data['users']['view_user'] = array(
+    'field' => array(
+      'title' => t('Link'),
+      'help' => t('Provide a simple link to the user.'),
+      'handler' => 'views_handler_field_user_link',
+    ),
+  );
+
   // created field
   $data['users']['created'] = array(
     'title' => t('Created date'), // The item it appears as on the UI,
@@ -293,6 +302,9 @@ function user_views_data() {
     'field' => array(
       'handler' => 'views_handler_field_boolean',
       'click sortable' => TRUE,
+      'output formats' => array(
+        'active-blocked' => array(t('Active'), t('Blocked')),
+      ),
     ),
     'filter' => array(
       'handler' => 'views_handler_filter_boolean_operator',
@@ -377,6 +389,7 @@ function user_views_data() {
     'filter' => array(
       'handler' => 'views_handler_filter_user_roles',
       'numeric' => TRUE,
+      'allow empty' => TRUE,
     ),
     'argument' => array(
       'handler' => 'views_handler_argument_users_roles_rid',
@@ -513,6 +526,17 @@ function user_views_data() {
 function user_views_plugins() {
   return array(
     'module' => 'views', // This just tells our themes are elsewhere.
+    'row' => array(
+      'user' => array(
+        'title' => t('User'),
+        'help' => t('Display the user with standard user view.'),
+        'handler' => 'views_plugin_row_user_view',
+        'base' => array('users'), // only works with 'users' as base.
+        'uses options' => TRUE,
+        'type' => 'normal',
+        'help topic' => 'style-users',
+      ),
+    ),
     'argument default' => array(
       'user' => array(
         'title' => t('User ID from URL'),
diff --git a/sites/all/modules/views/modules/user/views_handler_argument_user_uid.inc b/sites/all/modules/views/modules/user/views_handler_argument_user_uid.inc
index e5a7d1c7a9b3710c69c054b784c38fdabd59d6e3..21785a9f8c5650dfa973eee3201dd39ad77e131b 100644
--- a/sites/all/modules/views/modules/user/views_handler_argument_user_uid.inc
+++ b/sites/all/modules/views/modules/user/views_handler_argument_user_uid.inc
@@ -6,10 +6,15 @@
 
 /**
  * Argument handler to accept a user id.
+ *
+ * @ingroup views_argument_handlers
  */
 class views_handler_argument_user_uid extends views_handler_argument_numeric {
   /**
    * Override the behavior of title(). Get the name of the user.
+   *
+   * @return array
+   *    A list of usernames.
    */
   function title_query() {
     if (!$this->argument) {
diff --git a/sites/all/modules/views/modules/user/views_handler_argument_users_roles_rid.inc b/sites/all/modules/views/modules/user/views_handler_argument_users_roles_rid.inc
index 0facece32c3ffebc51c8b2f945161b2dded84679..89b3704b09e1c996cd7906425c73e648d4904566 100644
--- a/sites/all/modules/views/modules/user/views_handler_argument_users_roles_rid.inc
+++ b/sites/all/modules/views/modules/user/views_handler_argument_users_roles_rid.inc
@@ -1,6 +1,8 @@
 <?php
 /**
- * Allow role ID(s) as argument
+ * Allow role ID(s) as argument.
+ *
+ * @ingroup views_argument_handlers
  */
 class views_handler_argument_users_roles_rid extends views_handler_argument_many_to_one {
   function title_query() {
diff --git a/sites/all/modules/views/modules/user/views_handler_field_user.inc b/sites/all/modules/views/modules/user/views_handler_field_user.inc
index e88033a9e8937d71a0621fcb7f58a736532d85fc..f90a6f9a97b09bb3fbaa61ce7879c21f87f8485e 100644
--- a/sites/all/modules/views/modules/user/views_handler_field_user.inc
+++ b/sites/all/modules/views/modules/user/views_handler_field_user.inc
@@ -2,6 +2,8 @@
 
 /**
  * Field handler to provide simple renderer that allows linking to a user.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_user extends views_handler_field {
   /**
diff --git a/sites/all/modules/views/modules/user/views_handler_field_user_language.inc b/sites/all/modules/views/modules/user/views_handler_field_user_language.inc
index 3d3e7228778b307929c90bb82d1d1fbfff57281c..96b784b00214315189b606167ef3b1318b516eec 100644
--- a/sites/all/modules/views/modules/user/views_handler_field_user_language.inc
+++ b/sites/all/modules/views/modules/user/views_handler_field_user_language.inc
@@ -1,9 +1,10 @@
 <?php
+
 /**
- * @file
- *   Views field handler for userlanguage.
+ * Views field handler for user language.
+ *
+ * @ingroup views_field_handlers
  */
-
 class views_handler_field_user_language extends views_handler_field_user {
 
   function render_link($data, $values) {
diff --git a/sites/all/modules/views/modules/user/views_handler_field_user_link.inc b/sites/all/modules/views/modules/user/views_handler_field_user_link.inc
index 7f26f060d2dbf13d594a55fd6ce302abd67004c3..36135d51a38c7906a153f4fb2ed134b877b504c1 100644
--- a/sites/all/modules/views/modules/user/views_handler_field_user_link.inc
+++ b/sites/all/modules/views/modules/user/views_handler_field_user_link.inc
@@ -1,6 +1,8 @@
 <?php
 /**
  * Field handler to present a link to the user.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_user_link extends views_handler_field {
   function construct() {
diff --git a/sites/all/modules/views/modules/user/views_handler_field_user_link_cancel.inc b/sites/all/modules/views/modules/user/views_handler_field_user_link_cancel.inc
index 272de3bcd655be9652073f8b9fe7c1a4e845026a..4debce933906c666e8c3171a6bb711c2bdab0bbf 100644
--- a/sites/all/modules/views/modules/user/views_handler_field_user_link_cancel.inc
+++ b/sites/all/modules/views/modules/user/views_handler_field_user_link_cancel.inc
@@ -1,6 +1,8 @@
 <?php
 /**
  * Field handler to present a link to user cancel.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_user_link_cancel extends views_handler_field_user_link {
 
diff --git a/sites/all/modules/views/modules/user/views_handler_field_user_link_edit.inc b/sites/all/modules/views/modules/user/views_handler_field_user_link_edit.inc
index bdeecf0dc2c394477ba3ac883801d115c55b7fd6..4f25bf65488c70659d23707c61aa4491818a6ccb 100644
--- a/sites/all/modules/views/modules/user/views_handler_field_user_link_edit.inc
+++ b/sites/all/modules/views/modules/user/views_handler_field_user_link_edit.inc
@@ -1,6 +1,8 @@
 <?php
 /**
  * Field handler to present a link to user edit.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_user_link_edit extends views_handler_field_user_link {
   function render_link($data, $values) {
diff --git a/sites/all/modules/views/modules/user/views_handler_field_user_mail.inc b/sites/all/modules/views/modules/user/views_handler_field_user_mail.inc
index 692b6b3dd52a612bc3db1f67ec622cfbce5332ec..8408e6449305ad08a7b587e25ab6546e684e447a 100644
--- a/sites/all/modules/views/modules/user/views_handler_field_user_mail.inc
+++ b/sites/all/modules/views/modules/user/views_handler_field_user_mail.inc
@@ -1,6 +1,8 @@
 <?php
 /**
- * Field handler to provide acess control for the email field
+ * Field handler to provide acess control for the email field.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_user_mail extends views_handler_field_user {
   function option_definition() {
diff --git a/sites/all/modules/views/modules/user/views_handler_field_user_name.inc b/sites/all/modules/views/modules/user/views_handler_field_user_name.inc
index fe10569172d1d5a859e1e7b0ba60a85e5ba1c941..26cdbce71b410377cbdb889b0c04c73a9f0147cd 100644
--- a/sites/all/modules/views/modules/user/views_handler_field_user_name.inc
+++ b/sites/all/modules/views/modules/user/views_handler_field_user_name.inc
@@ -1,6 +1,8 @@
 <?php
 /**
- * Field handler to provide simple renderer that allows using a themed user link
+ * Field handler to provide simple renderer that allows using a themed user link.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_user_name extends views_handler_field_user {
   /**
diff --git a/sites/all/modules/views/modules/user/views_handler_field_user_permissions.inc b/sites/all/modules/views/modules/user/views_handler_field_user_permissions.inc
index 7bdb31666f78382f778765d6a515100d7656dcdb..e20f27fa919736dbe41a1092ba2ff7a446978b8f 100644
--- a/sites/all/modules/views/modules/user/views_handler_field_user_permissions.inc
+++ b/sites/all/modules/views/modules/user/views_handler_field_user_permissions.inc
@@ -1,6 +1,8 @@
 <?php
 /**
  * Field handler to provide a list of permissions.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_user_permissions extends views_handler_field_prerender_list {
   function construct() {
diff --git a/sites/all/modules/views/modules/user/views_handler_field_user_picture.inc b/sites/all/modules/views/modules/user/views_handler_field_user_picture.inc
index 663b74307829f3accc89749bb525fcea437e28dc..940a89a7b1e5a653b23bba17f55b91626a692397 100644
--- a/sites/all/modules/views/modules/user/views_handler_field_user_picture.inc
+++ b/sites/all/modules/views/modules/user/views_handler_field_user_picture.inc
@@ -1,7 +1,9 @@
 <?php
 
 /**
- * Field handler to provide simple renderer that allows using a themed user link
+ * Field handler to provide simple renderer that allows using a themed user link.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_user_picture extends views_handler_field {
   function construct() {
@@ -15,6 +17,20 @@ class views_handler_field_user_picture extends views_handler_field {
     if ($inline) {
       return 'span';
     }
+    if ($none_supported) {
+      if ($this->options['element_type'] === '0') {
+        return '';
+      }
+    }
+    if ($this->options['element_type']) {
+      return check_plain($this->options['element_type']);
+    }
+    if ($default_empty) {
+      return '';
+    }
+    if (isset($this->definition['element type'])) {
+      return $this->definition['element type'];
+    }
 
     return 'div';
   }
diff --git a/sites/all/modules/views/modules/user/views_handler_field_user_roles.inc b/sites/all/modules/views/modules/user/views_handler_field_user_roles.inc
index e1d583bf5c1fbee99528ec5c1744f4f4405e30da..f556107816d289320083eee1c0b4d979a38e8bb1 100644
--- a/sites/all/modules/views/modules/user/views_handler_field_user_roles.inc
+++ b/sites/all/modules/views/modules/user/views_handler_field_user_roles.inc
@@ -1,6 +1,8 @@
 <?php
 /**
  * Field handler to provide a list of roles.
+ *
+ * @ingroup views_field_handlers
  */
 class views_handler_field_user_roles extends views_handler_field_prerender_list {
   function construct() {
diff --git a/sites/all/modules/views/modules/user/views_handler_filter_user_current.inc b/sites/all/modules/views/modules/user/views_handler_filter_user_current.inc
index ee119619eae655c07075bfb810450544c4e2de11..14deb0d2cad6bbcd61228dddfbc2874afccc3de4 100644
--- a/sites/all/modules/views/modules/user/views_handler_filter_user_current.inc
+++ b/sites/all/modules/views/modules/user/views_handler_filter_user_current.inc
@@ -1,7 +1,9 @@
 <?php
 
 /**
- * Filter handler for the current user
+ * Filter handler for the current user.
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_user_current extends views_handler_filter_boolean_operator {
   function construct() {
diff --git a/sites/all/modules/views/modules/user/views_handler_filter_user_name.inc b/sites/all/modules/views/modules/user/views_handler_filter_user_name.inc
index a1b409c3ad43281fee17891acf24eeb9e1c7f8bf..c885e1b8f1778c5e2a4bce8d54a5eee381f7f9fe 100644
--- a/sites/all/modules/views/modules/user/views_handler_filter_user_name.inc
+++ b/sites/all/modules/views/modules/user/views_handler_filter_user_name.inc
@@ -1,7 +1,9 @@
 <?php
 
 /**
- * Filter handler for usernames
+ * Filter handler for usernames.
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_user_name extends views_handler_filter_in_operator {
   var $always_multiple = TRUE;
diff --git a/sites/all/modules/views/modules/user/views_handler_filter_user_permissions.inc b/sites/all/modules/views/modules/user/views_handler_filter_user_permissions.inc
index 904ba9f90e97b734958ccefda2ca17cb0baa65a1..4cf51db4692985a801d0630beacc3cd15ede7914 100644
--- a/sites/all/modules/views/modules/user/views_handler_filter_user_permissions.inc
+++ b/sites/all/modules/views/modules/user/views_handler_filter_user_permissions.inc
@@ -1,6 +1,8 @@
 <?php
 /**
- * Filter handler for user roles
+ * Filter handler for user roles.
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_user_permissions extends views_handler_filter_many_to_one {
   function get_value_options() {
diff --git a/sites/all/modules/views/modules/user/views_handler_filter_user_roles.inc b/sites/all/modules/views/modules/user/views_handler_filter_user_roles.inc
index 3442aa9cfaca4da7defe760d43f77e4c0ed3008d..cbf985df2d28587f2fab98f30215557da61c9e47 100644
--- a/sites/all/modules/views/modules/user/views_handler_filter_user_roles.inc
+++ b/sites/all/modules/views/modules/user/views_handler_filter_user_roles.inc
@@ -1,10 +1,22 @@
 <?php
 /**
- * Filter handler for user roles
+ * Filter handler for user roles.
+ *
+ * @ingroup views_filter_handlers
  */
 class views_handler_filter_user_roles extends views_handler_filter_many_to_one {
   function get_value_options() {
     $this->value_options = user_roles(TRUE);
     unset($this->value_options[DRUPAL_AUTHENTICATED_RID]);
   }
+
+  /**
+   * Override empty and not empty operator labels to be clearer for user roles.
+   */
+  function operators() {
+    $operators = parent::operators();
+    $operators['empty']['title'] = t("Only has the 'authenticated user' role");
+    $operators['not empty']['title'] = t("Has roles in addition to 'authenticated user'");
+    return $operators;
+  }
 }
diff --git a/sites/all/modules/views/modules/user/views_plugin_row_user_view.inc b/sites/all/modules/views/modules/user/views_plugin_row_user_view.inc
new file mode 100644
index 0000000000000000000000000000000000000000..b48f4596e5ae7abbbb37e3b3f18aa856cda0fa10
--- /dev/null
+++ b/sites/all/modules/views/modules/user/views_plugin_row_user_view.inc
@@ -0,0 +1,81 @@
+<?php
+
+/**
+ * @file
+ * Contains the user view row plugin.
+ */
+
+/**
+ * A row plugin which renders a user via user_view.
+ *
+ * @ingroup views_row_plugins
+ */
+class views_plugin_row_user_view extends views_plugin_row {
+  var $base_table = 'users';
+  var $base_field = 'uid';
+
+  // Store the users to be used for pre_render.
+  var $users = array();
+
+  function option_definition() {
+    $options = parent::option_definition();
+    $options['view_mode'] = array('default' => 'full');
+
+    return $options;
+  }
+
+  function options_form(&$form, &$form_state) {
+    parent::options_form($form, $form_state);
+
+    $options = $this->options_form_summary_options();
+    $form['view_mode'] = array(
+      '#type' => 'select',
+      '#options' => $options,
+      '#title' => t('View mode'),
+      '#default_value' => $this->options['view_mode'],
+     );
+    $form['help']['#markup'] = t("Display the user with standard user view. It might be necessary to add a user-profile.tpl.php in your themes template folder, because the default <a href=\"@user-profile-api-link\">user-profile</a>e template don't show the username per default.", array('@user-profile-api-link' => url('http://api.drupal.org/api/drupal/modules--user--user-profile.tpl.php/7')));
+  }
+
+
+    /**
+     * Return the main options, which are shown in the summary title.
+     */
+    function options_form_summary_options() {
+      $entity_info = entity_get_info('user');
+      $options = array();
+      if (!empty($entity_info['view modes'])) {
+        foreach ($entity_info['view modes'] as $mode => $settings) {
+          $options[$mode] = $settings['label'];
+        }
+      }
+      if (empty($options)) {
+        $options = array(
+          'full' => t('User account')
+        );
+      }
+
+      return $options;
+    }
+
+    function summary_title() {
+      $options = $this->options_form_summary_options();
+      return check_plain($options[$this->options['view_mode']]);
+    }
+
+  function pre_render($values) {
+    $uids = array();
+    foreach ($values as $row) {
+      $uids[] = $row->{$this->field_alias};
+    }
+    $this->users = user_load_multiple($uids);
+  }
+
+  function render($row) {
+    $account = $this->users[$row->{$this->field_alias}];
+    $account->view = $this->view;
+    $build = user_view($account, $this->options['view_mode']);
+
+    return drupal_render($build);
+  }
+}
diff --git a/sites/all/modules/views/modules/views.views.inc b/sites/all/modules/views/modules/views.views.inc
index 527607e038819a97c0c43b9d1d6a35884a03cb67..6aa8a090277ef9ff0ef17095cd4d50098c39fb51 100644
--- a/sites/all/modules/views/modules/views.views.inc
+++ b/sites/all/modules/views/modules/views.views.inc
@@ -68,6 +68,24 @@ function views_views_data() {
     ),
   );
 
+  $data['views']['result'] = array(
+    'title' => t('Result summary'),
+    'help' => t('Shows result summary, for example the items per page.'),
+    'area' => array(
+      'handler' => 'views_handler_area_result',
+    ),
+  );
+
+  if (module_exists('contextual')) {
+    $data['views']['contextual_links'] = array(
+      'title' => t('Contextual Links'),
+      'help' => t('Display fields in a contextual links menu.'),
+      'field' => array(
+        'handler' => 'views_handler_field_contextual_links',
+      ),
+    );
+  }
+
   if (module_invoke('ctools', 'api_version', '1.7.1')) {
     $data['views']['expression'] = array(
       'title' => t('Math expression'),
diff --git a/sites/all/modules/views/plugins/export_ui/views_ui.class.php b/sites/all/modules/views/plugins/export_ui/views_ui.class.php
index 39e182ce75dd13eb6ac7d71e8bd222d58d8cdb88..22b65cb028f18ce3186e89a8fec7a6924dbd3db3 100644
--- a/sites/all/modules/views/plugins/export_ui/views_ui.class.php
+++ b/sites/all/modules/views/plugins/export_ui/views_ui.class.php
@@ -425,8 +425,8 @@ function views_ui_clone_form($form, &$form_state) {
     '#title' => t('View name'),
     '#type' => 'machine_name',
     '#required' => TRUE,
-    '#maxlength' => 32,
-    '#size' => 32,
+    '#maxlength' => 128,
+    '#size' => 128,
     '#machine_name' => array(
       'exists' => 'ctools_export_ui_edit_name_exists',
       'source' => array('human_name'),
diff --git a/sites/all/modules/views/plugins/views_plugin_cache.inc b/sites/all/modules/views/plugins/views_plugin_cache.inc
index dfd16e88a99e0dbae918403d755a81a799d26b6a..9899d482b7e039cfe75527d8e48daeef907f6002 100644
--- a/sites/all/modules/views/plugins/views_plugin_cache.inc
+++ b/sites/all/modules/views/plugins/views_plugin_cache.inc
@@ -251,16 +251,22 @@ class views_plugin_cache extends views_plugin {
 
       $build_info = $this->view->build_info;
 
-      foreach (array('query', 'count_query') as $index) {
-        $query = clone $build_info[$index];
-        $query->preExecute();
-        $build_info[$index] = (string)$query;
+      $query_plugin = $this->view->display_handler->get_plugin('query');
+
+      foreach (array('query','count_query') as $index) {
+        // If the default query back-end is used generate SQL query strings from
+        // the query objects.
+        if ($build_info[$index] instanceof SelectQueryInterface) {
+          $query = clone $build_info[$index];
+          $query->preExecute();
+          $build_info[$index] = (string)$query;
+        }
       }
       $key_data = array(
         'build_info' => $build_info,
         'roles' => array_keys($user->roles),
         'super-user' => $user->uid == 1, // special caching for super user.
-        'language' => $GLOBALS['language'],
+        'language' => $GLOBALS['language']->language,
       );
       foreach (array('exposed_info', 'page', 'sort', 'order') as $key) {
         if (isset($_GET[$key])) {
@@ -282,7 +288,7 @@ class views_plugin_cache extends views_plugin {
         'roles' => array_keys($user->roles),
         'super-user' => $user->uid == 1, // special caching for super user.
         'theme' => $GLOBALS['theme'],
-        'language' => $GLOBALS['language'],
+        'language' => $GLOBALS['language']->language,
       );
 
       $this->_output_key = $this->view->name . ':' . $this->display->id . ':output:' . md5(serialize($key_data));
diff --git a/sites/all/modules/views/plugins/views_plugin_display.inc b/sites/all/modules/views/plugins/views_plugin_display.inc
index 2fdd789f524bc34ae6550a4df01660efd4b91b69..b33804318aff16bdacd6ad8884d230c68a54cbc1 100644
--- a/sites/all/modules/views/plugins/views_plugin_display.inc
+++ b/sites/all/modules/views/plugins/views_plugin_display.inc
@@ -42,6 +42,9 @@ class views_plugin_display extends views_plugin {
     $this->view = &$view;
     $this->display = &$display;
 
+    // Track changes that the user should know about.
+    $changed = FALSE;
+
     // Make some modifications:
     if (!isset($options) && isset($display->display_options)) {
       $options = $display->display_options;
@@ -123,6 +126,7 @@ class views_plugin_display extends views_plugin {
       $this->set_option('offset', NULL);
       $this->set_option('use_pager', NULL);
       $this->set_option('pager', $pager);
+      $changed = TRUE;
     }
 
 
@@ -152,6 +156,7 @@ class views_plugin_display extends views_plugin {
             }
             $this->set_option($area, array('text' => $options));
             $converted = TRUE;
+            $changed = TRUE;
           }
         }
         // Ensure that options are at least an empty array
@@ -169,6 +174,7 @@ class views_plugin_display extends views_plugin {
       $this->set_option('query', $query_settings);
       // Clear the values
       $this->set_option('distinct', NULL);
+      $changed = TRUE;
     }
 
     // Convert field language settings.
@@ -176,12 +182,40 @@ class views_plugin_display extends views_plugin {
     if (isset($query_options['options']['field_language'])) {
       $this->set_option('field_language', $query_options['options']['field_language']);
       unset($query_options['options']['field_language']);
+      $changed = TRUE;
     }
     if (isset($query_options['options']['field_language_add_to_query'])) {
       $this->set_option('field_language_add_to_query', $query_options['options']['field_language_add_to_query']);
       unset($query_options['options']['field_language_add_to_query']);
+      $changed = TRUE;
     }
     $this->set_option('query', $query_options);
+
+    // Convert filter groups.
+    $filter_groups = $this->get_option('filter_groups');
+    // Only convert if it wasn't converted yet, which is the case if there is a 0 group.
+    if (isset($filter_groups['groups'][0])) {
+      // Update filter groups.
+      $filter_groups ['groups'] = views_array_key_plus($filter_groups['groups']);
+      $this->set_option('filter_groups', $filter_groups);
+      // Update the filter group on each filter.
+      $filters = $this->get_option('filters');
+      foreach ($filters as &$filter) {
+        if (isset($filter['group'])) {
+          $filter['group']++;
+        }
+        else {
+          $filter['group'] = 1;
+        }
+      }
+      $this->set_option('filters', $filters);
+      $changed = TRUE;
+    }
+
+    // Mark the view as changed so the user has a chance to save it.
+    if ($changed) {
+      $this->view->changed = TRUE;
+    }
   }
 
   function construct() {
@@ -629,7 +663,7 @@ class views_plugin_display extends views_plugin {
       'filter_groups' => array(
         'contains' => array(
           'operator' => array('default' => 'AND'),
-          'groups' => array('default' => array(0 => 'AND')),
+          'groups' => array('default' => array(1 => 'AND')),
         ),
       ),
       'filters' => array(
@@ -768,7 +802,14 @@ class views_plugin_display extends views_plugin {
   }
 
   /**
-   * Get the display or row plugin, if it exists.
+   * Get the instance of a plugin, for example style or row.
+   *
+   * @param string $type
+   *   The type of the plugin.
+   * @param string $name
+   *   The name of the plugin defined in hook_views_plugins.
+   *
+   * @return views_plugin|FALSE
    */
   function get_plugin($type = 'style', $name = NULL) {
     static $cache = array();
@@ -1061,7 +1102,7 @@ class views_plugin_display extends views_plugin {
       );
     }
 
-    $display_comment = drupal_substr($this->get_option('display_comment'), 0, 10);
+    $display_comment = check_plain(drupal_substr($this->get_option('display_comment'), 0, 10));
     $options['display_comment'] = array(
       'category' => 'other',
       'title' => t('Comment'),
@@ -1682,6 +1723,7 @@ class views_plugin_display extends views_plugin {
 
         // Default text.
         // We have some options, so make a list.
+        $output = '';
         if (!empty($options)) {
           $output = t('<p>The following tokens are available for this link.</p>');
           foreach (array_keys($options) as $type) {
diff --git a/sites/all/modules/views/plugins/views_plugin_display_page.inc b/sites/all/modules/views/plugins/views_plugin_display_page.inc
index ac89e0c2aaa5467fc7c660ddafa550dfe9d520ca..77f210053d3067f916418aeb18c553a2ca0c37e2 100644
--- a/sites/all/modules/views/plugins/views_plugin_display_page.inc
+++ b/sites/all/modules/views/plugins/views_plugin_display_page.inc
@@ -28,6 +28,7 @@ class views_plugin_display_page extends views_plugin_display {
         'description' => array('default' => '', 'translatable' => FALSE),
         'weight' => array('default' => 0),
         'name' => array('default' => variable_get('menu_default_node_menu', 'navigation')),
+        'context' => array('default' => ''),
        ),
     );
     $options['tab_options'] = array(
@@ -148,6 +149,12 @@ class views_plugin_display_page extends views_plugin_display {
           break;
       }
 
+      // Add context for contextual links.
+      // @see menu_contextual_links()
+      if (!empty($menu['context'])) {
+        $items[$path]['context'] = MENU_CONTEXT_INLINE;
+      }
+
       // If this is a 'default' tab, check to see if we have to create teh
       // parent menu item.
       if ($menu['type'] == 'default tab') {
@@ -371,6 +378,13 @@ class views_plugin_display_page extends views_plugin_display {
           '#description' => t('The lower the weight the higher/further left it will appear.'),
           '#dependency' => array('radio:menu[type]' => array('normal', 'tab', 'default tab')),
         );
+        $form['menu']['context'] = array(
+          '#title' => t('Context'),
+          '#type' => 'checkbox',
+          '#default_value' => !empty($menu['context']),
+          '#description' => t('Displays the link in contextual links'),
+          '#dependency' => array('radio:menu[type]' => array('tab')),
+        );
         break;
       case 'tab_options':
         $form['#title'] .= t('Default tab options');
diff --git a/sites/all/modules/views/plugins/views_plugin_pager.inc b/sites/all/modules/views/plugins/views_plugin_pager.inc
index f39e2d391dd70f0b06c4d2ed57b612d7d78454e5..57a987d3643d6312e537c7bec1c0bfc6931f4a63 100644
--- a/sites/all/modules/views/plugins/views_plugin_pager.inc
+++ b/sites/all/modules/views/plugins/views_plugin_pager.inc
@@ -174,6 +174,11 @@ class views_plugin_pager extends views_plugin {
    */
   function post_execute(&$result) { }
 
+  /**
+   * Perform any needed actions just before rendering.
+   */
+  function pre_render(&$result) { }
+
   /**
    * Render the pager.
    *
diff --git a/sites/all/modules/views/plugins/views_plugin_pager_full.inc b/sites/all/modules/views/plugins/views_plugin_pager_full.inc
index 6c7b096493bb1d282cd3a1cf91e0d53a0ad24224..3884ac1a9c63a1f31870d117b4c64124c9a35180 100644
--- a/sites/all/modules/views/plugins/views_plugin_pager_full.inc
+++ b/sites/all/modules/views/plugins/views_plugin_pager_full.inc
@@ -165,6 +165,16 @@ class views_plugin_pager_full extends views_plugin_pager {
     if ($error) {
       form_set_error('pager_options][expose][items_per_page_options', t('Please insert a list of integer numeric values separated by commas: e.g: 10, 20, 50, 100'));
     }
+
+    // Take sure that the items_per_page is part of the expose settings.
+    if (!empty($form_state['values']['pager_options']['expose']['items_per_page']) && !empty($form_state['values']['pager_options']['items_per_page'])) {
+      $items_per_page = $form_state['values']['pager_options']['items_per_page'];
+      if (array_search($items_per_page, $options) === FALSE) {
+        form_set_error('pager_options][expose][items_per_page_options', t('Please insert the items per page (@items_per_page) from above.',
+          array('@items_per_page' => $items_per_page))
+        );
+      }
+    }
   }
 
   function query() {
diff --git a/sites/all/modules/views/plugins/views_plugin_query.inc b/sites/all/modules/views/plugins/views_plugin_query.inc
index f2003840a3117eb860fa5a1245a6b844c7005690..55c0b2af5c9eb7cc675ffa419146d5705b05a3f1 100644
--- a/sites/all/modules/views/plugins/views_plugin_query.inc
+++ b/sites/all/modules/views/plugins/views_plugin_query.inc
@@ -33,11 +33,17 @@ class views_plugin_query extends views_plugin {
 
   /**
    * Let modules modify the query just prior to finalizing it.
+   *
+   * @param view $view
+   *   The view which is executed.
    */
   function alter(&$view) {  }
 
   /**
    * Builds the necessary info to execute the query.
+   *
+   * @param view $view
+   *   The view which is executed.
    */
   function build(&$view) { }
 
@@ -49,6 +55,9 @@ class views_plugin_query extends views_plugin {
    * $view->pager['current_page'].
    *
    * $view->result should contain an array of objects.
+   *
+   * @param view $view
+   *   The view which is executed.
    */
   function execute(&$view) {  }
 
@@ -57,6 +66,9 @@ class views_plugin_query extends views_plugin {
    *
    * This signature is something that can be used when perusing query logs to
    * discern where particular queries might be coming from.
+   *
+   * @param view $view
+   *   The view which is executed.
    */
   function add_signature(&$view) { }
 
diff --git a/sites/all/modules/views/plugins/views_plugin_query_default.inc b/sites/all/modules/views/plugins/views_plugin_query_default.inc
index 082ff337b28455aa647e25181f5bc91d14b0188a..39e01743dd4e4e6bbc291bac40ab918c3f706297 100644
--- a/sites/all/modules/views/plugins/views_plugin_query_default.inc
+++ b/sites/all/modules/views/plugins/views_plugin_query_default.inc
@@ -205,7 +205,7 @@ class views_plugin_query_default extends views_plugin_query {
       '#description' => t('Disabling SQL rewriting will disable node_access checks as well as other modules that implement hook_query_alter().'),
       '#type' => 'checkbox',
       '#default_value' => !empty($this->options['disable_sql_rewrite']),
-      '#prefix' =>  '<div class="messages warning">' . t('WARNING: Disabling SQL rewriting means that node access security is disabled. This may allow users to see data they should not be able to see if your view is misconfigured. Please use this option only if you understand and accept this security risk.') . '</div>',
+      '#suffix' => '<div class="messages warning sql-rewrite-warning js-hide">' . t('WARNING: Disabling SQL rewriting means that node access security is disabled. This may allow users to see data they should not be able to see if your view is misconfigured. Please use this option only if you understand and accept this security risk.') . '</div>',
     );
     $form['distinct'] = array(
       '#type' => 'checkbox',
@@ -934,7 +934,7 @@ class views_plugin_query_default extends views_plugin_query {
    *
    * @param $table
    *   The table this field is part of. If a formula, enter NULL.
-   *   If you want to orderby random use "rand" as table and
+   *   If you want to orderby random use "rand" as table and nothing else.
    * @param $field
    *   The field or formula to sort on. If already a field, enter NULL
    *   and put in the alias.
@@ -949,7 +949,9 @@ class views_plugin_query_default extends views_plugin_query {
    *   Any params that should be passed through to the add_field.
    */
   function add_orderby($table, $field = NULL, $order = 'ASC', $alias = '', $params = array()) {
-    if ($table) {
+    // Only ensure the table if it's not the special random key.
+    // @todo: Maybe it would make sense to just add a add_orderby_rand or something similar.
+    if ($table && $table != 'rand') {
       $this->ensure_table($table);
     }
 
@@ -1030,13 +1032,24 @@ class views_plugin_query_default extends views_plugin_query {
   /**
    * Construct the "WHERE" or "HAVING" part of the query.
    *
+   * As views has to wrap the conditions from arguments with AND, a special
+   * group is wrapped around all conditions. This special group has the ID 0.
+   * There is other code in filters which makes sure that the group IDs are
+   * higher than zero.
+   *
    * @param $where
    *   'where' or 'having'.
    */
   function build_condition($where = 'where') {
     $has_condition = FALSE;
-    $main_group = $this->group_operator == 'OR' ? db_or() : db_and();
+    $has_arguments = FALSE;
+    $has_filter = FALSE;
+
+    $main_group = db_and();
+    $filter_group = $this->group_operator == 'OR' ? db_or() : db_and();
+
     foreach ($this->$where as $group => $info) {
+
       if (!empty($info['conditions'])) {
         $sub_group = $info['type'] == 'OR' ? db_or() : db_and();
         foreach ($info['conditions'] as $key => $clause) {
@@ -1055,10 +1068,27 @@ class views_plugin_query_default extends views_plugin_query {
             $sub_group->condition($clause['field'], $clause['value'], $clause['operator']);
           }
         }
-        $main_group->condition($sub_group);
+
+        // Add the item to the filter group.
+        if ($group != 0) {
+          $has_filter = TRUE;
+          $filter_group->condition($sub_group);
+        }
+        else {
+          $has_arguments = TRUE;
+          $main_group->condition($sub_group);
+        }
       }
     }
-    if ($has_condition) {
+
+    if ($has_filter) {
+      $main_group->condition($filter_group);
+    }
+
+    if (!$has_arguments && $has_condition) {
+      return $filter_group;
+    }
+    if ($has_arguments && $has_condition) {
       return $main_group;
     }
   }
diff --git a/sites/all/modules/views/plugins/views_plugin_style.inc b/sites/all/modules/views/plugins/views_plugin_style.inc
index 4e0946e63b7d9a34dff599589dfa1b87de8b2192..421591a8bb79c3bb6dbe038b8a4978c1967de964 100644
--- a/sites/all/modules/views/plugins/views_plugin_style.inc
+++ b/sites/all/modules/views/plugins/views_plugin_style.inc
@@ -43,8 +43,7 @@ class views_plugin_style extends views_plugin {
     }
 
     $this->options += array(
-      'grouping' => '',
-      'group_rendered' => TRUE,
+      'grouping' => array(),
     );
 
     $this->definition += array(
@@ -152,8 +151,7 @@ class views_plugin_style extends views_plugin {
 
   function option_definition() {
     $options = parent::option_definition();
-    $options['grouping'] = array('default' => '');
-    $options['group_rendered'] = array('default' => TRUE);
+    $options['grouping'] = array('default' => array());
     if ($this->uses_row_class()) {
       $options['row_class'] = array('default' => '');
     }
@@ -169,23 +167,52 @@ class views_plugin_style extends views_plugin {
     // @TODO: Document "uses grouping" in docs.php when docs.php is written.
     if ($this->uses_fields() && $this->definition['uses grouping']) {
       $options = array('' => t('- None -'));
-      $options += $this->display->handler->get_field_labels();
+      $field_labels = $this->display->handler->get_field_labels();
+      $options += $field_labels;
 
       // If there are no fields, we can't group on them.
       if (count($options) > 1) {
-        $form['grouping'] = array(
-          '#type' => 'select',
-          '#title' => t('Grouping field'),
-          '#options' => $options,
-          '#default_value' => $this->options['grouping'],
-          '#description' => t('You may optionally specify a field by which to group the records. Leave blank to not group.'),
-        );
-        $form['group_rendered'] = array(
-          '#type' => 'checkbox',
-          '#title' => t('Use rendered output to group rows'),
-          '#default_value' => $this->options['group_rendered'],
-          '#description' => t('If enabled the rendered output of the grouping field is used to group the rows.'),
-        );
+        // This is for backward compability, when there was just a single select form.
+        if (is_string($this->options['grouping'])) {
+          $grouping = $this->options['grouping'];
+          $this->options['grouping'] = array();
+          $this->options['grouping'][0]['field'] = $grouping;
+        }
+        if (isset($this->options['group_rendered']) && is_string($this->options['group_rendered'])) {
+          $this->options['grouping'][0]['rendered'] = $this->options['group_rendered'];
+          unset($this->options['group_rendered']);
+        }
+
+        $c = count($this->options['grouping']);
+        // Add a form for every grouping, plus one.
+        for ($i = 0; $i <= $c; $i++) {
+          $grouping = !empty($this->options['grouping'][$i]) ? $this->options['grouping'][$i] : array();
+          $grouping += array('field' => '', 'rendered' => TRUE, 'rendered_strip' => FALSE);
+          $form['grouping'][$i]['field'] = array(
+            '#type' => 'select',
+            '#title' => t('Grouping field Nr.@number', array('@number' => $i + 1)),
+            '#options' => $options,
+            '#default_value' => $grouping['field'],
+            '#description' => t('You may optionally specify a field by which to group the records. Leave blank to not group.'),
+          );
+          $form['grouping'][$i]['rendered'] = array(
+            '#type' => 'checkbox',
+            '#title' => t('Use rendered output to group rows'),
+            '#default_value' => $grouping['rendered'],
+            '#description' => t('If enabled the rendered output of the grouping field is used to group the rows.'),
+            '#dependency' => array(
+              'edit-style-options-grouping-' . $i . '-field' => array_keys($field_labels),
+            )
+          );
+          $form['grouping'][$i]['rendered_strip'] = array(
+            '#type' => 'checkbox',
+            '#title' => t('Remove tags from rendered output'),
+            '#default_value' => $grouping['rendered_strip'],
+            '#dependency' => array(
+              'edit-style-options-grouping-' . $i . '-field' => array_keys($field_labels),
+            )
+          );
+        }
       }
     }
 
@@ -203,6 +230,18 @@ class views_plugin_style extends views_plugin {
     }
   }
 
+  function options_validate(&$form, &$form_state) {
+    // Don't run validation on style plugins without the grouping setting.
+    if (isset($form_state['values']['style_options']['grouping'])) {
+      // Don't save grouping if no field is specified.
+      foreach ($form_state['values']['style_options']['grouping'] as $index => $grouping) {
+        if (empty($grouping['field'])) {
+          unset($form_state['values']['style_options']['grouping'][$index]);
+        }
+      }
+    }
+  }
+
   /**
    * Called by the view builder to see if this style handler wants to
    * interfere with the sorts. If so it should build; if it returns
@@ -237,36 +276,63 @@ class views_plugin_style extends views_plugin {
       return;
     }
 
-    // Group the rows according to the grouping field, if specified.
+    // Group the rows according to the grouping instructions, if specified.
     $sets = $this->render_grouping(
       $this->view->result,
       $this->options['grouping'],
-      (bool) $this->options['group_rendered']
+      TRUE
     );
 
-    // Render each group separately and concatenate.  Plugins may override this
-    // method if they wish some other way of handling grouping.
+    return $this->render_grouping_sets($sets);
+  }
+
+  /**
+   * Render the grouping sets.
+   *
+   * Plugins may override this method if they wish some other way of handling
+   * grouping.
+   *
+   * @param $sets
+   *   Array containing the grouping sets to render.
+   * @param $level
+   *   Integer indicating the hierarchical level of the grouping.
+   *
+   * @return string
+   *   Rendered output of given grouping sets.
+   */
+  function render_grouping_sets($sets, $level = 0) {
     $output = '';
-    foreach ($sets as $group) {
-      $title = $group['group'];
-      if ($this->uses_row_plugin()) {
-        $rows = array();
-        foreach ($group['rows'] as $row_index => $row) {
-          $this->view->row_index = $row_index;
-          $rows[$row_index] = $this->row_plugin->render($row);
-        }
+    foreach ($sets as $set) {
+      $row = reset($set['rows']);
+      // Render as a grouping set.
+      if (is_array($row) && isset($row['group'])) {
+        $output .= theme(views_theme_functions('views_view_grouping', $this->view, $this->display),
+          array(
+            'view' => $this->view,
+            'grouping' => $this->options['grouping'][$level],
+            'grouping_level' => $level,
+            'rows' => $set['rows'],
+            'title' => $set['group'])
+        );
       }
+      // Render as a record set.
       else {
-        $rows = $group['rows'];
-      }
+        if ($this->uses_row_plugin()) {
+          foreach ($set['rows'] as $index => $row) {
+            $this->view->row_index = $index;
+            $set['rows'][$index] = $this->row_plugin->render($row);
+          }
+        }
 
-      $output .= theme($this->theme_functions(),
-        array(
-          'view' => $this->view,
-          'options' => $this->options,
-          'rows' => $rows,
-          'title' => $title)
-      );
+        $output .= theme($this->theme_functions(),
+          array(
+            'view' => $this->view,
+            'options' => $this->options,
+            'grouping_level' => $level,
+            'rows' => $set['rows'],
+            'title' => $set['group'])
+        );
+      }
     }
     unset($this->view->row_index);
     return $output;
@@ -277,42 +343,98 @@ class views_plugin_style extends views_plugin {
    *
    * @param $records
    *   An array of records from the view to group.
-   * @param $grouping_field
-   *   The field id on which to group.  If empty, the result set will be given
-   *   a single group with an empty string as a label.
+   * @param $groupings
+   *   An array of grouping instructions on which fields to group. If empty, the
+   *   result set will be given a single group with an empty string as a label.
    * @param $group_rendered
-   *   Boolean value to switch whether to use the rendered or the raw field
-   *   value for grouping. If set to NULL the return is structured as before
-   *   Views 7.x-3.0-rc2.
+   *   Boolean value whether to use the rendered or the raw field value for
+   *   grouping. If set to NULL the return is structured as before
+   *   Views 7.x-3.0-rc2. After Views 7.x-3.0 this boolean is only used if
+   *   $groupings is an old-style string or if the rendered option is missing
+   *   for a grouping instruction.
    * @return
    *   The grouped record set.
+   *   A nested set structure is generated if multiple grouping fields are used.
+   *
+   *   @code
+   *   array(
+   *     'grouping_field_1:grouping_1' => array(
+   *       'group' => 'grouping_field_1:content_1',
+   *       'rows' => array(
+   *         'grouping_field_2:grouping_a' => array(
+   *           'group' => 'grouping_field_2:content_a',
+   *           'rows' => array(
+   *             $row_index_1 => $row_1,
+   *             $row_index_2 => $row_2,
+   *             // ...
+   *           )
+   *         ),
+   *       ),
+   *     ),
+   *     'grouping_field_1:grouping_2' => array(
+   *       // ...
+   *     ),
+   *   )
+   *   @endcode
    */
-  function render_grouping($records, $grouping_field = '', $group_rendered = NULL) {
+  function render_grouping($records, $groupings = array(), $group_rendered = NULL) {
+    // This is for backward compability, when $groupings was a string containing
+    // the ID of a single field.
+    if (is_string($groupings)) {
+      $rendered = $group_rendered === NULL ? TRUE : $group_rendered;
+      $groupings = array(array('field' => $groupings, 'rendered' => $rendered));
+    }
+
     // Make sure fields are rendered
     $this->render_fields($this->view->result);
     $sets = array();
-    if ($grouping_field) {
+    if ($groupings) {
       foreach ($records as $index => $row) {
-        $grouping = '';
-        // Group on the rendered version of the field, not the raw.  That way,
-        // we can control any special formatting of the grouping field through
-        // the admin or theme layer or anywhere else we'd like.
-        if (isset($this->view->field[$grouping_field])) {
-          $group_content = $this->get_field($index, $grouping_field);
-          if ($this->view->field[$grouping_field]->options['label']) {
-            $group_content = $this->view->field[$grouping_field]->options['label'] . ': ' . $group_content;
+        // Iterate through configured grouping fields to determine the
+        // hierarchically positioned set where the current row belongs to.
+        // While iterating, parent groups, that do not exist yet, are added.
+        $set = &$sets;
+        foreach ($groupings as $info) {
+          $field = $info['field'];
+          $rendered = isset($info['rendered']) ? $info['rendered'] : $group_rendered;
+          $rendered_strip = isset($info['rendered_strip']) ? $info['rendered_strip'] : FALSE;
+          $grouping = '';
+          $group_content = '';
+          // Group on the rendered version of the field, not the raw.  That way,
+          // we can control any special formatting of the grouping field through
+          // the admin or theme layer or anywhere else we'd like.
+          if (isset($this->view->field[$field])) {
+            $group_content = $this->get_field($index, $field);
+            if ($this->view->field[$field]->options['label']) {
+              $group_content = $this->view->field[$field]->options['label'] . ': ' . $group_content;
+            }
+            if ($rendered) {
+              $grouping = $group_content;
+              if ($rendered_strip) {
+                $group_content = $grouping = strip_tags(htmlspecialchars_decode($group_content));
+              }
+            }
+            else {
+              $grouping = $this->get_field_value($index, $field);
+              // Not all field handlers return a scalar value,
+              // e.g. views_handler_field_field.
+              if (!is_scalar($grouping)) {
+                $grouping = md5(serialize($grouping));
+              }
+            }
           }
-          if ($group_rendered) {
-            $grouping = $group_content;
-          }
-          else {
-            $grouping = $this->get_field_value($index, $grouping_field);
-          }
-          if (empty($sets[$grouping]['group'])) {
-            $sets[$grouping]['group'] = $group_content;
+
+          // Create the group if it does not exist yet.
+          if (empty($set[$grouping])) {
+            $set[$grouping]['group'] = $group_content;
+            $set[$grouping]['rows'] = array();
           }
+
+          // Move the set reference into the row set of the group we just determined.
+          $set = &$set[$grouping]['rows'];
         }
-        $sets[$grouping]['rows'][$index] = $row;
+        // Add the row to the hierarchically positioned row set we just determined.
+        $set[$index] = $row;
       }
     }
     else {
diff --git a/sites/all/modules/views/plugins/views_plugin_style_rss.inc b/sites/all/modules/views/plugins/views_plugin_style_rss.inc
index 9e1981928c513df1bd547773cf3d7acdb95500f9..a54eccc507657e36184003d4a44cf2c8ef72210f 100644
--- a/sites/all/modules/views/plugins/views_plugin_style_rss.inc
+++ b/sites/all/modules/views/plugins/views_plugin_style_rss.inc
@@ -72,7 +72,7 @@ class views_plugin_style_rss extends views_plugin_style {
 
   function render() {
     if (empty($this->row_plugin)) {
-      debug('views_plugin_style_default: Missing row plugin');
+      vpr('views_plugin_style_default: Missing row plugin');
       return;
     }
     $rows = '';
diff --git a/sites/all/modules/views/plugins/views_plugin_style_summary.inc b/sites/all/modules/views/plugins/views_plugin_style_summary.inc
index 304f024d3a943b6e68627464b0ef1fb205b5c432..1f705cef68766669a527cef7a7ee722eae5e6069 100644
--- a/sites/all/modules/views/plugins/views_plugin_style_summary.inc
+++ b/sites/all/modules/views/plugins/views_plugin_style_summary.inc
@@ -28,7 +28,6 @@ class views_plugin_style_summary extends views_plugin_style {
   }
 
   function options_form(&$form, &$form_state) {
-    parent::options_form($form, $form_state);
     $form['base_path'] = array(
       '#type' => 'textfield',
       '#title' => t('Base path'),
diff --git a/sites/all/modules/views/plugins/views_plugin_style_summary_jump_menu.inc b/sites/all/modules/views/plugins/views_plugin_style_summary_jump_menu.inc
index bfa66833f5b61c16d993caae990463f52efc2979..0bde6a68662ecedad6dedaa3f04928116bbb8175 100644
--- a/sites/all/modules/views/plugins/views_plugin_style_summary_jump_menu.inc
+++ b/sites/all/modules/views/plugins/views_plugin_style_summary_jump_menu.inc
@@ -33,7 +33,6 @@ class views_plugin_style_summary_jump_menu extends views_plugin_style {
   }
 
   function options_form(&$form, &$form_state) {
-    parent::options_form($form, $form_state);
     $form['base_path'] = array(
       '#type' => 'textfield',
       '#title' => t('Base path'),
diff --git a/sites/all/modules/views/plugins/views_plugin_style_table.inc b/sites/all/modules/views/plugins/views_plugin_style_table.inc
index 2ad5f64bc6d93db0ce38a183e2a4868fdf88bd13..bd090e5a2eac1cd1276b23705c108f277050fe38 100644
--- a/sites/all/modules/views/plugins/views_plugin_style_table.inc
+++ b/sites/all/modules/views/plugins/views_plugin_style_table.inc
@@ -10,6 +10,19 @@
  * @ingroup views_style_plugins
  */
 class views_plugin_style_table extends views_plugin_style {
+
+  /**
+   * Contains the current active sort column.
+   * @var string
+   */
+  public $active;
+
+  /**
+   * Contains the current active sort order, either desc or asc.
+   * @var string
+   */
+  public $order;
+
   function option_definition() {
     $options = parent::option_definition();
 
@@ -19,14 +32,16 @@ class views_plugin_style_table extends views_plugin_style {
     $options['override'] = array('default' => TRUE);
     $options['sticky'] = array('default' => FALSE);
     $options['order'] = array('default' => 'asc');
-    $options['summary'] = array('default' => '');
+    $options['summary'] = array('default' => '', 'translatable' => TRUE);
     $options['empty_table'] = array('default' => FALSE);
 
     return $options;
   }
 
   /**
-   * Determine if we should provide sorting based upon $_GET inputs.
+   * Determine if we should provide sorting based upon $_GET inputs
+   *
+   * @return bool
    */
   function build_sort() {
     if (!isset($_GET['order']) && ($this->options['default'] == -1 || empty($this->view->field[$this->options['default']]))) {
@@ -102,13 +117,15 @@ class views_plugin_style_table extends views_plugin_style {
    *   be requested from the current display. The running render should
    *   send the fields through, as they may be different than what the
    *   display has listed due to access control or other changes.
+   *
+   * @return array
+   *    An array of all the sanitized columns.
    */
   function sanitize_columns($columns, $fields = NULL) {
     $sanitized = array();
     if ($fields === NULL) {
       $fields = $this->display->handler->get_option('fields');
     }
-
     // Preconfigure the sanitized array so that the order is retained.
     foreach ($fields as $field => $info) {
       // Set to itself so that if it isn't touched, it gets column
@@ -166,6 +183,7 @@ class views_plugin_style_table extends views_plugin_style {
       '#title' => t('Table summary'),
       '#description' => t('This value will be displayed as table-summary attribute in the html. Set this for better accessiblity of your site.'),
       '#default_value' => $this->options['summary'],
+      '#maxlength' => 255,
     );
 
     // Note: views UI registers this theme handler on our behalf. Your module
diff --git a/sites/all/modules/views/plugins/views_wizard/views_ui_base_views_wizard.class.php b/sites/all/modules/views/plugins/views_wizard/views_ui_base_views_wizard.class.php
index c314befeb650b0a5a788afc77e367be9c2fd9185..09d9d32389af8ce31cc2b482076223892ba71b57 100644
--- a/sites/all/modules/views/plugins/views_wizard/views_ui_base_views_wizard.class.php
+++ b/sites/all/modules/views/plugins/views_wizard/views_ui_base_views_wizard.class.php
@@ -43,7 +43,7 @@ class ViewsUiBaseViewsWizard implements ViewsWizardInterface {
   protected $filter_defaults = array(
     'id' => NULL,
     'expose' => array('operator' => FALSE),
-    'group' => 0,
+    'group' => 1,
   );
 
   function __construct($plugin) {
diff --git a/sites/all/modules/views/tests/handlers/views_handler_area_text.test b/sites/all/modules/views/tests/handlers/views_handler_area_text.test
index 983b37ddb6a81b6183da5294d041b5a2ce5d6fc1..d9724a4a7ec4220afe5c0a1862ff0173b22e773e 100644
--- a/sites/all/modules/views/tests/handlers/views_handler_area_text.test
+++ b/sites/all/modules/views/tests/handlers/views_handler_area_text.test
@@ -1,5 +1,10 @@
 <?php
 
+/**
+ * Tests the text area handler.
+ *
+ * @see views_handler_area_text
+ */
 class ViewsHandlerAreaTextTest extends ViewsSqlTest {
   public static function getInfo() {
     return array(
@@ -13,7 +18,7 @@ class ViewsHandlerAreaTextTest extends ViewsSqlTest {
     $view = $this->getBasicView();
 
     // add a text header
-    $string = $this->randomString();
+    $string = $this->randomName();
     $view->display['default']->handler->override_option('header', array(
       'area' => array(
         'id' => 'area',
diff --git a/sites/all/modules/views/tests/handlers/views_handler_field.test b/sites/all/modules/views/tests/handlers/views_handler_field.test
new file mode 100644
index 0000000000000000000000000000000000000000..726857e2d99c4f359239a02dd6644630205874ad
--- /dev/null
+++ b/sites/all/modules/views/tests/handlers/views_handler_field.test
@@ -0,0 +1,115 @@
+<?php
+
+/**
+ * @file
+ * Contains tests for views_handler_field.
+ */
+
+/**
+ * Tests the generic field handler
+ *
+ * @see views_handler_field
+ */
+class ViewsHandlerFieldTest extends ViewsSqlTest {
+  public static function getInfo() {
+    return array(
+      'name' => 'Field',
+      'description' => 'Test the core views_handler_field handler.',
+      'group' => 'Views Handlers',
+    );
+  }
+
+  protected function setUp() {
+    parent::setUp();
+    $this->column_map = array(
+      'views_test_name' => 'name',
+    );
+  }
+
+  function testEmpty() {
+    $this->_testHideIfEmpty();
+    $this->_testEmptyText();
+  }
+
+  /**
+   * Tests the hide if empty functionality.
+   *
+   * This tests alters the result to get easier and less coupled results.
+   */
+  function _testHideIfEmpty() {
+    $view = $this->getBasicView();
+    $view->init_display();
+    $view->pre_execute();
+    $view->execute();
+
+    $column_map_reversed = array_flip($this->column_map);
+    $view->row_index = 0;
+
+    $view->field['name']->options['hide_empty'] = TRUE;
+    $view->result[0]->{$column_map_reversed['name']} = "";
+    $render = $view->field['name']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, "", 'If hide_empty is checked, "" should be treated as empty.');
+
+    $view->field['name']->options['empty_zero'] = FALSE;
+    $view->result[0]->{$column_map_reversed['name']} = "0";
+    $render = $view->field['name']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, "0", 'If hide_empty is checked, but not empty_zero, "0" should be treated as not empty.');
+
+    $view->field['name']->options['empty_zero'] = TRUE;
+    $render = $view->field['name']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, "", 'If hide_empty and empty_zero are checked, "0" should be treated as empty.');
+
+    $view->field['name']->options['hide_alter_empty'] = FALSE;
+    $view->field['name']->options['alter']['alter_text'] = TRUE;
+    $view->result[0]->{$column_map_reversed['name']} = "";
+    $random_name = $this->randomName();
+    $view->field['name']->options['alter']['text'] = $random_name;
+    $render = $view->field['name']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, $random_name, 'If hide_empty but not hide_alter_empty is checked, some rewrite should appear even if the value is empty.');
+
+    $view->field['name']->options['hide_alter_empty'] = TRUE;
+    $random_name = $this->randomName();
+    $view->field['name']->options['alter']['text'] = $random_name;
+    $render = $view->field['name']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, "", 'If hide_empty and hide_alter_empty are checked, rewrite should be empty all the time.');
+  }
+
+  /**
+   * Tests the usage of the empty text.
+   */
+  function _testEmptyText() {
+    $view = $this->getBasicView();
+    $view->init_display();
+    $view->pre_execute();
+    $view->execute();
+
+    $column_map_reversed = array_flip($this->column_map);
+    $view->row_index = 0;
+
+    $empty_text = $view->field['name']->options['empty'] = $this->randomName();
+    $view->result[0]->{$column_map_reversed['name']} = "";
+    $render = $view->field['name']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, $empty_text, 'If a field is empty, the empty text should be used for the output.');
+
+    $view->result[0]->{$column_map_reversed['name']} = "0";
+    $render = $view->field['name']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, "0", 'If a field is 0 and empty_zero is not checked, the empty text should not be used for the output.');
+
+    $view->result[0]->{$column_map_reversed['name']} = "0";
+    $view->field['name']->options['empty_zero'] = TRUE;
+    $render = $view->field['name']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, $empty_text, 'If a field is 0 and empty_zero is checked, the empty text should be used for the output.');
+
+    $view->result[0]->{$column_map_reversed['name']} = "";
+    $view->field['name']->options['alter']['alter_text'] = TRUE;
+    $alter_text = $view->field['name']->options['alter']['text'] = $this->randomName();
+    $view->field['name']->options['hide_alter_empty'] = FALSE;
+    $render = $view->field['name']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, $alter_text, 'If a field is empty, some rewrite text exists, but hide_alter_empty is not checked, render the rewrite text.');
+
+    $view->field['name']->options['hide_alter_empty'] = TRUE;
+    $render = $view->field['name']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, $empty_text, 'If a field is empty, some rewrite text exists, and hide_alter_empty is checked, use the empty text.');
+  }
+
+}
\ No newline at end of file
diff --git a/sites/all/modules/views/tests/handlers/views_handler_field_boolean.test b/sites/all/modules/views/tests/handlers/views_handler_field_boolean.test
index a6c95f931c2ea41e26ed5b3e8ddcbdcf0c90ffc8..54b4287c5b9635af5a37ae45f5b87d4eff7458c1 100644
--- a/sites/all/modules/views/tests/handlers/views_handler_field_boolean.test
+++ b/sites/all/modules/views/tests/handlers/views_handler_field_boolean.test
@@ -53,6 +53,11 @@ class ViewsHandlerFieldBooleanTest extends ViewsSqlTest {
     $this->assertEqual(t('False'), $view->field['age']->advanced_render($view->result[0]));
     $this->assertEqual(t('True'), $view->field['age']->advanced_render($view->result[1]));
 
+    // test awesome unicode.
+    $view->field['age']->options['type'] = 'unicode-yes-no';
+    $this->assertEqual('✖', $view->field['age']->advanced_render($view->result[0]));
+    $this->assertEqual('✔', $view->field['age']->advanced_render($view->result[1]));
+
     // Set a custom output format.
     $view->field['age']->formats['test'] = array(t('Test-True'), t('Test-False'));
     $view->field['age']->options['type'] = 'test';
diff --git a/sites/all/modules/views/tests/handlers/views_handler_filter_string.test b/sites/all/modules/views/tests/handlers/views_handler_filter_string.test
index 67b870d1360b06438c4b7b36d33a9ffdfb59e798..cd7831103eff904a23cc5be2f938babf11697270 100644
--- a/sites/all/modules/views/tests/handlers/views_handler_filter_string.test
+++ b/sites/all/modules/views/tests/handlers/views_handler_filter_string.test
@@ -156,12 +156,15 @@ class ViewsHandlerFilterStringTest extends ViewsSqlTest {
         'field' => 'description',
         'relationship' => 'none',
         'operator' => 'word',
-        'value' => 'musician producer',
+        'value' => 'actor',
       ),
     ));
 
     $this->executeView($view);
     $resultset = array(
+      array(
+        'name' => 'George',
+      ),
       array(
         'name' => 'Ringo',
       ),
@@ -191,6 +194,7 @@ class ViewsHandlerFilterStringTest extends ViewsSqlTest {
     );
     $this->assertIdenticalResultset($view, $resultset, $this->column_map);
   }
+
   function testFilterStringStarts() {
     $view = $this->getBasicView();
 
@@ -214,6 +218,7 @@ class ViewsHandlerFilterStringTest extends ViewsSqlTest {
     );
     $this->assertIdenticalResultset($view, $resultset, $this->column_map);
   }
+
   function testFilterStringNotStarts() {
     $view = $this->getBasicView();
 
diff --git a/sites/all/modules/views/tests/handlers/views_handler_sort_date.test b/sites/all/modules/views/tests/handlers/views_handler_sort_date.test
index 08b60532ec1f180024c3062d467a8f14ae8ac357..528c85a35732f3735da74fe724a8a0c17400f9f9 100644
--- a/sites/all/modules/views/tests/handlers/views_handler_sort_date.test
+++ b/sites/all/modules/views/tests/handlers/views_handler_sort_date.test
@@ -12,30 +12,126 @@ class ViewsHandlerSortDateTest extends ViewsSqlTest {
     );
   }
 
-  protected function orderResultSetDate($result_set, $column, $granularity, $reverse = TRUE) {
-    // Build a technical sort column.
-    foreach ($result_set as &$result) {
-      $result['_sort'] = $this->orderResultSetDateHelper($result[$column], $granularity);
+  protected function expectedResultSet($granularity, $reverse = TRUE) {
+    $expected = array();
+    if (!$reverse) {
+      switch ($granularity) {
+          case 'second':
+            $expected = array(
+              array('name' => 'John'),
+              array('name' => 'Paul'),
+              array('name' => 'Meredith'),
+              array('name' => 'Ringo'),
+              array('name' => 'George'),
+            );
+            break;
+          case 'minute':
+            $expected = array(
+              array('name' => 'John'),
+              array('name' => 'Paul'),
+              array('name' => 'Ringo'),
+              array('name' => 'Meredith'),
+              array('name' => 'George'),
+            );
+            break;
+          case 'hour':
+            $expected = array(
+              array('name' => 'John'),
+              array('name' => 'Ringo'),
+              array('name' => 'Paul'),
+              array('name' => 'Meredith'),
+              array('name' => 'George'),
+            );
+            break;
+          case 'day':
+            $expected = array(
+              array('name' => 'John'),
+              array('name' => 'Ringo'),
+              array('name' => 'Paul'),
+              array('name' => 'Meredith'),
+              array('name' => 'George'),
+            );
+            break;
+          case 'month':
+            $expected = array(
+              array('name' => 'John'),
+              array('name' => 'George'),
+              array('name' => 'Ringo'),
+              array('name' => 'Paul'),
+              array('name' => 'Meredith'),
+            );
+            break;
+          case 'year':
+            $expected = array(
+              array('name' => 'John'),
+              array('name' => 'George'),
+              array('name' => 'Ringo'),
+              array('name' => 'Paul'),
+              array('name' => 'Meredith'),
+            );
+            break;
+        }
     }
-    return $this->orderResultSet($result_set, '_sort', $reverse);
-  }
-
-  protected function orderResultSetDateHelper($date, $granularity) {
-    switch ($granularity) {
-      case 'second':
-      default:
-        return $date;
-      case 'minute':
-        return date('YmdHi', $date);
-      case 'hour':
-        return date('YmdH', $date);
-      case 'day':
-        return date('Ymd', $date);
-      case 'month':
-        return date('Ym', $date);
-      case 'year':
-        return date('Y', $date);
+    else {
+      switch ($granularity) {
+        case 'second':
+          $expected = array(
+            array('name' => 'George'),
+            array('name' => 'Ringo'),
+            array('name' => 'Meredith'),
+            array('name' => 'Paul'),
+            array('name' => 'John'),
+          );
+          break;
+        case 'minute':
+          $expected = array(
+            array('name' => 'George'),
+            array('name' => 'Ringo'),
+            array('name' => 'Meredith'),
+            array('name' => 'Paul'),
+            array('name' => 'John'),
+           );
+          break;
+        case 'hour':
+          $expected = array(
+            array('name' => 'George'),
+            array('name' => 'Ringo'),
+            array('name' => 'Paul'),
+            array('name' => 'Meredith'),
+            array('name' => 'John'),
+          );
+          break;
+        case 'day':
+          $expected = array(
+            array('name' => 'George'),
+            array('name' => 'John'),
+            array('name' => 'Ringo'),
+            array('name' => 'Paul'),
+            array('name' => 'Meredith'),
+          );
+          break;
+        case 'month':
+          $expected = array(
+            array('name' => 'John'),
+            array('name' => 'George'),
+            array('name' => 'Ringo'),
+            array('name' => 'Paul'),
+            array('name' => 'Meredith'),
+          );
+          break;
+        case 'year':
+          $expected = array(
+            array('name' => 'John'),
+            array('name' => 'George'),
+            array('name' => 'Ringo'),
+            array('name' => 'Paul'),
+            array('name' => 'Meredith'),
+          );
+          break;
+      }
     }
+
+    return $expected;
   }
 
   /**
@@ -48,10 +144,10 @@ class ViewsHandlerSortDateTest extends ViewsSqlTest {
 
         // Change the fields.
         $view->display['default']->handler->override_option('fields', array(
-          'id' => array(
-            'id' => 'id',
+          'name' => array(
+            'id' => 'name',
             'table' => 'views_test',
-            'field' => 'id',
+            'field' => 'name',
             'relationship' => 'none',
           ),
           'created' => array(
@@ -69,9 +165,16 @@ class ViewsHandlerSortDateTest extends ViewsSqlTest {
             'table' => 'views_test',
             'field' => 'created',
             'relationship' => 'none',
-            'granularity' => 'second',
+            'granularity' => $granularity,
             'order' => $reverse ? 'DESC' : 'ASC',
           ),
+          'id' => array(
+            'id' => 'id',
+            'table' => 'views_test',
+            'field' => 'id',
+            'relationship' => 'none',
+            'order' => 'ASC',
+          ),
         ));
 
         // Execute the view.
@@ -79,9 +182,11 @@ class ViewsHandlerSortDateTest extends ViewsSqlTest {
 
         // Verify the result.
         $this->assertEqual(count($this->dataSet()), count($view->result), t('The number of returned rows match.'));
-        $this->assertIdenticalResultset($view, $this->orderResultSetDate($this->dataSet(), 'created', $granularity, $reverse), array(
-          'views_test_created' => 'created',
+        $this->assertIdenticalResultset($view, $this->expectedResultSet($granularity, $reverse), array(
+          'views_test_name' => 'name',
         ), t('Result is returned correctly when ordering by granularity @granularity, @reverse.', array('@granularity' => $granularity, '@reverse' => $reverse ? t('reverse') : t('forward'))));
+        $view->destroy();
+        unset($view);
       }
     }
   }
diff --git a/sites/all/modules/views/tests/styles/views_plugin_style.test b/sites/all/modules/views/tests/styles/views_plugin_style.test
index 5bad590b5fa6df040b73a402dd253ba194e98c02..875fcf1a09ad1ea916a31caadc161abe5c788d10 100644
--- a/sites/all/modules/views/tests/styles/views_plugin_style.test
+++ b/sites/all/modules/views/tests/styles/views_plugin_style.test
@@ -14,9 +14,9 @@ class ViewsPluginStyleTestCase extends ViewsSqlTest {
   }
 
   /**
-   * Tests the groupby features of styles.
+   * Tests the grouping legacy features of styles.
    */
-  function testGroupBy() {
+  function testGroupingLegacy() {
     $view = $this->getBasicView();
     // Setup grouping by the job.
     $view->init_display();
@@ -69,7 +69,7 @@ class ViewsPluginStyleTestCase extends ViewsSqlTest {
     $expected['Job: Drummer'][2]->views_test_job = 'Drummer';
     $expected['Job: Drummer'][2]->views_test_id = '3';
 
-    $this->assertEqual($sets, $expected, t('The style plugin should proper groupby the results'));
+    $this->assertEqual($sets, $expected, t('The style plugin should proper group the results with grouping by the rendered output.'));
 
     $expected = array();
     $expected['Job: Singer'] = array();
@@ -93,7 +93,7 @@ class ViewsPluginStyleTestCase extends ViewsSqlTest {
     $sets_new_rendered = $view->style_plugin->render_grouping($view->result, $view->style_plugin->options['grouping'], TRUE);
     $sets_new_value = $view->style_plugin->render_grouping($view->result, $view->style_plugin->options['grouping'], FALSE);
 
-    $this->assertEqual($sets_new_rendered, $expected, t('The style plugins should proper groupby the results with grouped by the rendered output.'));
+    $this->assertEqual($sets_new_rendered, $expected, t('The style plugins should proper group the results with grouping by the rendered output.'));
 
     // Reorder the group structure to group by value.
     $expected['Singer'] = $expected['Job: Singer'];
@@ -101,6 +101,130 @@ class ViewsPluginStyleTestCase extends ViewsSqlTest {
     unset($expected['Job: Singer']);
     unset($expected['Job: Drummer']);
 
-    $this->assertEqual($sets_new_value, $expected, t('The style plugins should proper groupby the results with grouped by the value.'));
+    $this->assertEqual($sets_new_value, $expected, t('The style plugins should proper group the results with grouping by the value.'));
+  }
+
+  function testGrouping() {
+    $this->_testGrouping(FALSE);
+    $this->_testGrouping(TRUE);
+  }
+
+  /**
+   * Tests the grouping features of styles.
+   */
+  function _testGrouping($stripped = FALSE) {
+    $view = $this->getBasicView();
+    // Setup grouping by the job and the age field.
+    $view->init_display();
+    $view->init_style();
+    $view->style_plugin->options['grouping'] = array(
+      array('field' => 'job'),
+      array('field' => 'age'),
+    );
+
+    // Reduce the amount of items to make the test a bit easier.
+    // Set up the pager.
+    $view->display['default']->handler->override_option('pager', array(
+      'type' => 'some',
+      'options' => array('items_per_page' => 3),
+    ));
+
+    // Add the job and age field.
+    $view->display['default']->handler->override_option('fields', array(
+      'name' => array(
+        'id' => 'name',
+        'table' => 'views_test',
+        'field' => 'name',
+        'relationship' => 'none',
+      ),
+      'job' => array(
+        'id' => 'job',
+        'table' => 'views_test',
+        'field' => 'job',
+        'relationship' => 'none',
+      ),
+      'age' => array(
+        'id' => 'age',
+        'table' => 'views_test',
+        'field' => 'age',
+        'relationship' => 'none',
+      ),
+    ));
+
+    // Now run the query and groupby the result.
+    $this->executeView($view);
+
+    $expected = array();
+    $expected['Job: Singer'] = array();
+    $expected['Job: Singer']['group'] = 'Job: Singer';
+    $expected['Job: Singer']['rows']['Age: 25'] = array();
+    $expected['Job: Singer']['rows']['Age: 25']['group'] = 'Age: 25';
+    $expected['Job: Singer']['rows']['Age: 25']['rows'][0] = new StdClass();
+    $expected['Job: Singer']['rows']['Age: 25']['rows'][0]->views_test_name = 'John';
+    $expected['Job: Singer']['rows']['Age: 25']['rows'][0]->views_test_job = 'Singer';
+    $expected['Job: Singer']['rows']['Age: 25']['rows'][0]->views_test_age = '25';
+    $expected['Job: Singer']['rows']['Age: 25']['rows'][0]->views_test_id = '1';
+    $expected['Job: Singer']['rows']['Age: 27'] = array();
+    $expected['Job: Singer']['rows']['Age: 27']['group'] = 'Age: 27';
+    $expected['Job: Singer']['rows']['Age: 27']['rows'][1] = new StdClass();
+    $expected['Job: Singer']['rows']['Age: 27']['rows'][1]->views_test_name = 'George';
+    $expected['Job: Singer']['rows']['Age: 27']['rows'][1]->views_test_job = 'Singer';
+    $expected['Job: Singer']['rows']['Age: 27']['rows'][1]->views_test_age = '27';
+    $expected['Job: Singer']['rows']['Age: 27']['rows'][1]->views_test_id = '2';
+    $expected['Job: Drummer'] = array();
+    $expected['Job: Drummer']['group'] = 'Job: Drummer';
+    $expected['Job: Drummer']['rows']['Age: 28'] = array();
+    $expected['Job: Drummer']['rows']['Age: 28']['group'] = 'Age: 28';
+    $expected['Job: Drummer']['rows']['Age: 28']['rows'][2] = new StdClass();
+    $expected['Job: Drummer']['rows']['Age: 28']['rows'][2]->views_test_name = 'Ringo';
+    $expected['Job: Drummer']['rows']['Age: 28']['rows'][2]->views_test_job = 'Drummer';
+    $expected['Job: Drummer']['rows']['Age: 28']['rows'][2]->views_test_age = '28';
+    $expected['Job: Drummer']['rows']['Age: 28']['rows'][2]->views_test_id = '3';
+
+
+    // Alter the results to support the stripped case.
+    if ($stripped) {
+
+      // Add some html to the result and expected value.
+      $rand = '<a data="' . $this->randomName() . '" />';
+      $view->result[0]->views_test_job .= $rand;
+      $expected['Job: Singer']['rows']['Age: 25']['rows'][0]->views_test_job = 'Singer' . $rand;
+      $expected['Job: Singer']['group'] = 'Job: Singer';
+      $rand = '<a data="' . $this->randomName() . '" />';
+      $view->result[1]->views_test_job .= $rand;
+      $expected['Job: Singer']['rows']['Age: 27']['rows'][1]->views_test_job = 'Singer' . $rand;
+      $rand = '<a data="' . $this->randomName() . '" />';
+      $view->result[2]->views_test_job .= $rand;
+      $expected['Job: Drummer']['rows']['Age: 28']['rows'][2]->views_test_job = 'Drummer' . $rand;
+      $expected['Job: Drummer']['group'] = 'Job: Drummer';
+
+      $view->style_plugin->options['grouping'][0] = array('field' => 'job', 'rendered' => TRUE, 'rendered_strip' => TRUE);
+      $view->style_plugin->options['grouping'][1] = array('field' => 'age', 'rendered' => TRUE, 'rendered_strip' => TRUE);
+    }
+
+
+    // The newer api passes the value of the grouping as well.
+    $sets_new_rendered = $view->style_plugin->render_grouping($view->result, $view->style_plugin->options['grouping'], TRUE);
+
+    $this->assertEqual($sets_new_rendered, $expected, t('The style plugins should proper group the results with grouping by the rendered output.'));
+
+    // Don't test stripped case, because the actual value is not stripped.
+    if (!$stripped) {
+      $sets_new_value = $view->style_plugin->render_grouping($view->result, $view->style_plugin->options['grouping'], FALSE);
+
+      // Reorder the group structure to grouping by value.
+      $expected['Singer'] = $expected['Job: Singer'];
+      $expected['Singer']['rows']['25'] = $expected['Job: Singer']['rows']['Age: 25'];
+      $expected['Singer']['rows']['27'] = $expected['Job: Singer']['rows']['Age: 27'];
+      $expected['Drummer'] = $expected['Job: Drummer'];
+      $expected['Drummer']['rows']['28'] = $expected['Job: Drummer']['rows']['Age: 28'];
+      unset($expected['Job: Singer']);
+      unset($expected['Singer']['rows']['Age: 25']);
+      unset($expected['Singer']['rows']['Age: 27']);
+      unset($expected['Job: Drummer']);
+      unset($expected['Drummer']['rows']['Age: 28']);
+
+      $this->assertEqual($sets_new_value, $expected, t('The style plugins should proper group the results with grouping by the value.'));
+    }
   }
 }
diff --git a/sites/all/modules/views/tests/user/views_handler_field_user_name.test b/sites/all/modules/views/tests/user/views_handler_field_user_name.test
new file mode 100644
index 0000000000000000000000000000000000000000..f627ea23c5050ca72e37ceb5d6bf6e1c8ec940fb
--- /dev/null
+++ b/sites/all/modules/views/tests/user/views_handler_field_user_name.test
@@ -0,0 +1,92 @@
+<?php
+
+/**
+ * Tests the field username handler.
+ *
+ * @see views_handler_field_user_name
+ */
+class viewsHandlerFieldUserNameTest extends ViewsSqlTest {
+  public static function getInfo() {
+    return array(
+      'name' => 'Tests user: name field',
+      'description' => 'Tests the handler of the user: name field',
+      'group' => 'Views Modules',
+    );
+  }
+
+  function testUserName() {
+    $view = $this->view_user_name();
+    $view->init_display();
+    $view->pre_execute();
+    $view->execute();
+
+    $view->row_index = 0;
+
+    $view->field['name']->options['link_to_user'] = TRUE;
+    $username = $view->result[0]->users_name = $this->randomName();
+    $view->result[0]->uid = 1;
+    $render = $view->field['name']->advanced_render($view->result[0]);
+    $this->assertTrue(strpos($render, $username) !== FALSE, 'If link to user is checked the username should be part of the output.');
+    $this->assertTrue(strpos($render, 'user/1') !== FALSE, 'If link to user is checked the link to the user should appear as well.');
+
+    $view->field['name']->options['link_to_user'] = FALSE;
+    $username = $view->result[0]->users_name = $this->randomName();
+    $view->result[0]->uid = 1;
+    $render = $view->field['name']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, $username, 'If the user is not linked the username should be printed out for a normal user.');
+
+    $view->result[0]->uid = 0;
+    $anon_name = variable_get('anonymous', t('Anonymous'));
+    $view->result[0]->users_name = '';
+    $render = $view->field['name']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, $anon_name , 'For user0 it should use the default anonymous name by default.');
+
+    $view->field['name']->options['overwrite_anonymous'] = TRUE;
+    $anon_name = $view->field['name']->options['anonymous_text'] = $this->randomName();
+    $render = $view->field['name']->advanced_render($view->result[0]);
+    $this->assertIdentical($render, $anon_name , 'For user0 it should use the configured anonymous text if overwrite_anonymous is checked.');
+
+
+  }
+  function view_user_name() {
+    $view = new view;
+    $view->name = 'test_views_handler_field_user_name';
+    $view->description = '';
+    $view->tag = 'default';
+    $view->base_table = 'users';
+    $view->human_name = 'test_views_handler_field_user_name';
+    $view->core = 7;
+    $view->api_version = '3.0';
+    $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
+
+    /* Display: Master */
+    $handler = $view->new_display('default', 'Master', 'default');
+    $handler->display->display_options['access']['type'] = 'none';
+    $handler->display->display_options['cache']['type'] = 'none';
+    $handler->display->display_options['query']['type'] = 'views_query';
+    $handler->display->display_options['query']['options']['query_comment'] = FALSE;
+    $handler->display->display_options['exposed_form']['type'] = 'basic';
+    $handler->display->display_options['pager']['type'] = 'full';
+    $handler->display->display_options['style_plugin'] = 'default';
+    $handler->display->display_options['row_plugin'] = 'fields';
+    /* Field: User: Name */
+    $handler->display->display_options['fields']['name']['id'] = 'name';
+    $handler->display->display_options['fields']['name']['table'] = 'users';
+    $handler->display->display_options['fields']['name']['field'] = 'name';
+    $handler->display->display_options['fields']['name']['label'] = '';
+    $handler->display->display_options['fields']['name']['alter']['alter_text'] = 0;
+    $handler->display->display_options['fields']['name']['alter']['make_link'] = 0;
+    $handler->display->display_options['fields']['name']['alter']['absolute'] = 0;
+    $handler->display->display_options['fields']['name']['alter']['word_boundary'] = 0;
+    $handler->display->display_options['fields']['name']['alter']['ellipsis'] = 0;
+    $handler->display->display_options['fields']['name']['alter']['strip_tags'] = 0;
+    $handler->display->display_options['fields']['name']['alter']['trim'] = 0;
+    $handler->display->display_options['fields']['name']['alter']['html'] = 0;
+    $handler->display->display_options['fields']['name']['hide_empty'] = 0;
+    $handler->display->display_options['fields']['name']['empty_zero'] = 0;
+    $handler->display->display_options['fields']['name']['link_to_user'] = 1;
+    $handler->display->display_options['fields']['name']['overwrite_anonymous'] = 0;
+
+    return $view;
+  }
+}
diff --git a/sites/all/modules/views/tests/user/views_user.test b/sites/all/modules/views/tests/user/views_user.test
index 6800008b7bbc954464036ce49f32808484c83385..286e2df798af6f7499aadf081af65b720a3489db 100644
--- a/sites/all/modules/views/tests/user/views_user.test
+++ b/sites/all/modules/views/tests/user/views_user.test
@@ -6,6 +6,9 @@
  */
 
 class ViewsUserTestCase extends ViewsSqlTest {
+  var $users = array();
+  var $nodes = array();
+
   public static function getInfo() {
     return array(
       'name' => 'Tests basic user integration',
diff --git a/sites/all/modules/views/tests/user/views_user_argument_validate.test b/sites/all/modules/views/tests/user/views_user_argument_validate.test
index 1d5678422cd2a7cef3083c9a4d5d5c8e462bf70f..3c36b3a637d746865992d988319ab1537271f800 100644
--- a/sites/all/modules/views/tests/user/views_user_argument_validate.test
+++ b/sites/all/modules/views/tests/user/views_user_argument_validate.test
@@ -5,7 +5,6 @@
  * Tests views user argument argument handler.
  */
 
-module_load_include('test', 'views', 'tests/views_query');
 
 class ViewsUserArgumentValidate extends ViewsSqlTest {
   public static function getInfo() {
diff --git a/sites/all/modules/views/tests/views_cache.test b/sites/all/modules/views/tests/views_cache.test
index 458b578f174a416027d45553bfb330b818b379aa..c004112906aaf5bd25d2987db4a51574304a6f0b 100644
--- a/sites/all/modules/views/tests/views_cache.test
+++ b/sites/all/modules/views/tests/views_cache.test
@@ -5,8 +5,6 @@
  * Test cache system.
  */
 
-module_load_include('test', 'views', 'tests/views_query');
-
 /**
  * Basic test for pluggable caching.
  */
diff --git a/sites/all/modules/views/tests/views_groupby.test b/sites/all/modules/views/tests/views_groupby.test
index de166425d70a99a0c9aa1089cae992d9a3a415b6..ed2759846210f8a7e52e736d88bf45589a5e8281 100644
--- a/sites/all/modules/views/tests/views_groupby.test
+++ b/sites/all/modules/views/tests/views_groupby.test
@@ -3,14 +3,15 @@
 class ViewsQueryGroupByTest extends ViewsSqlTest {
   public static function getInfo() {
     return array(
-      'name' => 'Groupby UI',
-      'description' => 'Tests UI of aggregate functionality.',
-      'group' => 'Views UI',
+      'name' => 'Groupby',
+      'description' => 'Tests aggregate functionality of views, for example count.',
+      'group' => 'Views',
     );
+
   }
 
   /**
-   * Test aggregatate count feature.
+   * Test aggregate count feature.
    */
   public function testAggregateCount() {
     // Create 2 nodes of type1 and 3 nodes of type2
@@ -276,16 +277,20 @@ class ViewsQueryGroupByTest extends ViewsSqlTest {
 }
 
 class viewsUiGroupbyTestCase extends DrupalWebTestCase {
-  public function setUp() {
-    parent::setUp('views', 'views_ui');
-    module_enable(array('views_ui'));
+  function setUp() {
+    // Enable views_ui.
+    parent::setUp('views_ui', 'views_test');
+
+    // Create and log in a user with administer views permission.
+    $views_admin = $this->drupalCreateUser(array('administer views', 'administer blocks', 'bypass node access', 'access user profiles', 'view revisions'));
+    $this->drupalLogin($views_admin);
   }
 
   public static function getInfo() {
     return array(
-      'name' => 'Groupby',
-      'description' => 'Tests aggregate functionality of views, for example count.',
-      'group' => 'Views',
+      'name' => 'Groupby UI',
+      'description' => 'Tests UI of aggregate functionality.',
+      'group' => 'Views UI',
     );
   }
 
@@ -295,11 +300,6 @@ class viewsUiGroupbyTestCase extends DrupalWebTestCase {
    * @todo: this should check the change of the settings as well.
    */
   function testGroupBySave() {
-    $admin_user = $this->drupalCreateUser(array('administer views', 'administer site configuration'));
-    $this->drupalLogin($admin_user);
-    views_invalidate_cache();
-    menu_rebuild();
-
     $this->drupalGet('admin/structure/views/view/test_views_groupby_save/edit');
 
     $edit = array(
diff --git a/sites/all/modules/views/tests/views_handlers.test b/sites/all/modules/views/tests/views_handlers.test
index 32a5747db4aebc6d9c8f0e64157ee626b4fd1375..19126fadb639ea91cea321f0357c67ab38b0631e 100644
--- a/sites/all/modules/views/tests/views_handlers.test
+++ b/sites/all/modules/views/tests/views_handlers.test
@@ -14,7 +14,7 @@ class ViewsHandlersTest extends ViewsSqlTest {
     );
   }
 
-  function setUp() {
+  protected function setUp() {
     parent::setUp('views', 'views_ui');
     module_enable(array('views_ui'));
   }
@@ -113,14 +113,13 @@ class ViewsHandlersTest extends ViewsSqlTest {
    *
    * @param $first
    *   The first value to check.
-   * @param $second
-   *   The second value to check.
-   * @param $message
+   * @param views_handler $handler
+   * @param string $message
    *   The message to display along with the assertion.
-   * @param $group
+   * @param string $group
    *   The type of assertion - examples are "Browser", "PHP".
    *
-   * @return
+   * @return bool
    *   TRUE if the assertion succeeded, FALSE otherwise.
    */
   protected function assertEqualValue($first, $handler, $message = '', $group = 'Other') {
diff --git a/sites/all/modules/views/tests/views_module.test b/sites/all/modules/views/tests/views_module.test
index 6ce6a5a809ee893f3ac7f11779d4403c068bcee4..9804f576a7fd83de9941be801ab71be2cb9f532b 100644
--- a/sites/all/modules/views/tests/views_module.test
+++ b/sites/all/modules/views/tests/views_module.test
@@ -1,6 +1,5 @@
 <?php
 
-module_load_include('test', 'views', 'tests/views_query');
 
 class ViewsModuleTest extends ViewsSqlTest {
   public static function getInfo() {
@@ -13,6 +12,7 @@ class ViewsModuleTest extends ViewsSqlTest {
 
   public function setUp() {
     parent::setUp();
+    drupal_theme_rebuild();
   }
 
   public function viewsData() {
@@ -87,7 +87,11 @@ class ViewsModuleTest extends ViewsSqlTest {
     $views_status['frontpage'] = FALSE; // false is enabled
     variable_set('views_defaults', $views_status);
 
-    $registry = theme_get_registry();
+    $existing = array();
+    $type = array();
+    $theme = array();
+    $path = array();
+    $registry = views_theme($existing, $type, $theme, $path);
     $this->assertTrue(isset($registry['views_view__frontpage']));
   }
 
diff --git a/sites/all/modules/views/tests/views_pager.test b/sites/all/modules/views/tests/views_pager.test
index 93c9de4c219ddcaff85c78ec88632104d9f34b5d..9c3cf3ec15f6c501e5c7326f6a483370cf0ec365 100644
--- a/sites/all/modules/views/tests/views_pager.test
+++ b/sites/all/modules/views/tests/views_pager.test
@@ -99,7 +99,7 @@ class ViewsPagerTest extends DrupalWebTestCase {
     $view->view_php = '';
     $view->base_table = 'node';
     $view->is_cacheable = FALSE;
-    $view->api_version = 2;
+    $view->api_version = 3;
     $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
 
     /* Display: Master */
@@ -160,7 +160,7 @@ class ViewsPagerTest extends DrupalWebTestCase {
     $view->view_php = '';
     $view->base_table = 'node';
     $view->is_cacheable = FALSE;
-    $view->api_version = 2;
+    $view->api_version =3;
     $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
 
     /* Display: Master */
@@ -218,7 +218,7 @@ class ViewsPagerTest extends DrupalWebTestCase {
     $view->view_php = '';
     $view->base_table = 'node';
     $view->is_cacheable = FALSE;
-    $view->api_version = 2;
+    $view->api_version = 3;
     $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
 
     /* Display: Master */
@@ -305,7 +305,7 @@ class ViewsPagerTest extends DrupalWebTestCase {
     $view->view_php = '';
     $view->base_table = 'node';
     $view->is_cacheable = FALSE;
-    $view->api_version = 2;
+    $view->api_version = 3;
     $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
 
     /* Display: Master */
@@ -345,7 +345,7 @@ class ViewsPagerTest extends DrupalWebTestCase {
     $view->view_php = '';
     $view->base_table = 'node';
     $view->is_cacheable = FALSE;
-    $view->api_version = 2;
+    $view->api_version = 3;
     $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
 
     /* Display: Master */
@@ -371,7 +371,7 @@ class ViewsPagerTest extends DrupalWebTestCase {
     $view->view_php = '';
     $view->base_table = 'node';
     $view->is_cacheable = FALSE;
-    $view->api_version = 2;
+    $view->api_version = 3;
     $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
 
     /* Display: Master */
diff --git a/sites/all/modules/views/tests/views_query.test b/sites/all/modules/views/tests/views_query.test
index 7f38e505c931d249e64263d8847e0a1fc64a4b70..ea4e2bcff125445e2f5c0deb028fe941cbbc9852 100644
--- a/sites/all/modules/views/tests/views_query.test
+++ b/sites/all/modules/views/tests/views_query.test
@@ -111,6 +111,9 @@ abstract class ViewsTestCase extends DrupalWebTestCase {
 
   /**
    * Helper function to execute a view with debugging.
+   *
+   * @param view $view
+   * @param array $args
    */
   protected function executeView($view, $args = array()) {
     $view->set_display();
@@ -356,6 +359,8 @@ abstract class ViewsSqlTest extends ViewsTestCase {
 
   /**
    * Build and return a basic view of the views_test table.
+   *
+   * @return view
    */
   protected function getBasicView() {
     views_include('view');
diff --git a/sites/all/modules/views/tests/views_test.info b/sites/all/modules/views/tests/views_test.info
index 3f7120d780eb2050e5622a6d7cf26e4b76975edb..c3278f730b6b439acf5a803c15093660edb1fbc3 100644
--- a/sites/all/modules/views/tests/views_test.info
+++ b/sites/all/modules/views/tests/views_test.info
@@ -5,9 +5,9 @@ core = 7.x
 dependencies[] = views
 hidden = TRUE
 
-; Information added by drupal.org packaging script on 2011-12-18
-version = "7.x-3.0"
+; Information added by drupal.org packaging script on 2012-02-22
+version = "7.x-3.3"
 core = "7.x"
 project = "views"
-datestamp = "1324170450"
+datestamp = "1329946249"
 
diff --git a/sites/all/modules/views/tests/views_test.module b/sites/all/modules/views/tests/views_test.module
index b51769022686ae43a0db9a76540e0545c29bb501..18536b95af757e2f9378080c0c75f9db9da91a15 100644
--- a/sites/all/modules/views/tests/views_test.module
+++ b/sites/all/modules/views/tests/views_test.module
@@ -17,7 +17,7 @@ function views_test_permission() {
  */
 function views_test_views_api() {
   return array(
-    'api' => '3.0-alpha1',
+    'api' => 3.0,
     'template path' => drupal_get_path('module', 'views_test') . '/templates',
   );
 }
diff --git a/sites/all/modules/views/tests/views_translatable.test b/sites/all/modules/views/tests/views_translatable.test
index 18445c9f8c64122256506f645284838688dad95a..515a33d381983ee9d3d0d216814e69ea0ba3013d 100644
--- a/sites/all/modules/views/tests/views_translatable.test
+++ b/sites/all/modules/views/tests/views_translatable.test
@@ -1,7 +1,5 @@
 <?php
 
-module_load_include('test', 'views', 'tests/views_query');
-
 class ViewsTranslatableTest extends ViewsSqlTest {
   var $strings;
 
diff --git a/sites/all/modules/views/tests/views_ui.test b/sites/all/modules/views/tests/views_ui.test
index 003eb855ae5138081ae69d72047ab935863508a4..6301ac9af666d2e6cf2343c15487f2aa32b49632 100644
--- a/sites/all/modules/views/tests/views_ui.test
+++ b/sites/all/modules/views/tests/views_ui.test
@@ -662,8 +662,22 @@ class ViewsUIWizardJumpMenuTestCase extends ViewsUIWizardHelper {
 
       // Submit the jump menu form, and check that we are redirected to the
       // expected URL.
+
       $edit = array();
       $edit['jump'] = url($path, $options);
+
+      // The urls are built with :: to be able to have a unique path all the time,
+      // so try to find out the real path of $edit.
+      $view_object = views_get_view($view['name']);
+      $view_object->preview('page');
+      $form = $view_object->style_plugin->render();
+      $jump_options = $form['jump']['#options'];
+      foreach ($jump_options as $key => $title) {
+        if (strpos($key, $edit['jump']) !== FALSE) {
+          $edit['jump'] = $key;
+        }
+      }
+
       $this->drupalPost($view['page[path]'], $edit, t('Go'));
       $this->assertResponse(200);
       $this->assertUrl($path, $options);
diff --git a/sites/all/modules/views/tests/views_upgrade.test b/sites/all/modules/views/tests/views_upgrade.test
index 7205a10b3f34896e6d87becd281819e63c58d4a6..0e8626baf20c69bec42dca84a96f2074be77d743 100644
--- a/sites/all/modules/views/tests/views_upgrade.test
+++ b/sites/all/modules/views/tests/views_upgrade.test
@@ -19,9 +19,9 @@ class ViewsUpgradeTestCase extends ViewsSqlTest {
   protected function setUp() {
 //     // To import a view the user needs use PHP for settings rights, so enable php module.
     parent::setUp();
-//
-// //     $admin_user = $this->drupalCreateUser(array('administer views', 'administer site configuration', 'use PHP for settings'));
-// //     $this->drupalLogin($admin_user);
+
+    module_enable(array('php'));
+    $this->resetAll();
   }
 
   function viewsData() {
@@ -53,6 +53,7 @@ class ViewsUpgradeTestCase extends ViewsSqlTest {
   public function testMovedTo() {
     // Test moving on field lavel.
     $view = $this->viewsMovedToField();
+    $view->update();
     $view->build();
 
 //     $this->assertEqual('old_field_1', $view->field['old_field_1']->options['id'], "Id shouldn't change during conversion");
@@ -63,6 +64,7 @@ class ViewsUpgradeTestCase extends ViewsSqlTest {
 
     // Test moving on handler lavel.
     $view = $this->viewsMovedToHandler();
+    $view->update();
     $view->build();
 
 //     $this->assertEqual('old_field_2', $view->field['old_field_2']->options['id']);
@@ -75,6 +77,7 @@ class ViewsUpgradeTestCase extends ViewsSqlTest {
 
     // Test moving on table level.
     $view = $this->viewsMovedToTable();
+    $view->update();
     $view->build();
 
     $this->assertEqual('views_test', $view->base_table, 'Make sure that view->base_table gets automatically converted.');
@@ -90,6 +93,8 @@ class ViewsUpgradeTestCase extends ViewsSqlTest {
    * is used.
    */
   public function testUpgradeImport() {
+    $admin_user = $this->drupalCreateUser(array('administer views', 'administer site configuration', 'use PHP for settings'));
+    $this->drupalLogin($admin_user);
     $edit = array(
       'view' => $this->viewUpgradeImport(),
     );
diff --git a/sites/all/modules/views/theme/theme.inc b/sites/all/modules/views/theme/theme.inc
index 2adb7700eb6ca1ab3b02f61b88ba0dd9776ad354..eaf8d2d93ed605104596eabe912e0a3d84aeca38 100644
--- a/sites/all/modules/views/theme/theme.inc
+++ b/sites/all/modules/views/theme/theme.inc
@@ -110,7 +110,7 @@ function template_preprocess_views_view(&$vars) {
     // It is true that the DIV wrapper has classes denoting the name of the view
     // and its display ID, but this is not enough to unequivocally match a view
     // with its HTML, because one view may appear several times on the page. So
-    // we set up a running counter, $dom_id, to issue a "unique" identifier for
+    // we set up a hash with the current time, $dom_id, to issue a "unique" identifier for
     // each view. This identifier is written to both Drupal.settings and the DIV
     // wrapper.
     $vars['dom_id'] = !empty($view->dom_id) ? $view->dom_id : md5($view->name . REQUEST_TIME . rand());
@@ -306,6 +306,29 @@ function template_preprocess_views_view_fields(&$vars) {
 
 }
 
+/**
+ * Display a single views grouping.
+ */
+function theme_views_view_grouping($vars) {
+  $view = $vars['view'];
+  $title = $vars['title'];
+  $content = $vars['content'];
+
+  $output = '<div class="view-grouping">';
+  $output .= '<div class="view-grouping-header">' . $title . '</div>';
+  $output .= '<div class="view-grouping-content">' . $content . '</div>' ;
+  $output .= '</div>';
+
+  return $output;
+}
+
+/**
+ * Process a single grouping within a view.
+ */
+function template_preprocess_views_view_grouping(&$vars) {
+  $vars['content'] = $vars['view']->style_plugin->render_grouping_sets($vars['rows'], $vars['grouping_level']);
+}
+
 /**
  * Display a single views field.
  *
@@ -442,6 +465,7 @@ function template_preprocess_views_view_table(&$vars) {
   $result   = $vars['result'] = $vars['rows'];
   $vars['rows'] = array();
   $vars['field_classes'] = array();
+  $vars['header'] = array();
 
   $options  = $view->style_plugin->options;
   $handler  = $view->style_plugin;
@@ -457,8 +481,6 @@ function template_preprocess_views_view_table(&$vars) {
     $query += $view->exposed_raw_input;
   }
 
-  $header = array();
-
   // Fields must be rendered in order as of Views 2.3, so we will pre-render
   // everything.
   $renders = $handler->render_fields($result);
@@ -881,7 +903,7 @@ function template_preprocess_views_exposed_form(&$vars) {
     // set up defaults so that there's always something there.
     $widget->label = $widget->operator = $widget->widget = NULL;
 
-    $widget->id = $form[$info['value']]['#id'];
+    $widget->id = isset($form[$info['value']]['#id']) ? $form[$info['value']]['#id'] : '';
     if (!empty($info['label'])) {
       $widget->label = $info['label'];
     }
@@ -897,6 +919,7 @@ function template_preprocess_views_exposed_form(&$vars) {
     $widget = new stdClass;
     // set up defaults so that there's always something there.
     $widget->label = $widget->operator = $widget->widget = NULL;
+    $widget->id = 'checkboxes';
     $widget->widget = $checkboxes;
     $vars['widgets']['checkboxes'] = $widget;
   }
@@ -968,31 +991,34 @@ function theme_views_mini_pager($vars) {
   // End of marker calculations.
 
 
-  $li_previous = theme('pager_previous',
-    array(
-      'text' => (isset($tags[1]) ? $tags[1] : t('‹‹')),
-      'element' => $element,
-      'interval' => 1,
-      'parameters' => $parameters,
-    )
-  );
-  if (empty($li_previous)) {
-    $li_previous = "&nbsp;";
-  }
-
-  $li_next = theme('pager_next',
-    array(
-      'text' => (isset($tags[3]) ? $tags[3] : t('››')),
-      'element' => $element,
-      'interval' => 1,
-      'parameters' => $parameters,
-    )
-  );
-  if (empty($li_next)) {
-    $li_next = "&nbsp;";
-  }
 
   if ($pager_total[$element] > 1) {
+
+    $li_previous = theme('pager_previous',
+      array(
+        'text' => (isset($tags[1]) ? $tags[1] : t('‹‹')),
+        'element' => $element,
+        'interval' => 1,
+        'parameters' => $parameters,
+      )
+    );
+    if (empty($li_previous)) {
+      $li_previous = "&nbsp;";
+    }
+
+    $li_next = theme('pager_next',
+      array(
+        'text' => (isset($tags[3]) ? $tags[3] : t('››')),
+        'element' => $element,
+        'interval' => 1,
+        'parameters' => $parameters,
+      )
+    );
+
+    if (empty($li_next)) {
+      $li_next = "&nbsp;";
+    }
+
     $items[] = array(
       'class' => array('pager-previous'),
       'data' => $li_previous,
diff --git a/sites/all/modules/views/theme/views-view-grouping.tpl.php b/sites/all/modules/views/theme/views-view-grouping.tpl.php
new file mode 100644
index 0000000000000000000000000000000000000000..caffc5f52a428c7dbddef4b598bd728b559632c4
--- /dev/null
+++ b/sites/all/modules/views/theme/views-view-grouping.tpl.php
@@ -0,0 +1,22 @@
+<?php
+ /**
+  * This template is used to print a single grouping in a view. It is not
+  * actually used in default Views, as this is registered as a theme
+  * function which has better performance. For single overrides, the
+  * template is perfectly okay.
+  *
+  * Variables available:
+  * - $view: The view object
+  * - $grouping: The grouping instruction.
+  * - $grouping_level: Integer indicating the hierarchical level of the grouping.
+  * - $rows: The rows contained in this grouping.
+  * - $title: The title of this grouping.
+  * - $content: The processed content output that will normally be used.
+  */
+?>
+<div class="view-grouping">
+  <div class="view-grouping-header"><?php print $title; ?></div>
+  <div class="view-grouping-content">
+    <?php print $content; ?>
+  </div>
+</div>
diff --git a/sites/all/modules/views/theme/views-view-table.tpl.php b/sites/all/modules/views/theme/views-view-table.tpl.php
index 3ec5f5c3f43b63d13008e87dddc4d356159a47c3..28138dbd04f9976766ddb377e6c187ceaa4c4221 100644
--- a/sites/all/modules/views/theme/views-view-table.tpl.php
+++ b/sites/all/modules/views/theme/views-view-table.tpl.php
@@ -21,15 +21,17 @@
   <?php if (!empty($title)) : ?>
     <caption><?php print $title; ?></caption>
   <?php endif; ?>
-  <thead>
-    <tr>
-      <?php foreach ($header as $field => $label): ?>
-        <th <?php if ($header_classes[$field]) { print 'class="'. $header_classes[$field] . '" '; } ?>>
-          <?php print $label; ?>
-        </th>
-      <?php endforeach; ?>
-    </tr>
-  </thead>
+  <?php if (!empty($header)) : ?>
+    <thead>
+      <tr>
+        <?php foreach ($header as $field => $label): ?>
+          <th <?php if ($header_classes[$field]) { print 'class="'. $header_classes[$field] . '" '; } ?>>
+            <?php print $label; ?>
+          </th>
+        <?php endforeach; ?>
+      </tr>
+    </thead>
+  <?php endif; ?>
   <tbody>
     <?php foreach ($rows as $row_count => $row): ?>
       <tr class="<?php print implode(' ', $row_classes[$row_count]); ?>">
diff --git a/sites/all/modules/views/views.info b/sites/all/modules/views/views.info
index a34b6544e21425a2200cb553dcc30f342345c044..3fce29687b166d77ea36cdab824d64a81892078f 100644
--- a/sites/all/modules/views/views.info
+++ b/sites/all/modules/views/views.info
@@ -10,6 +10,7 @@ stylesheets[all][] = css/views.css
 dependencies[] = ctools
 ; Handlers
 files[] = handlers/views_handler_area.inc
+files[] = handlers/views_handler_area_result.inc
 files[] = handlers/views_handler_area_text.inc
 files[] = handlers/views_handler_area_view.inc
 files[] = handlers/views_handler_argument.inc
@@ -23,6 +24,7 @@ files[] = handlers/views_handler_argument_group_by_numeric.inc
 files[] = handlers/views_handler_field.inc
 files[] = handlers/views_handler_field_counter.inc
 files[] = handlers/views_handler_field_boolean.inc
+files[] = handlers/views_handler_field_contextual_links.inc
 files[] = handlers/views_handler_field_custom.inc
 files[] = handlers/views_handler_field_date.inc
 files[] = handlers/views_handler_field_entity.inc
@@ -32,6 +34,7 @@ files[] = handlers/views_handler_field_numeric.inc
 files[] = handlers/views_handler_field_prerender_list.inc
 files[] = handlers/views_handler_field_time_interval.inc
 files[] = handlers/views_handler_field_serialized.inc
+files[] = handlers/views_handler_field_machine_name.inc
 files[] = handlers/views_handler_field_url.inc
 files[] = handlers/views_handler_filter.inc
 files[] = handlers/views_handler_filter_boolean_operator.inc
@@ -92,6 +95,7 @@ files[] = modules/comment/views_plugin_row_comment_view.inc
 files[] = modules/contact/views_handler_field_contact_link.inc
 files[] = modules/field/views_handler_field_field.inc
 files[] = modules/field/views_handler_relationship_entity_reverse.inc
+files[] = modules/field/views_handler_argument_field_list.inc
 files[] = modules/field/views_handler_filter_field_list.inc
 files[] = modules/filter/views_handler_field_filter_format_name.inc
 files[] = modules/locale/views_handler_argument_locale_group.inc
@@ -191,6 +195,7 @@ files[] = modules/user/views_handler_filter_user_roles.inc
 files[] = modules/user/views_plugin_argument_default_current_user.inc
 files[] = modules/user/views_plugin_argument_default_user.inc
 files[] = modules/user/views_plugin_argument_validate_user.inc
+files[] = modules/user/views_plugin_row_user_view.inc
 ; Plugins
 files[] = plugins/views_plugin_access.inc
 files[] = plugins/views_plugin_access_none.inc
@@ -210,12 +215,13 @@ files[] = plugins/views_plugin_display.inc
 files[] = plugins/views_plugin_display_attachment.inc
 files[] = plugins/views_plugin_display_block.inc
 files[] = plugins/views_plugin_display_default.inc
+files[] = plugins/views_plugin_display_embed.inc
 files[] = plugins/views_plugin_display_extender.inc
 files[] = plugins/views_plugin_display_feed.inc
+files[] = plugins/views_plugin_display_page.inc
 files[] = plugins/views_plugin_exposed_form_basic.inc
 files[] = plugins/views_plugin_exposed_form.inc
 files[] = plugins/views_plugin_exposed_form_input_required.inc
-files[] = plugins/views_plugin_display_page.inc
 files[] = plugins/views_plugin_localization_core.inc
 files[] = plugins/views_plugin_localization.inc
 files[] = plugins/views_plugin_localization_none.inc
@@ -242,6 +248,7 @@ files[] = plugins/views_plugin_style_table.inc
 ; Tests
 files[] = tests/handlers/views_handler_area_text.test
 files[] = tests/handlers/views_handler_argument_null.test
+files[] = tests/handlers/views_handler_field.test
 files[] = tests/handlers/views_handler_field_boolean.test
 files[] = tests/handlers/views_handler_field_custom.test
 files[] = tests/handlers/views_handler_field_counter.test
@@ -280,6 +287,7 @@ files[] = tests/views_upgrade.test
 files[] = tests/views_test.views_default.inc
 files[] = tests/comment/views_handler_argument_comment_user_uid.test
 files[] = tests/comment/views_handler_filter_comment_user_uid.test
+files[] = tests/user/views_handler_field_user_name.test
 files[] = tests/user/views_user_argument_default.test
 files[] = tests/user/views_user_argument_validate.test
 files[] = tests/user/views_user.test
@@ -287,9 +295,9 @@ files[] = tests/views_cache.test
 files[] = tests/views_view.test
 files[] = tests/views_ui.test
 
-; Information added by drupal.org packaging script on 2011-12-18
-version = "7.x-3.0"
+; Information added by drupal.org packaging script on 2012-02-22
+version = "7.x-3.3"
 core = "7.x"
 project = "views"
-datestamp = "1324170450"
+datestamp = "1329946249"
 
diff --git a/sites/all/modules/views/views.install b/sites/all/modules/views/views.install
index e590159e54dd40abe3896280dbcf90a2bc68921c..46b005f4b43bf7dd63dca90aed0a182aaf7abb05 100644
--- a/sites/all/modules/views/views.install
+++ b/sites/all/modules/views/views.install
@@ -275,7 +275,7 @@ function views_update_6000() {
   // views_schema_6000() rather than the default views_schema().
   // This is important for processing subsequent table updates.
   $schema = views_schema_6000();
-  _drupal_initialize_schema('views', $schema);
+  _drupal_schema_initialize($schema, 'views');
 
   foreach ($schema as $name => $table) {
     db_create_table($name, $table);
@@ -600,12 +600,32 @@ function views_schema_7300() {
 /**
  * Make sure the human_name field is added to the views_view table.
  *
- * If you updated from 6.x-2.x-dev to 7.x-3.x you had already schema
- * version 6014, so the update 6013 isn't runned, and never was.
- * As a result the human_name field is missing in the database.
+ * If you updated from 6.x-2.x-dev to 7.x-3.x you already had schema
+ * version 6014, so update 6013 never was nor will be run. As a result,
+ * the human_name field is missing from the database.
  *
- * Add the human_name field if it doesn't exists before.
+ * This will add the human_name field if it doesn't already exist.
  */
 function views_update_7300() {
   views_update_6013();
 }
+
+function views_schema_7301() {
+  $schema = views_schema(__FUNCTION__);
+  $schema['views_view']['fields']['name']['length'] = 128;
+  return $schema;
+}
+
+/**
+ * Enlarge the name column
+ */
+function views_update_7301() {
+  $new_field = array(
+    'type' => 'varchar',
+    'length' => '128',
+    'default' => '',
+    'not null' => TRUE,
+    'description' => 'The unique name of the view. This is the primary field views are loaded from, and is used so that views may be internal and not necessarily in the database. May only be alphanumeric characters plus underscores.',
+  );
+  db_change_field('views_view', 'name', 'name', $new_field);
+}
diff --git a/sites/all/modules/views/views.module b/sites/all/modules/views/views.module
index c9ef5cc5d0a35ccaf940e9f9ab5bfb6ecd6f010b..1b637e4a64875f25cce13d5e9c70076bc5d62102 100644
--- a/sites/all/modules/views/views.module
+++ b/sites/all/modules/views/views.module
@@ -58,7 +58,7 @@ function views_api_minimum_version() {
  */
 function views_theme($existing, $type, $theme, $path) {
   $path = drupal_get_path('module', 'views');
-  include_once $path . '/theme/theme.inc';
+  ctools_include('theme', 'views', 'theme');
 
   // Some quasi clever array merging here.
   $base = array(
@@ -91,6 +91,10 @@ function views_theme($existing, $type, $theme, $path) {
     'pattern' => 'views_view_field__',
     'variables' => array('view' => NULL, 'field' => NULL, 'row' => NULL),
   );
+  $hooks['views_view_grouping'] = $base + array(
+    'pattern' => 'views_view_grouping__',
+    'variables' => array('view' => NULL, 'grouping' => NULL, 'grouping_level' => NULL, 'rows' => NULL, 'title' => NULL),
+  );
 
   $plugins = views_fetch_plugin_data();
 
@@ -782,6 +786,7 @@ function views_add_contextual_links(&$render_element, $location, $view, $display
           $render_element['#contextual_links'][$module] = array($link['parent path'], $args);
           $render_element['#views_contextual_links_info'][$module] = array(
             'location' => $location,
+            'view' => $view,
             'view_name' => $view->name,
             'view_display_id' => $display_id,
           );
@@ -959,6 +964,8 @@ function &views_get_page_view() {
 /**
  * Set the current 'current view' that is being built/rendered so that it is
  * easy for other modules or items in drupal_eval to identify
+ *
+ * @return view
  */
 function &views_set_current_view($view = NULL) {
   static $cache = NULL;
@@ -973,6 +980,8 @@ function &views_set_current_view($view = NULL) {
  * Find out what, if any, current view is currently in use. Please note that
  * this returns a reference, so be careful! You can unintentionally modify the
  * $view object.
+ *
+ * @return view
  */
 function &views_get_current_view() {
   return views_set_current_view();
@@ -1091,6 +1100,7 @@ function views_get_handler($table, $field, $key, $override = NULL) {
 
   $data = views_fetch_data($table, FALSE);
   $handler = NULL;
+  views_include('handlers');
 
   // Support old views_data entries conversion.
 
@@ -1422,7 +1432,7 @@ function views_get_views_as_options($views_only = FALSE, $filter = 'all', $exclu
   foreach ($views as $view) {
     // Return only views.
     if ($views_only && $view->name != $exclude_view_name) {
-      $options[$view->name] = $view->name;
+      $options[$view->name] = $view->get_human_name();
     }
     // Return views with display ids.
     else {
@@ -1591,16 +1601,13 @@ function views_debug($message, $placeholders = array()) {
       $output = $message;
       watchdog('views_logging', $output, $placeholders);
     }
-    else if ($devel_region == 'message') {
-      $output = empty($output) ? t($message, $placeholders) : $output;
-      dpm($output);
-    }
     else if ($devel_region == 'drupal_debug') {
       $output = empty($output) ? t($message, $placeholders) : $output;
       dd($output);
     }
     else {
-      drupal_add_region_content($devel_region, $output);
+      $output = empty($output) ? t($message, $placeholders) : $output;
+      dpm($output);
     }
   }
   elseif (isset($GLOBALS['drupal_test_info'])) {
@@ -1739,6 +1746,15 @@ function views_form_views_form($form, &$form_state, $view, $output) {
 
   $substitutions = array();
   foreach ($view->field as $field_name => $field) {
+    $form_element_name = $field_name;
+    if (method_exists($field, 'form_element_name')) {
+      $form_element_name = $field->form_element_name();
+    }
+    $method_form_element_row_id_exists = FALSE;
+    if (method_exists($field, 'form_element_row_id')) {
+      $method_form_element_row_id_exists = TRUE;
+    }
+
     // If the field provides a views form, allow it to modify the $form array.
     $has_form = FALSE;
     if (property_exists($field, 'views_form_callback')) {
@@ -1754,10 +1770,17 @@ function views_form_views_form($form, &$form_state, $view, $output) {
     // Build the substitutions array for use in the theme function.
     if ($has_form) {
       foreach ($view->result as $row_id => $row) {
+        if ($method_form_element_row_id_exists) {
+          $form_element_row_id = $field->form_element_row_id($row_id);
+        }
+        else {
+          $form_element_row_id = $row_id;
+        }
+
         $substitutions[] = array(
-          'placeholder' => '<!--form-item-' . $field_name . '--' . $row_id . '-->',
-          'field_name' => $field_name,
-          'row_id' => $row_id,
+          'placeholder' => '<!--form-item-' . $form_element_name . '--' . $form_element_row_id . '-->',
+          'field_name' => $form_element_name,
+          'row_id' => $form_element_row_id,
         );
       }
     }
@@ -2285,7 +2308,7 @@ function views_process_check_options($element, &$form_state) {
  * @param $alter
  *   - max_length: Maximum lenght of the string, the rest gets truncated.
  *   - word_boundary: Trim only on a word boundary.
- *   - ellipsis: Trim only on a word boundary.
+ *   - ellipsis: Show an ellipsis (...) at the end of the trimmed string.
  *   - html: Take sure that the html is correct.
  *
  * @param $value
@@ -2322,6 +2345,22 @@ function views_trim_text($alter, $value) {
   return $value;
 }
 
+/**
+ * Adds one to each key of the array.
+ *
+ * For example array(0 => 'foo') would be array(1 => 'foo').
+ */
+function views_array_key_plus($array) {
+  $keys = array_keys($array);
+  rsort($keys);
+  foreach ($keys as $key) {
+    $array[$key+1] = $array[$key];
+    unset($array[$key]);
+  }
+  asort($array);
+  return $array;
+}
+
 /**
  * Report to CTools that we use hook_views_api instead of hook_ctools_plugin_api()
  */
diff --git a/sites/all/modules/views/views_ui.info b/sites/all/modules/views/views_ui.info
index 5e5b3da004cac2b99130172039033db008035665..ec614466a3ccf53b3927ddc4ff2ee7c2fa63ce12 100644
--- a/sites/all/modules/views/views_ui.info
+++ b/sites/all/modules/views/views_ui.info
@@ -7,9 +7,9 @@ dependencies[] = views
 files[] = views_ui.module
 files[] = plugins/views_wizard/views_ui_base_views_wizard.class.php
 
-; Information added by drupal.org packaging script on 2011-12-18
-version = "7.x-3.0"
+; Information added by drupal.org packaging script on 2012-02-22
+version = "7.x-3.3"
 core = "7.x"
 project = "views"
-datestamp = "1324170450"
+datestamp = "1329946249"