diff --git a/help/api-example.html b/help/api-example.html
index 682fe87..654fbff 100644
--- a/help/api-example.html
+++ b/help/api-example.html
@@ -73,14 +73,14 @@ function node_example_views_data()  {
     'title' => t('Quantity'),
     'help' => t('Quantity of items.'),
     'field' => array(
-      'handler' => 'views_handler_field_numeric',
+      'id' => 'numeric',
       'click sortable' => TRUE,
      ),
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
+      'id' => 'numeric',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
@@ -90,17 +90,17 @@ function node_example_views_data()  {
     'help' => t('Color of item.'),
 
     'field' => array(
-      'handler' => 'views_handler_field',
+      'id' => 'standard',
       'click sortable' => TRUE,
      ),
      'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
      ),
      'argument' => array(
-       'handler' => 'views_handler_argument_string',
+       'id' => 'string',
      ),
      'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
      ),
   );
 
diff --git a/includes/admin.inc b/includes/admin.inc
index 8a90269..fadab0a 100644
--- a/includes/admin.inc
+++ b/includes/admin.inc
@@ -8,6 +8,7 @@
 use Drupal\Core\Database\Database;
 use Drupal\views\View;
 use Drupal\views\Analyzer;
+use Drupal\views\Plugin\Type\ViewsPluginManager;
 
 /**
  * Create an array of Views admin CSS for adding or attaching.
@@ -378,8 +379,11 @@ function views_ui_add_form($form, &$form_state) {
 
   // Build the rest of the form based on the currently selected wizard plugin.
   $wizard_key = $show_form['wizard_key']['#default_value'];
-  $get_instance = $wizard_plugins[$wizard_key]['get_instance'];
-  $wizard_instance = $get_instance($wizard_plugins[$wizard_key]);
+
+  views_include_handlers();
+  $manager = new ViewsPluginManager('wizard');
+  $info = $manager->getDefinition($wizard_key);
+  $wizard_instance = $manager->createInstance($wizard_key, $info);
   $form = $wizard_instance->build_form($form, $form_state);
 
   $form['save'] = array(
@@ -406,22 +410,6 @@ function views_ui_add_form($form, &$form_state) {
 }
 
 /**
- * Helper form element validator: integer.
- *
- * The problem with this is that the function is private so it's not guaranteed
- * that it might not be renamed/changed. In the future field.module or something else
- * should provide a public validate function.
- *
- * @see _element_validate_integer_positive()
- */
-function views_element_validate_integer($element, &$form_state) {
-  $value = $element['#value'];
-  if ($value !== '' && (!is_numeric($value) || intval($value) != $value)) {
-    form_error($element, t('%name must be a positive integer.', array('%name' => $element['#title'])));
-  }
-}
-
-/**
  * Gets the current value of a #select element, from within a form constructor function.
  *
  * This function is intended for use in highly dynamic forms (in particular the
@@ -701,9 +689,10 @@ function views_ui_nojs_submit($form, &$form_state) {
  */
 function views_ui_wizard_form_validate($form, &$form_state) {
   $wizard = views_ui_get_wizard($form_state['values']['show']['wizard_key']);
+  $manager = new ViewsPluginManager('wizard');
+  $definition = $manager->getDefinition($wizard['id']);
   $form_state['wizard'] = $wizard;
-  $get_instance = $wizard['get_instance'];
-  $form_state['wizard_instance'] = $get_instance($wizard);
+  $form_state['wizard_instance'] = $manager->createInstance($wizard['id'], $definition);
   $errors = $form_state['wizard_instance']->validate($form, $form_state);
   foreach ($errors as $name => $message) {
     form_set_error($name, $message);
diff --git a/includes/cache.inc b/includes/cache.inc
index d4ec484..1911730 100644
--- a/includes/cache.inc
+++ b/includes/cache.inc
@@ -5,6 +5,8 @@
  * Load Views' data so that it knows what is available to build queries from.
  */
 
+use Drupal\views\Plugin\Type\ViewsPluginManager;
+
 /**
  * Fetch Views' data from the cache
  *
@@ -86,32 +88,25 @@ function _views_data_process_entity_types(&$data) {
 /**
  * Fetch the plugin data from cache.
  */
-function _views_fetch_plugin_data($type = NULL, $plugin = NULL, $reset = FALSE) {
-  static $cache = NULL;
-  if (!isset($cache) || $reset) {
-    $start = microtime(TRUE);
-    views_include('plugins');
-    views_include_handlers();
-
-    $cache = views_discover_plugins();
-
+function _views_fetch_plugin_data($type = NULL, $id = NULL, $reset = FALSE) {
+  if (!$type && !$id) {
+    $plugins = array();
+    $plugin_types = array('access', 'argument', 'argument_default', 'argument_validator', 'cache', 'display_extender', 'display', 'exposed_form', 'localization', 'pager', 'query', 'row', 'style', 'wizard');
+    foreach ($plugin_types as $plugin_type) {
+      $manager = new ViewsPluginManager($plugin_type);
+      $plugins[$plugin_type] = $manager->getDefinitions();
+    }
+    return $plugins;
   }
 
-  if (!$type && !$plugin) {
-    return $cache;
-  }
-  elseif (!$plugin) {
-    // Not in the if above so the else below won't run
-    if (isset($cache[$type])) {
-      return $cache[$type];
-    }
+  $manager = new ViewsPluginManager($type);
+
+  if (!$id) {
+    return $manager->getDefinitions();
   }
-  elseif (isset($cache[$type][$plugin])) {
-    return $cache[$type][$plugin];
+  else {
+    return $manager->getDefinition($id);
   }
-
-  // Return an empty array if there is no match.
-  return array();
 }
 
 /**
diff --git a/includes/handlers.inc b/includes/handlers.inc
index 254cf56..05348b9 100644
--- a/includes/handlers.inc
+++ b/includes/handlers.inc
@@ -8,68 +8,41 @@
 use Drupal\Core\Database\Database;
 use Drupal\views\View;
 use Drupal\views\Join;
-use Drupal\views\ViewsObject;
+use Drupal\views\Plugin\Type\ViewsPluginManager;
 
 /**
- * Instantiate and construct a new handler
+ * Instantiate and construct a new plugin.
  */
-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;
-  }
+function _views_create_plugin($type, $definition) {
+  $manager = new ViewsPluginManager($type);
+  $instance = $manager->createInstance($definition['id']);
 
-  // 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;
-  }
+  $instance->is_plugin = TRUE;
+  $instance->plugin_type = $type;
+  $instance->setDefinition($definition);
 
-  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;
-  }
+  // Let the handler have something like a constructor.
+  $instance->construct();
 
-  if (!empty($definition['override handler'])) {
-    $handler = new $definition['override handler'];
-  }
-  else {
-    $handler = new $definition['handler'];
-  }
+  return $instance;
+}
 
-  $handler->set_definition($definition);
-  if ($type == 'handler') {
-    $handler->is_handler = TRUE;
-    $handler->handler_type = $handler_type;
-  }
-  else {
-    $handler->is_plugin = TRUE;
-    $handler->plugin_type = $type;
-    $handler->plugin_name = $definition['name'];
-  }
+/**
+ * Instantiate and construct a new handler
+ */
+function _views_create_handler($type, $definition) {
+  $manager = new ViewsPluginManager($type);
+  $instance = $manager->createInstance($definition['id']);
+
+  $instance->is_handler = TRUE;
+  $instance->plugin_type = $type;
+
+  $instance->setDefinition($definition);
 
   // let the handler have something like a constructor.
-  $handler->construct();
+  $instance->construct();
 
-  return $handler;
+  return $instance;
 }
 
 /**
@@ -89,7 +62,7 @@ function _views_prepare_handler($definition, $data, $field, $type) {
     }
   }
 
-  return _views_create_handler($definition, 'handler', $type);
+  return _views_create_handler($type, $definition);
 }
 
 /**
@@ -131,917 +104,6 @@ function views_get_table_join($table, $base_table) {
 }
 
 /**
- * Base handler, from which all the other handlers are derived.
- * It creates a common interface to create consistency amongst
- * handlers and data.
- *
- * Definition terms:
- * - table: The actual table this uses; only specify if different from
- *          the table this is attached to.
- * - real field: The actual field this uses; only specify if different from
- *               the field this item is attached to.
- * - group: A text string representing the 'group' this item is attached to,
- *          for display in the UI. Examples: "Node", "Taxonomy", "Comment",
- *          "User", etc. This may be inherited from the parent definition or
- *          the 'table' definition.
- * - title: The title for this handler in the UI. This may be inherited from
- *          the parent definition or the 'table' definition.
- * - help: A more informative string to give to the user to explain what this
- *         field/handler is or does.
- * - access callback: If this field should have access control, this could
- *                    be a function to use. 'user_access' is a common
- *                    function to use here. If not specified, no access
- *                    control is provided.
- * - access arguments: An array of arguments for the access callback.
- */
-abstract class views_handler extends ViewsObject {
-  /**
-   * The top object of a view.
-   *
-   * @var view
-   */
-  var $view = NULL;
-
-  /**
-   * Where the $query object will reside:
-   *
-   * @var views_plugin_query
-   */
-  var $query = NULL;
-
-  /**
-   * The type of the handler, for example filter/footer/field.
-   */
-  var $handler_type = NULL;
-
-  /**
-   * The alias of the table of this handler which is used in the query.
-   */
-  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
-   *   The $view object this handler is attached to.
-   * @param $options
-   *   The item from the database; the actual contents of this will vary
-   *   based upon the type of handler.
-   */
-  function init(&$view, &$options) {
-    $this->view = &$view;
-    $display_id = $this->view->current_display;
-    // Check to see if this handler type is defaulted. Note that
-    // we have to do a lookup because the type is singular but the
-    // option is stored as the plural.
-
-    // If the 'moved to' keyword moved our handler, let's fix that now.
-    if (isset($this->actual_table)) {
-      $options['table'] = $this->actual_table;
-    }
-
-    if (isset($this->actual_field)) {
-      $options['field'] = $this->actual_field;
-    }
-
-    $types = View::views_object_types();
-    $plural = $this->handler_type;
-    if (isset($types[$this->handler_type]['plural'])) {
-      $plural = $types[$this->handler_type]['plural'];
-    }
-    if ($this->view->display_handler->is_defaulted($plural)) {
-      $display_id = 'default';
-    }
-
-    $this->localization_keys = array(
-      $display_id,
-      $this->handler_type,
-      $options['table'],
-      $options['id']
-    );
-
-    $this->unpack_options($this->options, $options);
-
-    // This exist on most handlers, but not all. So they are still optional.
-    if (isset($options['table'])) {
-      $this->table = $options['table'];
-    }
-
-    if (isset($this->definition['real field'])) {
-      $this->real_field = $this->definition['real field'];
-    }
-
-    if (isset($this->definition['field'])) {
-      $this->real_field = $this->definition['field'];
-    }
-
-    if (isset($options['field'])) {
-      $this->field = $options['field'];
-      if (!isset($this->real_field)) {
-        $this->real_field = $options['field'];
-      }
-    }
-
-    $this->query = &$view->query;
-  }
-
-  function option_definition() {
-    $options = parent::option_definition();
-
-    $options['id'] = array('default' => '');
-    $options['table'] = array('default' => '');
-    $options['field'] = array('default' => '');
-    $options['relationship'] = array('default' => 'none');
-    $options['group_type'] = array('default' => 'group');
-    $options['ui_name'] = array('default' => '');
-
-    return $options;
-  }
-
-  /**
-   * Return a string representing this handler's name in the UI.
-   */
-  function ui_name($short = FALSE) {
-    if (!empty($this->options['ui_name'])) {
-      $title = check_plain($this->options['ui_name']);
-      return $title;
-    }
-    $title = ($short && isset($this->definition['title short'])) ? $this->definition['title short'] : $this->definition['title'];
-    return t('!group: !title', array('!group' => $this->definition['group'], '!title' => $title));
-  }
-
-  /**
-   * Shortcut to get a handler's raw field value.
-   *
-   * This should be overridden for handlers with formulae or other
-   * non-standard fields. Because this takes an argument, fields
-   * overriding this can just call return parent::get_field($formula)
-   */
-  function get_field($field = NULL) {
-    if (!isset($field)) {
-      if (!empty($this->formula)) {
-        $field = $this->get_formula();
-      }
-      else {
-        $field = $this->table_alias . '.' . $this->real_field;
-      }
-    }
-
-    // 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();
-      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);
-        }
-      }
-    }
-
-    return $field;
-  }
-
-  /**
-   * Sanitize the value for output.
-   *
-   * @param $value
-   *   The value being rendered.
-   * @param $type
-   *   The type of sanitization needed. If not provided, check_plain() is used.
-   *
-   * @return string
-   *   Returns the safe value.
-   */
-  function sanitize_value($value, $type = NULL) {
-    switch ($type) {
-      case 'xss':
-        $value = filter_xss($value);
-        break;
-      case 'xss_admin':
-        $value = filter_xss_admin($value);
-        break;
-      case 'url':
-        $value = check_url($value);
-        break;
-      default:
-        $value = check_plain($value);
-        break;
-    }
-    return $value;
-  }
-
-  /**
-   * Transform a string by a certain method.
-   *
-   * @param $string
-   *    The input you want to transform.
-   * @param $option
-   *    How do you want to transform it, possible values:
-   *      - upper: Uppercase the string.
-   *      - lower: lowercase the string.
-   *      - ucfirst: Make the first char uppercase.
-   *      - ucwords: Make each word in the string uppercase.
-   *
-   * @return string
-   *    The transformed string.
-   */
-  function case_transform($string, $option) {
-    global $multibyte;
-
-    switch ($option) {
-      default:
-        return $string;
-      case 'upper':
-        return drupal_strtoupper($string);
-      case 'lower':
-        return drupal_strtolower($string);
-      case 'ucfirst':
-        return drupal_strtoupper(drupal_substr($string, 0, 1)) . drupal_substr($string, 1);
-      case 'ucwords':
-        if ($multibyte == UNICODE_MULTIBYTE) {
-          return mb_convert_case($string, MB_CASE_TITLE);
-        }
-        else {
-          return ucwords($string);
-        }
-    }
-  }
-
-  /**
-   * Validate the options form.
-   */
-  function options_validate(&$form, &$form_state) { }
-
-  /**
-   * Build the options form.
-   */
-  function options_form(&$form, &$form_state) {
-    // Some form elements belong in a fieldset for presentation, but can't
-    // be moved into one because of the form_state['values'] hierarchy. Those
-    // elements can add a #fieldset => 'fieldset_name' property, and they'll
-    // be moved to their fieldset during pre_render.
-    $form['#pre_render'][] = 'views_ui_pre_render_add_fieldset_markup';
-
-    $form['ui_name'] = array(
-      '#type' => 'textfield',
-      '#title' => t('Administrative title'),
-      '#description' => t('This title will be displayed on the views edit page instead of the default one. This might be useful if you have the same item twice.'),
-      '#default_value' => $this->options['ui_name'],
-      '#fieldset' => 'more',
-    );
-
-    // This form is long and messy enough that the "Administrative title" option
-    // belongs in a "more options" fieldset at the bottom of the form.
-    $form['more'] = array(
-      '#type' => 'fieldset',
-      '#title' => t('More'),
-      '#collapsible' => TRUE,
-      '#collapsed' => TRUE,
-      '#weight' => 150,
-    );
-    // Allow to alter the default values brought into the form.
-    drupal_alter('views_handler_options', $this->options, $view);
-  }
-
-  /**
-   * Perform any necessary changes to the form values prior to storage.
-   * There is no need for this function to actually store the data.
-   */
-  function options_submit(&$form, &$form_state) { }
-
-  /**
-   * Provides the handler some groupby.
-   */
-  function use_group_by() {
-    return TRUE;
-  }
-  /**
-   * Provide a form for aggregation settings.
-   */
-  function groupby_form(&$form, &$form_state) {
-    $view = &$form_state['view'];
-    $display_id = $form_state['display_id'];
-    $types = View::views_object_types();
-    $type = $form_state['type'];
-    $id = $form_state['id'];
-
-    $form['#title'] = check_plain($view->display[$display_id]->display_title) . ': ';
-    $form['#title'] .= t('Configure aggregation settings for @type %item', array('@type' => $types[$type]['lstitle'], '%item' => $this->ui_name()));
-
-    $form['#section'] = $display_id . '-' . $type . '-' . $id;
-
-    $view->init_query();
-    $info = $view->query->get_aggregation_info();
-    foreach ($info as $id => $aggregate) {
-      $group_types[$id] = $aggregate['title'];
-    }
-
-    $form['group_type'] = array(
-      '#type' => 'select',
-      '#title' => t('Aggregation type'),
-      '#default_value' => $this->options['group_type'],
-      '#description' => t('Select the aggregation function to use on this field.'),
-      '#options' => $group_types,
-    );
-  }
-
-  /**
-   * Perform any necessary changes to the form values prior to storage.
-   * There is no need for this function to actually store the data.
-   */
-  function groupby_form_submit(&$form, &$form_state) {
-    $item =& $form_state['handler']->options;
-
-    $item['group_type'] = $form_state['values']['options']['group_type'];
-  }
-
-  /**
-   * If a handler has 'extra options' it will get a little settings widget and
-   * another form called extra_options.
-   */
-  function has_extra_options() { return FALSE; }
-
-  /**
-   * Provide defaults for the handler.
-   */
-  function extra_options(&$option) { }
-
-  /**
-   * Provide a form for setting options.
-   */
-  function extra_options_form(&$form, &$form_state) { }
-
-  /**
-   * Validate the options form.
-   */
-  function extra_options_validate($form, &$form_state) { }
-
-  /**
-   * Perform any necessary changes to the form values prior to storage.
-   * There is no need for this function to actually store the data.
-   */
-  function extra_options_submit($form, &$form_state) { }
-
-  /**
-   * Determine if a handler can be exposed.
-   */
-  function can_expose() { return FALSE; }
-
-  /**
-   * Set new exposed option defaults when exposed setting is flipped
-   * on.
-   */
-  function expose_options() { }
-
-  /**
-   * Get information about the exposed form for the form renderer.
-   */
-  function exposed_info() { }
-
-  /**
-   * Render our chunk of the exposed handler form when selecting
-   */
-  function exposed_form(&$form, &$form_state) { }
-
-  /**
-   * Validate the exposed handler form
-   */
-  function exposed_validate(&$form, &$form_state) { }
-
-  /**
-   * Submit the exposed handler form
-   */
-  function exposed_submit(&$form, &$form_state) { }
-
-  /**
-   * Form for exposed handler options.
-   */
-  function expose_form(&$form, &$form_state) { }
-
-  /**
-   * Validate the options form.
-   */
-  function expose_validate($form, &$form_state) { }
-
-  /**
-   * Perform any necessary changes to the form exposes prior to storage.
-   * There is no need for this function to actually store the data.
-   */
-  function expose_submit($form, &$form_state) { }
-
-  /**
-   * Shortcut to display the expose/hide button.
-   */
-  function show_expose_button(&$form, &$form_state) { }
-
-  /**
-   * Shortcut to display the exposed options form.
-   */
-  function show_expose_form(&$form, &$form_state) {
-    if (empty($this->options['exposed'])) {
-      return;
-    }
-
-    $this->expose_form($form, $form_state);
-
-    // When we click the expose button, we add new gadgets to the form but they
-    // have no data in $_POST so their defaults get wiped out. This prevents
-    // these defaults from getting wiped out. This setting will only be TRUE
-    // during a 2nd pass rerender.
-    if (!empty($form_state['force_expose_options'])) {
-      foreach (element_children($form['expose']) as $id) {
-        if (isset($form['expose'][$id]['#default_value']) && !isset($form['expose'][$id]['#value'])) {
-          $form['expose'][$id]['#value'] = $form['expose'][$id]['#default_value'];
-        }
-      }
-    }
-  }
-
-  /**
-   * Check whether current user has access to this handler.
-   *
-   * @return boolean
-   */
-  function access() {
-    if (isset($this->definition['access callback']) && function_exists($this->definition['access callback'])) {
-      if (isset($this->definition['access arguments']) && is_array($this->definition['access arguments'])) {
-        return call_user_func_array($this->definition['access callback'], $this->definition['access arguments']);
-      }
-      return $this->definition['access callback']();
-    }
-
-    return TRUE;
-  }
-
-  /**
-   * Run before the view is built.
-   *
-   * This gives all the handlers some time to set up before any handler has
-   * been fully run.
-   */
-  function pre_query() { }
-
-  /**
-   * Run after the view is executed, before the result is cached.
-   *
-   * This gives all the handlers some time to modify values. This is primarily
-   * used so that handlers that pull up secondary data can put it in the
-   * $values so that the raw data can be utilized externally.
-   */
-  function post_execute(&$values) { }
-
-  /**
-   * Provides a unique placeholders for handlers.
-   */
-  function placeholder() {
-    return $this->query->placeholder($this->options['table'] . '_' . $this->options['field']);
-  }
-
-  /**
-   * Called just prior to query(), this lets a handler set up any relationship
-   * it needs.
-   */
-  function set_relationship() {
-    // Ensure this gets set to something.
-    $this->relationship = NULL;
-
-    // Don't process non-existant relationships.
-    if (empty($this->options['relationship']) || $this->options['relationship'] == 'none') {
-      return;
-    }
-
-    $relationship = $this->options['relationship'];
-
-    // Ignore missing/broken relationships.
-    if (empty($this->view->relationship[$relationship])) {
-      return;
-    }
-
-    // Check to see if the relationship has already processed. If not, then we
-    // cannot process it.
-    if (empty($this->view->relationship[$relationship]->alias)) {
-      return;
-    }
-
-    // Finally!
-    $this->relationship = $this->view->relationship[$relationship]->alias;
-  }
-
-  /**
-   * Ensure the main table for this handler is in the query. This is used
-   * a lot.
-   */
-  function ensure_my_table() {
-    if (!isset($this->table_alias)) {
-      if (!method_exists($this->query, 'ensure_table')) {
-        vpr(t('Ensure my table called but query has no ensure_table method.'));
-        return;
-      }
-      $this->table_alias = $this->query->ensure_table($this->table, $this->relationship);
-    }
-    return $this->table_alias;
-  }
-
-  /**
-   * Provide text for the administrative summary
-   */
-  function admin_summary() { }
-
-  /**
-   * Determine if the argument needs a style plugin.
-   *
-   * @return TRUE/FALSE
-   */
-  function needs_style_plugin() { return FALSE; }
-
-  /**
-   * Determine if this item is 'exposed', meaning it provides form elements
-   * to let users modify the view.
-   *
-   * @return TRUE/FALSE
-   */
-  function is_exposed() {
-    return !empty($this->options['exposed']);
-  }
-
-  /**
-   * Take input from exposed handlers and assign to this handler, if necessary.
-   */
-  function accept_exposed_input($input) { return TRUE; }
-
-  /**
-   * If set to remember exposed input in the session, store it there.
-   */
-  function store_exposed_input($input, $status) { return TRUE; }
-
-  /**
-   * Get the join object that should be used for this handler.
-   *
-   * This method isn't used a great deal, but it's very handy for easily
-   * getting the join if it is necessary to make some changes to it, such
-   * as adding an 'extra'.
-   */
-  function get_join() {
-    // get the join from this table that links back to the base table.
-    // Determine the primary table to seek
-    if (empty($this->query->relationships[$this->relationship])) {
-      $base_table = $this->query->base_table;
-    }
-    else {
-      $base_table = $this->query->relationships[$this->relationship]['base'];
-    }
-
-    $join = views_get_table_join($this->table, $base_table);
-    if ($join) {
-      return clone $join;
-    }
-  }
-
-  /**
-   * Validates the handler against the complete View.
-   *
-   * This is called when the complete View is being validated. For validating
-   * the handler options form use options_validate().
-   *
-   * @see views_handler::options_validate()
-   *
-   * @return
-   *   Empty array if the handler is valid; an array of error strings if it is not.
-   */
-  function validate() { return array(); }
-
-  /**
-   * Determine if the handler is considered 'broken', meaning it's a
-   * a placeholder used when a handler can't be found.
-   */
-  function broken() { }
-}
-
-/**
- * This many to one helper object is used on both arguments and filters.
- *
- * @todo This requires extensive documentation on how this class is to
- * be used. For now, look at the arguments and filters that use it. Lots
- * of stuff is just pass-through but there are definitely some interesting
- * areas where they interact.
- *
- * Any handler that uses this can have the following possibly additional
- * definition terms:
- * - numeric: If true, treat this field as numeric, using %d instead of %s in
- *            queries.
- *
- */
-class views_many_to_one_helper {
-  function views_many_to_one_helper(&$handler) {
-    $this->handler = &$handler;
-  }
-
-  static function option_definition(&$options) {
-    $options['reduce_duplicates'] = array('default' => FALSE, 'bool' => TRUE);
-  }
-
-  function options_form(&$form, &$form_state) {
-    $form['reduce_duplicates'] = array(
-      '#type' => 'checkbox',
-      '#title' => t('Reduce duplicates'),
-      '#description' => t('This filter can cause items that have more than one of the selected options to appear as duplicate results. If this filter causes duplicate results to occur, this checkbox can reduce those duplicates; however, the more terms it has to search for, the less performant the query will be, so use this with caution. Shouldn\'t be set on single-value fields, as it may cause values to disappear from display, if used on an incompatible field.'),
-      '#default_value' => !empty($this->handler->options['reduce_duplicates']),
-      '#weight' => 4,
-    );
-  }
-
-  /**
-   * Sometimes the handler might want us to use some kind of formula, so give
-   * it that option. If it wants us to do this, it must set $helper->formula = TRUE
-   * and implement handler->get_formula();
-   */
-  function get_field() {
-    if (!empty($this->formula)) {
-      return $this->handler->get_formula();
-    }
-    else {
-      return $this->handler->table_alias . '.' . $this->handler->real_field;
-    }
-  }
-
-  /**
-   * Add a table to the query.
-   *
-   * This is an advanced concept; not only does it add a new instance of the table,
-   * but it follows the relationship path all the way down to the relationship
-   * link point and adds *that* as a new relationship and then adds the table to
-   * the relationship, if necessary.
-   */
-  function add_table($join = NULL, $alias = NULL) {
-    // This is used for lookups in the many_to_one table.
-    $field = $this->handler->relationship . '_' . $this->handler->table . '.' . $this->handler->field;
-
-    if (empty($join)) {
-      $join = $this->get_join();
-    }
-
-    // See if there's a chain between us and the base relationship. If so, we need
-    // to create a new relationship to use.
-    $relationship = $this->handler->relationship;
-
-    // Determine the primary table to seek
-    if (empty($this->handler->query->relationships[$relationship])) {
-      $base_table = $this->handler->query->base_table;
-    }
-    else {
-      $base_table = $this->handler->query->relationships[$relationship]['base'];
-    }
-
-    // Cycle through the joins. This isn't as error-safe as the normal
-    // ensure_path logic. Perhaps it should be.
-    $r_join = clone $join;
-    while ($r_join->left_table != $base_table) {
-      $r_join = views_get_table_join($r_join->left_table, $base_table);
-    }
-    // If we found that there are tables in between, add the relationship.
-    if ($r_join->table != $join->table) {
-      $relationship = $this->handler->query->add_relationship($this->handler->table . '_' . $r_join->table, $r_join, $r_join->table, $this->handler->relationship);
-    }
-
-    // And now add our table, using the new relationship if one was used.
-    $alias = $this->handler->query->add_table($this->handler->table, $relationship, $join, $alias);
-
-    // Store what values are used by this table chain so that other chains can
-    // automatically discard those values.
-    if (empty($this->handler->view->many_to_one_tables[$field])) {
-      $this->handler->view->many_to_one_tables[$field] = $this->handler->value;
-    }
-    else {
-      $this->handler->view->many_to_one_tables[$field] = array_merge($this->handler->view->many_to_one_tables[$field], $this->handler->value);
-    }
-
-    return $alias;
-  }
-
-  function get_join() {
-    return $this->handler->get_join();
-  }
-
-  /**
-   * Provide the proper join for summary queries. This is important in part because
-   * it will cooperate with other arguments if possible.
-   */
-  function summary_join() {
-    $field = $this->handler->relationship . '_' . $this->handler->table . '.' . $this->handler->field;
-    $join = $this->get_join();
-
-    // shortcuts
-    $options = $this->handler->options;
-    $view = &$this->handler->view;
-    $query = &$this->handler->query;
-
-    if (!empty($options['require_value'])) {
-      $join->type = 'INNER';
-    }
-
-    if (empty($options['add_table']) || empty($view->many_to_one_tables[$field])) {
-      return $query->ensure_table($this->handler->table, $this->handler->relationship, $join);
-    }
-    else {
-      if (!empty($view->many_to_one_tables[$field])) {
-        foreach ($view->many_to_one_tables[$field] as $value) {
-          $join->extra = array(
-            array(
-              'field' => $this->handler->real_field,
-              'operator' => '!=',
-              'value' => $value,
-              'numeric' => !empty($this->definition['numeric']),
-            ),
-          );
-        }
-      }
-      return $this->add_table($join);
-    }
-  }
-
-  /**
-   * Override ensure_my_table so we can control how this joins in.
-   * The operator actually has influence over joining.
-   */
-  function ensure_my_table() {
-    if (!isset($this->handler->table_alias)) {
-      // Case 1: Operator is an 'or' and we're not reducing duplicates.
-      // We hence get the absolute simplest:
-      $field = $this->handler->relationship . '_' . $this->handler->table . '.' . $this->handler->field;
-      if ($this->handler->operator == 'or' && empty($this->handler->options['reduce_duplicates'])) {
-        if (empty($this->handler->options['add_table']) && empty($this->handler->view->many_to_one_tables[$field])) {
-          // query optimization, INNER joins are slightly faster, so use them
-          // when we know we can.
-          $join = $this->get_join();
-          if (isset($join)) {
-            $join->type = 'INNER';
-          }
-          $this->handler->table_alias = $this->handler->query->ensure_table($this->handler->table, $this->handler->relationship, $join);
-          $this->handler->view->many_to_one_tables[$field] = $this->handler->value;
-        }
-        else {
-          $join = $this->get_join();
-          $join->type = 'LEFT';
-          if (!empty($this->handler->view->many_to_one_tables[$field])) {
-            foreach ($this->handler->view->many_to_one_tables[$field] as $value) {
-              $join->extra = array(
-                array(
-                  'field' => $this->handler->real_field,
-                  'operator' => '!=',
-                  'value' => $value,
-                  'numeric' => !empty($this->handler->definition['numeric']),
-                ),
-              );
-            }
-          }
-
-          $this->handler->table_alias = $this->add_table($join);
-        }
-
-        return $this->handler->table_alias;
-      }
-
-      // Case 2: it's an 'and' or an 'or'.
-      // We do one join per selected value.
-      if ($this->handler->operator != 'not') {
-        // Clone the join for each table:
-        $this->handler->table_aliases = array();
-        foreach ($this->handler->value as $value) {
-          $join = $this->get_join();
-          if ($this->handler->operator == 'and') {
-            $join->type = 'INNER';
-          }
-          $join->extra = array(
-            array(
-              'field' => $this->handler->real_field,
-              'value' => $value,
-              'numeric' => !empty($this->handler->definition['numeric']),
-            ),
-          );
-
-          // The table alias needs to be unique to this value across the
-          // multiple times the filter or argument is called by the view.
-          if (!isset($this->handler->view->many_to_one_aliases[$field][$value])) {
-            if (!isset($this->handler->view->many_to_one_count[$this->handler->table])) {
-              $this->handler->view->many_to_one_count[$this->handler->table] = 0;
-            }
-            $this->handler->view->many_to_one_aliases[$field][$value] = $this->handler->table . '_value_' . ($this->handler->view->many_to_one_count[$this->handler->table]++);
-          }
-          $alias = $this->handler->table_aliases[$value] = $this->add_table($join, $this->handler->view->many_to_one_aliases[$field][$value]);
-
-          // and set table_alias to the first of these.
-          if (empty($this->handler->table_alias)) {
-            $this->handler->table_alias = $alias;
-          }
-        }
-      }
-      // Case 3: it's a 'not'.
-      // We just do one join. We'll add a where clause during
-      // the query phase to ensure that $table.$field IS NULL.
-      else {
-        $join = $this->get_join();
-        $join->type = 'LEFT';
-        $join->extra = array();
-        $join->extra_type = 'OR';
-        foreach ($this->handler->value as $value) {
-          $join->extra[] = array(
-            'field' => $this->handler->real_field,
-            'value' => $value,
-            'numeric' => !empty($this->handler->definition['numeric']),
-          );
-        }
-
-        $this->handler->table_alias = $this->add_table($join);
-      }
-    }
-    return $this->handler->table_alias;
-  }
-
-  /**
-   * Provides a unique placeholders for handlers.
-   */
-  function placeholder() {
-    return $this->handler->query->placeholder($this->handler->options['table'] . '_' . $this->handler->options['field']);
-  }
-
-  function add_filter() {
-    if (empty($this->handler->value)) {
-      return;
-    }
-    $this->handler->ensure_my_table();
-
-    // Shorten some variables:
-    $field = $this->get_field();
-    $options = $this->handler->options;
-    $operator = $this->handler->operator;
-    $formula = !empty($this->formula);
-    $value = $this->handler->value;
-    if (empty($options['group'])) {
-      $options['group'] = 0;
-    }
-
-    // add_condition determines whether a single expression is enough(FALSE) or the
-    // conditions should be added via an db_or()/db_and() (TRUE).
-    $add_condition = TRUE;
-    if ($operator == 'not') {
-      $value = NULL;
-      $operator = 'IS NULL';
-      $add_condition = FALSE;
-    }
-    elseif ($operator == 'or' && empty($options['reduce_duplicates'])) {
-      if (count($value) > 1) {
-        $operator = 'IN';
-      }
-      else {
-        $value = is_array($value) ? array_pop($value) : $value;
-        $operator = '=';
-      }
-      $add_condition = FALSE;
-    }
-
-    if (!$add_condition) {
-      if ($formula) {
-        $placeholder = $this->placeholder();
-        if ($operator == 'IN') {
-          $operator = "$operator IN($placeholder)";
-        }
-        else {
-          $operator = "$operator $placeholder";
-        }
-        $placeholders = array(
-          $placeholder => $value,
-        ) + $this->placeholders;
-        $this->handler->query->add_where_expression($options['group'], "$field $operator", $placeholders);
-      }
-      else {
-        $this->handler->query->add_where($options['group'], $field, $value, $operator);
-      }
-    }
-
-    if ($add_condition) {
-      $field = $this->handler->real_field;
-      $clause = $operator == 'or' ? db_or() : db_and();
-      foreach ($this->handler->table_aliases as $value => $alias) {
-        $clause->condition("$alias.$field", $value);
-      }
-
-      // implode on either AND or OR.
-      $this->handler->query->add_where($options['group'], $clause);
-    }
-  }
-}
-
-/**
  * Break x,y,z and x+y+z into an array. Works for strings.
  *
  * @param $str
diff --git a/includes/plugins.inc b/includes/plugins.inc
deleted file mode 100644
index 7c46224..0000000
--- a/includes/plugins.inc
+++ /dev/null
@@ -1,585 +0,0 @@
-<?php
-
-/**
- * @file
- * Built in plugins for Views output handling.
- */
-
-use Drupal\views\ViewsObject;
-
-/**
- * Implements hook_views_plugins().
- */
-function views_views_plugins() {
-  $js_path = drupal_get_path('module', 'ctools') . '/js';
-  $plugins = array(
-    // display, style, row, argument default, argument validator and access.
-    'display' => array(
-      // Default settings for all display plugins.
-      'default' => array(
-        'title' => t('Master'),
-        'help' => t('Default settings for this view.'),
-        'handler' => 'views_plugin_display_default',
-        'theme' => 'views_view',
-        'no ui' => TRUE,
-        'no remove' => TRUE,
-        // @todo: replace this with proper libraries.
-        // @TODO: figure out whether this is still needed, or at least remove depedent.js.
-        'js' => array('core/misc/form.js', 'core/misc/collapse.js', 'core/misc/textarea.js', 'core/misc/tabledrag.js', 'core/misc/autocomplete.js', "$js_path/dependent.js"),
-        'use ajax' => TRUE,
-        'use pager' => TRUE,
-        'use more' => TRUE,
-        'accept attachments' => TRUE,
-        'help topic' => 'display-default',
-      ),
-      'page' => array(
-        'title' => t('Page'),
-        'help' => t('Display the view as a page, with a URL and menu links.'),
-        'handler' => 'views_plugin_display_page',
-        'theme' => 'views_view',
-        'uses hook menu' => TRUE,
-        'contextual links locations' => array('page'),
-        'use ajax' => TRUE,
-        'use pager' => TRUE,
-        'use more' => TRUE,
-        'accept attachments' => TRUE,
-        'admin' => t('Page'),
-        'help topic' => 'display-page',
-      ),
-      'block' => array(
-        'title' => t('Block'),
-        'help' => t('Display the view as a block.'),
-        'handler' => 'views_plugin_display_block',
-        'theme' => 'views_view',
-        'uses hook block' => TRUE,
-        'contextual links locations' => array('block'),
-        'use ajax' => TRUE,
-        'use pager' => TRUE,
-        'use more' => TRUE,
-        'accept attachments' => TRUE,
-        'admin' => t('Block'),
-        'help topic' => 'display-block',
-      ),
-      'attachment' => array(
-        'title' => t('Attachment'),
-        'help' => t('Attachments added to other displays to achieve multiple views in the same view.'),
-        'handler' => 'views_plugin_display_attachment',
-        'theme' => 'views_view',
-        'contextual links locations' => array(),
-        'use ajax' => TRUE,
-        'use pager' => FALSE,
-        'use more' => TRUE,
-        'accept attachments' => FALSE,
-        'help topic' => 'display-attachment',
-      ),
-      'feed' => array(
-        'title' => t('Feed'),
-        'help' => t('Display the view as a feed, such as an RSS feed.'),
-        'handler' => 'views_plugin_display_feed',
-        'uses hook menu' => TRUE,
-        'use ajax' => FALSE,
-        'use pager' => FALSE,
-        'accept attachments' => FALSE,
-        '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',
-        'theme' => 'views_view',
-        'uses hook menu' => FALSE,
-        'use ajax' => TRUE,
-        'use pager' => TRUE,
-        'accept attachments' => FALSE,
-        'admin' => t('Embed'),
-        'no ui' => !config('views.settings')->get('views_ui_display_embed'),
-      ),
-    ),
-    'display_extender' => array(
-      // Default settings for all display_extender plugins.
-      'default' => array(
-        'title' => t('Empty display extender'),
-        'help' => t('Default settings for this view.'),
-        'handler' => 'views_plugin_display_extender',
-        // You can force the plugin to be enabled
-        'enabled' => FALSE,
-        'no ui' => TRUE,
-      ),
-    ),
-    'style' => array(
-      // Default settings for all style plugins.
-      'default' => array(
-        'title' => t('Unformatted list'),
-        'help' => t('Displays rows one after another.'),
-        'handler' => 'views_plugin_style_default',
-        'theme' => 'views_view_unformatted',
-        'uses row plugin' => TRUE,
-        'uses row class' => TRUE,
-        'uses grouping' => TRUE,
-        'uses options' => TRUE,
-        'type' => 'normal',
-        'help topic' => 'style-unformatted',
-      ),
-      'list' => array(
-        'title' => t('HTML list'),
-        'help' => t('Displays rows as an HTML list.'),
-        'handler' => 'views_plugin_style_list',
-        'theme' => 'views_view_list',
-        'uses row plugin' => TRUE,
-        'uses row class' => TRUE,
-        'uses options' => TRUE,
-        'type' => 'normal',
-        'help topic' => 'style-list',
-      ),
-      'grid' => array(
-        'title' => t('Grid'),
-        'help' => t('Displays rows in a grid.'),
-        'handler' => 'views_plugin_style_grid',
-        'theme' => 'views_view_grid',
-        'uses fields' => FALSE,
-        'uses row plugin' => TRUE,
-        'uses row class' => TRUE,
-        'uses options' => TRUE,
-        'type' => 'normal',
-        'help topic' => 'style-grid',
-      ),
-      'table' => array(
-        'title' => t('Table'),
-        'help' => t('Displays rows in a table.'),
-        'handler' => 'views_plugin_style_table',
-        'theme' => 'views_view_table',
-        'uses row plugin' => FALSE,
-        'uses row class' => TRUE,
-        'uses fields' => TRUE,
-        'uses options' => TRUE,
-        'type' => 'normal',
-        'help topic' => 'style-table',
-      ),
-      'default_summary' => array(
-        'title' => t('List'),
-        'help' => t('Displays the default summary as a list.'),
-        'handler' => 'views_plugin_style_summary',
-        'theme' => 'views_view_summary',
-        'type' => 'summary', // only shows up as a summary style
-        'uses options' => TRUE,
-        'help topic' => 'style-summary',
-      ),
-      'unformatted_summary' => array(
-        'title' => t('Unformatted'),
-        'help' => t('Displays the summary unformatted, with option for one after another or inline.'),
-        'handler' => 'views_plugin_style_summary_unformatted',
-        'theme' => 'views_view_summary_unformatted',
-        'type' => 'summary', // only shows up as a summary style
-        'uses options' => TRUE,
-        'help topic' => 'style-summary-unformatted',
-      ),
-      'rss' => array(
-        'title' => t('RSS Feed'),
-        'help' => t('Generates an RSS feed from a view.'),
-        'handler' => 'views_plugin_style_rss',
-        'theme' => 'views_view_rss',
-        'uses row plugin' => TRUE,
-        'uses options' => TRUE,
-        'type' => 'feed',
-        'help topic' => 'style-rss',
-      ),
-    ),
-    'row' => array(
-      'fields' => array(
-        'title' => t('Fields'),
-        'help' => t('Displays the fields with an optional template.'),
-        'handler' => 'views_plugin_row_fields',
-        'theme' => 'views_view_fields',
-        'uses fields' => TRUE,
-        'uses options' => TRUE,
-        'type' => 'normal',
-        'help topic' => 'style-row-fields',
-      ),
-      'rss_fields' => array(
-        'title' => t('Fields'),
-        'help' => t('Display fields as RSS items.'),
-        'handler' => 'views_plugin_row_rss_fields',
-        'theme' => 'views_view_row_rss',
-        'uses fields' => TRUE,
-        'uses options' => TRUE,
-        'type' => 'feed',
-        'help topic' => 'style-row-fields',
-      ),
-    ),
-    'argument default' => array(
-      'parent' => array(
-        'no ui' => TRUE,
-        'handler' => 'views_plugin_argument_default',
-        'parent' => '',
-      ),
-      'fixed' => array(
-        'title' => t('Fixed value'),
-        'handler' => 'views_plugin_argument_default_fixed',
-      ),
-      'php' => array(
-        'title' => t('PHP Code'),
-        'handler' => 'views_plugin_argument_default_php',
-      ),
-      'raw' => array(
-        'title' => t('Raw value from URL'),
-        'handler' => 'views_plugin_argument_default_raw',
-      ),
-    ),
-    'argument validator' => array(
-      'php' => array(
-        'title' => t('PHP Code'),
-        'handler' => 'views_plugin_argument_validate_php',
-      ),
-      'numeric' => array(
-        'title' => t('Numeric'),
-        'handler' => 'views_plugin_argument_validate_numeric',
-      ),
-    ),
-    'access' => array(
-      'none' => array(
-        'title' => t('None'),
-        'help' => t('Will be available to all users.'),
-        'handler' => 'views_plugin_access_none',
-        'help topic' => 'access-none',
-      ),
-      'role' => array(
-        'title' => t('Role'),
-        'help' => t('Access will be granted to users with any of the specified roles.'),
-        'handler' => 'views_plugin_access_role',
-        'uses options' => TRUE,
-        'help topic' => 'access-role',
-      ),
-      'perm' => array(
-        'title' => t('Permission'),
-        'help' => t('Access will be granted to users with the specified permission string.'),
-        'handler' => 'views_plugin_access_perm',
-        'uses options' => TRUE,
-        'help topic' => 'access-perm',
-      ),
-    ),
-    'query' => array(
-      'parent' => array(
-        'no ui' => TRUE,
-        'handler' => 'views_plugin_query',
-        'parent' => '',
-      ),
-      'views_query' => array(
-        'title' => t('SQL Query'),
-        'help' => t('Query will be generated and run using the Drupal database API.'),
-        'handler' => 'views_plugin_query_default'
-      ),
-    ),
-    'cache' => array(
-      'parent' => array(
-        'no ui' => TRUE,
-        'handler' => 'views_plugin_cache',
-        'parent' => '',
-      ),
-      'none' => array(
-        'title' => t('None'),
-        'help' => t('No caching of Views data.'),
-        'handler' => 'views_plugin_cache_none',
-        'help topic' => 'cache-none',
-      ),
-      'time' => array(
-        'title' => t('Time-based'),
-        'help' => t('Simple time-based caching of data.'),
-        'handler' => 'views_plugin_cache_time',
-        'uses options' => TRUE,
-        'help topic' => 'cache-time',
-      ),
-    ),
-    'exposed_form' => array(
-      'parent' => array(
-        'no ui' => TRUE,
-        'handler' => 'views_plugin_exposed_form',
-        'parent' => '',
-      ),
-      'basic' => array(
-        'title' => t('Basic'),
-        'help' => t('Basic exposed form'),
-        'handler' => 'views_plugin_exposed_form_basic',
-        'uses options' => TRUE,
-        'help topic' => 'exposed-form-basic',
-      ),
-      'input_required' => array(
-        'title' => t('Input required'),
-        'help' => t('An exposed form that only renders a view if the form contains user input.'),
-        'handler' => 'views_plugin_exposed_form_input_required',
-        'uses options' => TRUE,
-        'help topic' => 'exposed-form-input-required',
-      ),
-    ),
-    'pager' => array(
-      'parent' => array(
-        'no ui' => TRUE,
-        'handler' => 'views_plugin_pager',
-        'parent' => '',
-      ),
-      'none' => array(
-        'title' => t('Display all items'),
-        'help' => t("Display all items that this view might find"),
-        'handler' => 'views_plugin_pager_none',
-        'help topic' => 'pager-none',
-        'uses options' => TRUE,
-        'type' => 'basic',
-      ),
-      'some' => array(
-        'title' => t('Display a specified number of items'),
-        'help' => t('Display a limited number items that this view might find.'),
-        'handler' => 'views_plugin_pager_some',
-        'help topic' => 'pager-some',
-        'uses options' => TRUE,
-        'type' => 'basic',
-      ),
-      'full' => array(
-        'title' => t('Paged output, full pager'),
-        'short title' => t('Full'),
-        'help' => t('Paged output, full Drupal style'),
-        'handler' => 'views_plugin_pager_full',
-        'help topic' => 'pager-full',
-        'uses options' => TRUE,
-      ),
-      'mini' => array(
-        'title' => t('Paged output, mini pager'),
-        'short title' => t('Mini'),
-        'help' => t('Use the mini pager output.'),
-        'handler' => 'views_plugin_pager_mini',
-        'help topic' => 'pager-mini',
-        'uses options' => TRUE,
-        'parent' => 'full',
-      ),
-    ),
-    'localization' => array(
-      'parent' => array(
-        'no ui' => TRUE,
-        'handler' => 'views_plugin_localization',
-        'parent' => '',
-      ),
-     'none' => array(
-        'title' => t('None'),
-        'help' => t('Do not pass admin strings for translation.'),
-        'handler' => 'views_plugin_localization_none',
-        'help topic' => 'localization-none',
-      ),
-      'core' => array(
-        'title' => t('Core'),
-        'help' => t("Use Drupal core t() function. Not recommended, as it doesn't support updates to existing strings."),
-        'handler' => 'views_plugin_localization_core',
-        'help topic' => 'localization-core',
-      ),
-    ),
-  );
-  // Add a help message pointing to the i18views module if it is not present.
-  if (!module_exists('i18nviews')) {
-    $plugins['localization']['core']['help'] .= ' ' . t('If you need to translate Views labels into other languages, consider installing the <a href="!path">Internationalization</a> package\'s Views translation module.', array('!path' => url('http://drupal.org/project/i18n', array('absolute' => TRUE))));
-  }
-
-  if (module_invoke('ctools', 'api_version', '1.3')) {
-    $plugins['style']['jump_menu_summary'] = array(
-      'title' => t('Jump menu'),
-      'help' => t('Puts all of the results into a select box and allows the user to go to a different page based upon the results.'),
-      'handler' => 'views_plugin_style_summary_jump_menu',
-      'theme' => 'views_view_summary_jump_menu',
-      'type' => 'summary', // only shows up as a summary style
-      'uses options' => TRUE,
-      'help topic' => 'style-summary-jump-menu',
-    );
-    $plugins['style']['jump_menu'] = array(
-      'title' => t('Jump menu'),
-      'help' => t('Puts all of the results into a select box and allows the user to go to a different page based upon the results.'),
-      'handler' => 'views_plugin_style_jump_menu',
-      'theme' => 'views_view_jump_menu',
-      'uses row plugin' => TRUE,
-      'uses fields' => TRUE,
-      'uses options' => TRUE,
-      'type' => 'normal',
-      'help topic' => 'style-jump-menu',
-    );
-  }
-
-  return $plugins;
-}
-
-/**
- * Builds and return a list of all plugins available in the system.
- *
- * @return Nested array of plugins, grouped by type.
- */
-function views_discover_plugins() {
-  $cache = array('display' => array(), 'style' => array(), 'row' => array(), 'argument default' => array(), 'argument validator' => array(), 'access' => array(), 'cache' => array(), 'exposed_form' => array());
-  // Get plugins from all mdoules.
-  foreach (module_implements('views_plugins') as $module) {
-    $function = $module . '_views_plugins';
-    $result = $function();
-    if (!is_array($result)) {
-      continue;
-    }
-
-    $module_dir = isset($result['module']) ? $result['module'] : $module;
-    // Setup automatic path/file finding for theme registration
-    if ($module_dir == 'views') {
-      $theme_path = drupal_get_path('module', $module_dir) . '/theme';
-      $theme_file = 'theme.inc';
-      $path = drupal_get_path('module', $module_dir) . '/plugins';
-    }
-    else {
-      $theme_path = $path = drupal_get_path('module', $module_dir);
-      $theme_file = "$module.views.inc";
-    }
-
-    foreach ($result as $type => $info) {
-      if ($type == 'module') {
-        continue;
-      }
-      foreach ($info as $plugin => $def) {
-        $def['module'] = $module_dir;
-        if (!isset($def['theme path'])) {
-          $def['theme path'] = $theme_path;
-        }
-        if (!isset($def['theme file'])) {
-          $def['theme file'] = $theme_file;
-        }
-        if (!isset($def['path'])) {
-          $def['path'] = $path;
-        }
-        if (!isset($def['file'])) {
-          $def['file'] = $def['handler'] . '.inc';
-        }
-        if (!isset($def['parent'])) {
-          $def['parent'] = 'parent';
-        }
-        // Set the internal name to be able to read it out later.
-        $def['name'] = $plugin;
-
-        // merge the new data in
-        $cache[$type][$plugin] = $def;
-      }
-    }
-  }
-
-  // Let other modules modify the plugins.
-  drupal_alter('views_plugins', $cache);
-  return $cache;
-}
-
-/**
- * Abstract base class to provide interface common to all plugins.
- */
-abstract class views_plugin extends ViewsObject {
-  /**
-   * The top object of a view.
-   *
-   * @var view
-   */
-  var $view = NULL;
-
-  /**
-   * The current used views display.
-   *
-   * @var views_display
-   */
-  var $display = NULL;
-
-  /**
-   * The plugin type of this plugin, for example style or query.
-   */
-  var $plugin_type = NULL;
-
-  /**
-   * The plugin name of this plugin, for example table or full.
-   */
-  var $plugin_name = NULL;
-
-  /**
-   * Init will be called after construct, when the plugin is attached to a
-   * view and a display.
-   */
-
-  /**
-   * Provide a form to edit options for this plugin.
-   */
-  function options_form(&$form, &$form_state) {
-    // Some form elements belong in a fieldset for presentation, but can't
-    // be moved into one because of the form_state['values'] hierarchy. Those
-    // elements can add a #fieldset => 'fieldset_name' property, and they'll
-    // be moved to their fieldset during pre_render.
-    $form['#pre_render'][] = 'views_ui_pre_render_add_fieldset_markup';
-  }
-
-  /**
-   * Validate the options form.
-   */
-  function options_validate(&$form, &$form_state) { }
-
-  /**
-   * Handle any special handling on the validate form.
-   */
-  function options_submit(&$form, &$form_state) { }
-
-  /**
-   * Add anything to the query that we might need to.
-   */
-  function query() { }
-
-  /**
-   * Provide a full list of possible theme templates used by this style.
-   */
-  function theme_functions() {
-    return views_theme_functions($this->definition['theme'], $this->view, $this->display);
-  }
-
-  /**
-   * Provide a list of additional theme functions for the theme information page
-   */
-  function additional_theme_functions() {
-    $funcs = array();
-    if (!empty($this->definition['additional themes'])) {
-      foreach ($this->definition['additional themes'] as $theme => $type) {
-        $funcs[] = views_theme_functions($theme, $this->view, $this->display);
-      }
-    }
-    return $funcs;
-  }
-
-  /**
-   * Validate that the plugin is correct and can be saved.
-   *
-   * @return
-   *   An array of error strings to tell the user what is wrong with this
-   *   plugin.
-   */
-  function validate() { return array(); }
-
-  /**
-   * Returns the summary of the settings in the display.
-   */
-  function summary_title() {
-    return t('Settings');
-  }
-  /**
-   * Return the human readable name of the display.
-   *
-   * This appears on the ui beside each plugin and beside the settings link.
-   */
-  function plugin_title() {
-    if (isset($this->definition['short title'])) {
-      return check_plain($this->definition['short title']);
-    }
-    return check_plain($this->definition['title']);
-  }
-}
-
-/**
- * Get enabled display extenders.
- */
-function views_get_enabled_display_extenders() {
-  $enabled = array_filter((array) config('views.settings')->get('views_display_extenders'));
-  $options = views_fetch_plugin_names('display_extender');
-  foreach ($options as $name => $plugin) {
-    $enabled[$name] = $name;
-  }
-
-  return $enabled;
-}
diff --git a/lib/Drupal/search/ViewsSearchQuery.php b/lib/Drupal/search/ViewsSearchQuery.php
new file mode 100644
index 0000000..3d8bd0d
--- /dev/null
+++ b/lib/Drupal/search/ViewsSearchQuery.php
@@ -0,0 +1,43 @@
+<?php
+
+namespace Drupal\search;
+
+/**
+ * Extends the core SearchQuery.
+ *
+ * @todo: Make this class PSR-0 compatible.
+ */
+class ViewsSearchQuery extends SearchQuery {
+  public function &conditions() {
+    return $this->conditions;
+  }
+  public function words() {
+    return $this->words;
+  }
+
+  public function simple() {
+    return $this->simple;
+  }
+
+  public function matches() {
+    return $this->matches;
+  }
+
+  public function publicParseSearchExpression() {
+    return $this->parseSearchExpression();
+  }
+
+  function condition_replace_string($search, $replace, &$condition) {
+    if ($condition['field'] instanceof DatabaseCondition) {
+      $conditions =& $condition['field']->conditions();
+      foreach ($conditions as $key => &$subcondition) {
+        if (is_numeric($key)) {
+          $this->condition_replace_string($search, $replace, $subcondition);
+        }
+      }
+    }
+    else {
+      $condition['field'] = str_replace($search, $replace, $condition['field']);
+    }
+  }
+}
diff --git a/lib/Drupal/views/ManyToOneHelper.php b/lib/Drupal/views/ManyToOneHelper.php
new file mode 100644
index 0000000..58e4c68
--- /dev/null
+++ b/lib/Drupal/views/ManyToOneHelper.php
@@ -0,0 +1,323 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\views\ManyToOneHelper.
+ */
+
+namespace Drupal\views;
+
+/**
+ * This many to one helper object is used on both arguments and filters.
+ *
+ * @todo This requires extensive documentation on how this class is to
+ * be used. For now, look at the arguments and filters that use it. Lots
+ * of stuff is just pass-through but there are definitely some interesting
+ * areas where they interact.
+ *
+ * Any handler that uses this can have the following possibly additional
+ * definition terms:
+ * - numeric: If true, treat this field as numeric, using %d instead of %s in
+ *            queries.
+ *
+ */
+class ManyToOneHelper {
+  function ManyToOneHelper(&$handler) {
+    $this->handler = &$handler;
+  }
+
+  static function option_definition(&$options) {
+    $options['reduce_duplicates'] = array('default' => FALSE, 'bool' => TRUE);
+  }
+
+  function options_form(&$form, &$form_state) {
+    $form['reduce_duplicates'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Reduce duplicates'),
+      '#description' => t('This filter can cause items that have more than one of the selected options to appear as duplicate results. If this filter causes duplicate results to occur, this checkbox can reduce those duplicates; however, the more terms it has to search for, the less performant the query will be, so use this with caution. Shouldn\'t be set on single-value fields, as it may cause values to disappear from display, if used on an incompatible field.'),
+      '#default_value' => !empty($this->handler->options['reduce_duplicates']),
+      '#weight' => 4,
+    );
+  }
+
+  /**
+   * Sometimes the handler might want us to use some kind of formula, so give
+   * it that option. If it wants us to do this, it must set $helper->formula = TRUE
+   * and implement handler->get_formula();
+   */
+  function get_field() {
+    if (!empty($this->formula)) {
+      return $this->handler->get_formula();
+    }
+    else {
+      return $this->handler->table_alias . '.' . $this->handler->real_field;
+    }
+  }
+
+  /**
+   * Add a table to the query.
+   *
+   * This is an advanced concept; not only does it add a new instance of the table,
+   * but it follows the relationship path all the way down to the relationship
+   * link point and adds *that* as a new relationship and then adds the table to
+   * the relationship, if necessary.
+   */
+  function add_table($join = NULL, $alias = NULL) {
+    // This is used for lookups in the many_to_one table.
+    $field = $this->handler->relationship . '_' . $this->handler->table . '.' . $this->handler->field;
+
+    if (empty($join)) {
+      $join = $this->get_join();
+    }
+
+    // See if there's a chain between us and the base relationship. If so, we need
+    // to create a new relationship to use.
+    $relationship = $this->handler->relationship;
+
+    // Determine the primary table to seek
+    if (empty($this->handler->query->relationships[$relationship])) {
+      $base_table = $this->handler->query->base_table;
+    }
+    else {
+      $base_table = $this->handler->query->relationships[$relationship]['base'];
+    }
+
+    // Cycle through the joins. This isn't as error-safe as the normal
+    // ensure_path logic. Perhaps it should be.
+    $r_join = clone $join;
+    while ($r_join->left_table != $base_table) {
+      $r_join = views_get_table_join($r_join->left_table, $base_table);
+    }
+    // If we found that there are tables in between, add the relationship.
+    if ($r_join->table != $join->table) {
+      $relationship = $this->handler->query->add_relationship($this->handler->table . '_' . $r_join->table, $r_join, $r_join->table, $this->handler->relationship);
+    }
+
+    // And now add our table, using the new relationship if one was used.
+    $alias = $this->handler->query->add_table($this->handler->table, $relationship, $join, $alias);
+
+    // Store what values are used by this table chain so that other chains can
+    // automatically discard those values.
+    if (empty($this->handler->view->many_to_one_tables[$field])) {
+      $this->handler->view->many_to_one_tables[$field] = $this->handler->value;
+    }
+    else {
+      $this->handler->view->many_to_one_tables[$field] = array_merge($this->handler->view->many_to_one_tables[$field], $this->handler->value);
+    }
+
+    return $alias;
+  }
+
+  function get_join() {
+    return $this->handler->get_join();
+  }
+
+  /**
+   * Provide the proper join for summary queries. This is important in part because
+   * it will cooperate with other arguments if possible.
+   */
+  function summary_join() {
+    $field = $this->handler->relationship . '_' . $this->handler->table . '.' . $this->handler->field;
+    $join = $this->get_join();
+
+    // shortcuts
+    $options = $this->handler->options;
+    $view = &$this->handler->view;
+    $query = &$this->handler->query;
+
+    if (!empty($options['require_value'])) {
+      $join->type = 'INNER';
+    }
+
+    if (empty($options['add_table']) || empty($view->many_to_one_tables[$field])) {
+      return $query->ensure_table($this->handler->table, $this->handler->relationship, $join);
+    }
+    else {
+      if (!empty($view->many_to_one_tables[$field])) {
+        foreach ($view->many_to_one_tables[$field] as $value) {
+          $join->extra = array(
+            array(
+              'field' => $this->handler->real_field,
+              'operator' => '!=',
+              'value' => $value,
+              'numeric' => !empty($this->definition['numeric']),
+            ),
+          );
+        }
+      }
+      return $this->add_table($join);
+    }
+  }
+
+  /**
+   * Override ensure_my_table so we can control how this joins in.
+   * The operator actually has influence over joining.
+   */
+  function ensure_my_table() {
+    if (!isset($this->handler->table_alias)) {
+      // Case 1: Operator is an 'or' and we're not reducing duplicates.
+      // We hence get the absolute simplest:
+      $field = $this->handler->relationship . '_' . $this->handler->table . '.' . $this->handler->field;
+      if ($this->handler->operator == 'or' && empty($this->handler->options['reduce_duplicates'])) {
+        if (empty($this->handler->options['add_table']) && empty($this->handler->view->many_to_one_tables[$field])) {
+          // query optimization, INNER joins are slightly faster, so use them
+          // when we know we can.
+          $join = $this->get_join();
+          if (isset($join)) {
+            $join->type = 'INNER';
+          }
+          $this->handler->table_alias = $this->handler->query->ensure_table($this->handler->table, $this->handler->relationship, $join);
+          $this->handler->view->many_to_one_tables[$field] = $this->handler->value;
+        }
+        else {
+          $join = $this->get_join();
+          $join->type = 'LEFT';
+          if (!empty($this->handler->view->many_to_one_tables[$field])) {
+            foreach ($this->handler->view->many_to_one_tables[$field] as $value) {
+              $join->extra = array(
+                array(
+                  'field' => $this->handler->real_field,
+                  'operator' => '!=',
+                  'value' => $value,
+                  'numeric' => !empty($this->handler->definition['numeric']),
+                ),
+              );
+            }
+          }
+
+          $this->handler->table_alias = $this->add_table($join);
+        }
+
+        return $this->handler->table_alias;
+      }
+
+      // Case 2: it's an 'and' or an 'or'.
+      // We do one join per selected value.
+      if ($this->handler->operator != 'not') {
+        // Clone the join for each table:
+        $this->handler->table_aliases = array();
+        foreach ($this->handler->value as $value) {
+          $join = $this->get_join();
+          if ($this->handler->operator == 'and') {
+            $join->type = 'INNER';
+          }
+          $join->extra = array(
+            array(
+              'field' => $this->handler->real_field,
+              'value' => $value,
+              'numeric' => !empty($this->handler->definition['numeric']),
+            ),
+          );
+
+          // The table alias needs to be unique to this value across the
+          // multiple times the filter or argument is called by the view.
+          if (!isset($this->handler->view->many_to_one_aliases[$field][$value])) {
+            if (!isset($this->handler->view->many_to_one_count[$this->handler->table])) {
+              $this->handler->view->many_to_one_count[$this->handler->table] = 0;
+            }
+            $this->handler->view->many_to_one_aliases[$field][$value] = $this->handler->table . '_value_' . ($this->handler->view->many_to_one_count[$this->handler->table]++);
+          }
+          $alias = $this->handler->table_aliases[$value] = $this->add_table($join, $this->handler->view->many_to_one_aliases[$field][$value]);
+
+          // and set table_alias to the first of these.
+          if (empty($this->handler->table_alias)) {
+            $this->handler->table_alias = $alias;
+          }
+        }
+      }
+      // Case 3: it's a 'not'.
+      // We just do one join. We'll add a where clause during
+      // the query phase to ensure that $table.$field IS NULL.
+      else {
+        $join = $this->get_join();
+        $join->type = 'LEFT';
+        $join->extra = array();
+        $join->extra_type = 'OR';
+        foreach ($this->handler->value as $value) {
+          $join->extra[] = array(
+            'field' => $this->handler->real_field,
+            'value' => $value,
+            'numeric' => !empty($this->handler->definition['numeric']),
+          );
+        }
+
+        $this->handler->table_alias = $this->add_table($join);
+      }
+    }
+    return $this->handler->table_alias;
+  }
+
+  /**
+   * Provides a unique placeholders for handlers.
+   */
+  function placeholder() {
+    return $this->handler->query->placeholder($this->handler->options['table'] . '_' . $this->handler->options['field']);
+  }
+
+  function add_filter() {
+    if (empty($this->handler->value)) {
+      return;
+    }
+    $this->handler->ensure_my_table();
+
+    // Shorten some variables:
+    $field = $this->get_field();
+    $options = $this->handler->options;
+    $operator = $this->handler->operator;
+    $formula = !empty($this->formula);
+    $value = $this->handler->value;
+    if (empty($options['group'])) {
+      $options['group'] = 0;
+    }
+
+    // add_condition determines whether a single expression is enough(FALSE) or the
+    // conditions should be added via an db_or()/db_and() (TRUE).
+    $add_condition = TRUE;
+    if ($operator == 'not') {
+      $value = NULL;
+      $operator = 'IS NULL';
+      $add_condition = FALSE;
+    }
+    elseif ($operator == 'or' && empty($options['reduce_duplicates'])) {
+      if (count($value) > 1) {
+        $operator = 'IN';
+      }
+      else {
+        $value = is_array($value) ? array_pop($value) : $value;
+        $operator = '=';
+      }
+      $add_condition = FALSE;
+    }
+
+    if (!$add_condition) {
+      if ($formula) {
+        $placeholder = $this->placeholder();
+        if ($operator == 'IN') {
+          $operator = "$operator IN($placeholder)";
+        }
+        else {
+          $operator = "$operator $placeholder";
+        }
+        $placeholders = array(
+          $placeholder => $value,
+        ) + $this->placeholders;
+        $this->handler->query->add_where_expression($options['group'], "$field $operator", $placeholders);
+      }
+      else {
+        $this->handler->query->add_where($options['group'], $field, $value, $operator);
+      }
+    }
+
+    if ($add_condition) {
+      $field = $this->handler->real_field;
+      $clause = $operator == 'or' ? db_or() : db_and();
+      foreach ($this->handler->table_aliases as $value => $alias) {
+        $clause->condition("$alias.$field", $value);
+      }
+
+      // implode on either AND or OR.
+      $this->handler->query->add_where($options['group'], $clause);
+    }
+  }
+}
+
diff --git a/lib/Drupal/views/Plugin/Discovery/ViewsDiscovery.php b/lib/Drupal/views/Plugin/Discovery/ViewsDiscovery.php
new file mode 100644
index 0000000..7a97616
--- /dev/null
+++ b/lib/Drupal/views/Plugin/Discovery/ViewsDiscovery.php
@@ -0,0 +1,52 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\views\Plugin\Discovery\ViewsDiscovery.
+ */
+
+namespace Drupal\views\Plugin\Discovery;
+
+use Drupal\Core\Plugin\Discovery\AnnotatedClassDiscovery;
+
+/**
+ * Discovery interface which supports the hook_views_plugins mechanism.
+ */
+class ViewsDiscovery extends AnnotatedClassDiscovery {
+  public function getDefinitions() {
+    $definitions = parent::getDefinitions();
+    foreach ($definitions as $definition) {
+      // @todo: Allow other modules to write views plugins
+      $module_dir = $module = 'views';
+      // Setup automatic path/file finding for theme registration
+      if ($module_dir == 'views') {
+        $theme_path = drupal_get_path('module', $module_dir) . '/theme';
+        $theme_file = 'theme.inc';
+        $path = drupal_get_path('module', $module_dir) . '/plugins';
+      }
+      else {
+        $theme_path = $path = drupal_get_path('module', $module_dir);
+        $theme_file = "$module.views.inc";
+      }
+
+      $definition['module'] = $module_dir;
+      if (!isset($definition['theme path'])) {
+        $definition['theme path'] = $theme_path;
+      }
+      if (!isset($definition['theme file'])) {
+        $definition['theme file'] = $theme_file;
+      }
+      if (!isset($definition['path'])) {
+        $definition['path'] = $path;
+      }
+      if (!isset($definition['parent'])) {
+        $definition['parent'] = 'parent';
+      }
+
+      // merge the new data in
+      $definitions[$definition['id']] = $definition;
+    }
+
+    return $definitions;
+  }
+}
diff --git a/lib/Drupal/views/Plugin/Type/ViewsPluginManager.php b/lib/Drupal/views/Plugin/Type/ViewsPluginManager.php
new file mode 100644
index 0000000..ed3ee74
--- /dev/null
+++ b/lib/Drupal/views/Plugin/Type/ViewsPluginManager.php
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\views\Plugin\Type\ViewsPluginManager.
+ */
+
+namespace Drupal\views\Plugin\Type;
+
+use Drupal\Component\Plugin\PluginManagerBase;
+use Drupal\Component\Plugin\Factory\DefaultFactory;
+use Drupal\views\Plugin\Discovery\ViewsDiscovery;
+use Drupal\Core\Plugin\Discovery\CacheDecorator;
+
+class ViewsPluginManager extends PluginManagerBase {
+  /**
+   * The handler type of this plugin manager, for example filter or field.
+   *
+   * @var string
+   */
+  protected $type;
+
+  public function __construct($type) {
+    $this->type = $type;
+
+    $this->discovery = new CacheDecorator(new ViewsDiscovery('views', $this->type), 'views:' . $this->type, 'cache');
+    $this->factory = new DefaultFactory($this->discovery);
+  }
+}
diff --git a/lib/Drupal/views/Plugin/views/Handler.php b/lib/Drupal/views/Plugin/views/Handler.php
new file mode 100644
index 0000000..bd5a561
--- /dev/null
+++ b/lib/Drupal/views/Plugin/views/Handler.php
@@ -0,0 +1,606 @@
+<?php
+/**
+ * @file
+ * Definition of Drupal\views\Plugin\views\Handler
+ */
+
+namespace Drupal\views\Plugin\views;
+
+use Drupal\views\Plugin\views\Plugin;
+use Drupal\views\View;
+
+class Handler extends Plugin {
+  /**
+   * Where the $query object will reside:
+   *
+   * @var Drupal\views\Plugin\views\query\QueryPluginBase
+   */
+  public $query = NULL;
+
+  /**
+   * The table this handler is attached to.
+   *
+   * @var string
+   */
+  public $table;
+
+  /**
+   * The alias of the table of this handler which is used in the query.
+   *
+   * @var string
+   */
+  public $table_alias;
+
+  /**
+   * When a table has been moved this property is set.
+   *
+   * @var string
+   */
+  public $actual_table;
+
+  /**
+   * The actual field in the database table, maybe different
+   * on other kind of query plugins/special handlers.
+   *
+   * @var string
+   */
+  public $real_field;
+
+  /**
+   * With field you can override the real_field if the real field is not set.
+   *
+   * @var string
+   */
+  public $field;
+
+  /**
+   * When a field has been moved this property is set.
+   *
+   * @var string
+   */
+  public $actual_field;
+
+  /**
+   * The relationship used for this field.
+   *
+   * @var string
+   */
+  public $relationship = NULL;
+
+  /**
+   * Init the handler with necessary data.
+   *
+   * @param Drupal\views\View $view
+   *   The $view object this handler is attached to.
+   * @param array $options
+   *   The item from the database; the actual contents of this will vary
+   *   based upon the type of handler.
+   */
+  function init(&$view, &$options) {
+    $this->view = &$view;
+    $display_id = $this->view->current_display;
+    // Check to see if this handler type is defaulted. Note that
+    // we have to do a lookup because the type is singular but the
+    // option is stored as the plural.
+
+    // If the 'moved to' keyword moved our handler, let's fix that now.
+    if (isset($this->actual_table)) {
+      $options['table'] = $this->actual_table;
+    }
+
+    if (isset($this->actual_field)) {
+      $options['field'] = $this->actual_field;
+    }
+
+    $types = View::views_object_types();
+    $plural = $this->plugin_type;
+    if (isset($types[$this->plugin_type]['plural'])) {
+      $plural = $types[$this->plugin_type]['plural'];
+    }
+    if ($this->view->display_handler->is_defaulted($plural)) {
+      $display_id = 'default';
+    }
+
+    $this->localization_keys = array(
+      $display_id,
+      $this->plugin_type,
+      $options['table'],
+      $options['id']
+    );
+
+    $this->unpack_options($this->options, $options);
+
+    // This exist on most handlers, but not all. So they are still optional.
+    if (isset($options['table'])) {
+      $this->table = $options['table'];
+    }
+
+    if (isset($this->definition['real field'])) {
+      $this->real_field = $this->definition['real field'];
+    }
+
+    if (isset($this->definition['field'])) {
+      $this->real_field = $this->definition['field'];
+    }
+
+    if (isset($options['field'])) {
+      $this->field = $options['field'];
+      if (!isset($this->real_field)) {
+        $this->real_field = $options['field'];
+      }
+    }
+
+    $this->query = &$view->query;
+  }
+
+  function option_definition() {
+    $options = parent::option_definition();
+
+    $options['id'] = array('default' => '');
+    $options['table'] = array('default' => '');
+    $options['field'] = array('default' => '');
+    $options['relationship'] = array('default' => 'none');
+    $options['group_type'] = array('default' => 'group');
+    $options['ui_name'] = array('default' => '');
+
+    return $options;
+  }
+
+  /**
+   * Return a string representing this handler's name in the UI.
+   */
+  function ui_name($short = FALSE) {
+    if (!empty($this->options['ui_name'])) {
+      $title = check_plain($this->options['ui_name']);
+      return $title;
+    }
+    $title = ($short && isset($this->definition['title short'])) ? $this->definition['title short'] : $this->definition['title'];
+    return t('!group: !title', array('!group' => $this->definition['group'], '!title' => $title));
+  }
+
+  /**
+   * Shortcut to get a handler's raw field value.
+   *
+   * This should be overridden for handlers with formulae or other
+   * non-standard fields. Because this takes an argument, fields
+   * overriding this can just call return parent::get_field($formula)
+   */
+  function get_field($field = NULL) {
+    if (!isset($field)) {
+      if (!empty($this->formula)) {
+        $field = $this->get_formula();
+      }
+      else {
+        $field = $this->table_alias . '.' . $this->real_field;
+      }
+    }
+
+    // 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();
+      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);
+        }
+      }
+    }
+
+    return $field;
+  }
+
+  /**
+   * Sanitize the value for output.
+   *
+   * @param $value
+   *   The value being rendered.
+   * @param $type
+   *   The type of sanitization needed. If not provided, check_plain() is used.
+   *
+   * @return string
+   *   Returns the safe value.
+   */
+  function sanitize_value($value, $type = NULL) {
+    switch ($type) {
+      case 'xss':
+        $value = filter_xss($value);
+        break;
+      case 'xss_admin':
+        $value = filter_xss_admin($value);
+        break;
+      case 'url':
+        $value = check_url($value);
+        break;
+      default:
+        $value = check_plain($value);
+        break;
+    }
+    return $value;
+  }
+
+  /**
+   * Transform a string by a certain method.
+   *
+   * @param $string
+   *    The input you want to transform.
+   * @param $option
+   *    How do you want to transform it, possible values:
+   *      - upper: Uppercase the string.
+   *      - lower: lowercase the string.
+   *      - ucfirst: Make the first char uppercase.
+   *      - ucwords: Make each word in the string uppercase.
+   *
+   * @return string
+   *    The transformed string.
+   */
+  function case_transform($string, $option) {
+    global $multibyte;
+
+    switch ($option) {
+      default:
+        return $string;
+      case 'upper':
+        return drupal_strtoupper($string);
+      case 'lower':
+        return drupal_strtolower($string);
+      case 'ucfirst':
+        return drupal_strtoupper(drupal_substr($string, 0, 1)) . drupal_substr($string, 1);
+      case 'ucwords':
+        if ($multibyte == UNICODE_MULTIBYTE) {
+          return mb_convert_case($string, MB_CASE_TITLE);
+        }
+        else {
+          return ucwords($string);
+        }
+    }
+  }
+
+  /**
+   * Validate the options form.
+   */
+  function options_validate(&$form, &$form_state) { }
+
+  /**
+   * Build the options form.
+   */
+  function options_form(&$form, &$form_state) {
+    // Some form elements belong in a fieldset for presentation, but can't
+    // be moved into one because of the form_state['values'] hierarchy. Those
+    // elements can add a #fieldset => 'fieldset_name' property, and they'll
+    // be moved to their fieldset during pre_render.
+    $form['#pre_render'][] = 'views_ui_pre_render_add_fieldset_markup';
+
+    $form['ui_name'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Administrative title'),
+      '#description' => t('This title will be displayed on the views edit page instead of the default one. This might be useful if you have the same item twice.'),
+      '#default_value' => $this->options['ui_name'],
+      '#fieldset' => 'more',
+    );
+
+    // This form is long and messy enough that the "Administrative title" option
+    // belongs in a "more options" fieldset at the bottom of the form.
+    $form['more'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('More'),
+      '#collapsible' => TRUE,
+      '#collapsed' => TRUE,
+      '#weight' => 150,
+    );
+    // Allow to alter the default values brought into the form.
+    drupal_alter('views_handler_options', $this->options, $view);
+  }
+
+  /**
+   * Perform any necessary changes to the form values prior to storage.
+   * There is no need for this function to actually store the data.
+   */
+  function options_submit(&$form, &$form_state) { }
+
+  /**
+   * Provides the handler some groupby.
+   */
+  function use_group_by() {
+    return TRUE;
+  }
+  /**
+   * Provide a form for aggregation settings.
+   */
+  function groupby_form(&$form, &$form_state) {
+    $view = &$form_state['view'];
+    $display_id = $form_state['display_id'];
+    $types = Views::views_object_types();
+    $type = $form_state['type'];
+    $id = $form_state['id'];
+
+    $form['#title'] = check_plain($view->display[$display_id]->display_title) . ': ';
+    $form['#title'] .= t('Configure aggregation settings for @type %item', array('@type' => $types[$type]['lstitle'], '%item' => $this->ui_name()));
+
+    $form['#section'] = $display_id . '-' . $type . '-' . $id;
+
+    $view->init_query();
+    $info = $view->query->get_aggregation_info();
+    foreach ($info as $id => $aggregate) {
+      $group_types[$id] = $aggregate['title'];
+    }
+
+    $form['group_type'] = array(
+      '#type' => 'select',
+      '#title' => t('Aggregation type'),
+      '#default_value' => $this->options['group_type'],
+      '#description' => t('Select the aggregation function to use on this field.'),
+      '#options' => $group_types,
+    );
+  }
+
+  /**
+   * Perform any necessary changes to the form values prior to storage.
+   * There is no need for this function to actually store the data.
+   */
+  function groupby_form_submit(&$form, &$form_state) {
+    $item =& $form_state['handler']->options;
+
+    $item['group_type'] = $form_state['values']['options']['group_type'];
+  }
+
+  /**
+   * If a handler has 'extra options' it will get a little settings widget and
+   * another form called extra_options.
+   */
+  function has_extra_options() { return FALSE; }
+
+  /**
+   * Provide defaults for the handler.
+   */
+  function extra_options(&$option) { }
+
+  /**
+   * Provide a form for setting options.
+   */
+  function extra_options_form(&$form, &$form_state) { }
+
+  /**
+   * Validate the options form.
+   */
+  function extra_options_validate($form, &$form_state) { }
+
+  /**
+   * Perform any necessary changes to the form values prior to storage.
+   * There is no need for this function to actually store the data.
+   */
+  function extra_options_submit($form, &$form_state) { }
+
+  /**
+   * Determine if a handler can be exposed.
+   */
+  function can_expose() { return FALSE; }
+
+  /**
+   * Set new exposed option defaults when exposed setting is flipped
+   * on.
+   */
+  function expose_options() { }
+
+  /**
+   * Get information about the exposed form for the form renderer.
+   */
+  function exposed_info() { }
+
+  /**
+   * Render our chunk of the exposed handler form when selecting
+   */
+  function exposed_form(&$form, &$form_state) { }
+
+  /**
+   * Validate the exposed handler form
+   */
+  function exposed_validate(&$form, &$form_state) { }
+
+  /**
+   * Submit the exposed handler form
+   */
+  function exposed_submit(&$form, &$form_state) { }
+
+  /**
+   * Form for exposed handler options.
+   */
+  function expose_form(&$form, &$form_state) { }
+
+  /**
+   * Validate the options form.
+   */
+  function expose_validate($form, &$form_state) { }
+
+  /**
+   * Perform any necessary changes to the form exposes prior to storage.
+   * There is no need for this function to actually store the data.
+   */
+  function expose_submit($form, &$form_state) { }
+
+  /**
+   * Shortcut to display the expose/hide button.
+   */
+  function show_expose_button(&$form, &$form_state) { }
+
+  /**
+   * Shortcut to display the exposed options form.
+   */
+  function show_expose_form(&$form, &$form_state) {
+    if (empty($this->options['exposed'])) {
+      return;
+    }
+
+    $this->expose_form($form, $form_state);
+
+    // When we click the expose button, we add new gadgets to the form but they
+    // have no data in $_POST so their defaults get wiped out. This prevents
+    // these defaults from getting wiped out. This setting will only be TRUE
+    // during a 2nd pass rerender.
+    if (!empty($form_state['force_expose_options'])) {
+      foreach (element_children($form['expose']) as $id) {
+        if (isset($form['expose'][$id]['#default_value']) && !isset($form['expose'][$id]['#value'])) {
+          $form['expose'][$id]['#value'] = $form['expose'][$id]['#default_value'];
+        }
+      }
+    }
+  }
+
+  /**
+   * Check whether current user has access to this handler.
+   *
+   * @return boolean
+   */
+  function access() {
+    if (isset($this->definition['access callback']) && function_exists($this->definition['access callback'])) {
+      if (isset($this->definition['access arguments']) && is_array($this->definition['access arguments'])) {
+        return call_user_func_array($this->definition['access callback'], $this->definition['access arguments']);
+      }
+      return $this->definition['access callback']();
+    }
+
+    return TRUE;
+  }
+
+  /**
+   * Run before the view is built.
+   *
+   * This gives all the handlers some time to set up before any handler has
+   * been fully run.
+   */
+  function pre_query() { }
+
+  /**
+   * Run after the view is executed, before the result is cached.
+   *
+   * This gives all the handlers some time to modify values. This is primarily
+   * used so that handlers that pull up secondary data can put it in the
+   * $values so that the raw data can be utilized externally.
+   */
+  function post_execute(&$values) { }
+
+  /**
+   * Provides a unique placeholders for handlers.
+   */
+  function placeholder() {
+    return $this->query->placeholder($this->options['table'] . '_' . $this->options['field']);
+  }
+
+  /**
+   * Called just prior to query(), this lets a handler set up any relationship
+   * it needs.
+   */
+  function set_relationship() {
+    // Ensure this gets set to something.
+    $this->relationship = NULL;
+
+    // Don't process non-existant relationships.
+    if (empty($this->options['relationship']) || $this->options['relationship'] == 'none') {
+      return;
+    }
+
+    $relationship = $this->options['relationship'];
+
+    // Ignore missing/broken relationships.
+    if (empty($this->view->relationship[$relationship])) {
+      return;
+    }
+
+    // Check to see if the relationship has already processed. If not, then we
+    // cannot process it.
+    if (empty($this->view->relationship[$relationship]->alias)) {
+      return;
+    }
+
+    // Finally!
+    $this->relationship = $this->view->relationship[$relationship]->alias;
+  }
+
+  /**
+   * Ensure the main table for this handler is in the query. This is used
+   * a lot.
+   */
+  function ensure_my_table() {
+    if (!isset($this->table_alias)) {
+      if (!method_exists($this->query, 'ensure_table')) {
+        vpr(t('Ensure my table called but query has no ensure_table method.'));
+        return;
+      }
+      $this->table_alias = $this->query->ensure_table($this->table, $this->relationship);
+    }
+    return $this->table_alias;
+  }
+
+  /**
+   * Provide text for the administrative summary
+   */
+  function admin_summary() { }
+
+  /**
+   * Determine if the argument needs a style plugin.
+   *
+   * @return TRUE/FALSE
+   */
+  function needs_style_plugin() { return FALSE; }
+
+  /**
+   * Determine if this item is 'exposed', meaning it provides form elements
+   * to let users modify the view.
+   *
+   * @return TRUE/FALSE
+   */
+  function is_exposed() {
+    return !empty($this->options['exposed']);
+  }
+
+  /**
+   * Take input from exposed handlers and assign to this handler, if necessary.
+   */
+  function accept_exposed_input($input) { return TRUE; }
+
+  /**
+   * If set to remember exposed input in the session, store it there.
+   */
+  function store_exposed_input($input, $status) { return TRUE; }
+
+  /**
+   * Get the join object that should be used for this handler.
+   *
+   * This method isn't used a great deal, but it's very handy for easily
+   * getting the join if it is necessary to make some changes to it, such
+   * as adding an 'extra'.
+   */
+  function get_join() {
+    // get the join from this table that links back to the base table.
+    // Determine the primary table to seek
+    if (empty($this->query->relationships[$this->relationship])) {
+      $base_table = $this->query->base_table;
+    }
+    else {
+      $base_table = $this->query->relationships[$this->relationship]['base'];
+    }
+
+    $join = views_get_table_join($this->table, $base_table);
+    if ($join) {
+      return clone $join;
+    }
+  }
+
+  /**
+   * Validates the handler against the complete View.
+   *
+   * This is called when the complete View is being validated. For validating
+   * the handler options form use options_validate().
+   *
+   * @see views_handler::options_validate()
+   *
+   * @return
+   *   Empty array if the handler is valid; an array of error strings if it is not.
+   */
+  function validate() { return array(); }
+
+  /**
+   * Determine if the handler is considered 'broken', meaning it's a
+   * a placeholder used when a handler can't be found.
+   */
+  function broken() { }
+}
diff --git a/lib/Drupal/views/ViewsObject.php b/lib/Drupal/views/Plugin/views/Plugin.php
similarity index 74%
rename from lib/Drupal/views/ViewsObject.php
rename to lib/Drupal/views/Plugin/views/Plugin.php
index ab2fd5d..7d0f05b 100644
--- a/lib/Drupal/views/ViewsObject.php
+++ b/lib/Drupal/views/Plugin/views/Plugin.php
@@ -2,33 +2,57 @@
 
 /**
  * @file
- * Definition of Drupal\views\ViewsObject;
+ * Definition of Drupal\views\Plugin\views\Plugin.
  */
 
-namespace Drupal\views;
+namespace Drupal\views\Plugin\views;
+
+use Drupal\Component\Plugin\PluginBase;
+
+abstract class Plugin extends PluginBase {
 
-/**
- * Provides the basic object definitions used by plugins and handlers.
- */
-class ViewsObject {
   /**
    * Except for displays, options for the object will be held here.
+   *
+   * @var array
    */
-  var $options = array();
+  public $options = array();
 
   /**
    * The top object of a view.
    *
-   * @var view
+   * @var Drupal\views\View
+   */
+  public $view = NULL;
+
+  /**
+   * Plugins's definition
+   *
+   * @var array
+   */
+  public $definition;
+
+  /**
+   * The plugin type of this plugin, for example style or query.
    */
-  var $view = NULL;
+  public $plugin_type = NULL;
 
   /**
-   * Handler's definition
+   * An array which identifies the instance in the views plugin hierarchy.
+   *
+   * For handlers this is for example display_id, type, table, id.
    *
    * @var array
    */
-  var $definition;
+  public $localization_keys;
+
+  /**
+   * Constructs a Plugin object.
+   */
+  public function __construct(array $configuration, $plugin_id) {
+    $this->configuration = $configuration;
+    $this->plugin_id = $plugin_id;
+  }
 
   /**
    * Information about options for all kinds of purposes will be held here.
@@ -50,9 +74,8 @@ class ViewsObject {
    * @return array
    *   Returns the options of this handler/plugin.
    *
-   * @see Drupal\views\ViewsObject::export_option()
-   * @see Drupal\views\ViewsObject::export_option_always()
-   * @see Drupal\views\ViewsObject::unpack_translatable()
+   * @see Drupal\views\Plugin\views\Plugin::export_option()
+   * @see Drupal\views\Plugin\views\Plugin::unpack_translatable()
    */
   function option_definition() { return array(); }
 
@@ -119,7 +142,7 @@ class ViewsObject {
         $localization_keys = $this->localization_keys;
       }
       // but plugins don't because there isn't a common init() these days.
-      elseif (!empty($this->is_plugin)) {
+      else if (!empty($this->is_plugin)) {
         if ($this->plugin_type != 'display') {
           $localization_keys = array($this->view->current_display);
           $localization_keys[] = $this->plugin_type;
@@ -150,7 +173,7 @@ class ViewsObject {
       }
       // Don't localize strings during editing. When editing, we need to work with
       // the original data, not the translated version.
-      elseif (empty($this->view->editing) && !empty($definition[$key]['translatable']) && !empty($value) || !empty($definition['contains'][$key]['translatable']) && !empty($value)) {
+      else if (empty($this->view->editing) && !empty($definition[$key]['translatable']) && !empty($value) || !empty($definition['contains'][$key]['translatable']) && !empty($value)) {
         if (!empty($this->view) && $this->view->is_translatable()) {
           // Allow other modules to make changes to the string before it's
           // sent for translation.
@@ -172,7 +195,7 @@ class ViewsObject {
           $storage[$key] = t($value);
         }
       }
-      elseif ($all || !empty($definition[$key])) {
+      else if ($all || !empty($definition[$key])) {
         $storage[$key] = $value;
       }
     }
@@ -181,8 +204,11 @@ class ViewsObject {
   /**
    * Let the handler know what its full definition is.
    */
-  function set_definition($definition) {
+  function setDefinition($definition) {
     $this->definition = $definition;
+    if (isset($definition['id'])) {
+      $this->plugin_id = $definition['id'];
+    }
     if (isset($definition['field'])) {
       $this->real_field = $definition['field'];
     }
@@ -262,17 +288,6 @@ class ViewsObject {
   }
 
   /**
-   * Always exports the option, regardless of the default value.
-   */
-  function export_option_always($indent, $prefix, $storage, $option, $definition, $parents) {
-    // If there is no default, the option will always be exported.
-    unset($definition['default']);
-    // Unset our export method to prevent recursion.
-    unset($definition['export']);
-    return $this->export_option($indent, $prefix, $storage, $option, $definition, $parents);
-  }
-
-  /**
    * Unpacks each handler to store translatable texts.
    */
   function unpack_translatables(&$translatable, $parents = array()) {
@@ -330,7 +345,7 @@ class ViewsObject {
         if (is_array($value)) {
           $this->unpack_translatable($translatable, $options, $key, $definition, $parents, $translation_keys);
         }
-        elseif (!empty($definition[$key]['translatable']) && !empty($value)) {
+        else if (!empty($definition[$key]['translatable']) && !empty($value)) {
           // Build source data and add to the array
           $format = NULL;
           if (isset($definition['format_key']) && isset($options[$definition['format_key']])) {
@@ -344,7 +359,7 @@ class ViewsObject {
         }
       }
     }
-    elseif (!empty($definition['translatable']) && !empty($options)) {
+    else if (!empty($definition['translatable']) && !empty($options)) {
       $value = $options;
       // Build source data and add to the array
       $format = NULL;
@@ -358,4 +373,82 @@ class ViewsObject {
       );
     }
   }
+
+  /**
+   * Init will be called after construct, when the plugin is attached to a
+   * view and a display.
+   */
+
+  /**
+   * Provide a form to edit options for this plugin.
+   */
+  function options_form(&$form, &$form_state) {
+    // Some form elements belong in a fieldset for presentation, but can't
+    // be moved into one because of the form_state['values'] hierarchy. Those
+    // elements can add a #fieldset => 'fieldset_name' property, and they'll
+    // be moved to their fieldset during pre_render.
+    $form['#pre_render'][] = 'views_ui_pre_render_add_fieldset_markup';
+  }
+
+  /**
+   * Validate the options form.
+   */
+  function options_validate(&$form, &$form_state) { }
+
+  /**
+   * Handle any special handling on the validate form.
+   */
+  function options_submit(&$form, &$form_state) { }
+
+  /**
+   * Add anything to the query that we might need to.
+   */
+  function query() { }
+
+  /**
+   * Provide a full list of possible theme templates used by this style.
+   */
+  function theme_functions() {
+    return views_theme_functions($this->definition['theme'], $this->view, $this->display);
+  }
+
+  /**
+   * Provide a list of additional theme functions for the theme information page
+   */
+  function additional_theme_functions() {
+    $funcs = array();
+    if (!empty($this->definition['additional themes'])) {
+      foreach ($this->definition['additional themes'] as $theme => $type) {
+        $funcs[] = views_theme_functions($theme, $this->view, $this->display);
+      }
+    }
+    return $funcs;
+  }
+
+  /**
+   * Validate that the plugin is correct and can be saved.
+   *
+   * @return
+   *   An array of error strings to tell the user what is wrong with this
+   *   plugin.
+   */
+  function validate() { return array(); }
+
+  /**
+   * Returns the summary of the settings in the display.
+   */
+  function summary_title() {
+    return t('Settings');
+  }
+  /**
+   * Return the human readable name of the display.
+   *
+   * This appears on the ui beside each plugin and beside the settings link.
+   */
+  function plugin_title() {
+    if (isset($this->definition['short_title'])) {
+      return check_plain($this->definition['short_title']);
+    }
+    return check_plain($this->definition['title']);
+  }
 }
diff --git a/lib/Drupal/views/Plugin/views/PluginInterface.php b/lib/Drupal/views/Plugin/views/PluginInterface.php
new file mode 100644
index 0000000..5b18791
--- /dev/null
+++ b/lib/Drupal/views/Plugin/views/PluginInterface.php
@@ -0,0 +1,14 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\views\Plugin\PluginInterface.
+ */
+
+namespace Drupal\views\Plugin\views;
+
+use Drupal\Component\Plugin\PluginInspectionInterface;
+
+interface PluginInterface extends PluginInspectionInterface {
+
+}
diff --git a/plugins/views_plugin_access.inc b/lib/Drupal/views/Plugin/views/access/AccessPluginBase.php
similarity index 90%
rename from plugins/views_plugin_access.inc
rename to lib/Drupal/views/Plugin/views/access/AccessPluginBase.php
index 7f80d9b..a844deb 100644
--- a/plugins/views_plugin_access.inc
+++ b/lib/Drupal/views/Plugin/views/access/AccessPluginBase.php
@@ -2,9 +2,13 @@
 
 /**
  * @file
- * Definition of views_plugin_access.
+ * Definition of Drupal\views\Plugin\views\access\AccessPluginBase.
  */
 
+namespace Drupal\views\Plugin\views\access;
+
+use Drupal\views\Plugin\views\Plugin;
+
 /**
  * @defgroup views_access_plugins Views access plugins
  * @{
@@ -16,7 +20,7 @@
 /**
  * The base plugin to handle access control.
  */
-class views_plugin_access extends views_plugin {
+abstract class AccessPluginBase extends Plugin {
   /**
    * Initialize the plugin.
    *
diff --git a/lib/Drupal/views/Plugin/views/access/None.php b/lib/Drupal/views/Plugin/views/access/None.php
new file mode 100644
index 0000000..05d8ad1
--- /dev/null
+++ b/lib/Drupal/views/Plugin/views/access/None.php
@@ -0,0 +1,31 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\views\Plugin\views\access\None.
+ */
+
+namespace Drupal\views\Plugin\views\access;
+
+use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Annotation\Plugin;
+
+/**
+ * Access plugin that provides no access control at all.
+ *
+ * @ingroup views_access_plugins
+ */
+
+/**
+ * @Plugin(
+ *   id = "none",
+ *   title = @Translation("None"),
+ *   help = @Translation("Will be available to all users."),
+ *   help_topic = "access-none"
+ * )
+ */
+class None extends AccessPluginBase {
+  function summary_title() {
+    return t('Unrestricted');
+  }
+}
diff --git a/plugins/views_plugin_access_perm.inc b/lib/Drupal/views/Plugin/views/access/Permission.php
similarity index 77%
rename from plugins/views_plugin_access_perm.inc
rename to lib/Drupal/views/Plugin/views/access/Permission.php
index 7279d7d..96dd4b4 100644
--- a/plugins/views_plugin_access_perm.inc
+++ b/lib/Drupal/views/Plugin/views/access/Permission.php
@@ -2,15 +2,30 @@
 
 /**
  * @file
- * Definition of views_plugin_access_perm.
+ * Definition of Drupal\views\Plugin\views\access\Permission.
  */
 
+namespace Drupal\views\Plugin\views\access;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Access plugin that provides permission-based access control.
  *
  * @ingroup views_access_plugins
  */
-class views_plugin_access_perm extends views_plugin_access {
+
+/**
+ * @Plugin(
+ *   id = "perm",
+ *   title = @Translation("Permission"),
+ *   help = @Translation("Access will be granted to users with the specified permission string."),
+ *   help_topic = "access-perm",
+ *   uses_options = TRUE
+ * )
+ */
+class Permission extends AccessPluginBase {
   function access($account) {
     return views_check_perm($this->options['perm'], $account);
   }
diff --git a/plugins/views_plugin_access_role.inc b/lib/Drupal/views/Plugin/views/access/Role.php
similarity index 79%
rename from plugins/views_plugin_access_role.inc
rename to lib/Drupal/views/Plugin/views/access/Role.php
index b06812e..a21c296 100644
--- a/plugins/views_plugin_access_role.inc
+++ b/lib/Drupal/views/Plugin/views/access/Role.php
@@ -2,15 +2,30 @@
 
 /**
  * @file
- * Definition of views_plugin_access_role.
+ * Definition of Drupal\views\Plugin\views\access\Role.
  */
 
+namespace Drupal\views\Plugin\views\access;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Access plugin that provides role-based access control.
  *
  * @ingroup views_access_plugins
  */
-class views_plugin_access_role extends views_plugin_access {
+
+/**
+ * @Plugin(
+ *   id = "role",
+ *   title = @Translation("Role"),
+ *   help = @Translation("Access will be granted to users with any of the specified roles."),
+ *   help_topic = "access-role",
+ *   uses_options = TRUE
+ * )
+ */
+class Role extends AccessPluginBase {
   function access($account) {
     return views_check_roles(array_filter($this->options['role']), $account);
   }
diff --git a/handlers/views_handler_area.inc b/lib/Drupal/views/Plugin/views/area/AreaPluginBase.php
similarity index 69%
rename from handlers/views_handler_area.inc
rename to lib/Drupal/views/Plugin/views/area/AreaPluginBase.php
index 9fed11c..3d31a9d 100644
--- a/handlers/views_handler_area.inc
+++ b/lib/Drupal/views/Plugin/views/area/AreaPluginBase.php
@@ -2,9 +2,14 @@
 
 /**
  * @file
- * Views area handlers.
+ * Definition of Drupal\views\Plugin\views\area\AreaPluginBase.
  */
 
+namespace Drupal\views\Plugin\views\area;
+
+use Drupal\views\Plugin\views\Plugin;
+use Drupal\views\Plugin\views\Handler;
+
 /**
  * @defgroup views_area_handlers Views area handlers
  * @{
@@ -17,10 +22,13 @@
  *
  * @ingroup views_area_handlers
  */
-class views_handler_area extends views_handler {
+
+/**
+ */
+class AreaPluginBase extends Handler {
 
   /**
-   * Overrides views_handler::init().
+   * Overrides Handler::init().
    *
    * Make sure that no result area handlers are set to be shown when the result
    * is empty.
@@ -103,31 +111,5 @@ 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) {
-    return t('Broken/missing handler');
-  }
-
-  function ensure_my_table() { /* No table to ensure! */ }
-  function query($group_by = FALSE) { /* No query to run */ }
-  function render($empty = FALSE) { return ''; }
-  function options_form(&$form, &$form_state) {
-    $form['markup'] = array(
-      '#prefix' => '<div class="form-item description">',
-      '#value' => t('The handler for this item is broken or missing and cannot be used. If a module provided the handler and was disabled, re-enabling the module may restore it. Otherwise, you should probably delete this item.'),
-    );
-  }
-
-  /**
-   * Determine if the handler is considered 'broken'
-   */
-  function broken() { return TRUE; }
-}
-
-/**
  * @}
  */
diff --git a/lib/Drupal/views/Plugin/views/area/Broken.php b/lib/Drupal/views/Plugin/views/area/Broken.php
new file mode 100644
index 0000000..6636b03
--- /dev/null
+++ b/lib/Drupal/views/Plugin/views/area/Broken.php
@@ -0,0 +1,41 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\views\Plugin\views\area\Broken
+ */
+
+namespace Drupal\views\Plugin\views\area;
+
+use Drupal\Core\Annotation\Plugin;
+
+/**
+ * A special handler to take the place of missing or broken handlers.
+ *
+ * @ingroup views_area_handlers
+ */
+
+/**
+ * @Plugin(
+ *   id = "broken"
+ * )
+ */
+class Broken extends AreaPluginBase {
+  function ui_name($short = FALSE) {
+    return t('Broken/missing handler');
+  }
+
+  function ensure_my_table() { /* No table to ensure! */ }
+  function query($group_by = FALSE) { /* No query to run */ }
+  function render($empty = FALSE) { return ''; }
+  function options_form(&$form, &$form_state) {
+    $form['markup'] = array(
+      '#markup' => '<div class="form-item description">' . t('The handler for this item is broken or missing and cannot be used. If a module provided the handler and was disabled, re-enabling the module may restore it. Otherwise, you should probably delete this item.') . '</div>',
+    );
+  }
+
+  /**
+   * Determine if the handler is considered 'broken'
+   */
+  function broken() { return TRUE; }
+}
diff --git a/handlers/views_handler_area_result.inc b/lib/Drupal/views/Plugin/views/area/Result.php
similarity index 93%
rename from handlers/views_handler_area_result.inc
rename to lib/Drupal/views/Plugin/views/area/Result.php
index 86b1849..fe5bc24 100644
--- a/handlers/views_handler_area_result.inc
+++ b/lib/Drupal/views/Plugin/views/area/Result.php
@@ -2,15 +2,25 @@
 
 /**
  * @file
- * Definition of views_handler_area_result.
+ * Definition of Drupal\views\Plugin\views\area\result.
  */
 
+namespace Drupal\views\Plugin\views\area;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Views area handler to display some configurable result summary.
  *
  * @ingroup views_area_handlers
  */
-class views_handler_area_result extends views_handler_area {
+
+/**
+ * @Plugin(
+ *   id = "result"
+ * )
+ */
+class Result extends AreaPluginBase {
 
   function option_definition() {
     $options = parent::option_definition();
diff --git a/handlers/views_handler_area_text.inc b/lib/Drupal/views/Plugin/views/area/Text.php
similarity index 94%
rename from handlers/views_handler_area_text.inc
rename to lib/Drupal/views/Plugin/views/area/Text.php
index 84e7b34..5834b34 100644
--- a/handlers/views_handler_area_text.inc
+++ b/lib/Drupal/views/Plugin/views/area/Text.php
@@ -2,15 +2,25 @@
 
 /**
  * @file
- * Definition of views_handler_area_text.
+ * Definition of Drupal\views\Plugin\views\area\Text.
  */
 
+namespace Drupal\views\Plugin\views\area;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Views area text handler.
  *
  * @ingroup views_area_handlers
  */
-class views_handler_area_text extends views_handler_area {
+
+/**
+ * @Plugin(
+ *   id = "text"
+ * )
+ */
+class Text extends AreaPluginBase {
 
   function option_definition() {
     $options = parent::option_definition();
@@ -31,7 +41,7 @@ class views_handler_area_text extends views_handler_area {
       '#wysiwyg' => FALSE,
     );
 
-    // @TODO: Refactor token handling into a base class.
+
     $form['tokenize'] = array(
       '#type' => 'checkbox',
       '#title' => t('Use replacement tokens from the first row'),
diff --git a/handlers/views_handler_area_text_custom.inc b/lib/Drupal/views/Plugin/views/area/TextCustom.php
similarity index 81%
rename from handlers/views_handler_area_text_custom.inc
rename to lib/Drupal/views/Plugin/views/area/TextCustom.php
index 3627f0c..bb3e190 100644
--- a/handlers/views_handler_area_text_custom.inc
+++ b/lib/Drupal/views/Plugin/views/area/TextCustom.php
@@ -2,15 +2,25 @@
 
 /**
  * @file
- * Definition of views_handler_area_text_custom.
+ * Definition of Drupal\views\Plugin\views\area\TextCustom.
  */
 
+namespace Drupal\views\Plugin\views\area;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
- * Views area text custom handler.
+ * Views area text handler.
  *
  * @ingroup views_area_handlers
  */
-class views_handler_area_text_custom extends views_handler_area_text {
+
+/**
+ * @Plugin(
+ *   id = "text_custom"
+ * )
+ */
+class TextCustom extends AreaPluginBase {
 
   function option_definition() {
     $options = parent::option_definition();
@@ -25,8 +35,6 @@ class views_handler_area_text_custom extends views_handler_area_text {
     $form['content']['#type'] = 'textarea';
     unset($form['content']['#format']);
     unset($form['content']['#wysiwyg']);
-
-    // @TODO: Use the token refactored base class.
   }
 
   // Empty, so we don't inherit options_submit from the parent.
diff --git a/handlers/views_handler_area_view.inc b/lib/Drupal/views/Plugin/views/area/View.php
similarity index 92%
rename from handlers/views_handler_area_view.inc
rename to lib/Drupal/views/Plugin/views/area/View.php
index 45ea499..7432df0 100644
--- a/handlers/views_handler_area_view.inc
+++ b/lib/Drupal/views/Plugin/views/area/View.php
@@ -2,15 +2,25 @@
 
 /**
  * @file
- * Definition of views_handler_area_view.
+ * Definition of Drupal\views\Plugin\views\area\View.
  */
 
+namespace Drupal\views\Plugin\views\area;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Views area handlers. Insert a view inside of an area.
  *
  * @ingroup views_area_handlers
  */
-class views_handler_area_view extends views_handler_area {
+
+/**
+ * @Plugin(
+ *   id = "view"
+ * )
+ */
+class View extends AreaPluginBase {
 
   function option_definition() {
     $options = parent::option_definition();
diff --git a/handlers/views_handler_argument.inc b/lib/Drupal/views/Plugin/views/argument/ArgumentPluginBase.php
similarity index 95%
rename from handlers/views_handler_argument.inc
rename to lib/Drupal/views/Plugin/views/argument/ArgumentPluginBase.php
index 8c4f9de..7cdb104 100644
--- a/handlers/views_handler_argument.inc
+++ b/lib/Drupal/views/Plugin/views/argument/ArgumentPluginBase.php
@@ -2,9 +2,14 @@
 
 /**
  * @file
- * @todo.
+ * Definition of Drupal\views\Plugin\views\argument\ArgumentPluginBase.
  */
 
+namespace Drupal\views\Plugin\views\argument;
+
+use Drupal\views\Plugin\views\Plugin;
+use Drupal\views\Plugin\views\Handler;
+
 /**
  * @defgroup views_argument_handlers Views argument handlers
  * Handlers to tell Views how to contextually filter queries.
@@ -35,7 +40,11 @@
  *
  * @ingroup views_argument_handlers
  */
-class views_handler_argument extends views_handler {
+
+/**
+ */
+class ArgumentPluginBase extends Handler {
+
   var $validator = NULL;
   var $argument = NULL;
   var $value = NULL;
@@ -359,9 +368,9 @@ class views_handler_argument extends views_handler {
     );
 
     $validate_types = array('none' => t('- Basic validation -'));
-    $plugins = views_fetch_plugin_data('argument validator');
+    $plugins = views_fetch_plugin_data('argument_validator');
     foreach ($plugins as $id => $info) {
-      if (!empty($info['no ui'])) {
+      if (!empty($info['no_ui'])) {
         continue;
       }
 
@@ -381,7 +390,7 @@ class views_handler_argument extends views_handler {
 
       // If we decide this validator is ok, add it to the list.
       if ($valid) {
-        $plugin = $this->get_plugin('argument validator', $id);
+        $plugin = $this->get_plugin('argument_validator', $id);
         if ($plugin) {
           if ($plugin->access() || $this->options['validate']['type'] == $id) {
             $form['validate']['options'][$id] = array(
@@ -429,7 +438,7 @@ class views_handler_argument extends views_handler {
 
     // Let the plugins do validation.
     $default_id = $form_state['values']['options']['default_argument_type'];
-    $plugin = $this->get_plugin('argument default', $default_id);
+    $plugin = $this->get_plugin('argument_default', $default_id);
     if ($plugin) {
       $plugin->options_validate($form['argument_default'][$default_id], $form_state, $form_state['values']['options']['argument_default'][$default_id]);
     }
@@ -442,7 +451,7 @@ class views_handler_argument extends views_handler {
     }
 
     $validate_id = $form_state['values']['options']['validate']['type'];
-    $plugin = $this->get_plugin('argument validator', $validate_id);
+    $plugin = $this->get_plugin('argument_validator', $validate_id);
     if ($plugin) {
       $plugin->options_validate($form['validate']['options'][$default_id], $form_state, $form_state['values']['options']['validate']['options'][$validate_id]);
     }
@@ -456,7 +465,7 @@ class views_handler_argument extends views_handler {
 
     // Let the plugins make submit modifications if necessary.
     $default_id = $form_state['values']['options']['default_argument_type'];
-    $plugin = $this->get_plugin('argument default', $default_id);
+    $plugin = $this->get_plugin('argument_default', $default_id);
     if ($plugin) {
       $options = &$form_state['values']['options']['argument_default'][$default_id];
       $plugin->options_submit($form['argument_default'][$default_id], $form_state, $options);
@@ -475,7 +484,7 @@ class views_handler_argument extends views_handler {
     }
 
     $validate_id = $form_state['values']['options']['validate']['type'];
-    $plugin = $this->get_plugin('argument validator', $validate_id);
+    $plugin = $this->get_plugin('argument_validator', $validate_id);
     if ($plugin) {
       $options = &$form_state['values']['options']['validate']['options'][$validate_id];
       $plugin->options_submit($form['validate']['options'][$validate_id], $form_state, $options);
@@ -554,7 +563,7 @@ class views_handler_argument extends views_handler {
    * default action is set to provide default argument.
    */
   function default_argument_form(&$form, &$form_state) {
-    $plugins = views_fetch_plugin_data('argument default');
+    $plugins = views_fetch_plugin_data('argument_default');
     $options = array();
 
     $form['default_argument_skip_url'] = array(
@@ -582,10 +591,10 @@ class views_handler_argument extends views_handler {
     );
 
     foreach ($plugins as $id => $info) {
-      if (!empty($info['no ui'])) {
+      if (!empty($info['no_ui'])) {
         continue;
       }
-      $plugin = $this->get_plugin('argument default', $id);
+      $plugin = $this->get_plugin('argument_default', $id);
       if ($plugin) {
         if ($plugin->access() || $this->options['default_argument_type'] == $id) {
           $form['argument_default']['#argument_option'] = 'default';
@@ -796,7 +805,7 @@ class views_handler_argument extends views_handler {
    * Get a default argument, if available.
    */
   function get_default_argument() {
-    $plugin = $this->get_plugin('argument default');
+    $plugin = $this->get_plugin('argument_default');
     if ($plugin) {
       return $plugin->get_argument();
     }
@@ -810,7 +819,7 @@ class views_handler_argument extends views_handler {
    */
   function process_summary_arguments(&$args) {
     if ($this->options['validate']['type'] != 'none') {
-      if (isset($this->validator) || $this->validator = $this->get_plugin('argument validator')) {
+      if (isset($this->validator) || $this->validator = $this->get_plugin('argument_validator')) {
         $this->validator->process_summary_arguments($args);
       }
     }
@@ -1007,7 +1016,7 @@ class views_handler_argument extends views_handler {
       return $this->argument_validated = $this->validate_argument_basic($arg);
     }
 
-    $plugin = $this->get_plugin('argument validator');
+    $plugin = $this->get_plugin('argument_validator');
     if ($plugin) {
       return $this->argument_validated = $plugin->validate_argument($arg);
     }
@@ -1145,7 +1154,7 @@ class views_handler_argument extends views_handler {
     $name = $this->options['validate'][$option];
     $options = $this->options['validate_options'];
 
-    $plugin = views_get_plugin('argument validator', $name);
+    $plugin = views_get_plugin('argument_validator', $name);
     if ($plugin) {
       $plugin->init($this->view, $this->display, $options);
       // Write which plugin to use.
@@ -1167,7 +1176,7 @@ class views_handler_argument extends views_handler {
   function export_plugin($indent, $prefix, $storage, $option, $definition, $parents) {
     $output = '';
     if ($option == 'default_argument_type') {
-      $type = 'argument default';
+      $type = 'argument_default';
       $option_name = 'default_argument_options';
     }
 
@@ -1188,14 +1197,14 @@ class views_handler_argument extends views_handler {
   /**
    * Get the display or row plugin, if it exists.
    */
-  function get_plugin($type = 'argument default', $name = NULL) {
+  function get_plugin($type = 'argument_default', $name = NULL) {
     $options = array();
     switch ($type) {
-      case 'argument default':
+      case 'argument_default':
         $plugin_name = $this->options['default_argument_type'];
         $options_name = 'default_argument_options';
         break;
-      case 'argument validator':
+      case 'argument_validator':
         $plugin_name = $this->options['validate']['type'];
         $options_name = 'validate_options';
         break;
@@ -1236,30 +1245,7 @@ class views_handler_argument extends views_handler {
   function get_sort_name() {
     return t('Default sort', array(), array('context' => 'Sort order'));
   }
-}
 
-/**
- * A special handler to take the place of missing or broken handlers.
- *
- * @ingroup views_argument_handlers
- */
-class views_handler_argument_broken extends views_handler_argument {
-  function ui_name($short = FALSE) {
-    return t('Broken/missing handler');
-  }
-
-  function ensure_my_table() { /* No table to ensure! */ }
-  function query($group_by = FALSE) { /* No query to run */ }
-  function options_form(&$form, &$form_state) {
-    $form['markup'] = array(
-      '#markup' => '<div class="form-item description">' . t('The handler for this item is broken or missing and cannot be used. If a module provided the handler and was disabled, re-enabling the module may restore it. Otherwise, you should probably delete this item.') . '</div>',
-    );
-  }
-
-  /**
-   * Determine if the handler is considered 'broken'
-   */
-  function broken() { return TRUE; }
 }
 
 /**
diff --git a/lib/Drupal/views/Plugin/views/argument/Broken.php b/lib/Drupal/views/Plugin/views/argument/Broken.php
new file mode 100644
index 0000000..7ffc834
--- /dev/null
+++ b/lib/Drupal/views/Plugin/views/argument/Broken.php
@@ -0,0 +1,40 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\views\Plugin\views\argument\Broken
+ */
+
+namespace Drupal\views\Plugin\views\argument;
+
+use Drupal\Core\Annotation\Plugin;
+
+/**
+ * A special handler to take the place of missing or broken handlers.
+ *
+ * @ingroup views_argument_handlers
+ */
+
+/**
+ * @Plugin(
+ *   id = "broken"
+ * )
+ */
+class Broken extends ArgumentPluginBase {
+  function ui_name($short = FALSE) {
+    return t('Broken/missing handler');
+  }
+
+  function ensure_my_table() { /* No table to ensure! */ }
+  function query($group_by = FALSE) { /* No query to run */ }
+  function options_form(&$form, &$form_state) {
+    $form['markup'] = array(
+      '#markup' => '<div class="form-item description">' . t('The handler for this item is broken or missing and cannot be used. If a module provided the handler and was disabled, re-enabling the module may restore it. Otherwise, you should probably delete this item.') . '</div>',
+    );
+  }
+
+  /**
+   * Determine if the handler is considered 'broken'
+   */
+  function broken() { return TRUE; }
+}
diff --git a/handlers/views_handler_argument_date.inc b/lib/Drupal/views/Plugin/views/argument/Date.php
similarity index 92%
rename from handlers/views_handler_argument_date.inc
rename to lib/Drupal/views/Plugin/views/argument/Date.php
index ee92de9..11185a9 100644
--- a/handlers/views_handler_argument_date.inc
+++ b/lib/Drupal/views/Plugin/views/argument/Date.php
@@ -2,9 +2,13 @@
 
 /**
  * @file
- * Definition of views_handler_argument_date.
+ * Definition of Drupal\views\Plugin\views\argument\Date.
  */
 
+namespace Drupal\views\Plugin\views\argument;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Abstract argument handler for dates.
  *
@@ -19,11 +23,18 @@
  * - invalid input: A string to give to the user for obviously invalid input.
  *                  This is deprecated in favor of argument validators.
  *
- * @see views_many_to_one_helper()
+ * @see Drupal\views\ManyTonOneHelper
  *
  * @ingroup views_argument_handlers
  */
-class views_handler_argument_date extends views_handler_argument_formula {
+
+/**
+ * @Plugin(
+ *   id = "date"
+ * )
+ */
+class Date extends Formula {
+
   var $option_name = 'default_argument_date';
   var $arg_format = 'Y-m-d';
 
@@ -98,4 +109,5 @@ class views_handler_argument_date extends views_handler_argument_formula {
   function get_sort_name() {
     return t('Date', array(), array('context' => 'Sort order'));
   }
+
 }
diff --git a/handlers/views_handler_argument_formula.inc b/lib/Drupal/views/Plugin/views/argument/Formula.php
similarity index 86%
rename from handlers/views_handler_argument_formula.inc
rename to lib/Drupal/views/Plugin/views/argument/Formula.php
index 76f5991..9f47b8c 100644
--- a/handlers/views_handler_argument_formula.inc
+++ b/lib/Drupal/views/Plugin/views/argument/Formula.php
@@ -2,9 +2,13 @@
 
 /**
  * @file
- * Definition of views_handler_argument_formula.
+ * Definition of Drupal\views\Plugin\views\argument\Formula.
  */
 
+namespace Drupal\views\Plugin\views\argument;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Abstract argument handler for simple formulae.
  *
@@ -15,7 +19,13 @@
  *
  * @ingroup views_argument_handlers
  */
-class views_handler_argument_formula extends views_handler_argument {
+
+/**
+ * @Plugin(
+ *   id = "formula"
+ * )
+ */
+class Formula extends ArgumentPluginBase {
   var $formula = NULL;
   /**
    * Constructor
diff --git a/handlers/views_handler_argument_group_by_numeric.inc b/lib/Drupal/views/Plugin/views/argument/GroupByNumeric.php
similarity index 69%
rename from handlers/views_handler_argument_group_by_numeric.inc
rename to lib/Drupal/views/Plugin/views/argument/GroupByNumeric.php
index aa522ea..61c8b91 100644
--- a/handlers/views_handler_argument_group_by_numeric.inc
+++ b/lib/Drupal/views/Plugin/views/argument/GroupByNumeric.php
@@ -2,15 +2,25 @@
 
 /**
  * @file
- * Definition of views_handler_argument_group_by_numeric.
+ * Definition of Drupal\views\Plugin\views\argument\GroupByNumeric.
  */
 
+namespace Drupal\views\Plugin\views\argument;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Simple handler for arguments using group by.
  *
  * @ingroup views_argument_handlers
  */
-class views_handler_argument_group_by_numeric extends views_handler_argument  {
+
+/**
+ * @Plugin(
+ *   id = "groupby_numeric"
+ * )
+ */
+class GroupByNumeric extends ArgumentPluginBase  {
   function query($group_by = FALSE) {
     $this->ensure_my_table();
     $field = $this->get_field();
diff --git a/handlers/views_handler_argument_many_to_one.inc b/lib/Drupal/views/Plugin/views/argument/ManyToOne.php
similarity index 93%
rename from handlers/views_handler_argument_many_to_one.inc
rename to lib/Drupal/views/Plugin/views/argument/ManyToOne.php
index 3446760..cda7cbd 100644
--- a/handlers/views_handler_argument_many_to_one.inc
+++ b/lib/Drupal/views/Plugin/views/argument/ManyToOne.php
@@ -2,9 +2,14 @@
 
 /**
  * @file
- * Definition of views_handler_argument_many_to_one.
+ * Definition of Drupal\views\Plugin\views\argument\ManyToOne.
  */
 
+namespace Drupal\views\Plugin\views\argument;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\ManyToOneHelper;
+
 /**
  * An argument handler for use in fields that have a many to one relationship
  * with the table(s) to the left. This adds a bunch of options that are
@@ -18,10 +23,16 @@
  *
  * @ingroup views_argument_handlers
  */
-class views_handler_argument_many_to_one extends views_handler_argument {
+
+/**
+ * @Plugin(
+ *   id = "many_to_one"
+ * )
+ */
+class ManyToOne extends ArgumentPluginBase {
   function init(&$view, &$options) {
     parent::init($view, $options);
-    $this->helper = new views_many_to_one_helper($this);
+    $this->helper = new ManyToOneHelper($this);
 
     // Ensure defaults for these, during summaries and stuff:
     $this->operator = 'or';
@@ -42,7 +53,7 @@ class views_handler_argument_many_to_one extends views_handler_argument {
       $this->helper->option_definition($options);
     }
     else {
-      $helper = new views_many_to_one_helper($this);
+      $helper = new ManyToOneHelper($this);
       $helper->option_definition($options);
     }
 
diff --git a/handlers/views_handler_argument_null.inc b/lib/Drupal/views/Plugin/views/argument/Null.php
similarity index 88%
rename from handlers/views_handler_argument_null.inc
rename to lib/Drupal/views/Plugin/views/argument/Null.php
index 5b42728..e8449b2 100644
--- a/handlers/views_handler_argument_null.inc
+++ b/lib/Drupal/views/Plugin/views/argument/Null.php
@@ -2,15 +2,25 @@
 
 /**
  * @file
- * Definition of views_handler_argument_null.
+ * Definition of Drupal\views\Plugin\views\argument\Null.
  */
 
+namespace Drupal\views\Plugin\views\argument;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Argument handler that ignores the argument.
  *
  * @ingroup views_argument_handlers
  */
-class views_handler_argument_null extends views_handler_argument {
+
+/**
+ * @Plugin(
+ *   id = "null"
+ * )
+ */
+class Null extends ArgumentPluginBase {
   function option_definition() {
     $options = parent::option_definition();
     $options['must_not_be'] = array('default' => FALSE, 'bool' => TRUE);
diff --git a/handlers/views_handler_argument_numeric.inc b/lib/Drupal/views/Plugin/views/argument/Numeric.php
similarity index 93%
rename from handlers/views_handler_argument_numeric.inc
rename to lib/Drupal/views/Plugin/views/argument/Numeric.php
index 8f36b21..2444cfd 100644
--- a/handlers/views_handler_argument_numeric.inc
+++ b/lib/Drupal/views/Plugin/views/argument/Numeric.php
@@ -2,16 +2,26 @@
 
 /**
  * @file
- * Definition of views_handler_argument_numeric.
+ * Definition of Drupal\views\Plugin\views\argument\Numeric.
  */
 
+namespace Drupal\views\Plugin\views\argument;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Basic argument handler for arguments that are numeric. Incorporates
  * break_phrase.
  *
  * @ingroup views_argument_handlers
  */
-class views_handler_argument_numeric extends views_handler_argument {
+
+/**
+ * @Plugin(
+ *   id = "numeric"
+ * )
+ */
+class Numeric extends ArgumentPluginBase {
   /**
    * The operator used for the query: or|and.
    * @var string
diff --git a/handlers/views_handler_argument_string.inc b/lib/Drupal/views/Plugin/views/argument/String.php
similarity index 96%
rename from handlers/views_handler_argument_string.inc
rename to lib/Drupal/views/Plugin/views/argument/String.php
index fbe5469..69bc15c 100644
--- a/handlers/views_handler_argument_string.inc
+++ b/lib/Drupal/views/Plugin/views/argument/String.php
@@ -2,20 +2,31 @@
 
 /**
  * @file
- * Definition of views_handler_argument_string.
+ * Definition of Drupal\views\Plugin\views\argument\String.
  */
 
+namespace Drupal\views\Plugin\views\argument;
+
+use Drupal\views\ManyToOneHelper;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Basic argument handler to implement string arguments that may have length
  * limits.
  *
  * @ingroup views_argument_handlers
  */
-class views_handler_argument_string extends views_handler_argument {
+
+/**
+ * @Plugin(
+ *   id = "string"
+ * )
+ */
+class String extends ArgumentPluginBase {
   function init(&$view, &$options) {
     parent::init($view, $options);
     if (!empty($this->definition['many to one'])) {
-      $this->helper = new views_many_to_one_helper($this);
+      $this->helper = new ManyToOneHelper($this);
 
       // Ensure defaults for these, during summaries and stuff:
       $this->operator = 'or';
diff --git a/plugins/views_plugin_argument_default.inc b/lib/Drupal/views/Plugin/views/argument_default/ArgumentDefaultPluginBase.php
similarity index 91%
rename from plugins/views_plugin_argument_default.inc
rename to lib/Drupal/views/Plugin/views/argument_default/ArgumentDefaultPluginBase.php
index 2b87730..a07e6ce 100644
--- a/plugins/views_plugin_argument_default.inc
+++ b/lib/Drupal/views/Plugin/views/argument_default/ArgumentDefaultPluginBase.php
@@ -2,9 +2,13 @@
 
 /**
  * @file
- * Definition of views_plugin_argument_default.
+ * Definition of Drupal\views\Plugin\views\argument_default\ArgumentDefaultPluginBase.
  */
 
+namespace Drupal\views\Plugin\views\argument_default;
+
+use Drupal\views\Plugin\views\Plugin;
+
 /**
  * @defgroup views_argument_default_plugins Views argument default plugins
  * @{
@@ -16,7 +20,7 @@
 /**
  * The fixed argument default handler; also used as the base.
  */
-class views_plugin_argument_default extends views_plugin {
+abstract class ArgumentDefaultPluginBase extends Plugin {
   /**
    * Return the default argument.
    *
diff --git a/plugins/views_plugin_argument_default_fixed.inc b/lib/Drupal/views/Plugin/views/argument_default/Fixed.php
similarity index 73%
rename from plugins/views_plugin_argument_default_fixed.inc
rename to lib/Drupal/views/Plugin/views/argument_default/Fixed.php
index 38ede34..b9979d9 100644
--- a/plugins/views_plugin_argument_default_fixed.inc
+++ b/lib/Drupal/views/Plugin/views/argument_default/Fixed.php
@@ -2,15 +2,27 @@
 
 /**
  * @file
- * Contains the fixed argument default plugin.
+ * Definition of Drupal\views\Plugin\views\argument_default\Fixed.
  */
 
+namespace Drupal\views\Plugin\views\argument_default;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * The fixed argument default handler.
  *
  * @ingroup views_argument_default_plugins
  */
-class views_plugin_argument_default_fixed extends views_plugin_argument_default {
+
+/**
+ * @Plugin(
+ *   id = "fixed",
+ *   title = @Translation("Fixed")
+ * )
+ */
+class Fixed extends ArgumentDefaultPluginBase {
   function option_definition() {
     $options = parent::option_definition();
     $options['argument'] = array('default' => '');
diff --git a/plugins/views_plugin_argument_default_php.inc b/lib/Drupal/views/Plugin/views/argument_default/Php.php
similarity index 84%
rename from plugins/views_plugin_argument_default_php.inc
rename to lib/Drupal/views/Plugin/views/argument_default/Php.php
index c2fb14f..da988db 100644
--- a/plugins/views_plugin_argument_default_php.inc
+++ b/lib/Drupal/views/Plugin/views/argument_default/Php.php
@@ -2,15 +2,27 @@
 
 /**
  * @file
- * Contains the php code argument default plugin.
+ * Definition of Drupal\views\Plugin\views\argument_default\Php.
  */
 
+namespace Drupal\views\Plugin\views\argument_default;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Default argument plugin to provide a PHP code block.
  *
  * @ingroup views_argument_default_plugins
  */
-class views_plugin_argument_default_php extends views_plugin_argument_default {
+
+/**
+ * @Plugin(
+ *   id = "php",
+ *   title = @Translation("PHP Code")
+ * )
+ */
+class Php extends ArgumentDefaultPluginBase {
   function option_definition() {
     $options = parent::option_definition();
     $options['code'] = array('default' => '');
diff --git a/plugins/views_plugin_argument_default_raw.inc b/lib/Drupal/views/Plugin/views/argument_default/Raw.php
similarity index 80%
rename from plugins/views_plugin_argument_default_raw.inc
rename to lib/Drupal/views/Plugin/views/argument_default/Raw.php
index 385ca91..209ed34 100644
--- a/plugins/views_plugin_argument_default_raw.inc
+++ b/lib/Drupal/views/Plugin/views/argument_default/Raw.php
@@ -2,15 +2,27 @@
 
 /**
  * @file
- * Contains the raw value argument default plugin.
+ * Definition of Drupal\views\Plugin\views\argument_default\Raw.
  */
 
+namespace Drupal\views\Plugin\views\argument_default;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Default argument plugin to use the raw value from the URL.
  *
  * @ingroup views_argument_default_plugins
  */
-class views_plugin_argument_default_raw extends views_plugin_argument_default {
+
+/**
+ * @Plugin(
+ *   id = "raw",
+ *   title = @Translation("Raw value from URL")
+ * )
+ */
+class Raw extends ArgumentDefaultPluginBase {
   function option_definition() {
     $options = parent::option_definition();
     $options['index'] = array('default' => '');
diff --git a/plugins/views_plugin_argument_validate.inc b/lib/Drupal/views/Plugin/views/argument_validator/ArgumentValidatorPluginBase.php
similarity index 91%
rename from plugins/views_plugin_argument_validate.inc
rename to lib/Drupal/views/Plugin/views/argument_validator/ArgumentValidatorPluginBase.php
index 07b49ee..705d621 100644
--- a/plugins/views_plugin_argument_validate.inc
+++ b/lib/Drupal/views/Plugin/views/argument_validator/ArgumentValidatorPluginBase.php
@@ -2,9 +2,13 @@
 
 /**
  * @file
- * Contains the base argument validator plugin.
+ * Definition of Drupal\views\Plugin\views\argument_validator\ArgumentValidatorPluginBase.
  */
 
+namespace Drupal\views\Plugin\views\argument_validator;
+
+use Drupal\views\Plugin\views\Plugin;
+
 /**
  * @defgroup views_argument_validate_plugins Views argument validate plugins
  * @{
@@ -16,7 +20,7 @@
 /**
  * Base argument validator plugin to provide basic functionality.
  */
-class views_plugin_argument_validate extends views_plugin {
+abstract class ArgumentValidatorPluginBase extends Plugin {
 
   /**
    * Initialize this plugin with the view and the argument
diff --git a/lib/Drupal/views/Plugin/views/argument_validator/Numeric.php b/lib/Drupal/views/Plugin/views/argument_validator/Numeric.php
new file mode 100644
index 0000000..c5c7cd7
--- /dev/null
+++ b/lib/Drupal/views/Plugin/views/argument_validator/Numeric.php
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\views\Plugin\views\argument_validator\Numeric.
+ */
+
+namespace Drupal\views\Plugin\views\argument_validator;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
+/**
+ * Validate whether an argument is numeric or not.
+ *
+ * @ingroup views_argument_validate_plugins
+ */
+
+/**
+ * @Plugin(
+ *   id = "numeric",
+ *   title = @Translation("Numeric")
+ * )
+ */
+class Numeric extends ArgumentValidatorPluginBase {
+  function validate_argument($argument) {
+    return is_numeric($argument);
+  }
+}
diff --git a/plugins/views_plugin_argument_validate_php.inc b/lib/Drupal/views/Plugin/views/argument_validator/Php.php
similarity index 84%
rename from plugins/views_plugin_argument_validate_php.inc
rename to lib/Drupal/views/Plugin/views/argument_validator/Php.php
index 83b22b4..7586f7c 100644
--- a/plugins/views_plugin_argument_validate_php.inc
+++ b/lib/Drupal/views/Plugin/views/argument_validator/Php.php
@@ -2,15 +2,27 @@
 
 /**
  * @file
- * Contains the php code argument validator plugin.
+ * Definition of Drupal\views\Plugin\views\argument_validator\Php.
  */
 
+namespace Drupal\views\Plugin\views\argument_validator;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Provide PHP code to validate whether or not an argument is ok.
  *
  * @ingroup views_argument_validate_plugins
  */
-class views_plugin_argument_validate_php extends views_plugin_argument_validate {
+
+/**
+ * @Plugin(
+ *   id = "php",
+ *   title = @Translation("PHP Code")
+ * )
+ */
+class Php extends ArgumentValidatorPluginBase {
   function option_definition() {
     $options = parent::option_definition();
     $options['code'] = array('default' => '');
diff --git a/plugins/views_plugin_cache.inc b/lib/Drupal/views/Plugin/views/cache/CachePluginBase.php
similarity index 96%
rename from plugins/views_plugin_cache.inc
rename to lib/Drupal/views/Plugin/views/cache/CachePluginBase.php
index b176d80..85d5d52 100644
--- a/plugins/views_plugin_cache.inc
+++ b/lib/Drupal/views/Plugin/views/cache/CachePluginBase.php
@@ -2,9 +2,14 @@
 
 /**
  * @file
- * Definition of views_plugin_cache.
+ * Definition of Drupal\views\Plugin\views\cache\CachePluginBase.
  */
 
+namespace Drupal\views\Plugin\views\cache;
+
+use Drupal\views\Plugin\views\Plugin;
+use Drupal\Core\Database\Query\Select;
+
 /**
  * @defgroup views_cache_plugins Views cache plugins
  * @{
@@ -16,7 +21,7 @@
 /**
  * The base plugin to handle caching.
  */
-class views_plugin_cache extends views_plugin {
+abstract class CachePluginBase extends Plugin {
   /**
    * Contains all data that should be written/read from cache.
    */
@@ -25,7 +30,7 @@ class views_plugin_cache extends views_plugin {
   /**
    * What table to store data in.
    */
-  var $table = 'cache_views_data';
+  var $table = 'views_data';
 
   /**
    * Stores the cache id used for the results cache, once get_results_key() got
@@ -273,7 +278,7 @@ class views_plugin_cache extends views_plugin {
       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 Drupal\Core\Database\Query\Select) {
+        if ($build_info[$index] instanceof Select) {
           $query = clone $build_info[$index];
           $query->preExecute();
           $build_info[$index] = (string)$query;
diff --git a/lib/Drupal/views/Plugin/views/cache/None.php b/lib/Drupal/views/Plugin/views/cache/None.php
new file mode 100644
index 0000000..f78f77d
--- /dev/null
+++ b/lib/Drupal/views/Plugin/views/cache/None.php
@@ -0,0 +1,39 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\views\Plugin\views\cache\None.
+ */
+
+namespace Drupal\views\Plugin\views\cache;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
+/**
+ * Caching plugin that provides no caching at all.
+ *
+ * @ingroup views_cache_plugins
+ */
+
+/**
+ * @Plugin(
+ *   id = "none",
+ *   title = @Translation("None"),
+ *   help = @Translation("No caching of Views data."),
+ *   help_topic = "cache-none"
+ * )
+ */
+class None extends CachePluginBase {
+  function cache_start() { /* do nothing */ }
+
+  function summary_title() {
+    return t('None');
+  }
+
+  function cache_get($type) {
+    return FALSE;
+  }
+
+  function cache_set($type) { }
+}
diff --git a/plugins/views_plugin_cache_time.inc b/lib/Drupal/views/Plugin/views/cache/Time.php
similarity index 89%
rename from plugins/views_plugin_cache_time.inc
rename to lib/Drupal/views/Plugin/views/cache/Time.php
index 3bce56e..471eaae 100644
--- a/plugins/views_plugin_cache_time.inc
+++ b/lib/Drupal/views/Plugin/views/cache/Time.php
@@ -2,15 +2,30 @@
 
 /**
  * @file
- * Definition of views_plugin_cache_time.
+ * Definition of Drupal\views\Plugin\views\cache\Time.
  */
 
+namespace Drupal\views\Plugin\views\cache;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Simple caching of query results for Views displays.
  *
  * @ingroup views_cache_plugins
  */
-class views_plugin_cache_time extends views_plugin_cache {
+
+/**
+ * @Plugin(
+ *   id = "time",
+ *   title = @Translation("Time-based"),
+ *   help = @Translation("Simple time-based caching of data."),
+ *   help_topic = "cache-time",
+ *   uses_options = TRUE
+ * )
+ */
+class Time extends CachePluginBase {
   function option_definition() {
     $options = parent::option_definition();
     $options['results_lifespan'] = array('default' => 3600);
diff --git a/plugins/views_plugin_display_attachment.inc b/lib/Drupal/views/Plugin/views/display/Attachment.php
similarity index 93%
rename from plugins/views_plugin_display_attachment.inc
rename to lib/Drupal/views/Plugin/views/display/Attachment.php
index e350a24..2e52a5d 100644
--- a/plugins/views_plugin_display_attachment.inc
+++ b/lib/Drupal/views/Plugin/views/display/Attachment.php
@@ -2,9 +2,14 @@
 
 /**
  * @file
- * Contains the attachment display plugin.
+ * Definition of Drupal\views\Plugin\views\display\Attachment.
  */
 
+namespace Drupal\views\Plugin\views\display;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * The plugin that handles an attachment display.
  *
@@ -14,7 +19,22 @@
  *
  * @ingroup views_display_plugins
  */
-class views_plugin_display_attachment extends views_plugin_display {
+
+/**
+ * @Plugin(
+ *   id = "attachment",
+ *   title = @Translation("Attachment"),
+ *   help = @Translation("Attachments added to other displays to achieve multiple views in the same view."),
+ *   theme = "views_view",
+ *   contextual_links_locations = {""},
+ *   use_ajax = TRUE,
+ *   use_pager = FALSE,
+ *   use_more = TRUE,
+ *   accept_attachments = FALSE,
+ *   help_topic = "display-attachment"
+ * )
+ */
+class Attachment extends DisplayPluginBase {
   function option_definition() {
     $options = parent::option_definition();
 
diff --git a/plugins/views_plugin_display_block.inc b/lib/Drupal/views/Plugin/views/display/Block.php
similarity index 92%
rename from plugins/views_plugin_display_block.inc
rename to lib/Drupal/views/Plugin/views/display/Block.php
index c029dd3..70d1ce2 100644
--- a/plugins/views_plugin_display_block.inc
+++ b/lib/Drupal/views/Plugin/views/display/Block.php
@@ -2,15 +2,37 @@
 
 /**
  * @file
- * Contains the block display plugin.
+ * Definition of Drupal\views\Plugin\views\display\Block.
  */
 
+namespace Drupal\views\Plugin\views\display;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * The plugin that handles a block.
  *
  * @ingroup views_display_plugins
  */
-class views_plugin_display_block extends views_plugin_display {
+
+/**
+ * @Plugin(
+ *   id = "block",
+ *   title = @Translation("Block"),
+ *   help = @Translation("Display the view as a block."),
+ *   theme = "views_view",
+ *   uses_hook_block = TRUE,
+ *   contextual_links_locations = {"block"},
+ *   use_ajax = TRUE,
+ *   use_pager = TRUE,
+ *   use_more = TRUE,
+ *   accept_attachments = TRUE,
+ *   admin = @Translation("Block"),
+ *   help_topic = "display-block"
+ * )
+ */
+class Block extends DisplayPluginBase {
   function option_definition() {
     $options = parent::option_definition();
 
diff --git a/plugins/views_plugin_display_default.inc b/lib/Drupal/views/Plugin/views/display/DefaultDisplay.php
similarity index 72%
rename from plugins/views_plugin_display_default.inc
rename to lib/Drupal/views/Plugin/views/display/DefaultDisplay.php
index 4b1fc08..db01b41 100644
--- a/plugins/views_plugin_display_default.inc
+++ b/lib/Drupal/views/Plugin/views/display/DefaultDisplay.php
@@ -2,15 +2,36 @@
 
 /**
  * @file
- * Contains the default display plugin.
+ * Definition of Drupal\views\Plugin\views\display\DefaultDisplay.
  */
 
+namespace Drupal\views\Plugin\views\display;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * A plugin to handle defaults on a view.
  *
  * @ingroup views_display_plugins
  */
-class views_plugin_display_default extends views_plugin_display {
+
+/**
+ * @Plugin(
+ *   id = "default",
+ *   title = @Translation("Master"),
+ *   help = @Translation("Default settings for this view."),
+ *   theme = "views_view",
+ *   no_ui = TRUE,
+ *   no_remove = TRUE,
+ *   use_ajax = TRUE,
+ *   use_pager = TRUE,
+ *   use_more = TRUE,
+ *   accept_attachments = TRUE,
+ *   help_topic = "display-default"
+ * )
+ */
+class DefaultDisplay extends DisplayPluginBase {
   /**
    * Determine if this display is the 'default' display which contains
    * fallback settings
diff --git a/plugins/views_plugin_display.inc b/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php
similarity index 97%
rename from plugins/views_plugin_display.inc
rename to lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php
index d7746e0..6cac47d 100644
--- a/plugins/views_plugin_display.inc
+++ b/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php
@@ -2,10 +2,14 @@
 
 /**
  * @file
- * Contains the base display plugin.
+ * Definition of Drupal\views\Plugin\views\display\DisplayPluginBase.
  */
 
+namespace Drupal\views\Plugin\views\display;
+
 use Drupal\views\View;
+use Drupal\views\Plugin\views\Plugin;
+use Drupal\views\Plugin\Type\ViewsPluginManager;
 
 /**
  * @defgroup views_display_plugins Views display plugins
@@ -24,7 +28,7 @@ use Drupal\views\View;
  * The default display plugin handler. Display plugins handle options and
  * basic mechanisms for different output methods.
  */
-class views_plugin_display extends views_plugin {
+abstract class DisplayPluginBase extends Plugin {
   /**
    * The top object of a view.
    *
@@ -54,8 +58,7 @@ class views_plugin_display extends views_plugin {
     // Load extenders as soon as possible.
     $this->extender = array();
     $extenders = views_get_enabled_display_extenders();
-    // If you update to the dev version the registry might not be loaded yet.
-    if (!empty($extenders) && class_exists('views_plugin_display_extender')) {
+    if (!empty($extenders)) {
       foreach ($extenders as $extender) {
         $plugin = views_get_plugin('display_extender', $extender);
         if ($plugin) {
@@ -80,6 +83,7 @@ class views_plugin_display extends views_plugin {
       unset($options['defaults']);
     }
 
+    views_include('cache');
     // Cache for unpack_options, but not if we are in the ui.
     static $unpack_options = array();
     if (empty($view->editing)) {
@@ -332,7 +336,7 @@ class views_plugin_display extends views_plugin {
    * Does the display use AJAX?
    */
   function use_ajax() {
-    if (!empty($this->definition['use ajax'])) {
+    if (!empty($this->definition['use_ajax'])) {
       return $this->get_option('use_ajax');
     }
     return FALSE;
@@ -352,7 +356,7 @@ class views_plugin_display extends views_plugin {
    * Does the display have a more link enabled?
    */
   function use_more() {
-    if (!empty($this->definition['use more'])) {
+    if (!empty($this->definition['use_more'])) {
       return $this->get_option('use_more');
     }
     return FALSE;
@@ -369,7 +373,7 @@ class views_plugin_display extends views_plugin {
    * Should the enabled display more link be shown when no more items?
    */
   function use_more_always() {
-    if (!empty($this->definition['use more'])) {
+    if (!empty($this->definition['use_more'])) {
       return $this->get_option('use_more_always');
     }
     return FALSE;
@@ -379,17 +383,17 @@ class views_plugin_display extends views_plugin {
    * Does the display have custom link text?
    */
   function use_more_text() {
-    if (!empty($this->definition['use more'])) {
+    if (!empty($this->definition['use_more'])) {
       return $this->get_option('use_more_text');
     }
     return FALSE;
   }
 
   /**
-   * Can this display accept attachments?
+   * Can this display accept_attachments?
    */
   function accept_attachments() {
-    if (empty($this->definition['accept attachments'])) {
+    if (empty($this->definition['accept_attachments'])) {
       return FALSE;
     }
     if (!empty($this->view->argument) && $this->get_option('hide_attachment_summary')) {
@@ -454,7 +458,7 @@ class views_plugin_display extends views_plugin {
     );
 
     // If the display cannot use a pager, then we cannot default it.
-    if (empty($this->definition['use pager'])) {
+    if (empty($this->definition['use_pager'])) {
       unset($sections['pager']);
       unset($sections['items_per_page']);
     }
@@ -709,7 +713,7 @@ class views_plugin_display extends views_plugin {
       ),
     );
 
-    if (empty($this->definition['use pager'])) {
+    if (empty($this->definition['use_pager'])) {
       $options['defaults']['default']['use_pager'] = FALSE;
       $options['defaults']['default']['items_per_page'] = FALSE;
       $options['defaults']['default']['offset'] = FALSE;
@@ -877,10 +881,21 @@ class views_plugin_display extends views_plugin {
           // access & cache store their options as siblings with the
           // type; all others use an 'options' array.
           if ($type != 'access' && $type != 'cache') {
+            if (!isset($options['options'])) {
+//              debug($type);
+//              debug($options);
+            }
             $options = $options['options'];
           }
       }
-      $plugin = views_get_plugin($type, $name);
+
+      if ($type != 'query') {
+        $plugin = views_get_plugin($type, $name);
+      }
+      else {
+        $plugin_type = new ViewsPluginManager('query');
+        $plugin = $plugin_type->createInstance($name);
+      }
 
       if (!$plugin) {
         return;
@@ -1176,7 +1191,8 @@ class views_plugin_display extends views_plugin {
       'desc' => t('Change the title that this display will use.'),
     );
 
-    $style_plugin = views_fetch_plugin_data('style', $this->get_option('style_plugin'));
+    $manager = new ViewsPluginManager('style');
+    $style_plugin = $manager->getDefinition($this->get_option('style_plugin'));
     $style_plugin_instance = $this->get_plugin('style');
     $style_summary = empty($style_plugin['title']) ? t('Missing style plugin') : $style_plugin_instance->summary_title();
     $style_title = empty($style_plugin['title']) ? t('Missing style plugin') : $style_plugin_instance->plugin_title();
@@ -1192,12 +1208,13 @@ class views_plugin_display extends views_plugin {
     );
 
     // This adds a 'Settings' link to the style_options setting if the style has options.
-    if (!empty($style_plugin['uses options'])) {
+    if (!empty($style_plugin['uses_options'])) {
       $options['style_plugin']['links']['style_options'] = t('Change settings for this format');
     }
 
-    if (!empty($style_plugin['uses row plugin'])) {
-      $row_plugin = views_fetch_plugin_data('row', $this->get_option('row_plugin'));
+    if (!empty($style_plugin['uses_row_plugin'])) {
+      $manager = new ViewsPluginManager('row');
+      $row_plugin = $manager->getDefinition($this->get_option('row_plugin'));
       $row_plugin_instance = $this->get_plugin('row');
       $row_summary = empty($row_plugin['title']) ? t('Missing style plugin') : $row_plugin_instance->summary_title();
       $row_title = empty($row_plugin['title']) ? t('Missing style plugin') : $row_plugin_instance->plugin_title();
@@ -1210,11 +1227,11 @@ class views_plugin_display extends views_plugin {
         'desc' => t('Change the way each row in the view is styled.'),
       );
       // This adds a 'Settings' link to the row_options setting if the row style has options.
-      if (!empty($row_plugin['uses options'])) {
+      if (!empty($row_plugin['uses_options'])) {
         $options['row_plugin']['links']['row_options'] = t('Change settings for this style');
       }
     }
-    if (!empty($this->definition['use ajax'])) {
+    if (!empty($this->definition['use_ajax'])) {
       $options['use_ajax'] = array(
         'category' => 'other',
         'title' => t('Use AJAX'),
@@ -1222,7 +1239,7 @@ class views_plugin_display extends views_plugin {
         'desc' => t('Change whether or not this display will use AJAX.'),
       );
     }
-    if (!empty($this->definition['accept attachments'])) {
+    if (!empty($this->definition['accept_attachments'])) {
       $options['hide_attachment_summary'] = array(
         'category' => 'other',
         'title' => t('Hide attachments in summary'),
@@ -1256,15 +1273,15 @@ class views_plugin_display extends views_plugin {
     );
 
     // If pagers aren't allowed, change the text of the item:
-    if (empty($this->definition['use pager'])) {
+    if (empty($this->definition['use_pager'])) {
       $options['pager']['title'] = t('Items to display');
     }
 
-    if (!empty($pager_plugin->definition['uses options'])) {
+    if (!empty($pager_plugin->definition['uses_options'])) {
       $options['pager']['links']['pager_options'] = t('Change settings for this pager type.');
     }
 
-    if (!empty($this->definition['use more'])) {
+    if (!empty($this->definition['use_more'])) {
       $options['use_more'] = array(
         'category' => 'pager',
         'title' => t('More link'),
@@ -1322,7 +1339,7 @@ class views_plugin_display extends views_plugin {
       'desc' => t('Specify access control type for this display.'),
     );
 
-    if (!empty($access_plugin->definition['uses options'])) {
+    if (!empty($access_plugin->definition['uses_options'])) {
       $options['access']['links']['access_options'] = t('Change settings for this access type.');
     }
 
@@ -1342,11 +1359,11 @@ class views_plugin_display extends views_plugin {
       'desc' => t('Specify caching type for this display.'),
     );
 
-    if (!empty($cache_plugin->definition['uses options'])) {
+    if (!empty($cache_plugin->definition['uses_options'])) {
       $options['cache']['links']['cache_options'] = t('Change settings for this caching type.');
     }
 
-    if (!empty($access_plugin->definition['uses options'])) {
+    if (!empty($access_plugin->definition['uses_options'])) {
       $options['access']['links']['access_options'] = t('Change settings for this access type.');
     }
 
@@ -1387,7 +1404,7 @@ class views_plugin_display extends views_plugin {
       'desc' => t('Select the kind of exposed filter to use.'),
     );
 
-    if (!empty($exposed_form_plugin->definition['uses options'])) {
+    if (!empty($exposed_form_plugin->definition['uses_options'])) {
       $options['exposed_form']['links']['exposed_form_options'] = t('Exposed form settings for this exposed form style.');
     }
 
@@ -1569,7 +1586,7 @@ class views_plugin_display extends views_plugin {
         );
 
         $access_plugin = views_fetch_plugin_data('access', $access['type']);
-        if (!empty($access_plugin['uses options'])) {
+        if (!empty($access_plugin['uses_options'])) {
           $form['markup'] = array(
             '#prefix' => '<div class="form-item description">',
             '#markup' => t('You may also adjust the !settings for the currently selected access restriction.', array('!settings' => $this->option_link(t('settings'), 'access_options'))),
@@ -1583,7 +1600,7 @@ class views_plugin_display extends views_plugin {
         $plugin = $this->get_plugin('access');
         $form['#title'] .= t('Access options');
         if ($plugin) {
-          $form['#help_topic'] = $plugin->definition['help topic'];
+          $form['#help_topic'] = $plugin->definition['help_topic'];
           $form['#help_module'] = $plugin->definition['module'];
 
           $form['access_options'] = array(
@@ -1612,7 +1629,7 @@ class views_plugin_display extends views_plugin {
         );
 
         $cache_plugin = views_fetch_plugin_data('cache', $cache['type']);
-        if (!empty($cache_plugin['uses options'])) {
+        if (!empty($cache_plugin['uses_options'])) {
           $form['markup'] = array(
             '#prefix' => '<div class="form-item description">',
             '#suffix' => '</div>',
@@ -1645,8 +1662,8 @@ class views_plugin_display extends views_plugin {
         $form['#title'] .= t('Query options');
         $this->view->init_query();
         if ($this->view->query) {
-          if (isset($this->view->query->definition['help topic'])) {
-            $form['#help_topic'] = $this->view->query->definition['help topic'];
+          if (isset($this->view->query->definition['help_topic'])) {
+            $form['#help_topic'] = $this->view->query->definition['help_topic'];
           }
 
           if (isset($this->view->query->definition['module'])) {
@@ -1710,6 +1727,7 @@ class views_plugin_display extends views_plugin {
         }
         break;
       case 'style_plugin':
+        $manager = new ViewsPluginManager('style');
         $form['#title'] .= t('How should this view be styled');
         $form['#help_topic'] = 'style';
         $form['style_plugin'] =  array(
@@ -1719,8 +1737,8 @@ class views_plugin_display extends views_plugin {
           '#description' => t('If the style you choose has settings, be sure to click the settings button that will appear next to it in the View summary.'),
         );
 
-        $style_plugin = views_fetch_plugin_data('style', $this->get_option('style_plugin'));
-        if (!empty($style_plugin['uses options'])) {
+        $style_plugin = $manager->getDefinition($this->get_option('style_plugin'));
+        if (!empty($style_plugin['uses_options'])) {
           $form['markup'] = array(
             '#markup' => '<div class="form-item description">' . t('You may also adjust the !settings for the currently selected style.', array('!settings' => $this->option_link(t('settings'), 'style_options'))) . '</div>',
           );
@@ -1744,8 +1762,8 @@ class views_plugin_display extends views_plugin {
         }
         $plugin = $this->get_plugin(empty($style) ? 'row' : 'style');
         if ($plugin) {
-          if (isset($plugin->definition['help topic'])) {
-            $form['#help_topic'] = $plugin->definition['help topic'];
+          if (isset($plugin->definition['help_topic'])) {
+            $form['#help_topic'] = $plugin->definition['help_topic'];
             $form['#help_module'] = $plugin->definition['module'];
           }
           $form[$form_state['section']] = array(
@@ -1764,7 +1782,7 @@ class views_plugin_display extends views_plugin {
         );
 
         $row_plugin = views_fetch_plugin_data('row', $this->get_option('row_plugin'));
-        if (!empty($row_plugin['uses options'])) {
+        if (!empty($row_plugin['uses_options'])) {
           $form['markup'] = array(
             '#markup' => '<div class="form-item description">' . t('You may also adjust the !settings for the currently selected row style.', array('!settings' => $this->option_link(t('settings'), 'row_options'))) . '</div>',
           );
@@ -2119,7 +2137,7 @@ class views_plugin_display extends views_plugin {
         );
 
         $exposed_form_plugin = views_fetch_plugin_data('exposed_form', $exposed_form['type']);
-        if (!empty($exposed_form_plugin['uses options'])) {
+        if (!empty($exposed_form_plugin['uses_options'])) {
           $form['markup'] = array(
             '#prefix' => '<div class="form-item description">',
             '#suffix' => '</div>',
@@ -2131,7 +2149,7 @@ class views_plugin_display extends views_plugin {
         $plugin = $this->get_plugin('exposed_form');
         $form['#title'] .= t('Exposed form options');
         if ($plugin) {
-          $form['#help_topic'] = $plugin->definition['help topic'];
+          $form['#help_topic'] = $plugin->definition['help_topic'];
 
           $form['exposed_form_options'] = array(
             '#tree' => TRUE,
@@ -2150,12 +2168,12 @@ class views_plugin_display extends views_plugin {
         $pager = $this->get_option('pager');
         $form['pager']['type'] =  array(
           '#type' => 'radios',
-          '#options' => views_fetch_plugin_names('pager', empty($this->definition['use pager']) ? 'basic' : NULL, array($this->view->base_table)),
+          '#options' => views_fetch_plugin_names('pager', empty($this->definition['use_pager']) ? 'basic' : NULL, array($this->view->base_table)),
           '#default_value' => $pager['type'],
         );
 
         $pager_plugin = views_fetch_plugin_data('pager', $pager['type'], array($this->view->base_table));
-        if (!empty($pager_plugin['uses options'])) {
+        if (!empty($pager_plugin['uses_options'])) {
           $form['markup'] = array(
             '#prefix' => '<div class="form-item description">',
             '#suffix' => '</div>',
@@ -2168,7 +2186,7 @@ class views_plugin_display extends views_plugin {
         $plugin = $this->get_plugin('pager');
         $form['#title'] .= t('Pager options');
         if ($plugin) {
-          $form['#help_topic'] = $plugin->definition['help topic'];
+          $form['#help_topic'] = $plugin->definition['help_topic'];
 
           $form['pager_options'] = array(
             '#tree' => TRUE,
@@ -2314,7 +2332,7 @@ class views_plugin_display extends views_plugin {
           if ($plugin) {
             $access = array('type' => $form_state['values']['access']['type']);
             $this->set_option('access', $access);
-            if (!empty($plugin->definition['uses options'])) {
+            if (!empty($plugin->definition['uses_options'])) {
               views_ui_add_form_to_stack('display', $this->view, $this->display->id, array('access_options'));
             }
           }
@@ -2335,7 +2353,7 @@ class views_plugin_display extends views_plugin {
           if ($plugin) {
             $cache = array('type' => $form_state['values']['cache']['type']);
             $this->set_option('cache', $cache);
-            if (!empty($plugin->definition['uses options'])) {
+            if (!empty($plugin->definition['uses_options'])) {
               views_ui_add_form_to_stack('display', $this->view, $this->display->id, array('cache_options'));
             }
           }
@@ -2393,7 +2411,7 @@ class views_plugin_display extends views_plugin {
             $this->set_option('row_options', array());
 
             // send ajax form to options page if we use it.
-            if (!empty($plugin->definition['uses options'])) {
+            if (!empty($plugin->definition['uses_options'])) {
               views_ui_add_form_to_stack('display', $this->view, $this->display->id, array('row_options'));
             }
           }
@@ -2408,7 +2426,7 @@ class views_plugin_display extends views_plugin {
             $this->set_option($section, $form_state['values'][$section]);
             $this->set_option('style_options', array());
             // send ajax form to options page if we use it.
-            if (!empty($plugin->definition['uses options'])) {
+            if (!empty($plugin->definition['uses_options'])) {
               views_ui_add_form_to_stack('display', $this->view, $this->display->id, array('style_options'));
             }
           }
@@ -2434,7 +2452,7 @@ class views_plugin_display extends views_plugin {
           if ($plugin) {
             $exposed_form = array('type' => $form_state['values']['exposed_form']['type'], 'options' => array());
             $this->set_option('exposed_form', $exposed_form);
-            if (!empty($plugin->definition['uses options'])) {
+            if (!empty($plugin->definition['uses_options'])) {
               views_ui_add_form_to_stack('display', $this->view, $this->display->id, array('exposed_form_options'));
             }
           }
@@ -2461,7 +2479,7 @@ class views_plugin_display extends views_plugin {
 
             $pager = array('type' => $form_state['values']['pager']['type'], 'options' => $plugin->options);
             $this->set_option('pager', $pager);
-            if (!empty($plugin->definition['uses options'])) {
+            if (!empty($plugin->definition['uses_options'])) {
               views_ui_add_form_to_stack('display', $this->view, $this->display->id, array('pager_options'));
             }
           }
diff --git a/lib/Drupal/views/Plugin/views/display/Embed.php b/lib/Drupal/views/Plugin/views/display/Embed.php
new file mode 100644
index 0000000..be15128
--- /dev/null
+++ b/lib/Drupal/views/Plugin/views/display/Embed.php
@@ -0,0 +1,37 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\views\Plugin\views\display\Embed.
+ */
+
+namespace Drupal\views\Plugin\views\display;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
+/**
+ * The plugin that handles an embed display.
+ *
+ * @ingroup views_display_plugins
+ *
+ * @todo: Wait until annotations/plugins support access mehtods.
+ * no ui => !config('views.settings')->get('views_ui_display_embed'),
+ */
+
+/**
+ * @Plugin(
+ *   id = "embed",
+ *   title = @Translation("Embed"),
+ *   help = @Translation("Provide a display which can be embedded using the views api."),
+ *   theme = "views_view",
+ *   uses_hook_menu = FALSE,
+ *   use_ajax = TRUE,
+ *   use_pager = TRUE,
+ *   accept_attachments = FALSE,
+ *   help_topic = "display-embed"
+ * )
+ */
+class Embed extends DisplayPluginBase {
+  // This display plugin does nothing apart from exist.
+}
diff --git a/plugins/views_plugin_display_feed.inc b/lib/Drupal/views/Plugin/views/display/Feed.php
similarity index 93%
rename from plugins/views_plugin_display_feed.inc
rename to lib/Drupal/views/Plugin/views/display/Feed.php
index 5355f24..6bfd130 100644
--- a/plugins/views_plugin_display_feed.inc
+++ b/lib/Drupal/views/Plugin/views/display/Feed.php
@@ -2,10 +2,14 @@
 
 /**
  * @file
- * Contains the feed display plugin.
+ * Definition of Drupal\views\Plugin\views\display\Feed.
  */
 
+namespace Drupal\views\Plugin\views\display;
+
 use Symfony\Component\HttpFoundation\Response;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
 
 /**
  * The plugin that handles a feed, such as RSS or atom.
@@ -14,7 +18,21 @@ use Symfony\Component\HttpFoundation\Response;
  *
  * @ingroup views_display_plugins
  */
-class views_plugin_display_feed extends views_plugin_display_page {
+
+/**
+ * @Plugin(
+ *   id = "feed",
+ *   title = @Translation("Feed"),
+ *   help = @Translation("Display the view as a feed, such as an RSS feed."),
+ *   uses_hook_menu = TRUE,
+ *   use_ajax = FALSE,
+ *   use_pager = FALSE,
+ *   accept_attachments = FALSE,
+ *   admin = @Translation("Feed"),
+ *   help_topic = "display-feed"
+ * )
+ */
+class Feed extends Page {
   function init(&$view, &$display, $options = NULL) {
     parent::init($view, $display, $options);
 
diff --git a/plugins/views_plugin_display_page.inc b/lib/Drupal/views/Plugin/views/display/Page.php
similarity index 97%
rename from plugins/views_plugin_display_page.inc
rename to lib/Drupal/views/Plugin/views/display/Page.php
index a713c64..16557b1 100644
--- a/plugins/views_plugin_display_page.inc
+++ b/lib/Drupal/views/Plugin/views/display/Page.php
@@ -2,15 +2,37 @@
 
 /**
  * @file
- * Contains the page display plugin.
+ * Definition of Drupal\views\Plugin\views\display\Page.
  */
 
+namespace Drupal\views\Plugin\views\display;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * The plugin that handles a full page.
  *
  * @ingroup views_display_plugins
  */
-class views_plugin_display_page extends views_plugin_display {
+
+/**
+ * @Plugin(
+ *   id = "page",
+ *   title = @Translation("Page"),
+ *   help = @Translation("Display the view as a page, with a URL and menu links."),
+ *   uses_hook_menu = TRUE,
+ *   contextual_links_locations = {"page"},
+ *   theme = "views_view",
+ *   use_ajax = TRUE,
+ *   use_pager = TRUE,
+ *   use_more = TRUE,
+ *   accept_attachments = TRUE,
+ *   admin = @Translation("Page"),
+ *   help_topic = "display-page"
+ * )
+ */
+class Page extends DisplayPluginBase {
   /**
    * The page display has a path.
    */
diff --git a/lib/Drupal/views/Plugin/views/display_extender/DefaultDisplayExtender.php b/lib/Drupal/views/Plugin/views/display_extender/DefaultDisplayExtender.php
new file mode 100644
index 0000000..a33354a
--- /dev/null
+++ b/lib/Drupal/views/Plugin/views/display_extender/DefaultDisplayExtender.php
@@ -0,0 +1,22 @@
+<?php
+
+/**
+ * Definition of Drupal\views\Plugin\views\display_extender\DefaultDisplayExtender.
+ */
+
+namespace Drupal\views\Plugin\views\display_extender;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
+/**
+ * @Plugin(
+ *   id = "default",
+ *   title = @Translation("Empty display extender"),
+ *   help = @Translation("Default settings for this view."),
+ *   enabled = FALSE,
+ *   no_ui = TRUE
+ * )
+ */
+class DefaultDisplayExtender extends DisplayExtenderPluginBase {
+}
diff --git a/plugins/views_plugin_display_extender.inc b/lib/Drupal/views/Plugin/views/display_extender/DisplayExtenderPluginBase.php
similarity index 80%
rename from plugins/views_plugin_display_extender.inc
rename to lib/Drupal/views/Plugin/views/display_extender/DisplayExtenderPluginBase.php
index 08e981a..beb4804 100644
--- a/plugins/views_plugin_display_extender.inc
+++ b/lib/Drupal/views/Plugin/views/display_extender/DisplayExtenderPluginBase.php
@@ -2,15 +2,23 @@
 
 /**
  * @file
- * Definition of views_plugin_display_extender.
+ * Definition of Drupal\views\Plugin\views\display_extender\DisplayExtenderPluginBase.
  */
 
+namespace Drupal\views\Plugin\views\display_extender;
+
+use Drupal\views\Plugin\views\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * @todo.
  *
  * @ingroup views_display_plugins
  */
-class views_plugin_display_extender extends views_plugin {
+
+/**
+ */
+abstract class DisplayExtenderPluginBase extends Plugin {
   function init(&$view, &$display) {
     $this->view = $view;
     $this->display = $display;
diff --git a/lib/Drupal/views/Plugin/views/exposed_form/Basic.php b/lib/Drupal/views/Plugin/views/exposed_form/Basic.php
new file mode 100644
index 0000000..b5c8bda
--- /dev/null
+++ b/lib/Drupal/views/Plugin/views/exposed_form/Basic.php
@@ -0,0 +1,28 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\views\Plugin\views\exposed_form\Basic.
+ */
+
+namespace Drupal\views\Plugin\views\exposed_form;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
+/**
+ * Exposed form plugin that provides a basic exposed form.
+ *
+ * @ingroup views_exposed_form_plugins
+ */
+
+/**
+ * @Plugin(
+ *   id = "basic",
+ *   title = @Translation("Basic"),
+ *   help = @Translation("Basic exposed form"),
+ *   uses_options = TRUE,
+ *   help_topic = "exposed-form-basic"
+ * )
+ */
+class Basic extends ExposedFormPluginBase { }
diff --git a/plugins/views_plugin_exposed_form.inc b/lib/Drupal/views/Plugin/views/exposed_form/ExposedFormPluginBase.php
similarity index 98%
rename from plugins/views_plugin_exposed_form.inc
rename to lib/Drupal/views/Plugin/views/exposed_form/ExposedFormPluginBase.php
index c8468f1..4976ba2 100644
--- a/plugins/views_plugin_exposed_form.inc
+++ b/lib/Drupal/views/Plugin/views/exposed_form/ExposedFormPluginBase.php
@@ -2,9 +2,13 @@
 
 /**
  * @file
- * Definition of views_plugin_exposed_form.
+ * Definition of Drupal\views\Plugin\views\exposed_form\ExposedFormPluginBase.
  */
 
+namespace Drupal\views\Plugin\views\exposed_form;
+
+use Drupal\views\Plugin\views\Plugin;
+
 /**
  * @defgroup views_exposed_form_plugins Views exposed form plugins
  * @{
@@ -18,7 +22,7 @@
 /**
  * The base plugin to handle exposed filter forms.
  */
-class views_plugin_exposed_form extends views_plugin {
+abstract class ExposedFormPluginBase extends Plugin {
 
   /**
    * Initialize the plugin.
diff --git a/plugins/views_plugin_exposed_form_input_required.inc b/lib/Drupal/views/Plugin/views/exposed_form/InputRequired.php
similarity index 85%
rename from plugins/views_plugin_exposed_form_input_required.inc
rename to lib/Drupal/views/Plugin/views/exposed_form/InputRequired.php
index 7760cc9..831042f 100644
--- a/plugins/views_plugin_exposed_form_input_required.inc
+++ b/lib/Drupal/views/Plugin/views/exposed_form/InputRequired.php
@@ -2,15 +2,30 @@
 
 /**
  * @file
- * Definition of views_plugin_exposed_form_input_required.
+ * Definition of Drupal\views\Plugin\views\exposed_form\InputRequired.
  */
 
+namespace Drupal\views\Plugin\views\exposed_form;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Exposed form plugin that provides an exposed form with required input.
  *
  * @ingroup views_exposed_form_plugins
  */
-class views_plugin_exposed_form_input_required extends views_plugin_exposed_form {
+
+/**
+ * @Plugin(
+ *   id = "input_required",
+ *   title = @Translation("Input required"),
+ *   help = @Translation("An exposed form that only renders a view if the form contains user input."),
+ *   uses_options = TRUE,
+ *   help_topic = "exposed-form-input-required"
+ * )
+ */
+class InputRequired extends ExposedFormPluginBase {
 
   function option_definition() {
     $options = parent::option_definition();
diff --git a/handlers/views_handler_field_boolean.inc b/lib/Drupal/views/Plugin/views/field/Boolean.php
similarity index 91%
rename from handlers/views_handler_field_boolean.inc
rename to lib/Drupal/views/Plugin/views/field/Boolean.php
index 13fff07..fe2de17 100644
--- a/handlers/views_handler_field_boolean.inc
+++ b/lib/Drupal/views/Plugin/views/field/Boolean.php
@@ -2,9 +2,12 @@
 
 /**
  * @file
- * Definition of views_handler_field_boolean.
+ * Definition of Drupal\views\Plugin\views\field\Boolean.
  */
 
+namespace Drupal\views\Plugin\views\field;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * A handler to provide proper displays for booleans.
  *
@@ -21,7 +24,13 @@
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_boolean extends views_handler_field {
+
+/**
+ * @plugin(
+ *   id = "boolean"
+ * )
+ */
+class Boolean extends FieldPluginBase {
   function option_definition() {
     $options = parent::option_definition();
     $options['type'] = array('default' => 'yes-no');
diff --git a/lib/Drupal/views/Plugin/views/field/Broken.php b/lib/Drupal/views/Plugin/views/field/Broken.php
new file mode 100644
index 0000000..37f135c
--- /dev/null
+++ b/lib/Drupal/views/Plugin/views/field/Broken.php
@@ -0,0 +1,40 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\views\Plugin\views\field\Broken
+ */
+
+namespace Drupal\views\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+
+/**
+ * A special handler to take the place of missing or broken handlers.
+ *
+ * @ingroup views_field_handlers
+ */
+
+/**
+ * @Plugin(
+ *   id = "broken"
+ * )
+ */
+class Broken extends FieldPluginBase {
+  function ui_name($short = FALSE) {
+    return t('Broken/missing handler');
+  }
+
+  function ensure_my_table() { /* No table to ensure! */ }
+  function query($group_by = FALSE) { /* No query to run */ }
+  function options_form(&$form, &$form_state) {
+    $form['markup'] = array(
+      '#markup' => '<div class="form-item description">' . t('The handler for this item is broken or missing and cannot be used. If a module provided the handler and was disabled, re-enabling the module may restore it. Otherwise, you should probably delete this item.') . '</div>',
+    );
+  }
+
+  /**
+   * Determine if the handler is considered 'broken'
+   */
+  function broken() { return TRUE; }
+}
diff --git a/handlers/views_handler_field_contextual_links.inc b/lib/Drupal/views/Plugin/views/field/ContextualLinks.php
similarity index 92%
rename from handlers/views_handler_field_contextual_links.inc
rename to lib/Drupal/views/Plugin/views/field/ContextualLinks.php
index 86a057f..c8d9649 100644
--- a/handlers/views_handler_field_contextual_links.inc
+++ b/lib/Drupal/views/Plugin/views/field/ContextualLinks.php
@@ -2,15 +2,25 @@
 
 /**
  * @file
- * Definition of views_handler_field_contextual_links.
+ * Definition of Drupal\views\Plugin\views\field\ContextualLinks.
  */
 
+namespace Drupal\views\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Provides a handler that adds contextual links.
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_contextual_links extends views_handler_field {
+
+/**
+ * @plugin(
+ *   id = "contextual_links"
+ * )
+ */
+class ContextualLinks extends FieldPluginBase {
   function option_definition() {
     $options = parent::option_definition();
 
diff --git a/handlers/views_handler_field_counter.inc b/lib/Drupal/views/Plugin/views/field/Counter.php
similarity index 85%
rename from handlers/views_handler_field_counter.inc
rename to lib/Drupal/views/Plugin/views/field/Counter.php
index 76213a6..e7bfd4c 100644
--- a/handlers/views_handler_field_counter.inc
+++ b/lib/Drupal/views/Plugin/views/field/Counter.php
@@ -2,15 +2,25 @@
 
 /**
  * @file
- * Definition of views_handler_field_counter.
+ * Definition of Drupal\views\Plugin\views\field\Counter.
  */
 
+namespace Drupal\views\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Field handler to show a counter of the current row.
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_counter extends views_handler_field {
+
+/**
+ * @plugin(
+ *   id = "counter"
+ * )
+ */
+class Counter extends FieldPluginBase {
   function option_definition() {
     $options = parent::option_definition();
     $options['counter_start'] = array('default' => 1);
diff --git a/handlers/views_handler_field_custom.inc b/lib/Drupal/views/Plugin/views/field/Custom.php
similarity index 72%
rename from handlers/views_handler_field_custom.inc
rename to lib/Drupal/views/Plugin/views/field/Custom.php
index 7d3459e..8cc51b0 100644
--- a/handlers/views_handler_field_custom.inc
+++ b/lib/Drupal/views/Plugin/views/field/Custom.php
@@ -2,15 +2,25 @@
 
 /**
  * @file
- * Definition of views_handler_field_custom.
+ * Definition of Drupal\views\Plugin\views\field\Custom.
  */
 
+namespace Drupal\views\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * A handler to provide a field that is completely custom by the administrator.
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_custom extends views_handler_field {
+
+/**
+ * @plugin(
+ *   id = "custom"
+ * )
+ */
+class Custom extends FieldPluginBase {
   function query() {
     // do nothing -- to override the parent query.
   }
@@ -39,15 +49,3 @@ class views_handler_field_custom extends views_handler_field {
     return $this->options['alter']['text'];
   }
 }
-
-/**
- * Prerender function to move the textarea to the top.
- */
-function views_handler_field_custom_pre_render_move_text($form) {
-  $form['text'] = $form['alter']['text'];
-  $form['help'] = $form['alter']['help'];
-  unset($form['alter']['text']);
-  unset($form['alter']['help']);
-
-  return $form;
-}
diff --git a/handlers/views_handler_field_date.inc b/lib/Drupal/views/Plugin/views/field/Date.php
similarity index 88%
rename from handlers/views_handler_field_date.inc
rename to lib/Drupal/views/Plugin/views/field/Date.php
index 520fa53..7d5e2f7 100644
--- a/handlers/views_handler_field_date.inc
+++ b/lib/Drupal/views/Plugin/views/field/Date.php
@@ -2,15 +2,25 @@
 
 /**
  * @file
- * Definition of views_handler_field_date.
+ * Definition of Drupal\views\Plugin\views\field\Date.
  */
 
+namespace Drupal\views\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * A handler to provide proper displays for dates.
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_date extends views_handler_field {
+
+/**
+ * @plugin(
+ *   id = "date"
+ * )
+ */
+class Date extends FieldPluginBase {
   function option_definition() {
     $options = parent::option_definition();
 
@@ -26,7 +36,7 @@ class views_handler_field_date extends views_handler_field {
     $date_formats = array();
     $date_types = system_get_date_types();
     foreach ($date_types as $key => $value) {
-      $date_formats[$value['type']] = t('@date_format format', array('@date_format' => $value['title'])) . ': ' . format_date(REQUEST_TIME, $value['type']);
+      $date_formats[$value['type']] = check_plain(t($value['title'] . ' format')) . ': ' . format_date(REQUEST_TIME, $value['type']);
     }
 
     $form['date_format'] = array(
@@ -47,7 +57,7 @@ class views_handler_field_date extends views_handler_field {
     $form['custom_date_format'] = array(
       '#type' => 'textfield',
       '#title' => t('Custom date format'),
-      '#description' => t('If "Custom", see the <a href="@url" target="_blank">PHP manual</a> for date formats. Otherwise, enter the number of different time units to display, which defaults to 2.', array('@url' => 'http://php.net/manual/function.date.php')),
+      '#description' => t('If "Custom", see <a href="http://us.php.net/manual/en/function.date.php" target="_blank">the PHP docs</a> for date formats. Otherwise, enter the number of different time units to display, which defaults to 2.'),
       '#default_value' => isset($this->options['custom_date_format']) ? $this->options['custom_date_format'] : '',
     );
     // Setup #states for all possible date_formats on the custom_date_format form element.
diff --git a/handlers/views_handler_field_entity.inc b/lib/Drupal/views/Plugin/views/field/Entity.php
similarity index 93%
rename from handlers/views_handler_field_entity.inc
rename to lib/Drupal/views/Plugin/views/field/Entity.php
index d8aaba4..f12a16b 100644
--- a/handlers/views_handler_field_entity.inc
+++ b/lib/Drupal/views/Plugin/views/field/Entity.php
@@ -2,9 +2,13 @@
 
 /**
  * @file
- * Definition of views_handler_field_entity.
+ * Definition of Drupal\views\Plugin\views\field\Entity.
  */
 
+namespace Drupal\views\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * A handler to display data from entity objects.
  *
@@ -16,7 +20,13 @@
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_entity extends views_handler_field {
+
+/**
+ * @plugin(
+ *   id = "entity"
+ * )
+ */
+class Entity extends FieldPluginBase {
 
   /**
    * Stores the entity type which is loaded by this field.
diff --git a/handlers/views_handler_field.inc b/lib/Drupal/views/Plugin/views/field/FieldPluginBase.php
similarity index 96%
rename from handlers/views_handler_field.inc
rename to lib/Drupal/views/Plugin/views/field/FieldPluginBase.php
index b3a818d..f847fd0 100644
--- a/handlers/views_handler_field.inc
+++ b/lib/Drupal/views/Plugin/views/field/FieldPluginBase.php
@@ -2,9 +2,14 @@
 
 /**
  * @file
- * @todo.
+ * Definition of Drupal\views\Plugin\views\field\FieldPluginBase.
  */
 
+namespace Drupal\views\Plugin\views\field;
+
+use Drupal\views\Plugin\views\Handler;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * @defgroup views_field_handlers Views field handlers
  * @{
@@ -42,7 +47,14 @@ define('VIEWS_HANDLER_RENDER_TEXT_PHASE_EMPTY', 2);
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field extends views_handler {
+
+/**
+ * @plugin(
+ *   id = "standard"
+ * )
+ */
+class FieldPluginBase extends Handler {
+
   var $field_alias = 'unknown';
   var $aliases = array();
 
@@ -1611,85 +1623,7 @@ If you would like to have the characters \'[\' and \']\' please use the html ent
   function ui_name($short = FALSE) {
     return $this->get_field(parent::ui_name($short));
   }
-}
-
-/**
- * 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) {
-    return t('Broken/missing handler');
-  }
-
-  function ensure_my_table() { /* No table to ensure! */ }
-  function query($group_by = FALSE) { /* No query to run */ }
-  function options_form(&$form, &$form_state) {
-    $form['markup'] = array(
-      '#markup' => '<div class="form-item description">' . t('The handler for this item is broken or missing and cannot be used. If a module provided the handler and was disabled, re-enabling the module may restore it. Otherwise, you should probably delete this item.') . '</div>',
-    );
-  }
-
-  /**
-   * Determine if the handler is considered 'broken'
-   */
-  function broken() { return TRUE; }
-}
-
-/**
- * Render a numeric value as a size.
- *
- * @ingroup views_field_handlers
- */
-class views_handler_field_file_size extends views_handler_field {
-  function option_definition() {
-    $options = parent::option_definition();
 
-    $options['file_size_display'] = array('default' => 'formatted');
-
-    return $options;
-  }
-
-  function options_form(&$form, &$form_state) {
-    parent::options_form($form, $form_state);
-    $form['file_size_display'] = array(
-      '#title' => t('File size display'),
-      '#type' => 'select',
-      '#options' => array(
-        'formatted' => t('Formatted (in KB or MB)'),
-        'bytes' => t('Raw bytes'),
-      ),
-    );
-  }
-
-  function render($values) {
-    $value = $this->get_value($values);
-    if ($value) {
-      switch ($this->options['file_size_display']) {
-        case 'bytes':
-          return $value;
-        case 'formatted':
-        default:
-          return format_size($value);
-      }
-    }
-    else {
-      return '';
-    }
-  }
-}
-
-/**
- * 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) {
-    $value = $this->get_value($values);
-    return $this->sanitize_value($value, 'xss');
-  }
 }
 
 /**
diff --git a/lib/Drupal/views/Plugin/views/field/FileSize.php b/lib/Drupal/views/Plugin/views/field/FileSize.php
new file mode 100644
index 0000000..79bab19
--- /dev/null
+++ b/lib/Drupal/views/Plugin/views/field/FileSize.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * @file
+ * Definition of Drupal\views\Plugin\views\field\FileSize
+ */
+namespace Drupal\views\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+
+/**
+ * Render a numeric value as a size.
+ *
+ * @ingroup views_field_handlers
+ */
+
+/**
+ * @plugin(
+ *   id = "file_size"
+ * )
+ */
+class FileSize extends FieldPluginBase {
+  function option_definition() {
+    $options = parent::option_definition();
+
+    $options['file_size_display'] = array('default' => 'formatted');
+
+    return $options;
+  }
+
+  function options_form(&$form, &$form_state) {
+    parent::options_form($form, $form_state);
+    $form['file_size_display'] = array(
+      '#title' => t('File size display'),
+      '#type' => 'select',
+      '#options' => array(
+        'formatted' => t('Formatted (in KB or MB)'),
+        'bytes' => t('Raw bytes'),
+      ),
+    );
+  }
+
+  function render($values) {
+    $value = $this->get_value($values);
+    if ($value) {
+      switch ($this->options['file_size_display']) {
+        case 'bytes':
+          return $value;
+        case 'formatted':
+        default:
+          return format_size($value);
+      }
+    }
+    else {
+      return '';
+    }
+  }
+}
diff --git a/handlers/views_handler_field_machine_name.inc b/lib/Drupal/views/Plugin/views/field/MachineName.php
similarity index 89%
rename from handlers/views_handler_field_machine_name.inc
rename to lib/Drupal/views/Plugin/views/field/MachineName.php
index 9f3587f..ca3ca83 100644
--- a/handlers/views_handler_field_machine_name.inc
+++ b/lib/Drupal/views/Plugin/views/field/MachineName.php
@@ -2,9 +2,13 @@
 
 /**
  * @file
- * Definition of views_handler_field_machine_name.
+ * Definition of Drupal\views\Plugin\views\field\MachineName.
  */
 
+namespace Drupal\views\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Field handler whichs allows to show machine name content as human name.
  * @ingroup views_field_handlers
@@ -13,7 +17,13 @@
  * - 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 {
+
+/**
+ * @plugin(
+ *   id = "machine_name"
+ * )
+ */
+class MachineName extends FieldPluginBase {
   /**
    * @var array Stores the available options.
    */
diff --git a/handlers/views_handler_field_markup.inc b/lib/Drupal/views/Plugin/views/field/Markup.php
similarity index 86%
rename from handlers/views_handler_field_markup.inc
rename to lib/Drupal/views/Plugin/views/field/Markup.php
index b0f1cea..003eb92 100644
--- a/handlers/views_handler_field_markup.inc
+++ b/lib/Drupal/views/Plugin/views/field/Markup.php
@@ -2,9 +2,13 @@
 
 /**
  * @file
- * Definition of views_handler_field_markup.
+ * Definition of Drupal\views\Plugin\views\field\Markup.
  */
 
+namespace Drupal\views\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * A handler to run a field through check_markup, using a companion
  * format field.
@@ -16,7 +20,13 @@
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_markup extends views_handler_field {
+
+/**
+ * @plugin(
+ *   id = "markup"
+ * )
+ */
+class Markup extends FieldPluginBase {
   /**
    * Constructor; calls to base object constructor.
    */
diff --git a/handlers/views_handler_field_math.inc b/lib/Drupal/views/Plugin/views/field/Math.php
similarity index 91%
rename from handlers/views_handler_field_math.inc
rename to lib/Drupal/views/Plugin/views/field/Math.php
index 3172be9..3c3bdaf 100644
--- a/handlers/views_handler_field_math.inc
+++ b/lib/Drupal/views/Plugin/views/field/Math.php
@@ -2,9 +2,14 @@
 
 /**
  * @file
- * Definition of views_handler_field_math.
+ * Definition of Drupal\views\Plugin\views\field\Math.
  */
 
+namespace Drupal\views\Plugin\views\field;
+
+use ctools_math_expr;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Render a mathematical expression as a numeric value
  *
@@ -14,7 +19,13 @@
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_math extends views_handler_field_numeric {
+
+/**
+ * @plugin(
+ *   id = "math"
+ * )
+ */
+class Math extends Numeric {
   function option_definition() {
     $options = parent::option_definition();
     $options['expression'] = array('default' => '');
@@ -45,7 +56,7 @@ class views_handler_field_math extends views_handler_field_numeric {
     $tokens = array_map('floatval', $this->get_render_tokens(array()));
     $value = strtr($this->options['expression'], $tokens);
     $expressions = explode(';', $value);
-    $math = new ctools_math_expr;
+    $math = new ctools_math_expr();
     foreach ($expressions as $expression) {
       if ($expression !== '') {
         $value = $math->evaluate($expression);
diff --git a/handlers/views_handler_field_numeric.inc b/lib/Drupal/views/Plugin/views/field/Numeric.php
similarity index 95%
rename from handlers/views_handler_field_numeric.inc
rename to lib/Drupal/views/Plugin/views/field/Numeric.php
index eb2a53b..b769f94 100644
--- a/handlers/views_handler_field_numeric.inc
+++ b/lib/Drupal/views/Plugin/views/field/Numeric.php
@@ -2,9 +2,13 @@
 
 /**
  * @file
- * Definition of views_handler_field_numeric.
+ * Definition of Drupal\views\Plugin\views\field\Numeric.
  */
 
+namespace Drupal\views\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Render a field as a numeric value
  *
@@ -14,7 +18,13 @@
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_numeric extends views_handler_field {
+
+/**
+ * @plugin(
+ *   id = "numeric"
+ * )
+ */
+class Numeric extends FieldPluginBase {
   function option_definition() {
     $options = parent::option_definition();
 
diff --git a/handlers/views_handler_field_prerender_list.inc b/lib/Drupal/views/Plugin/views/field/PrerenderList.php
similarity index 95%
rename from handlers/views_handler_field_prerender_list.inc
rename to lib/Drupal/views/Plugin/views/field/PrerenderList.php
index 53e1f99..061efce 100644
--- a/handlers/views_handler_field_prerender_list.inc
+++ b/lib/Drupal/views/Plugin/views/field/PrerenderList.php
@@ -2,9 +2,13 @@
 
 /**
  * @file
- * Definition of views_handler_field_prerender_list.
+ * Definition of Drupal\views\Plugin\views\field\PrerenderList.
  */
 
+namespace Drupal\views\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Field handler to provide a list of items.
  *
@@ -15,7 +19,13 @@
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_prerender_list extends views_handler_field {
+
+/**
+ * @plugin(
+ *   id = "prerender_list"
+ * )
+ */
+class PrerenderList extends FieldPluginBase {
   /**
    * 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.
diff --git a/handlers/views_handler_field_serialized.inc b/lib/Drupal/views/Plugin/views/field/Serialized.php
similarity index 89%
rename from handlers/views_handler_field_serialized.inc
rename to lib/Drupal/views/Plugin/views/field/Serialized.php
index ef432b4..4d24874 100644
--- a/handlers/views_handler_field_serialized.inc
+++ b/lib/Drupal/views/Plugin/views/field/Serialized.php
@@ -2,15 +2,25 @@
 
 /**
  * @file
- * Definition of views_handler_field_serialized.
+ * Definition of Drupal\views\Plugin\views\field\Serialized.
  */
 
+namespace Drupal\views\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Field handler to show data of serialized fields.
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_serialized extends views_handler_field {
+
+/**
+ * @plugin(
+ *   id = "serialized"
+ * )
+ */
+class Serialized extends FieldPluginBase {
 
   function option_definition() {
     $options = parent::option_definition();
diff --git a/handlers/views_handler_field_time_interval.inc b/lib/Drupal/views/Plugin/views/field/TimeInterval.php
similarity index 77%
rename from handlers/views_handler_field_time_interval.inc
rename to lib/Drupal/views/Plugin/views/field/TimeInterval.php
index e6063af..886c559 100644
--- a/handlers/views_handler_field_time_interval.inc
+++ b/lib/Drupal/views/Plugin/views/field/TimeInterval.php
@@ -2,15 +2,25 @@
 
 /**
  * @file
- * Definition of views_handler_field_time_interval.
+ * Definition of Drupal\views\Plugin\views\field\TimeInterval.
  */
 
+namespace Drupal\views\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * A handler to provide proper displays for time intervals.
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_time_interval extends views_handler_field {
+
+/**
+ * @plugin(
+ *   id = "time_interval"
+ * )
+ */
+class TimeInterval extends FieldPluginBase {
   function option_definition() {
     $options = parent::option_definition();
 
diff --git a/handlers/views_handler_field_url.inc b/lib/Drupal/views/Plugin/views/field/Url.php
similarity index 71%
rename from handlers/views_handler_field_url.inc
rename to lib/Drupal/views/Plugin/views/field/Url.php
index 4a76548..9e3bd6f 100644
--- a/handlers/views_handler_field_url.inc
+++ b/lib/Drupal/views/Plugin/views/field/Url.php
@@ -2,15 +2,25 @@
 
 /**
  * @file
- * Definition of views_handler_field_url.
+ * Definition of Drupal\views\Plugin\views\field\Url.
  */
 
+namespace Drupal\views\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Field handler to provide simple renderer that turns a URL into a clickable link.
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_url extends views_handler_field {
+
+/**
+ * @plugin(
+ *   id = "url"
+ * )
+ */
+class Url extends FieldPluginBase {
   function option_definition() {
     $options = parent::option_definition();
 
@@ -34,10 +44,7 @@ class views_handler_field_url extends views_handler_field {
   function render($values) {
     $value = $this->get_value($values);
     if (!empty($this->options['display_as_link'])) {
-      $this->options['alter']['make_link'] = TRUE;
-      $this->options['alter']['path'] = $value;
-      $text = !empty($this->options['text']) ? $this->sanitize_value($this->options['text']) : $this->sanitize_value($value, 'url');
-      return $text;
+      return l($this->sanitize_value($value), $value, array('html' => TRUE));
     }
     else {
       return $this->sanitize_value($value, 'url');
diff --git a/lib/Drupal/views/Plugin/views/field/Xss.php b/lib/Drupal/views/Plugin/views/field/Xss.php
new file mode 100644
index 0000000..316cd8d
--- /dev/null
+++ b/lib/Drupal/views/Plugin/views/field/Xss.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * @file
+ * Definition of Drupal\views\Plugin\views\field\Xss
+ */
+namespace Drupal\views\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
+/**
+ * A handler to run a field through simple XSS filtering.
+ *
+ * @ingroup views_field_handlers
+ */
+
+/**
+ * @plugin(
+ *   id = "xss"
+ * )
+ */
+class Xss extends FieldPluginBase {
+  function render($values) {
+    $value = $this->get_value($values);
+    return $this->sanitize_value($value, 'xss');
+  }
+}
diff --git a/handlers/views_handler_filter_boolean_operator.inc b/lib/Drupal/views/Plugin/views/filter/BooleanOperator.php
similarity index 94%
rename from handlers/views_handler_filter_boolean_operator.inc
rename to lib/Drupal/views/Plugin/views/filter/BooleanOperator.php
index 0d70831..b9d69e6 100644
--- a/handlers/views_handler_filter_boolean_operator.inc
+++ b/lib/Drupal/views/Plugin/views/filter/BooleanOperator.php
@@ -2,9 +2,13 @@
 
 /**
  * @file
- * Definition of views_handler_filter_boolean_operator.
+ * Definition of Drupal\views\Plugin\views\filter\BooleanOperator.
  */
 
+namespace Drupal\views\Plugin\views\filter;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Simple filter to handle matching of boolean values
  *
@@ -16,12 +20,19 @@
  *    - 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.
+ * - 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 {
+
+/**
+ * @plugin(
+ *   id = "boolean"
+ * )
+ */
+class BooleanOperator extends FilterPluginBase {
+
   // exposed filter options
   var $always_multiple = TRUE;
   // Don't display empty space where the operator would be.
@@ -165,7 +176,7 @@ class views_handler_filter_boolean_operator extends views_handler_filter {
       }
     }
     else {
-      if (!empty($this->definition['use equal'])) {
+      if (!empty($this->definition['use_equal'])) {
         $this->query->add_where($this->options['group'], $field, 1, '=');
       }
       else {
@@ -173,4 +184,5 @@ class views_handler_filter_boolean_operator extends views_handler_filter {
       }
     }
   }
+
 }
diff --git a/handlers/views_handler_filter_boolean_operator_string.inc b/lib/Drupal/views/Plugin/views/filter/BooleanOperatorString.php
similarity index 73%
rename from handlers/views_handler_filter_boolean_operator_string.inc
rename to lib/Drupal/views/Plugin/views/filter/BooleanOperatorString.php
index b49dde9..5838e44 100644
--- a/handlers/views_handler_filter_boolean_operator_string.inc
+++ b/lib/Drupal/views/Plugin/views/filter/BooleanOperatorString.php
@@ -2,9 +2,13 @@
 
 /**
  * @file
- * Definition of views_handler_filter_boolean_operator_string.
+ * Definition of Drupal\views\Plugin\views\filter\BooleanOperatorString.
  */
 
+namespace Drupal\views\Plugin\views\filter;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Simple filter to handle matching of boolean values.
  *
@@ -16,7 +20,13 @@
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter_boolean_operator_string extends views_handler_filter_boolean_operator {
+
+/**
+ * @Plugin(
+ *   id = "boolean_string"
+ * )
+ */
+class BooleanOperatorString extends BooleanOperator {
   function query() {
     $this->ensure_my_table();
     $where = "$this->table_alias.$this->real_field ";
diff --git a/lib/Drupal/views/Plugin/views/filter/Broken.php b/lib/Drupal/views/Plugin/views/filter/Broken.php
new file mode 100644
index 0000000..a9bf22c
--- /dev/null
+++ b/lib/Drupal/views/Plugin/views/filter/Broken.php
@@ -0,0 +1,40 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\views\Plugin\views\filter\Broken
+ */
+
+namespace Drupal\views\Plugin\views\filter;
+
+use Drupal\Core\Annotation\Plugin;
+
+/**
+ * A special handler to take the place of missing or broken handlers.
+ *
+ * @ingroup views_filter_handlers
+ */
+
+/**
+ * @Plugin(
+ *   id = "broken"
+ * )
+ */
+class Broken extends FilterPluginBase {
+  function ui_name($short = FALSE) {
+    return t('Broken/missing handler');
+  }
+
+  function ensure_my_table() { /* No table to ensure! */ }
+  function query($group_by = FALSE) { /* No query to run */ }
+  function options_form(&$form, &$form_state) {
+    $form['markup'] = array(
+      '#markup' => '<div class="form-item description">' . t('The handler for this item is broken or missing and cannot be used. If a module provided the handler and was disabled, re-enabling the module may restore it. Otherwise, you should probably delete this item.') . '</div>',
+    );
+  }
+
+  /**
+   * Determine if the handler is considered 'broken'
+   */
+  function broken() { return TRUE; }
+}
diff --git a/handlers/views_handler_filter_combine.inc b/lib/Drupal/views/Plugin/views/filter/Combine.php
similarity index 95%
rename from handlers/views_handler_filter_combine.inc
rename to lib/Drupal/views/Plugin/views/filter/Combine.php
index c9def53..d5fe089 100644
--- a/handlers/views_handler_filter_combine.inc
+++ b/lib/Drupal/views/Plugin/views/filter/Combine.php
@@ -2,15 +2,25 @@
 
 /**
  * @file
- * Definition of views_handler_filter_combine.
+ * Definition of Drupal\views\Plugin\views\filter\Combine.
  */
 
+namespace Drupal\views\Plugin\views\filter;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Filter handler which allows to search on multiple fields.
  *
  * @ingroup views_field_handlers
  */
-class views_handler_filter_combine extends views_handler_filter_string {
+
+/**
+ * @plugin(
+ *   id = "combine"
+ * )
+ */
+class Combine extends String {
   /**
    * @var views_plugin_query_default
    */
diff --git a/handlers/views_handler_filter_date.inc b/lib/Drupal/views/Plugin/views/filter/Date.php
similarity index 96%
rename from handlers/views_handler_filter_date.inc
rename to lib/Drupal/views/Plugin/views/filter/Date.php
index 3082c78..ddc3ad0 100644
--- a/handlers/views_handler_filter_date.inc
+++ b/lib/Drupal/views/Plugin/views/filter/Date.php
@@ -2,15 +2,25 @@
 
 /**
  * @file
- * Definition of views_handler_filter_date.
+ * Definition of Drupal\views\Plugin\views\filter\Date.
  */
 
+namespace Drupal\views\Plugin\views\filter;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Filter to handle dates stored as a timestamp.
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter_date extends views_handler_filter_numeric {
+
+/**
+ * @Plugin(
+ *   id = "date"
+ * )
+ */
+class Date extends Numeric {
   function option_definition() {
     $options = parent::option_definition();
 
diff --git a/handlers/views_handler_filter_equality.inc b/lib/Drupal/views/Plugin/views/filter/Equality.php
similarity index 78%
rename from handlers/views_handler_filter_equality.inc
rename to lib/Drupal/views/Plugin/views/filter/Equality.php
index e045c7e..b21a39e 100644
--- a/handlers/views_handler_filter_equality.inc
+++ b/lib/Drupal/views/Plugin/views/filter/Equality.php
@@ -2,15 +2,25 @@
 
 /**
  * @file
- * Definition of views_handler_filter_equality.
+ * Definition of Drupal\views\Plugin\views\filter\Equality.
  */
 
+namespace Drupal\views\Plugin\views\filter;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Simple filter to handle equal to / not equal to filters
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter_equality extends views_handler_filter {
+
+/**
+ * @plugin(
+ *   id = "equality"
+ * )
+ */
+class Equality extends FilterPluginBase {
   // exposed filter options
   var $always_multiple = TRUE;
 
diff --git a/handlers/views_handler_filter.inc b/lib/Drupal/views/Plugin/views/filter/FilterPluginBase.php
similarity index 96%
rename from handlers/views_handler_filter.inc
rename to lib/Drupal/views/Plugin/views/filter/FilterPluginBase.php
index ec02042..47b686a 100644
--- a/handlers/views_handler_filter.inc
+++ b/lib/Drupal/views/Plugin/views/filter/FilterPluginBase.php
@@ -2,9 +2,14 @@
 
 /**
  * @file
- * @todo.
+ * Definition of Drupal\views\Plugin\views\filter\FilterPluginBase.
  */
 
+namespace Drupal\views\Plugin\views\filter;
+
+use Drupal\views\Plugin\views\Handler;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * @defgroup views_filter_handlers Views filter handlers
  * @{
@@ -31,7 +36,13 @@
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter extends views_handler {
+
+/**
+ * @Plugin(
+ *   id = "standard"
+ * )
+ */
+class FilterPluginBase extends Handler {
   /**
    * Contains the actual value of the field,either configured in the views ui
    * or entered in the exposed filters.
@@ -713,32 +724,6 @@ 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) {
-    return t('Broken/missing handler');
-  }
-
-  function ensure_my_table() { /* No table to ensure! */ }
-  function query($group_by = FALSE) { /* No query to run */ }
-  function options_form(&$form, &$form_state) {
-    $form['markup'] = array(
-      '#markup' => '<div class="form-item description">' . t('The handler for this item is broken or missing and cannot be used. If a module provided the handler and was disabled, re-enabling the module may restore it. Otherwise, you should probably delete this item.') . '</div>',
-    );
-  }
-
-  /**
-   * Determine if the handler is considered 'broken'
-   */
-  function broken() { return TRUE; }
-}
-
-
 /**
  * @}
  */
diff --git a/handlers/views_handler_filter_group_by_numeric.inc b/lib/Drupal/views/Plugin/views/filter/GroupByNumeric.php
similarity index 87%
rename from handlers/views_handler_filter_group_by_numeric.inc
rename to lib/Drupal/views/Plugin/views/filter/GroupByNumeric.php
index 2b265be..bdd84bb 100644
--- a/handlers/views_handler_filter_group_by_numeric.inc
+++ b/lib/Drupal/views/Plugin/views/filter/GroupByNumeric.php
@@ -2,15 +2,25 @@
 
 /**
  * @file
- * Definition of views_handler_filter_group_by_numeric.
+ * Definition of Drupal\views\Plugin\views\filter\GroupByNumeric.
  */
 
+namespace Drupal\views\Plugin\views\filter;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @plugin(
+ *   id = "groupby_numeric"
+ * )
+ */
+class GroupByNumeric extends Numeric {
   function query() {
     $this->ensure_my_table();
     $field = $this->get_field();
diff --git a/handlers/views_handler_filter_in_operator.inc b/lib/Drupal/views/Plugin/views/filter/InOperator.php
similarity index 98%
rename from handlers/views_handler_filter_in_operator.inc
rename to lib/Drupal/views/Plugin/views/filter/InOperator.php
index 86570f0..cef4c9c 100644
--- a/handlers/views_handler_filter_in_operator.inc
+++ b/lib/Drupal/views/Plugin/views/filter/InOperator.php
@@ -2,9 +2,13 @@
 
 /**
  * @file
- * Definition of views_handler_filter_in_operator.
+ * Definition of Drupal\views\Plugin\views\filter\InOperator.
  */
 
+namespace Drupal\views\Plugin\views\filter;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Simple filter to handle matching of multiple options selectable via checkboxes
  *
@@ -14,7 +18,13 @@
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter_in_operator extends views_handler_filter {
+
+/**
+ * @plugin(
+ *   id = "in_operator"
+ * )
+ */
+class InOperator extends FilterPluginBase {
   var $value_form_type = 'checkboxes';
 
   /**
diff --git a/handlers/views_handler_filter_many_to_one.inc b/lib/Drupal/views/Plugin/views/filter/ManyToOne.php
similarity index 88%
rename from handlers/views_handler_filter_many_to_one.inc
rename to lib/Drupal/views/Plugin/views/filter/ManyToOne.php
index f384796..531e303 100644
--- a/handlers/views_handler_filter_many_to_one.inc
+++ b/lib/Drupal/views/Plugin/views/filter/ManyToOne.php
@@ -2,9 +2,14 @@
 
 /**
  * @file
- * Definition of views_handler_filter_many_to_one.
+ * Definition of Drupal\views\Plugin\views\filter\ManyToOne.
  */
 
+namespace Drupal\views\Plugin\views\filter;
+
+use Drupal\views\ManyToOneHelper;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Complex filter to handle filtering for many to one relationships,
  * such as terms (many terms per node) or roles (many roles per user).
@@ -15,9 +20,15 @@
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter_many_to_one extends views_handler_filter_in_operator {
+
+/**
+ * @plugin(
+ *   id = "many_to_one"
+ * )
+ */
+class ManyToOne extends InOperator {
   /**
-   * @var views_many_to_one_helper
+   * @var Drupal\views\ManyToOneHelper
    *
    * Stores the Helper object which handles the many_to_one complexity.
    */
@@ -25,7 +36,7 @@ class views_handler_filter_many_to_one extends views_handler_filter_in_operator
 
   function init(&$view, &$options) {
     parent::init($view, $options);
-    $this->helper = new views_many_to_one_helper($this);
+    $this->helper = new ManyToOneHelper($this);
   }
 
   function option_definition() {
@@ -38,7 +49,7 @@ class views_handler_filter_many_to_one extends views_handler_filter_in_operator
       $this->helper->option_definition($options);
     }
     else {
-      $helper = new views_many_to_one_helper($this);
+      $helper = new ManyToOneHelper($this);
       $helper->option_definition($options);
     }
 
diff --git a/handlers/views_handler_filter_numeric.inc b/lib/Drupal/views/Plugin/views/filter/Numeric.php
similarity index 97%
rename from handlers/views_handler_filter_numeric.inc
rename to lib/Drupal/views/Plugin/views/filter/Numeric.php
index 3e97996..427c677 100644
--- a/handlers/views_handler_filter_numeric.inc
+++ b/lib/Drupal/views/Plugin/views/filter/Numeric.php
@@ -2,17 +2,26 @@
 
 /**
  * @file
- * Definition of views_handler_filter_numeric.
+ * Definition of Drupal\views\Plugin\views\filter\Numeric.
  */
 
+namespace Drupal\views\Plugin\views\filter;
+
 use Drupal\Core\Database\Database;
+use Drupal\Core\Annotation\Plugin;
 
 /**
  * Simple filter to handle greater than/less than filters
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter_numeric extends views_handler_filter {
+
+/**
+ * @Plugin(
+ *   id = "numeric"
+ * )
+ */
+class Numeric extends FilterPluginBase {
   var $always_multiple = TRUE;
   function option_definition() {
     $options = parent::option_definition();
diff --git a/handlers/views_handler_filter_string.inc b/lib/Drupal/views/Plugin/views/filter/String.php
similarity index 97%
rename from handlers/views_handler_filter_string.inc
rename to lib/Drupal/views/Plugin/views/filter/String.php
index 5fbbdea..3ce7479 100644
--- a/handlers/views_handler_filter_string.inc
+++ b/lib/Drupal/views/Plugin/views/filter/String.php
@@ -2,10 +2,13 @@
 
 /**
  * @file
- * Definition of views_handler_filter_string.
+ * Definition of Drupal\views\Plugin\views\filter\String.
  */
 
+namespace Drupal\views\Plugin\views\filter;
+
 use Drupal\Core\Database\Database;
+use Drupal\Core\Annotation\Plugin;
 
 /**
  * Basic textfield filter to handle string filtering commands
@@ -13,7 +16,14 @@ use Drupal\Core\Database\Database;
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter_string extends views_handler_filter {
+
+/**
+ * @Plugin(
+ *   id = "string"
+ * )
+ */
+class String extends FilterPluginBase {
+
   // exposed filter options
   var $always_multiple = TRUE;
 
diff --git a/plugins/views_plugin_localization_core.inc b/lib/Drupal/views/Plugin/views/localization/Core.php
similarity index 85%
rename from plugins/views_plugin_localization_core.inc
rename to lib/Drupal/views/Plugin/views/localization/Core.php
index 7db4353..58f929f 100644
--- a/plugins/views_plugin_localization_core.inc
+++ b/lib/Drupal/views/Plugin/views/localization/Core.php
@@ -2,15 +2,29 @@
 
 /**
  * @file
- * Contains the Drupal core localization plugin.
+ * Definition of Drupal\views\Plugin\views\localization\Core.
  */
 
+namespace Drupal\views\Plugin\views\localization;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Localization plugin to pass translatable strings through t().
  *
  * @ingroup views_localization_plugins
  */
-class views_plugin_localization_core extends views_plugin_localization {
+
+/**
+ * @Plugin(
+ *   id = "core",
+ *   title = @Translation("Core"),
+ *   help = @Translation("Use Drupal core t() function. Not recommended, as it doesn't support updates to existing strings."),
+ *   help_topic = "localization-core"
+ * )
+ */
+class Core extends LocalizationPluginBase {
 
   /**
    * Translate a string.
diff --git a/plugins/views_plugin_localization.inc b/lib/Drupal/views/Plugin/views/localization/LocalizationPluginBase.php
similarity index 95%
rename from plugins/views_plugin_localization.inc
rename to lib/Drupal/views/Plugin/views/localization/LocalizationPluginBase.php
index 08caf9e..2df43f3 100644
--- a/plugins/views_plugin_localization.inc
+++ b/lib/Drupal/views/Plugin/views/localization/LocalizationPluginBase.php
@@ -2,9 +2,13 @@
 
 /**
  * @file
- * Contains the base class for views localization plugins.
+ * Definition of Drupal\views\Plugin\views\localization\LocalizationPluginBase.
  */
 
+namespace Drupal\views\Plugin\views\localization;
+
+use Drupal\views\Plugin\views\Plugin;
+
 /**
  * @defgroup views_localization_plugins Views localization plugins
  * @{
@@ -16,7 +20,7 @@
 /**
  * The base plugin to handle localization of Views strings.
  */
-class views_plugin_localization extends views_plugin {
+abstract class LocalizationPluginBase extends Plugin {
   // Store for exported strings
   var $export_strings = array();
   var $translate = TRUE;
diff --git a/plugins/views_plugin_localization_none.inc b/lib/Drupal/views/Plugin/views/localization/None.php
similarity index 53%
rename from plugins/views_plugin_localization_none.inc
rename to lib/Drupal/views/Plugin/views/localization/None.php
index 620352a..300ab4f 100644
--- a/plugins/views_plugin_localization_none.inc
+++ b/lib/Drupal/views/Plugin/views/localization/None.php
@@ -2,15 +2,29 @@
 
 /**
  * @file
- * Contains the 'none' localization plugin.
+ * Definition of Drupal\views\Plugin\views\localization\None.
  */
 
+namespace Drupal\views\Plugin\views\localization;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Localization plugin for no localization.
  *
  * @ingroup views_localization_plugins
  */
-class views_plugin_localization_none extends views_plugin_localization {
+
+/**
+ * @Plugin(
+ *   id = "none",
+ *   title = @Translation("None"),
+ *   help = @Translation("Do not pass admin strings for translation."),
+ *   help_topic = "localization-none"
+ * )
+ */
+class None extends LocalizationPluginBase {
   var $translate = FALSE;
 
   /**
diff --git a/plugins/views_plugin_pager_full.inc b/lib/Drupal/views/Plugin/views/pager/Full.php
similarity index 96%
rename from plugins/views_plugin_pager_full.inc
rename to lib/Drupal/views/Plugin/views/pager/Full.php
index a844633..dfa7535 100644
--- a/plugins/views_plugin_pager_full.inc
+++ b/lib/Drupal/views/Plugin/views/pager/Full.php
@@ -2,15 +2,31 @@
 
 /**
  * @file
- * Definition of views_plugin_pager_full.
+ * Definition of Drupal\views\Plugin\views\pager\Full.
  */
 
+namespace Drupal\views\Plugin\views\pager;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * The plugin to handle full pager.
  *
  * @ingroup views_pager_plugins
  */
-class views_plugin_pager_full extends views_plugin_pager {
+
+/**
+ * @Plugin(
+ *   id = "full",
+ *   title = @Translation("Paged output, full pager"),
+ *   short_title = @Translation("Full"),
+ *   help = @Translation("Paged output, full Drupal style"),
+ *   help_topic = "pager-full",
+ *   uses_options = TRUE
+ * )
+ */
+class Full extends PagerPluginBase {
   function summary_title() {
     if (!empty($this->options['offset'])) {
       return format_plural($this->options['items_per_page'], '@count item, skip @skip', 'Paged, @count items, skip @skip', array('@count' => $this->options['items_per_page'], '@skip' => $this->options['offset']));
@@ -57,34 +73,34 @@ class views_plugin_pager_full extends views_plugin_pager {
     $pager_text = $this->display->handler->get_pager_text();
     $form['items_per_page'] = array(
       '#title' => $pager_text['items per page title'],
-      '#type' => 'textfield',
+      '#type' => 'number',
       '#description' => $pager_text['items per page description'],
       '#default_value' => $this->options['items_per_page'],
     );
 
     $form['offset'] = array(
-      '#type' => 'textfield',
+      '#type' => 'number',
       '#title' => t('Offset'),
       '#description' => t('The number of items to skip. For example, if this field is 3, the first 3 items will be skipped and not displayed.'),
       '#default_value' => $this->options['offset'],
     );
 
     $form['id'] = array(
-      '#type' => 'textfield',
+      '#type' => 'number',
       '#title' => t('Pager ID'),
       '#description' => t("Unless you're experiencing problems with pagers related to this view, you should leave this at 0. If using multiple pagers on one page you may need to set this number to a higher value so as not to conflict within the ?page= array. Large values will add a lot of commas to your URLs, so avoid if possible."),
       '#default_value' => $this->options['id'],
     );
 
     $form['total_pages'] = array(
-      '#type' => 'textfield',
+      '#type' => 'number',
       '#title' => t('Number of pages'),
       '#description' => t('The total number of pages. Leave empty to show all pages.'),
       '#default_value' => $this->options['total_pages'],
     );
 
     $form['quantity'] = array(
-      '#type' => 'textfield',
+      '#type' => 'number',
       '#title' => t('Number of pager links visible'),
       '#description' => t('Specify the number of links to pages to display in the pager.'),
       '#default_value' => $this->options['quantity'],
diff --git a/plugins/views_plugin_pager_mini.inc b/lib/Drupal/views/Plugin/views/pager/Mini.php
similarity index 63%
rename from plugins/views_plugin_pager_mini.inc
rename to lib/Drupal/views/Plugin/views/pager/Mini.php
index 2daea99..b68ba1a 100644
--- a/plugins/views_plugin_pager_mini.inc
+++ b/lib/Drupal/views/Plugin/views/pager/Mini.php
@@ -2,15 +2,31 @@
 
 /**
  * @file
- * Definition of views_plugin_pager_mini.
+ * Definition of Drupal\views\Plugin\views\pager\Mini.
  */
 
+namespace Drupal\views\Plugin\views\pager;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * The plugin to handle full pager.
  *
  * @ingroup views_pager_plugins
  */
-class views_plugin_pager_mini extends views_plugin_pager_full {
+
+/**
+ * @Plugin(
+ *   id = "mini",
+ *   title = @Translation("Paged output, mini pager"),
+ *   short_title = @Translation("Mini"),
+ *   help = @Translation("Use the mini pager output."),
+ *   help_topic = "pager-mini",
+ *   uses_options = TRUE
+ * )
+ */
+class Mini extends PagerPluginBase {
   function summary_title() {
     if (!empty($this->options['offset'])) {
       return format_plural($this->options['items_per_page'], 'Mini pager, @count item, skip @skip', 'Mini pager, @count items, skip @skip', array('@count' => $this->options['items_per_page'], '@skip' => $this->options['offset']));
diff --git a/plugins/views_plugin_pager_none.inc b/lib/Drupal/views/Plugin/views/pager/None.php
similarity index 78%
rename from plugins/views_plugin_pager_none.inc
rename to lib/Drupal/views/Plugin/views/pager/None.php
index 12b96d0..9994071 100644
--- a/plugins/views_plugin_pager_none.inc
+++ b/lib/Drupal/views/Plugin/views/pager/None.php
@@ -2,15 +2,31 @@
 
 /**
  * @file
- * Definition of views_plugin_pager_none.
+ * Definition of Drupal\views\Plugin\views\pager\None.
  */
 
+namespace Drupal\views\Plugin\views\pager;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Plugin for views without pagers.
  *
  * @ingroup views_pager_plugins
  */
-class views_plugin_pager_none extends views_plugin_pager {
+
+/**
+ * @Plugin(
+ *   id = "none",
+ *   title = @Translation("Display all items"),
+ *   help = @Translation("Display all items that this view might find."),
+ *   help_topic = "pager-none",
+ *   uses_options = TRUE,
+ *   type = "basic"
+ * )
+ */
+class None extends PagerPluginBase {
 
   function init(&$view, &$display, $options = array()) {
     parent::init($view, $display, $options);
diff --git a/plugins/views_plugin_pager.inc b/lib/Drupal/views/Plugin/views/pager/PagerPluginBase.php
similarity index 96%
rename from plugins/views_plugin_pager.inc
rename to lib/Drupal/views/Plugin/views/pager/PagerPluginBase.php
index 416d662..8e108fb 100644
--- a/plugins/views_plugin_pager.inc
+++ b/lib/Drupal/views/Plugin/views/pager/PagerPluginBase.php
@@ -2,9 +2,13 @@
 
 /**
  * @file
- * Definition of views_plugin_pager.
+ * Definition of Drupal\views\Plugin\views\pager\PagerPluginBase.
  */
 
+namespace Drupal\views\Plugin\views\pager;
+
+use Drupal\views\Plugin\views\Plugin;
+
 /**
  * @defgroup views_pager_plugins Views pager plugins
  * @{
@@ -16,7 +20,7 @@
 /**
  * The base plugin to handle pager.
  */
-class views_plugin_pager extends views_plugin {
+abstract class PagerPluginBase extends Plugin {
   var $current_page = NULL;
   var $total_items = 0;
 
diff --git a/plugins/views_plugin_pager_some.inc b/lib/Drupal/views/Plugin/views/pager/Some.php
similarity index 78%
rename from plugins/views_plugin_pager_some.inc
rename to lib/Drupal/views/Plugin/views/pager/Some.php
index 09452ce..61de7d4 100644
--- a/plugins/views_plugin_pager_some.inc
+++ b/lib/Drupal/views/Plugin/views/pager/Some.php
@@ -2,15 +2,31 @@
 
 /**
  * @file
- * Definition of views_plugin_pager_some.
+ * Definition of Drupal\views\Plugin\views\pager\Some.
  */
 
+namespace Drupal\views\Plugin\views\pager;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Plugin for views without pagers.
  *
  * @ingroup views_pager_plugins
  */
-class views_plugin_pager_some extends views_plugin_pager {
+
+/**
+ * @Plugin(
+ *   id = "some",
+ *   title = @Translation("Display a specified number of items"),
+ *   help = @Translation("Display a limited number items that this view might find."),
+ *   help_topic = "pager-some",
+ *   uses_options = TRUE,
+ *   type = "basic"
+ * )
+ */
+class Some extends PagerPluginBase {
   function summary_title() {
     if (!empty($this->options['offset'])) {
       return format_plural($this->options['items_per_page'], '@count item, skip @skip', '@count items, skip @skip', array('@count' => $this->options['items_per_page'], '@skip' => $this->options['offset']));
diff --git a/lib/Drupal/views/Plugin/views/query/QueryInterface.php b/lib/Drupal/views/Plugin/views/query/QueryInterface.php
new file mode 100644
index 0000000..8b014df
--- /dev/null
+++ b/lib/Drupal/views/Plugin/views/query/QueryInterface.php
@@ -0,0 +1,13 @@
+<?php
+
+/**
+ * Definition of Drupal\views\Plugin\query\QueryInterface.
+ */
+
+namespace Drupal\views\Plugin\views\query;
+
+use Drupal\views\Plugin\views\PluginInterface;
+
+interface QueryInterface extends PluginInterface {
+
+}
diff --git a/plugins/views_plugin_query.inc b/lib/Drupal/views/Plugin/views/query/QueryPluginBase.php
similarity index 91%
rename from plugins/views_plugin_query.inc
rename to lib/Drupal/views/Plugin/views/query/QueryPluginBase.php
index d39ed98..ce86581 100644
--- a/plugins/views_plugin_query.inc
+++ b/lib/Drupal/views/Plugin/views/query/QueryPluginBase.php
@@ -1,22 +1,14 @@
 <?php
 
 /**
- * @file
- * Defines the base query class, which is the underlying layer in a View.
+ * Definition of Drupal\views\Plugin\views\query\QueryPluginBase.
  */
 
-/**
- * @defgroup views_query_plugins Views query plugins
- * @{
- * A Views query plugin builds SQL to execute using the Drupal database API.
- *
- * @see hook_views_plugins()
- */
+namespace Drupal\views\Plugin\views\query;
 
-/**
- * Object used to create a SELECT query.
- */
-class views_plugin_query extends views_plugin {
+use Drupal\views\Plugin\views\Plugin;
+
+abstract class QueryPluginBase extends Plugin implements QueryInterface {
   /**
    * A pager plugin that should be provided by the display.
    *
@@ -179,7 +171,3 @@ class views_plugin_query extends views_plugin {
     return FALSE;
   }
 }
-
-/**
- * @}
- */
diff --git a/plugins/views_plugin_query_default.inc b/lib/Drupal/views/Plugin/views/query/Sql.php
similarity index 93%
rename from plugins/views_plugin_query_default.inc
rename to lib/Drupal/views/Plugin/views/query/Sql.php
index 0c3c1e0..4e872d5 100644
--- a/plugins/views_plugin_query_default.inc
+++ b/lib/Drupal/views/Plugin/views/query/Sql.php
@@ -2,19 +2,25 @@
 
 /**
  * @file
- * Defines the default query object.
+ * Definition of Drupal\views\Plugin\views\query\Sql.
  */
 
+namespace Drupal\views\Plugin\views\query;
+
 use Drupal\Core\Database\Database;
 use Drupal\views\Join;
+use Exception;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
 
 /**
- * Object used to create a SELECT query.
- *
- * @ingroup views_query_plugins
+ * @Plugin(
+ *   id = "views_query",
+ *   title = @Translation("SQL Query"),
+ *   help = @Translation("Query will be generated and run using the Drupal database API.")
+ * )
  */
-class views_plugin_query_default extends views_plugin_query {
-
+class Sql extends QueryPluginBase {
   /**
    * A list of tables in the order they should be added, keyed by alias.
    */
@@ -91,14 +97,14 @@ class views_plugin_query_default extends views_plugin_query {
    */
   var $pager = NULL;
 
-   /**
-    * An array mapping table aliases and field names to field aliases.
-    */
+  /**
+   * An array mapping table aliases and field names to field aliases.
+   */
   var $field_aliases = array();
 
-   /**
-    * Query tags which will be passed over to the dbtng query object.
-    */
+  /**
+   * Query tags which will be passed over to the dbtng query object.
+   */
   var $tags = array();
 
   /**
@@ -145,16 +151,16 @@ class views_plugin_query_default extends views_plugin_query {
       'alias' => $base_table,
     );
 
-/**
- * -- we no longer want the base field to appear automatigically.
+    /**
+     * -- we no longer want the base field to appear automatigically.
     if ($base_field) {
-      $this->fields[$base_field] = array(
-        'table' => $base_table,
-        'field' => $base_field,
-        'alias' => $base_field,
-      );
+    $this->fields[$base_field] = array(
+    'table' => $base_table,
+    'field' => $base_field,
+    'alias' => $base_field,
+    );
     }
- */
+     */
 
     $this->count_field = array(
       'table' => $base_table,
@@ -286,6 +292,7 @@ class views_plugin_query_default extends views_plugin_query {
       '#default_value' => implode(', ', $this->options['query_tags']),
       '#element_validate' => array('views_element_validate_tags'),
     );
+    $form_state['build_info']['files']['foo'] = drupal_get_path('module', 'views') . '/lib/Drupal/views/Plugin/Query/SqlQuery.php';
   }
 
   /**
@@ -697,8 +704,8 @@ class views_plugin_query_default extends views_plugin_query {
 
       // Do we need to try to ensure a path?
       if ($join->left_table != $this->relationships[$relationship]['table'] &&
-          $join->left_table != $this->relationships[$relationship]['base'] &&
-          !isset($this->tables[$relationship][$join->left_table]['alias'])) {
+        $join->left_table != $this->relationships[$relationship]['base'] &&
+        !isset($this->tables[$relationship][$join->left_table]['alias'])) {
         $this->ensure_table($join->left_table, $relationship);
       }
 
@@ -1202,8 +1209,8 @@ class views_plugin_query_default extends views_plugin_query {
 
       if (!empty($field['function'])) {
         $info = $this->get_aggregation_info();
-        if (!empty($info[$field['function']]['method']) && function_exists($info[$field['function']]['method'])) {
-          $string = $info[$field['function']]['method']($field['function'], $string);
+        if (!empty($info[$field['function']]['method']) && is_callable(array($this, $info[$field['function']]['method']))) {
+          $string = $this::$info[$field['function']]['method']($field['function'], $string);
           $placeholders = !empty($field['placeholders']) ? $field['placeholders'] : array();
           $query->addExpression($string, $fieldname, $placeholders);
         }
@@ -1530,67 +1537,72 @@ class views_plugin_query_default extends views_plugin_query {
       ),
       'count' => array(
         'title' => t('Count'),
-        'method' => 'views_query_default_aggregation_method_simple',
+        'method' => 'aggregation_method_simple',
         'handler' => array(
-          'argument' => 'views_handler_argument_group_by_numeric',
-          'field' => 'views_handler_field_numeric',
-          'filter' => 'views_handler_filter_group_by_numeric',
-          'sort' => 'views_handler_sort_group_by_numeric',
+          'argument' => 'groupby_numeric',
+          'field' => 'groupby_numeric',
+          'filter' => 'groupby_numeric',
+          'sort' => 'groupby_numeric',
         ),
       ),
       'count_distinct' => array(
         'title' => t('Count DISTINCT'),
-        'method' => 'views_query_default_aggregation_method_distinct',
+        'method' => 'aggregation_method_distinct',
         'handler' => array(
-          'argument' => 'views_handler_argument_group_by_numeric',
-          'field' => 'views_handler_field_numeric',
-          'filter' => 'views_handler_filter_group_by_numeric',
-          'sort' => 'views_handler_sort_group_by_numeric',
+          'argument' => 'groupby_numeric',
+          'field' => 'groupby_numeric',
+          'filter' => 'groupby_numeric',
+          'sort' => 'groupby_numeric',
         ),
       ),
       'sum' => array(
         'title' => t('Sum'),
-        'method' => 'views_query_default_aggregation_method_simple',
+        'method' => 'aggregation_method_simple',
         'handler' => array(
-          'argument' => 'views_handler_argument_group_by_numeric',
-          'filter' => 'views_handler_filter_group_by_numeric',
-          'sort' => 'views_handler_sort_group_by_numeric',
+          'argument' => 'groupby_numeric',
+          'field' => 'groupby_numeric',
+          'filter' => 'groupby_numeric',
+          'sort' => 'groupby_numeric',
         ),
       ),
       'avg' => array(
         'title' => t('Average'),
-        'method' => 'views_query_default_aggregation_method_simple',
+        'method' => 'aggregation_method_simple',
         'handler' => array(
-          'argument' => 'views_handler_argument_group_by_numeric',
-          'filter' => 'views_handler_filter_group_by_numeric',
-          'sort' => 'views_handler_sort_group_by_numeric',
+          'argument' => 'groupby_numeric',
+          'field' => 'groupby_numeric',
+          'filter' => 'groupby_numeric',
+          'sort' => 'groupby_numeric',
         ),
       ),
       'min' => array(
         'title' => t('Minimum'),
-        'method' => 'views_query_default_aggregation_method_simple',
+        'method' => 'aggregation_method_simple',
         'handler' => array(
-          'argument' => 'views_handler_argument_group_by_numeric',
-          'filter' => 'views_handler_filter_group_by_numeric',
-          'sort' => 'views_handler_sort_group_by_numeric',
+          'argument' => 'groupby_numeric',
+          'field' => 'groupby_numeric',
+          'filter' => 'groupby_numeric',
+          'sort' => 'groupby_numeric',
         ),
       ),
       'max' => array(
         'title' => t('Maximum'),
-        'method' => 'views_query_default_aggregation_method_simple',
+        'method' => 'aggregation_method_simple',
         'handler' => array(
-          'argument' => 'views_handler_argument_group_by_numeric',
-          'filter' => 'views_handler_filter_group_by_numeric',
-          'sort' => 'views_handler_sort_group_by_numeric',
+          'argument' => 'groupby_numeric',
+          'field' => 'groupby_numeric',
+          'filter' => 'groupby_numeric',
+          'sort' => 'groupby_numeric',
         ),
       ),
       'stddev_pop' => array(
         'title' => t('Standard derivation'),
-        'method' => 'views_query_default_aggregation_method_simple',
+        'method' => 'aggregation_method_simple',
         'handler' => array(
-          'argument' => 'views_handler_argument_group_by_numeric',
-          'filter' => 'views_handler_filter_group_by_numeric',
-          'sort' => 'views_handler_sort_group_by_numeric',
+          'argument' => 'groupby_numeric',
+          'field' => 'groupby_numeric',
+          'filter' => 'groupby_numeric',
+          'sort' => 'groupby_numeric',
         ),
       )
     );
@@ -1639,26 +1651,14 @@ class views_plugin_query_default extends views_plugin_query {
     }
     return array($entity_type, $result);
   }
-}
-
-function views_query_default_aggregation_method_simple($group_type, $field) {
-  return strtoupper($group_type) . '(' . $field . ')';
-}
 
-function views_query_default_aggregation_method_distinct($group_type, $field) {
-  $group_type = str_replace('_distinct', '', $group_type);
-  return strtoupper($group_type) . '(DISTINCT ' . $field . ')';
-}
+  function aggregation_method_simple($group_type, $field) {
+    return strtoupper($group_type) . '(' . $field . ')';
+  }
 
-/**
- * Validation callback for query tags.
- */
-function views_element_validate_tags($element, &$form_state) {
-  $values = array_map('trim', explode(',', $element['#value']));
-  foreach ($values as $value) {
-    if (preg_match("/[^a-z_]/", $value)) {
-      form_error($element, t('The query tags may only contain lower-case alphabetical characters and underscores.'));
-      return;
-    }
+  function aggregation_method_distinct($group_type, $field) {
+    $group_type = str_replace('_distinct', '', $group_type);
+    return strtoupper($group_type) . '(DISTINCT ' . $field . ')';
   }
+
 }
diff --git a/lib/Drupal/views/Plugin/views/relationship/Broken.php b/lib/Drupal/views/Plugin/views/relationship/Broken.php
new file mode 100644
index 0000000..f4050e1
--- /dev/null
+++ b/lib/Drupal/views/Plugin/views/relationship/Broken.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\views\Plugin\views\relationship\Broken.
+ */
+
+namespace Drupal\views\Plugin\views\relationship;
+
+use Drupal\views\Plugin\views\Handler;
+use Drupal\Core\Annotation\Plugin;
+
+/**
+ * A special handler to take the place of missing or broken handlers.
+ *
+ * @ingroup views_relationship_handlers
+ */
+
+/**
+ *
+ * @Plugin(
+ *   id = "broken"
+ * )
+ */
+class Broken extends RelationshipPluginBase {
+  function ui_name($short = FALSE) {
+    return t('Broken/missing handler');
+  }
+
+  function ensure_my_table() { /* No table to ensure! */ }
+  function query() { /* No query to run */ }
+  function options_form(&$form, &$form_state) {
+    $form['markup'] = array(
+      '#markup' => '<div class="form-item description">' . t('The handler for this item is broken or missing and cannot be used. If a module provided the handler and was disabled, re-enabling the module may restore it. Otherwise, you should probably delete this item.') . '</div>',
+    );
+  }
+
+  /**
+   * Determine if the handler is considered 'broken'
+   */
+  function broken() { return TRUE; }
+}
+
diff --git a/handlers/views_handler_relationship_groupwise_max.inc b/lib/Drupal/views/Plugin/views/relationship/GroupwiseMax.php
similarity index 98%
rename from handlers/views_handler_relationship_groupwise_max.inc
rename to lib/Drupal/views/Plugin/views/relationship/GroupwiseMax.php
index 06dee32..03876ad 100644
--- a/handlers/views_handler_relationship_groupwise_max.inc
+++ b/lib/Drupal/views/Plugin/views/relationship/GroupwiseMax.php
@@ -2,12 +2,15 @@
 
 /**
  * @file
- * Relationship for groupwise maximum handler.
+ * Definition of Drupal\views\Plugin\views\relationship\GroupwiseMax.
  */
 
+namespace Drupal\views\Plugin\views\relationship;
+
 use Drupal\Core\Database\Query\AlterableInterface;
 use Drupal\views\View;
 use Drupal\views\JoinSubquery;
+use Drupal\Core\Annotation\Plugin;
 
 /**
  * Relationship handler that allows a groupwise maximum of the linked in table.
@@ -57,7 +60,13 @@ use Drupal\views\JoinSubquery;
  *
  * @ingroup views_relationship_handlers
  */
-class views_handler_relationship_groupwise_max extends views_handler_relationship {
+
+/**
+ * @plugin(
+ *   id = "groupwise_max"
+ * )
+ */
+class GroupwiseMax extends RelationshipPluginBase {
 
   /**
    * Defines default values for options.
diff --git a/handlers/views_handler_relationship.inc b/lib/Drupal/views/Plugin/views/relationship/RelationshipPluginBase.php
similarity index 84%
rename from handlers/views_handler_relationship.inc
rename to lib/Drupal/views/Plugin/views/relationship/RelationshipPluginBase.php
index 0a1d89a..2b72b4a 100644
--- a/handlers/views_handler_relationship.inc
+++ b/lib/Drupal/views/Plugin/views/relationship/RelationshipPluginBase.php
@@ -2,10 +2,14 @@
 
 /**
  * @file
- * Views' relationship handlers.
+ * Definition of Drupal\views\Plugin\views\relationship\RelationshipPluginBase.
  */
 
+namespace Drupal\views\Plugin\views\relationship;
+
+use Drupal\views\Plugin\views\Handler;
 use Drupal\views\Join;
+use Drupal\Core\Annotation\Plugin;
 
 /**
  * @defgroup views_relationship_handlers Views relationship handlers
@@ -37,7 +41,13 @@ use Drupal\views\Join;
  *
  * @ingroup views_relationship_handlers
  */
-class views_handler_relationship extends views_handler {
+
+/**
+ * @Plugin(
+ *   id = "standard"
+ * )
+ */
+class RelationshipPluginBase extends Handler {
   /**
    * Init handler to let relationships live on tables other than
    * the table they operate on.
@@ -160,29 +170,5 @@ 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) {
-    return t('Broken/missing handler');
-  }
-
-  function ensure_my_table() { /* No table to ensure! */ }
-  function query() { /* No query to run */ }
-  function options_form(&$form, &$form_state) {
-    $form['markup'] = array(
-      '#markup' => '<div class="form-item description">' . t('The handler for this item is broken or missing and cannot be used. If a module provided the handler and was disabled, re-enabling the module may restore it. Otherwise, you should probably delete this item.') . '</div>',
-    );
-  }
-
-  /**
-   * Determine if the handler is considered 'broken'
-   */
-  function broken() { return TRUE; }
-}
-
-/**
  * @}
  */
diff --git a/plugins/views_plugin_row_fields.inc b/lib/Drupal/views/Plugin/views/row/Fields.php
similarity index 85%
rename from plugins/views_plugin_row_fields.inc
rename to lib/Drupal/views/Plugin/views/row/Fields.php
index c39b40b..b0b8d78 100644
--- a/plugins/views_plugin_row_fields.inc
+++ b/lib/Drupal/views/Plugin/views/row/Fields.php
@@ -2,9 +2,14 @@
 
 /**
  * @file
- * Contains the base row style plugin.
+ * Definition of Drupal\views\Plugin\views\row\Fields.
  */
 
+namespace Drupal\views\Plugin\views\row;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * The basic 'fields' row plugin
  *
@@ -13,7 +18,20 @@
  *
  * @ingroup views_row_plugins
  */
-class views_plugin_row_fields extends views_plugin_row {
+
+/**
+ * @Plugin(
+ *   id = "fields",
+ *   title = @Translation("Fields"),
+ *   help = @Translation("Displays the fields with an optional template."),
+ *   theme = "views_view_fields",
+ *   uses_fields = TRUE,
+ *   uses_options = TRUE,
+ *   type = "normal",
+ *   help_topic = "style-row-fields"
+ * )
+ */
+class Fields extends RowPluginBase {
   function option_definition() {
     $options = parent::option_definition();
 
diff --git a/plugins/views_plugin_row.inc b/lib/Drupal/views/Plugin/views/row/RowPluginBase.php
similarity index 94%
rename from plugins/views_plugin_row.inc
rename to lib/Drupal/views/Plugin/views/row/RowPluginBase.php
index 157cc26..e073cb0 100644
--- a/plugins/views_plugin_row.inc
+++ b/lib/Drupal/views/Plugin/views/row/RowPluginBase.php
@@ -2,9 +2,13 @@
 
 /**
  * @file
- * Contains the base row style plugin.
+ * Definition of Drupal\views\Plugin\views\row\RowPluginBase.
  */
 
+namespace Drupal\views\Plugin\views\row;
+
+use Drupal\views\Plugin\views\Plugin;
+
 /**
  * @defgroup views_row_plugins Views row plugins
  * @{
@@ -20,7 +24,7 @@
  * Default plugin to view a single row of a table. This is really just a wrapper around
  * a theme function.
  */
-class views_plugin_row extends views_plugin {
+abstract class RowPluginBase extends Plugin {
   /**
    * Initialize the row plugin.
    */
@@ -33,7 +37,7 @@ class views_plugin_row extends views_plugin {
   }
 
   function uses_fields() {
-    return !empty($this->definition['uses fields']);
+    return !empty($this->definition['uses_fields']);
   }
 
 
diff --git a/plugins/views_plugin_row_rss_fields.inc b/lib/Drupal/views/Plugin/views/row/RssFields.php
similarity index 93%
rename from plugins/views_plugin_row_rss_fields.inc
rename to lib/Drupal/views/Plugin/views/row/RssFields.php
index 9355e83..d9e4129 100644
--- a/plugins/views_plugin_row_rss_fields.inc
+++ b/lib/Drupal/views/Plugin/views/row/RssFields.php
@@ -1,13 +1,32 @@
 <?php
+
 /**
  * @file
- * Contains an implementation of RSS items based on fields on a row plugin.
+ * Definition of Drupal\views\Plugin\views\row\RssFields.
  */
 
+namespace Drupal\views\Plugin\views\row;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Renders an RSS item based on fields.
  */
-class views_plugin_row_rss_fields extends views_plugin_row {
+
+/**
+ * @Plugin(
+ *   id = "rss_fields",
+ *   title = @Translation("Fields"),
+ *   help = @Translation("Display fields as RSS items."),
+ *   theme = "views_view_row_rss",
+ *   uses_fields = TRUE,
+ *   uses_options = TRUE,
+ *   type = "feed",
+ *   help_topic = "style-row-fields"
+ * )
+ */
+class RssFields extends RowPluginBase {
   function option_definition() {
     $options = parent::option_definition();
     $options['title_field'] = array('default' => '');
diff --git a/lib/Drupal/views/Plugin/views/sort/Broken.php b/lib/Drupal/views/Plugin/views/sort/Broken.php
new file mode 100644
index 0000000..6772330
--- /dev/null
+++ b/lib/Drupal/views/Plugin/views/sort/Broken.php
@@ -0,0 +1,40 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\views\Plugin\views\sort\Broken
+ */
+
+namespace Drupal\views\Plugin\views\sort;
+
+use Drupal\Core\Annotation\Plugin;
+
+/**
+ * A special handler to take the place of missing or broken handlers.
+ *
+ * @ingroup views_sort_handlers
+ */
+
+/**
+ * @Plugin(
+ *   id = "broken"
+ * )
+ */
+class Broken extends SortPluginBase {
+  function ui_name($short = FALSE) {
+    return t('Broken/missing handler');
+  }
+
+  function ensure_my_table() { /* No table to ensure! */ }
+  function query($group_by = FALSE) { /* No query to run */ }
+  function options_form(&$form, &$form_state) {
+    $form['markup'] = array(
+      '#markup' => '<div class="form-item description">' . t('The handler for this item is broken or missing and cannot be used. If a module provided the handler and was disabled, re-enabling the module may restore it. Otherwise, you should probably delete this item.') . '</div>',
+    );
+  }
+
+  /**
+   * Determine if the handler is considered 'broken'
+   */
+  function broken() { return TRUE; }
+}
diff --git a/handlers/views_handler_sort_date.inc b/lib/Drupal/views/Plugin/views/sort/Date.php
similarity index 91%
rename from handlers/views_handler_sort_date.inc
rename to lib/Drupal/views/Plugin/views/sort/Date.php
index b37cc41..f972030 100644
--- a/handlers/views_handler_sort_date.inc
+++ b/lib/Drupal/views/Plugin/views/sort/Date.php
@@ -2,18 +2,25 @@
 
 /**
  * @file
- * Definition of views_handler_sort_date.
+ * Definition of Drupal\views\Plugin\views\sort\Date.
  */
 
+namespace Drupal\views\Plugin\views\sort;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Basic sort handler for dates.
  *
  * This handler enables granularity, which is the ability to make dates
  * equivalent based upon nearness.
  *
- * @ingroup views_sort_handlers
+ * @Plugin(
+ *   id = "date"
+ * )
+ *
  */
-class views_handler_sort_date extends views_handler_sort {
+class Date extends SortPluginBase {
   function option_definition() {
     $options = parent::option_definition();
 
diff --git a/handlers/views_handler_sort_group_by_numeric.inc b/lib/Drupal/views/Plugin/views/sort/GroupByNumeric.php
similarity index 75%
rename from handlers/views_handler_sort_group_by_numeric.inc
rename to lib/Drupal/views/Plugin/views/sort/GroupByNumeric.php
index 4a521c1..50b1f40 100644
--- a/handlers/views_handler_sort_group_by_numeric.inc
+++ b/lib/Drupal/views/Plugin/views/sort/GroupByNumeric.php
@@ -2,15 +2,21 @@
 
 /**
  * @file
- * Definition of views_handler_sort_group_by_numeric.
+ * Definition of Drupal\views\Plugin\views\sort\GroupByNumeric.
  */
 
+namespace Drupal\views\Plugin\views\sort;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Handler for GROUP BY on simple numeric fields.
  *
- * @ingroup views_sort_handlers
+ * @Plugin(
+ *   id = "groupby_numeric"
+ * )
  */
-class views_handler_sort_group_by_numeric extends views_handler_sort {
+class GroupByNumeric extends SortPluginBase {
   function init(&$view, &$options) {
     parent::init($view, $options);
 
diff --git a/handlers/views_handler_sort_menu_hierarchy.inc b/lib/Drupal/views/Plugin/views/sort/MenuHierarchy.php
similarity index 88%
rename from handlers/views_handler_sort_menu_hierarchy.inc
rename to lib/Drupal/views/Plugin/views/sort/MenuHierarchy.php
index 5a34b56..3c196ac 100644
--- a/handlers/views_handler_sort_menu_hierarchy.inc
+++ b/lib/Drupal/views/Plugin/views/sort/MenuHierarchy.php
@@ -2,10 +2,14 @@
 
 /**
  * @file
- * Definition of views_handler_sort_menu_hierarchy.
+ * Definition of Drupal\views\Plugin\views\sort\MenuHierarchy.
  */
 
+namespace Drupal\views\Plugin\views\sort;
+
 use Drupal\views\Join;
+use Drupal\Core\Annotation\Plugin;
+
 
 /**
  * Sort in menu hierarchy order.
@@ -16,9 +20,11 @@ use Drupal\views\Join;
  *
  * This is only really useful for the {menu_links} table.
  *
- * @ingroup views_sort_handlers
+ * @Plugin(
+ *   id = "menu_hierarchy"
+ * )
  */
-class views_handler_sort_menu_hierarchy extends views_handler_sort {
+class MenuHierarchy extends SortPluginBase {
   function option_definition() {
     $options = parent::option_definition();
     $options['sort_within_level'] = array('default' => FALSE);
diff --git a/handlers/views_handler_sort_random.inc b/lib/Drupal/views/Plugin/views/sort/Random.php
similarity index 55%
rename from handlers/views_handler_sort_random.inc
rename to lib/Drupal/views/Plugin/views/sort/Random.php
index eaaaf79..a8a818b 100644
--- a/handlers/views_handler_sort_random.inc
+++ b/lib/Drupal/views/Plugin/views/sort/Random.php
@@ -2,15 +2,21 @@
 
 /**
  * @file
- * Definition of views_handler_sort_random.
+ * Definition of Drupal\views\Plugin\views\sort\Random.
  */
 
+namespace Drupal\views\Plugin\views\sort;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Handle a random sort.
  *
- * @ingroup views_sort_handlers
+ * @Plugin(
+ *   id = "random"
+ * )
  */
-class views_handler_sort_random extends views_handler_sort {
+class Random extends SortPluginBase {
   function query() {
     $this->query->add_orderby('rand');
   }
diff --git a/handlers/views_handler_sort.inc b/lib/Drupal/views/Plugin/views/sort/SortPluginBase.php
similarity index 86%
rename from handlers/views_handler_sort.inc
rename to lib/Drupal/views/Plugin/views/sort/SortPluginBase.php
index 99574e4..42ae291 100644
--- a/handlers/views_handler_sort.inc
+++ b/lib/Drupal/views/Plugin/views/sort/SortPluginBase.php
@@ -2,21 +2,33 @@
 
 /**
  * @file
- * @todo.
+ * Definition of Drupal\views\Plugin\views\sort\SortPluginBase.
  */
 
+namespace Drupal\views\Plugin\views\sort;
+
+use Drupal\views\Plugin\views\Handler;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * @defgroup views_sort_handlers Views sort handlers
  * @{
  * Handlers to tell Views how to sort queries.
  */
 
+
 /**
  * Base sort handler that has no options and performs a simple sort.
  *
  * @ingroup views_sort_handlers
  */
-class views_handler_sort extends views_handler {
+
+/**
+ * @Plugin(
+ *   id = "standard"
+ * )
+ */
+class SortPluginBase extends Handler {
 
   /**
    * Determine if a sort can be exposed.
@@ -211,30 +223,5 @@ 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) {
-    return t('Broken/missing handler');
-  }
-
-  function ensure_my_table() { /* No table to ensure! */ }
-  function query($group_by = FALSE) { /* No query to run */ }
-  function options_form(&$form, &$form_state) {
-    $form['markup'] = array(
-      '#markup' => '<div class="form-item description">' . t('The handler for this item is broken or missing and cannot be used. If a module provided the handler and was disabled, re-enabling the module may restore it. Otherwise, you should probably delete this item.') . '</div>',
-    );
-  }
-
-  /**
-   * Determine if the handler is considered 'broken'
-   */
-  function broken() { return TRUE; }
-}
-
-
-/**
  * @}
  */
diff --git a/lib/Drupal/views/Plugin/views/style/DefaultStyle.php b/lib/Drupal/views/Plugin/views/style/DefaultStyle.php
new file mode 100644
index 0000000..f21a78b
--- /dev/null
+++ b/lib/Drupal/views/Plugin/views/style/DefaultStyle.php
@@ -0,0 +1,45 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\views\Plugin\views\style\DefaultStyle.
+ */
+
+namespace Drupal\views\Plugin\views\style;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
+/**
+ * Unformatted style plugin to render rows one after another with no
+ * decorations.
+ *
+ * @ingroup views_style_plugins
+ */
+
+/**
+ * @Plugin(
+ *   id = "default",
+ *   title = @Translation("Unformatted list"),
+ *   help = @Translation("Displays rows one after another."),
+ *   theme = "views_view_unformatted",
+ *   uses_row_plugin = TRUE,
+ *   uses_row_class = TRUE,
+ *   uses_grouping = TRUE,
+ *   uses_options = TRUE,
+ *   type = "normal",
+ *   help_topic = "style-unformatted"
+ * )
+ */
+class DefaultStyle extends StylePluginBase {
+  /**
+   * Set default options
+   */
+  function options(&$options) {
+    parent::options($options);
+  }
+
+  function options_form(&$form, &$form_state) {
+    parent::options_form($form, $form_state);
+  }
+}
diff --git a/plugins/views_plugin_style_summary.inc b/lib/Drupal/views/Plugin/views/style/DefaultSummary.php
similarity index 79%
rename from plugins/views_plugin_style_summary.inc
rename to lib/Drupal/views/Plugin/views/style/DefaultSummary.php
index 256c0e3..1830cbc 100644
--- a/plugins/views_plugin_style_summary.inc
+++ b/lib/Drupal/views/Plugin/views/style/DefaultSummary.php
@@ -2,15 +2,33 @@
 
 /**
  * @file
- * Contains the default summary style plugin, which displays items in an HTML list.
+ * Definition of Drupal\views\Plugin\views\style\StyleSummaryPluginBase.
  */
 
+namespace Drupal\views\Plugin\views\style;
+
+use Drupal\views\Plugin\views\style\StylePluginBase;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * The default style plugin for summaries.
  *
  * @ingroup views_style_plugins
  */
-class views_plugin_style_summary extends views_plugin_style {
+
+/**
+ * @Plugin(
+ *   id = "default_summary",
+ *   title = @Translation("List"),
+ *   help = @Translation("Displays the default summary as a list."),
+ *   theme = "views_view_summary",
+ *   type = "summary",
+ *   uses_options = TRUE,
+ *   help_topic = "style-summary"
+ * )
+ */
+class DefaultSummary extends StylePluginBase {
   function option_definition() {
     $options = parent::option_definition();
 
diff --git a/plugins/views_plugin_style_grid.inc b/lib/Drupal/views/Plugin/views/style/Grid.php
similarity index 76%
rename from plugins/views_plugin_style_grid.inc
rename to lib/Drupal/views/Plugin/views/style/Grid.php
index 9be7ee1..d3b873e 100644
--- a/plugins/views_plugin_style_grid.inc
+++ b/lib/Drupal/views/Plugin/views/style/Grid.php
@@ -2,15 +2,35 @@
 
 /**
  * @file
- * Contains the grid style plugin.
+ * Definition of Drupal\views\Plugin\views\style\Grid.
  */
 
+namespace Drupal\views\Plugin\views\style;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Style plugin to render each item in a grid cell.
  *
  * @ingroup views_style_plugins
  */
-class views_plugin_style_grid extends views_plugin_style {
+
+/**
+ * @Plugin(
+ *   id = "grid",
+ *   title = @Translation("Grid"),
+ *   help = @Translation("Displays rows in a grid."),
+ *   theme = "views_view_grid",
+ *   uses_fields = FALSE,
+ *   uses_row_plugin = TRUE,
+ *   uses_row_class = TRUE,
+ *   uses_options = TRUE,
+ *   type = "normal",
+ *   help_topic = "style-grid"
+ * )
+ */
+class Grid extends StylePluginBase {
   /**
    * Set default options
    */
@@ -31,11 +51,11 @@ class views_plugin_style_grid extends views_plugin_style {
   function options_form(&$form, &$form_state) {
     parent::options_form($form, $form_state);
     $form['columns'] = array(
-      '#type' => 'textfield',
+      '#type' => 'number',
       '#title' => t('Number of columns'),
       '#default_value' => $this->options['columns'],
       '#required' => TRUE,
-      '#element_validate' => array('views_element_validate_integer'),
+      '#min' => 0,
     );
     $form['alignment'] = array(
       '#type' => 'radios',
diff --git a/plugins/views_plugin_style_list.inc b/lib/Drupal/views/Plugin/views/style/HtmlList.php
similarity index 71%
rename from plugins/views_plugin_style_list.inc
rename to lib/Drupal/views/Plugin/views/style/HtmlList.php
index 2a1dadb..9c15f65 100644
--- a/plugins/views_plugin_style_list.inc
+++ b/lib/Drupal/views/Plugin/views/style/HtmlList.php
@@ -2,15 +2,34 @@
 
 /**
  * @file
- * Contains the list style plugin.
+ * Definition of Drupal\views\Plugin\views\style\List.
  */
 
+namespace Drupal\views\Plugin\views\style;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Style plugin to render each item in an ordered or unordered list.
  *
  * @ingroup views_style_plugins
  */
-class views_plugin_style_list extends views_plugin_style {
+
+/**
+ * @Plugin(
+ *   id = "html_list",
+ *   title = @Translation("HTML List"),
+ *   help = @Translation("Displays rows as HTML list."),
+ *   theme = "views_view_list",
+ *   uses_row_plugin = TRUE,
+ *   uses_row_class = TRUE,
+ *   uses_options = TRUE,
+ *   type = "normal",
+ *   help_topic = "style-list"
+ * )
+ */
+class HtmlList extends StylePluginBase {
   /**
    * Set default options
    */
diff --git a/plugins/views_plugin_style_jump_menu.inc b/lib/Drupal/views/Plugin/views/style/JumpMenu.php
similarity index 88%
rename from plugins/views_plugin_style_jump_menu.inc
rename to lib/Drupal/views/Plugin/views/style/JumpMenu.php
index 94612aa..d26690f 100644
--- a/plugins/views_plugin_style_jump_menu.inc
+++ b/lib/Drupal/views/Plugin/views/style/JumpMenu.php
@@ -2,15 +2,34 @@
 
 /**
  * @file
- * Contains the table style plugin.
+ * Definition of Drupal\views\Plugin\views\style\JumpMenu.
  */
 
+namespace Drupal\views\Plugin\views\style;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Style plugin to render each item as a row in a table.
  *
  * @ingroup views_style_plugins
  */
-class views_plugin_style_jump_menu extends views_plugin_style {
+
+/**
+ * @Plugin(
+ *   id = "jump_menu",
+ *   title = @Translation("Jump menu"),
+ *   help = @Translation("Puts all of the results into a select box and allows the user to go to a different page based upon the results."),
+ *   theme = "views_view_jump_menu",
+ *   uses_row_plugin = TRUE,
+ *   uses_fields = TRUE,
+ *   uses_options = TRUE,
+ *   type = "normal",
+ *   help_topic = "style-jump-menu"
+ * )
+ */
+class JumpMenu extends StylePluginBase {
   function option_definition() {
     $options = parent::option_definition();
 
diff --git a/plugins/views_plugin_style_summary_jump_menu.inc b/lib/Drupal/views/Plugin/views/style/JumpMenuSummary.php
similarity index 87%
rename from plugins/views_plugin_style_summary_jump_menu.inc
rename to lib/Drupal/views/Plugin/views/style/JumpMenuSummary.php
index be46db7..4b5ddf4 100644
--- a/plugins/views_plugin_style_summary_jump_menu.inc
+++ b/lib/Drupal/views/Plugin/views/style/JumpMenuSummary.php
@@ -2,15 +2,32 @@
 
 /**
  * @file
- * Contains the default summary style plugin, which displays items in an HTML list.
+ * Definition of Drupal\views\Plugin\views\style\JumpMenuStyleSummary.
  */
 
+namespace Drupal\views\Plugin\views\style;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * The default style plugin for summaries.
  *
  * @ingroup views_style_plugins
  */
-class views_plugin_style_summary_jump_menu extends views_plugin_style {
+/**
+ * @Plugin(
+ *   id = "jump_menu_summary",
+ *   title = @Translation("Jump menu"),
+ *   help = @Translation("Puts all of the results into a select box and allows the user to go to a different page based upon the results."),
+ *   theme = "views_view_summary_jump_menu",
+ *   uses_options = TRUE,
+ *   type = "summary",
+ *   help_topic = "style-summary-jump-menu"
+ * )
+ */
+
+class JumpMenuSummary extends DefaultSummary {
   function option_definition() {
     $options = parent::option_definition();
 
diff --git a/plugins/views_plugin_style_rss.inc b/lib/Drupal/views/Plugin/views/style/Rss.php
similarity index 86%
rename from plugins/views_plugin_style_rss.inc
rename to lib/Drupal/views/Plugin/views/style/Rss.php
index 27106a8..22da628 100644
--- a/plugins/views_plugin_style_rss.inc
+++ b/lib/Drupal/views/Plugin/views/style/Rss.php
@@ -2,15 +2,33 @@
 
 /**
  * @file
- * Contains the RSS style plugin.
+ * Definition of Drupal\views\Plugin\views\style\Rss.
  */
 
+namespace Drupal\views\Plugin\views\style;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Default style plugin to render an RSS feed.
  *
  * @ingroup views_style_plugins
  */
-class views_plugin_style_rss extends views_plugin_style {
+
+/**
+ * @Plugin(
+ *   id = "rss",
+ *   title = @Translation("RSS Feed"),
+ *   help = @Translation("Generates an RSS feed from a view."),
+ *   theme = "views_view_rss",
+ *   uses_row_plugin = TRUE,
+ *   uses_options = TRUE,
+ *   type = "feed",
+ *   help_topic = "style-rss"
+ * )
+ */
+class Rss extends StylePluginBase {
   function attach_to($display_id, $path, $title) {
     $display = $this->view->display[$display_id]->handler;
     $url_options = array();
diff --git a/plugins/views_plugin_style.inc b/lib/Drupal/views/Plugin/views/style/StylePluginBase.php
similarity index 97%
rename from plugins/views_plugin_style.inc
rename to lib/Drupal/views/Plugin/views/style/StylePluginBase.php
index 020b33f..c50d817 100644
--- a/plugins/views_plugin_style.inc
+++ b/lib/Drupal/views/Plugin/views/style/StylePluginBase.php
@@ -2,9 +2,15 @@
 
 /**
  * @file
- * Definition of views_plugin_style.
+ * Definition of Drupal\views\Plugin\views\style\StylePluginBase.
  */
 
+namespace Drupal\views\Plugin\views\style;
+
+use Drupal\views\Plugin\views\Plugin as ViewsPlugin;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * @defgroup views_style_plugins Views style plugins
  * @{
@@ -22,7 +28,7 @@
 /**
  * Base class to define a style plugin handler.
  */
-class views_plugin_style extends views_plugin {
+abstract class StylePluginBase extends ViewsPlugin {
   /**
    * Store all available tokens row rows.
    */
@@ -77,14 +83,14 @@ class views_plugin_style extends views_plugin {
    * Return TRUE if this style also uses a row plugin.
    */
   function uses_row_plugin() {
-    return !empty($this->definition['uses row plugin']);
+    return !empty($this->definition['uses_row_plugin']);
   }
 
   /**
    * Return TRUE if this style also uses a row plugin.
    */
   function uses_row_class() {
-    return !empty($this->definition['uses row class']);
+    return !empty($this->definition['uses_row_class']);
   }
 
   /**
@@ -100,7 +106,7 @@ class views_plugin_style extends views_plugin {
       $row_uses_fields = $this->row_plugin->uses_fields();
     }
     // Otherwise, check the definition or the option.
-    return $row_uses_fields || !empty($this->definition['uses fields']) || !empty($this->options['uses_fields']);
+    return $row_uses_fields || !empty($this->definition['uses_fields']) || !empty($this->options['uses_fields']);
   }
 
   /**
diff --git a/plugins/views_plugin_style_table.inc b/lib/Drupal/views/Plugin/views/style/Table.php
similarity index 95%
rename from plugins/views_plugin_style_table.inc
rename to lib/Drupal/views/Plugin/views/style/Table.php
index b4aa6a9..29b6b9c 100644
--- a/plugins/views_plugin_style_table.inc
+++ b/lib/Drupal/views/Plugin/views/style/Table.php
@@ -2,15 +2,35 @@
 
 /**
  * @file
- * Contains the table style plugin.
+ * Definition of Drupal\views\Plugin\views\style\Table.
  */
 
+namespace Drupal\views\Plugin\views\style;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Style plugin to render each item as a row in a table.
  *
  * @ingroup views_style_plugins
  */
-class views_plugin_style_table extends views_plugin_style {
+
+/**
+ * @Plugin(
+ *   id = "table",
+ *   title = @Translation("Table"),
+ *   help = @Translation("Displays rows in a table."),
+ *   theme = "views_view_table",
+ *   uses_row_plugin = FALSE,
+ *   uses_row_class = TRUE,
+ *   uses_fields = TRUE,
+ *   uses_options = TRUE,
+ *   type = "normal",
+ *   help_topic = "style-table"
+ * )
+ */
+class Table extends StylePluginBase {
 
   /**
    * Contains the current active sort column.
diff --git a/plugins/views_plugin_style_summary_unformatted.inc b/lib/Drupal/views/Plugin/views/style/UnformattedSummary.php
similarity index 56%
rename from plugins/views_plugin_style_summary_unformatted.inc
rename to lib/Drupal/views/Plugin/views/style/UnformattedSummary.php
index fc46624..c96dc3f 100644
--- a/plugins/views_plugin_style_summary_unformatted.inc
+++ b/lib/Drupal/views/Plugin/views/style/UnformattedSummary.php
@@ -2,15 +2,32 @@
 
 /**
  * @file
- * Contains the unformatted summary style plugin.
+ * Definition of Drupal\views\Plugin\views\style\UnformattedSummary.
  */
 
+namespace Drupal\views\Plugin\views\style;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * The default style plugin for summaries.
  *
  * @ingroup views_style_plugins
  */
-class views_plugin_style_summary_unformatted extends views_plugin_style_summary {
+
+/**
+ * @Plugin(
+ *   id = "unformatted_summary",
+ *   title = @Translation("Unformatted"),
+ *   help = @Translation("Displays the summary unformatted, with option for one after another or inline."),
+ *   theme = "views_view_summary_unformatted",
+ *   type = "summary",
+ *   uses_options = TRUE,
+ *   help_topic = "style-summary-unformatted"
+ * )
+ */
+class UnformattedSummary extends DefaultSummary {
   function option_definition() {
     $options = parent::option_definition();
     $options['inline'] = array('default' => FALSE, 'bool' => TRUE);
diff --git a/plugins/views_wizard/views_ui_comment_views_wizard.class.php b/lib/Drupal/views/Plugin/views/wizard/Comment.php
similarity index 81%
rename from plugins/views_wizard/views_ui_comment_views_wizard.class.php
rename to lib/Drupal/views/Plugin/views/wizard/Comment.php
index 09d4994..2861b19 100644
--- a/plugins/views_wizard/views_ui_comment_views_wizard.class.php
+++ b/lib/Drupal/views/Plugin/views/wizard/Comment.php
@@ -2,13 +2,54 @@
 
 /**
  * @file
- * Definition of ViewsUiCommentViewsWizard.
+ * Definition of Drupal\views\Plugin\views\wizard\Comment.
+ */
+
+namespace Drupal\views\Plugin\views\wizard;
+
+use Drupal\views\Plugin\wizard;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
+/**
+ * @todo: replace numbers with constants.
  */
 
 /**
  * Tests creating comment views with the wizard.
+ *
+ * @Plugin(
+ *   id = "comment",
+ *   base_table = "comment",
+ *   created_column = "created",
+ *   title = @Translation("Comments"),
+ *   filters = {
+ *     "status" = {
+ *       "value" = 1,
+ *       "table" = "comment",
+ *       "field" = "status"
+ *     },
+ *     "status_node" = {
+ *       "value" = 1,
+ *       "table" = "node",
+ *       "field" = "status",
+ *       "relationship" = "nid",
+ *     }
+ *   },
+ *   path_field = {
+ *     "id" = "cid",
+ *     "table" = "comment",
+ *     "field" = "cid",
+ *     "exclude" = TRUE,
+ *     "link_to_comment" = FALSE,
+ *     "alter" = {
+ *       "alter_text" = 1,
+ *       "text" = "comment/[cid]#comment-[cid]"
+ *     }
+ *   }
+ * )
  */
-class ViewsUiCommentViewsWizard extends ViewsUiBaseViewsWizard {
+class Comment extends WizardPluginBase {
 
   protected function row_style_options($type) {
     $options = array();
diff --git a/plugins/views_wizard/views_ui_file_managed_views_wizard.class.php b/lib/Drupal/views/Plugin/views/wizard/File.php
similarity index 71%
rename from plugins/views_wizard/views_ui_file_managed_views_wizard.class.php
rename to lib/Drupal/views/Plugin/views/wizard/File.php
index 111b631..c26a4a3 100644
--- a/plugins/views_wizard/views_ui_file_managed_views_wizard.class.php
+++ b/lib/Drupal/views/Plugin/views/wizard/File.php
@@ -2,13 +2,33 @@
 
 /**
  * @file
- * Definition of ViewsUiFileManagedViewsWizard.
+ * Definition of Drupal\views\Plugin\views\wizard\File.
  */
 
+namespace Drupal\views\Plugin\views\wizard;
+
+use Drupal\views\Plugin\views\wizard\WizardPluginBase;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Tests creating managed files views with the wizard.
+ *
+ * @Plugin(
+ *   id = "file_managed",
+ *   base_table = "file_managed",
+ *   created_column = "timestamp",
+ *   title = @Translation("Files"),
+ *   path_field = {
+ *     "id" = "uri",
+ *     "table" = "file_managed",
+ *     "field" = "uri",
+ *     "exclude" = TRUE,
+ *     "file_download_path" = TRUE
+ *   }
+ * )
  */
-class ViewsUiFileManagedViewsWizard extends ViewsUiBaseViewsWizard {
+class File extends WizardPluginBase {
   protected function default_display_options($form, $form_state) {
     $display_options = parent::default_display_options($form, $form_state);
 
diff --git a/plugins/views_wizard/views_ui_node_views_wizard.class.php b/lib/Drupal/views/Plugin/views/wizard/Node.php
similarity index 85%
rename from plugins/views_wizard/views_ui_node_views_wizard.class.php
rename to lib/Drupal/views/Plugin/views/wizard/Node.php
index 010220e..2a75a07 100644
--- a/plugins/views_wizard/views_ui_node_views_wizard.class.php
+++ b/lib/Drupal/views/Plugin/views/wizard/Node.php
@@ -2,13 +2,53 @@
 
 /**
  * @file
- * Definition of ViewsUiNodeViewsWizard.
+ * Definition of Drupal\views\Plugin\views\wizard\Node.
+ */
+
+namespace Drupal\views\Plugin\views\wizard;
+
+use Drupal\views\Plugin\views\wizard\WizardPluginBase;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
+/**
+ * @todo: replace numbers with constants.
  */
 
 /**
  * Tests creating node views with the wizard.
+ *
+ * @Plugin(
+ *   id = "node",
+ *   base_table = "node",
+ *   created_column = "created",
+ *   title = @Translation("Content"),
+ *   available_sorts = {
+ *     "title:DESC" = @Translation("Title")
+ *   },
+ *   filters = {
+ *     "status" = {
+ *       "value" = 1,
+ *       "table" = "node",
+ *       "field" = "status"
+ *     }
+ *   },
+ *   path_field = {
+ *     "id" = "nid",
+ *     "table" = "node",
+ *     "field" = "nid",
+ *     "exclude" = TRUE,
+ *     "link_to_node" = FALSE,
+ *     "alter" = {
+ *       "alter_text" = 1,
+ *       "text" = "node/[nid]"
+ *     }
+ *   }
+ * )
+ *
  */
-class ViewsUiNodeViewsWizard extends ViewsUiBaseViewsWizard {
+
+class Node extends WizardPluginBase {
 
   protected function row_style_options($type) {
     $options = array();
diff --git a/plugins/views_wizard/views_ui_node_revision_views_wizard.class.php b/lib/Drupal/views/Plugin/views/wizard/NodeRevision.php
similarity index 73%
rename from plugins/views_wizard/views_ui_node_revision_views_wizard.class.php
rename to lib/Drupal/views/Plugin/views/wizard/NodeRevision.php
index 3623f53..a01a9c4 100644
--- a/plugins/views_wizard/views_ui_node_revision_views_wizard.class.php
+++ b/lib/Drupal/views/Plugin/views/wizard/NodeRevision.php
@@ -2,13 +2,54 @@
 
 /**
  * @file
- * Definition of ViewsUiNodeRevisionViewsWizard.
+ * Definition of Drupal\views\Plugin\views\wizard\NodeRevision.
+ */
+
+namespace Drupal\views\Plugin\views\wizard;
+
+use Drupal\views\Plugin\views\wizard\WizardPluginBase;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
+/**
+ * @todo: replace numbers with constants.
  */
 
 /**
  * Tests creating node revision views with the wizard.
+ *
+ * @Plugin(
+ *   id = "node_revision",
+ *   base_table = "node_revision",
+ *   created_column = "timestamp",
+ *   title = @Translation("Content revisions"),
+ *   filters = {
+ *     "status" = {
+ *       "value" = 1,
+ *       "table" = "node",
+ *       "field" = "status"
+ *     }
+ *   },
+ *   path_field = {
+ *     "id" = "vid",
+ *     "table" = "node_revision",
+ *     "field" = "vid",
+ *     "exclude" = TRUE,
+ *     "alter" = {
+ *       "alter_text" = 1,
+ *       "text" = "node/[nid]/revisions/[vid]/view"
+ *     }
+ *   },
+ *   path_fields_supplemental = {
+ *     "id" = "id",
+ *     "table" = "node",
+ *     "field" = "nid",
+ *     "exclude" = TRUE,
+ *     "link_to_node" = FALSE
+ *   }
+ * )
  */
-class ViewsUiNodeRevisionViewsWizard extends ViewsUiNodeViewsWizard {
+class NodeRevision extends WizardPluginBase {
 
   /**
    * Node revisions do not support full posts or teasers, so remove them.
diff --git a/plugins/views_wizard/views_ui_taxonomy_term_views_wizard.class.php b/lib/Drupal/views/Plugin/views/wizard/TaxonomyTerm.php
similarity index 68%
rename from plugins/views_wizard/views_ui_taxonomy_term_views_wizard.class.php
rename to lib/Drupal/views/Plugin/views/wizard/TaxonomyTerm.php
index 4f05548..295c187 100644
--- a/plugins/views_wizard/views_ui_taxonomy_term_views_wizard.class.php
+++ b/lib/Drupal/views/Plugin/views/wizard/TaxonomyTerm.php
@@ -2,13 +2,35 @@
 
 /**
  * @file
- * Definition of ViewsUiTaxonomyTermViewsWizard.
+ * Definition of Drupal\views\Plugin\views\wizard\TaxonomyTerm.
  */
 
+namespace Drupal\views\Plugin\views\wizard;
+
+use Drupal\views\Plugin\views\wizard\WizardPluginBase;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Tests creating taxonomy views with the wizard.
+ *
+ * @Plugin(
+ *   id = "taxonomy_term",
+ *   base_table = "taxonomy_term_data",
+ *   title = @Translation("Taxonomy terms"),
+ *   path_field = {
+ *     "id" = "tid",
+ *     "table" = "taxonomy_term_data",
+ *     "field" = "tid",
+ *     "exclude" = TRUE,
+ *     "alter" = {
+ *       "alter_text" = 1,
+ *       "text" = "taxonomy/term/[tid]"
+ *     }
+ *   }
+ * )
  */
-class ViewsUiTaxonomyTermViewsWizard extends ViewsUiBaseViewsWizard {
+class TaxonomyTerm extends WizardPluginBase {
 
   protected function default_display_options($form, $form_state) {
     $display_options = parent::default_display_options($form, $form_state);
diff --git a/plugins/views_wizard/views_ui_users_views_wizard.class.php b/lib/Drupal/views/Plugin/views/wizard/Users.php
similarity index 65%
rename from plugins/views_wizard/views_ui_users_views_wizard.class.php
rename to lib/Drupal/views/Plugin/views/wizard/Users.php
index 73eff48..e103290 100644
--- a/plugins/views_wizard/views_ui_users_views_wizard.class.php
+++ b/lib/Drupal/views/Plugin/views/wizard/Users.php
@@ -2,13 +2,48 @@
 
 /**
  * @file
- * Definition of ViewsUiUsersViewsWizard.
+ * Definition of Drupal\views\Plugin\views\wizard\Users.
+ */
+
+namespace Drupal\views\Plugin\views\wizard;
+
+use Drupal\views\Plugin\views\wizard\WizardPluginBase;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
+/**
+ * @todo: replace numbers with constants.
  */
 
 /**
  * Tests creating user views with the wizard.
+ *
+ * @Plugin(
+ *   id = "users",
+ *   base_table = "users",
+ *   created_column = "created",
+ *   title = @Translation("Users"),
+ *   filters = {
+ *     "status" = {
+ *       "value" = 1,
+ *       "table" = "users",
+ *       "field" = "status"
+ *     }
+ *   },
+ *   path_field = {
+ *     "id" = "uid",
+ *     "table" = "users",
+ *     "field" = "uid",
+ *     "exclude" = TRUE,
+ *     "link_to_user" = FALSE,
+ *     "alter" = {
+ *       "alter_text" = 1,
+ *       "text" = "user/[uid]"
+ *     }
+ *   }
+ * )
  */
-class ViewsUiUsersViewsWizard extends ViewsUiBaseViewsWizard {
+class Users extends WizardPluginBase {
   protected function default_display_options($form, $form_state) {
     $display_options = parent::default_display_options($form, $form_state);
 
diff --git a/lib/Drupal/views/Plugin/views/wizard/WizardException.php b/lib/Drupal/views/Plugin/views/wizard/WizardException.php
new file mode 100644
index 0000000..bf84611
--- /dev/null
+++ b/lib/Drupal/views/Plugin/views/wizard/WizardException.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * @file
+ * Definition of Drupal\views\Plugin\views\wizard\WizardException.
+ */
+
+namespace Drupal\views\Plugin\views\wizard;
+
+use Exception;
+
+/**
+ * A custom exception class for our errors.
+ */
+class WizardException extends Exception {
+}
diff --git a/lib/Drupal/views/Plugin/views/wizard/WizardInterface.php b/lib/Drupal/views/Plugin/views/wizard/WizardInterface.php
new file mode 100644
index 0000000..0c8d57f
--- /dev/null
+++ b/lib/Drupal/views/Plugin/views/wizard/WizardInterface.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * @file
+ * Definition of Drupal\views\Plugin\views\wizard\WizardInterface.
+ */
+
+namespace Drupal\views\Plugin\views\wizard;
+
+/**
+ * Defines a common interface for Views Wizard plugins.
+ */
+interface WizardInterface {
+  function __construct($plugin);
+
+  /**
+   * For AJAX callbacks to build other elements in the "show" form.
+   */
+  function build_form($form, &$form_state);
+
+  /**
+   * Validate form and values.
+   *
+   * @return an array of form errors.
+   */
+  function validate($form, &$form_state);
+
+  /**
+   * Create a new View from form values.
+   *
+   * @return a view object.
+   *
+   * @throws ViewsWizardException in the event of a problem.
+   */
+  function create_view($form, &$form_state);
+}
diff --git a/plugins/views_wizard/views_ui_base_views_wizard.class.php b/lib/Drupal/views/Plugin/views/wizard/WizardPluginBase.php
similarity index 95%
rename from plugins/views_wizard/views_ui_base_views_wizard.class.php
rename to lib/Drupal/views/Plugin/views/wizard/WizardPluginBase.php
index ca6ba07..a90ad36 100644
--- a/plugins/views_wizard/views_ui_base_views_wizard.class.php
+++ b/lib/Drupal/views/Plugin/views/wizard/WizardPluginBase.php
@@ -2,49 +2,20 @@
 
 /**
  * @file
- * Provides the interface and base class for Views Wizard plugins.
- */
-
-use Drupal\views\View;
-
-/**
- * Defines a common interface for Views Wizard plugins.
+ * Definition of Drupal\views\Plugin\views\wizard\WizardPluginBase.
  */
-interface ViewsWizardInterface {
-  function __construct($plugin);
 
-  /**
-   * For AJAX callbacks to build other elements in the "show" form.
-   */
-  function build_form($form, &$form_state);
+namespace Drupal\views\Plugin\views\wizard;
 
-  /**
-   * Validate form and values.
-   *
-   * @return an array of form errors.
-   */
-  function validate($form, &$form_state);
-
-  /**
-   * Create a new View from form values.
-   *
-   * @return a view object.
-   *
-   * @throws ViewsWizardException in the event of a problem.
-   */
-  function create_view($form, &$form_state);
-}
-
-/**
- * A custom exception class for our errors.
- */
-class ViewsWizardException extends Exception {
-}
+use Drupal\views\View;
+use Drupal\views\Plugin\views\wizard\WizardInterface;
+use Drupal\views\Plugin\Type\ViewsPluginManager;
 
 /**
  * A very generic Views Wizard class - can be constructed for any base table.
+ * Provides the interface and base class for Views Wizard plugins.
  */
-class ViewsUiBaseViewsWizard implements ViewsWizardInterface {
+abstract class WizardPluginBase implements WizardInterface {
   protected $base_table;
   protected $entity_type;
   protected $entity_info = array();
@@ -146,12 +117,11 @@ class ViewsUiBaseViewsWizard implements ViewsWizardInterface {
     $this->build_form_style($form, $form_state, 'page');
     $form['displays']['page']['options']['items_per_page'] = array(
       '#title' => t('Items to display'),
-      '#type' => 'textfield',
-      '#default_value' => '10',
-      '#size' => 5,
-      '#element_validate' => array('views_element_validate_integer'),
+      '#type' => 'number',
+      '#default_value' => 10,
+      '#min' => 0,
     );
-    $form['displays']['page']['options']['pagerz'] = array(
+    $form['displays']['page']['options']['pager'] = array(
       '#title' => t('Use a pager'),
       '#type' => 'checkbox',
       '#default_value' => TRUE,
@@ -283,10 +253,9 @@ class ViewsUiBaseViewsWizard implements ViewsWizardInterface {
     $this->build_form_style($form, $form_state, 'block');
     $form['displays']['block']['options']['items_per_page'] = array(
       '#title' => t('Items per page'),
-      '#type' => 'textfield',
-      '#default_value' => '5',
-      '#size' => 5,
-      '#element_validate' => array('views_element_validate_integer'),
+      '#type' => 'number',
+      '#default_value' => 5,
+      '#min' => 0,
     );
     $form['displays']['block']['options']['pager'] = array(
       '#title' => t('Use a pager'),
@@ -303,6 +272,8 @@ class ViewsUiBaseViewsWizard implements ViewsWizardInterface {
   protected function build_form_style(&$form, &$form_state, $type) {
     $style_form =& $form['displays'][$type]['options']['style'];
     $style = $style_form['style_plugin']['#default_value'];
+    // @fixme
+
     $style_plugin = views_get_plugin('style', $style);
     if (isset($style_plugin) && $style_plugin->uses_row_plugin()) {
       $options = $this->row_style_options($type);
@@ -460,6 +431,12 @@ class ViewsUiBaseViewsWizard implements ViewsWizardInterface {
       $sorts += $this->plugin['available_sorts'];
     }
 
+    foreach ($sorts as &$option) {
+      if (is_object($option)) {
+        $option = $option->get();
+      }
+    }
+
     // If there is no sorts option available continue.
     if (!empty($sorts)) {
       $form['displays']['show']['sort'] = array(
@@ -641,7 +618,7 @@ class ViewsUiBaseViewsWizard implements ViewsWizardInterface {
     }
     else {
       foreach ($data as $field => $field_data) {
-        if (isset($field_data['field']['handler'])) {
+        if (isset($field_data['field']['id'])) {
           break;
         }
       }
@@ -692,10 +669,12 @@ class ViewsUiBaseViewsWizard implements ViewsWizardInterface {
         }
       }
       $table_data = views_fetch_data($table);
-      // Check whether the bundle key filter handler is or an child of it views_handler_filter_in_operator
+      // Check whether the bundle key filter handler is or an child of it in_operator
       // If it's not just use a single value instead of an array.
-      $handler = $table_data[$bundle_key]['filter']['handler'];
-      if ($handler == 'views_handler_filter_in_operator' || is_subclass_of($handler, 'views_handler_filter_in_operator')) {
+      $handler = $table_data[$bundle_key]['filter']['id'];
+      $plugin_manager = new ViewsPluginManager('filter');
+      $handler_definition = $plugin_manager->getDefinition($handler);
+      if ($handler == 'in_operator' || is_subclass_of($handler_definition['class'], 'Drupal\\views\\Plugin\\views\\filter\\InOperator')) {
         $value = drupal_map_assoc(array($form_state['values']['show']['type']));
       }
       else {
@@ -929,9 +908,9 @@ class ViewsUiBaseViewsWizard implements ViewsWizardInterface {
    * @throws ViewsWizardException if the values have not been validated.
    */
   function create_view($form, &$form_state) {
-   $view = $this->retrieve_validated_view($form, $form_state);
+    $view = $this->retrieve_validated_view($form, $form_state);
     if (empty($view)) {
-      throw new ViewsWizardException(t('Attempted to create_view with values that have not been validated'));
+      throw new WizardException(t('Attempted to create_view with values that have not been validated'));
     }
     return $view;
   }
diff --git a/lib/Drupal/views/Tests/AccessTest.php b/lib/Drupal/views/Tests/AccessTest.php
index 1b4d165..6cd3283 100644
--- a/lib/Drupal/views/Tests/AccessTest.php
+++ b/lib/Drupal/views/Tests/AccessTest.php
@@ -7,9 +7,7 @@
 
 namespace Drupal\views\Tests;
 
-use Drupal\simpletest\WebTestBase;
 use Drupal\views\View;
-use views_test_plugin_access_test_dynamic;
 
 /**
  * Basic test for pluggable access.
@@ -37,27 +35,6 @@ class AccessTest extends ViewsSqlTest {
     views_fetch_plugin_data(NULL, NULL, TRUE);
   }
 
-  function viewsPlugins() {
-    $plugins = array(
-      'access' =>  array(
-        'test_static' => array(
-          'title' => t('Static test access plugin'),
-          'help' => t('Provides a static test access plugin.'),
-          'handler' => 'views_test_plugin_access_test_static',
-          'path' => drupal_get_path('module', 'views_test') . '/test_plugins',
-        ),
-        'test_dynamic' => array(
-          'title' => t('Dynamic test access plugin'),
-          'help' => t('Provides a dynamic test access plugin.'),
-          'handler' => 'views_test_plugin_access_test_dynamic',
-          'path' => drupal_get_path('module', 'views_test') . '/test_plugins',
-        ),
-      ),
-    );
-
-    return $plugins;
-  }
-
   /**
    * Tests none access plugin.
    */
diff --git a/lib/Drupal/views/Tests/Field/ApiDataTest.php b/lib/Drupal/views/Tests/Field/ApiDataTest.php
index fc60821..18c62c5 100644
--- a/lib/Drupal/views/Tests/Field/ApiDataTest.php
+++ b/lib/Drupal/views/Tests/Field/ApiDataTest.php
@@ -7,8 +7,6 @@
 
 namespace Drupal\views\Tests\Field;
 
-use Drupal\simpletest\WebTestBase;
-
 /**
  * Test the produced views_data.
  */
diff --git a/lib/Drupal/views/Tests/Field/ApiTestBase.php b/lib/Drupal/views/Tests/Field/ApiTestBase.php
index 8b8b716..7e2c897 100644
--- a/lib/Drupal/views/Tests/Field/ApiTestBase.php
+++ b/lib/Drupal/views/Tests/Field/ApiTestBase.php
@@ -18,7 +18,6 @@
 
 namespace Drupal\views\Tests\Field;
 
-use Drupal\simpletest\WebTestBase;
 use Drupal\views\Tests\ViewsSqlTest;
 
 /**
diff --git a/lib/Drupal/views/Tests/Field/HandlerFieldFieldTest.php b/lib/Drupal/views/Tests/Field/HandlerFieldFieldTest.php
index cb4f608..9116d2c 100644
--- a/lib/Drupal/views/Tests/Field/HandlerFieldFieldTest.php
+++ b/lib/Drupal/views/Tests/Field/HandlerFieldFieldTest.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\views\Tests\Field;
 
-use Drupal\simpletest\WebTestBase;
 use Drupal\views\View;
 
 /**
diff --git a/lib/Drupal/views/Tests/Handler/ArgumentNullTest.php b/lib/Drupal/views/Tests/Handler/ArgumentNullTest.php
index 27d4cdb..c362e8f 100644
--- a/lib/Drupal/views/Tests/Handler/ArgumentNullTest.php
+++ b/lib/Drupal/views/Tests/Handler/ArgumentNullTest.php
@@ -10,20 +10,20 @@ namespace Drupal\views\Tests\Handler;
 use Drupal\views\Tests\ViewsSqlTest;
 
 /**
- * Tests the core views_handler_argument_null handler.
+ * Tests the core Drupal\views\Plugin\views\argument\Null handler.
  */
 class ArgumentNullTest extends ViewsSqlTest {
   public static function getInfo() {
     return array(
       'name' => 'Argument: Null',
-      'description' => 'Test the core views_handler_argument_null handler.',
+      'description' => 'Test the core Drupal\views\Plugin\views\argument\Null handler.',
       'group' => 'Views Handlers',
     );
   }
 
   function viewsData() {
     $data = parent::viewsData();
-    $data['views_test']['id']['argument']['handler'] = 'views_handler_argument_null';
+    $data['views_test']['id']['argument']['id'] = 'null';
 
     return $data;
   }
diff --git a/lib/Drupal/views/Tests/Handler/ArgumentStringTest.php b/lib/Drupal/views/Tests/Handler/ArgumentStringTest.php
index 8695cc3..2b9c1fa 100644
--- a/lib/Drupal/views/Tests/Handler/ArgumentStringTest.php
+++ b/lib/Drupal/views/Tests/Handler/ArgumentStringTest.php
@@ -11,13 +11,13 @@ use Drupal\views\Tests\ViewsSqlTest;
 use Drupal\views\View;
 
 /**
- * Tests the core views_handler_argument_string handler.
+ * Tests the core Drupal\views\Plugin\views\argument\String handler.
  */
 class ArgumentStringTest extends ViewsSqlTest {
   public static function getInfo() {
     return array(
       'name' => 'Argument: String',
-      'description' => 'Test the core views_handler_argument_string handler.',
+      'description' => 'Test the core Drupal\views\Plugin\views\argument\String handler.',
       'group' => 'Views Handlers',
     );
   }
diff --git a/lib/Drupal/views/Tests/Handler/FieldBooleanTest.php b/lib/Drupal/views/Tests/Handler/FieldBooleanTest.php
index 7e4e375..21b9320 100644
--- a/lib/Drupal/views/Tests/Handler/FieldBooleanTest.php
+++ b/lib/Drupal/views/Tests/Handler/FieldBooleanTest.php
@@ -10,13 +10,13 @@ namespace Drupal\views\Tests\Handler;
 use Drupal\views\Tests\ViewsSqlTest;
 
 /**
- * Tests the core views_handler_field_boolean handler.
+ * Tests the core Drupal\views\Plugin\views\field\Boolean handler.
  */
 class FieldBooleanTest extends ViewsSqlTest {
   public static function getInfo() {
     return array(
       'name' => 'Field: Boolean',
-      'description' => 'Test the core views_handler_field_boolean handler.',
+      'description' => 'Test the core Drupal\views\Plugin\views\field\Boolean handler.',
       'group' => 'Views Handlers',
     );
   }
@@ -31,7 +31,7 @@ class FieldBooleanTest extends ViewsSqlTest {
 
   function viewsData() {
     $data = parent::viewsData();
-    $data['views_test']['age']['field']['handler'] = 'views_handler_field_boolean';
+    $data['views_test']['age']['field']['id'] = 'boolean';
     return $data;
   }
 
diff --git a/lib/Drupal/views/Tests/Handler/FieldCounterTest.php b/lib/Drupal/views/Tests/Handler/FieldCounterTest.php
index 5897478..c704bd4 100644
--- a/lib/Drupal/views/Tests/Handler/FieldCounterTest.php
+++ b/lib/Drupal/views/Tests/Handler/FieldCounterTest.php
@@ -10,13 +10,13 @@ namespace Drupal\views\Tests\Handler;
 use Drupal\views\Tests\ViewsSqlTest;
 
 /**
- * Tests the views_handler_field_counter handler.
+ * Tests the Drupal\views\Plugin\views\field\Counter handler.
  */
 class FieldCounterTest extends ViewsSqlTest {
   public static function getInfo() {
     return array(
       'name' => 'Field: Counter',
-      'description' => 'Tests the views_handler_field_counter handler.',
+      'description' => 'Tests the Drupal\views\Plugin\views\field\Counter handler.',
       'group' => 'Views Handlers',
     );
   }
diff --git a/lib/Drupal/views/Tests/Handler/FieldCustomTest.php b/lib/Drupal/views/Tests/Handler/FieldCustomTest.php
index 803ae61..b0a76a6 100644
--- a/lib/Drupal/views/Tests/Handler/FieldCustomTest.php
+++ b/lib/Drupal/views/Tests/Handler/FieldCustomTest.php
@@ -10,20 +10,20 @@ namespace Drupal\views\Tests\Handler;
 use Drupal\views\Tests\ViewsSqlTest;
 
 /**
- * Tests the core views_handler_field_custom handler.
+ * Tests the core Drupal\views\Plugin\views\field\Custom handler.
  */
 class FieldCustomTest extends ViewsSqlTest {
   public static function getInfo() {
     return array(
       'name' => 'Field: Custom',
-      'description' => 'Test the core views_handler_field_custom handler.',
+      'description' => 'Test the core Drupal\views\Plugin\views\field\Custom handler.',
       'group' => 'Views Handlers',
     );
   }
 
   function viewsData() {
     $data = parent::viewsData();
-    $data['views_test']['name']['field']['handler'] = 'views_handler_field_custom';
+    $data['views_test']['name']['field']['id'] = 'custom';
     return $data;
   }
 
diff --git a/lib/Drupal/views/Tests/Handler/FieldDateTest.php b/lib/Drupal/views/Tests/Handler/FieldDateTest.php
index 86c1e85..f9cfbec 100644
--- a/lib/Drupal/views/Tests/Handler/FieldDateTest.php
+++ b/lib/Drupal/views/Tests/Handler/FieldDateTest.php
@@ -10,20 +10,20 @@ namespace Drupal\views\Tests\Handler;
 use Drupal\views\Tests\ViewsSqlTest;
 
 /**
- * Tests the core views_handler_field_date handler.
+ * Tests the core Drupal\views\Plugin\views\field\Date handler.
  */
 class FieldDateTest extends ViewsSqlTest {
   public static function getInfo() {
     return array(
       'name' => 'Field: Date',
-      'description' => 'Test the core views_handler_field_date handler.',
+      'description' => 'Test the core Drupal\views\Plugin\views\field\Date handler.',
       'group' => 'Views Handlers',
     );
   }
 
   function viewsData() {
     $data = parent::viewsData();
-    $data['views_test']['created']['field']['handler'] = 'views_handler_field_date';
+    $data['views_test']['created']['field']['id'] = 'date';
     return $data;
   }
 
diff --git a/lib/Drupal/views/Tests/Handler/FieldFileSizeTest.php b/lib/Drupal/views/Tests/Handler/FieldFileSizeTest.php
index 5d74e90..e02559e 100644
--- a/lib/Drupal/views/Tests/Handler/FieldFileSizeTest.php
+++ b/lib/Drupal/views/Tests/Handler/FieldFileSizeTest.php
@@ -10,7 +10,7 @@ namespace Drupal\views\Tests\Handler;
 use Drupal\views\Tests\ViewsSqlTest;
 
 /**
- * Tests the core views_handler_field_file_size handler.
+ * Tests the core Drupal\views\Plugin\views\field\FileSize handler.
  *
  * @see CommonXssUnitTest
  */
@@ -18,7 +18,7 @@ class FieldFileSizeTest extends ViewsSqlTest {
   public static function getInfo() {
     return array(
       'name' => 'Field: file_size',
-      'description' => 'Test the core views_handler_field_file_size handler.',
+      'description' => 'Test the core Drupal\views\Plugin\views\field\FileSize handler.',
       'group' => 'Views Handlers',
     );
   }
@@ -35,7 +35,7 @@ class FieldFileSizeTest extends ViewsSqlTest {
 
   function viewsData() {
     $data = parent::viewsData();
-    $data['views_test']['age']['field']['handler'] = 'views_handler_field_file_size';
+    $data['views_test']['age']['field']['id'] = 'file_size';
 
     return $data;
   }
diff --git a/lib/Drupal/views/Tests/Handler/FieldMathTest.php b/lib/Drupal/views/Tests/Handler/FieldMathTest.php
index cd7bbe1..6ff67f2 100644
--- a/lib/Drupal/views/Tests/Handler/FieldMathTest.php
+++ b/lib/Drupal/views/Tests/Handler/FieldMathTest.php
@@ -10,13 +10,13 @@ namespace Drupal\views\Tests\Handler;
 use Drupal\views\Tests\ViewsSqlTest;
 
 /**
- * Tests the core views_handler_field_math handler.
+ * Tests the core Drupal\views\Plugin\views\field\Math handler.
  */
 class FieldMathTest extends ViewsSqlTest {
   public static function getInfo() {
     return array(
       'name' => 'Field: Math',
-      'description' => 'Test the core views_handler_field_math handler.',
+      'description' => 'Test the core Drupal\views\Plugin\views\field\Math handler.',
       'group' => 'Views Handlers',
     );
   }
diff --git a/lib/Drupal/views/Tests/Handler/FieldUrlTest.php b/lib/Drupal/views/Tests/Handler/FieldUrlTest.php
index edd1ccd..ffc5b55 100644
--- a/lib/Drupal/views/Tests/Handler/FieldUrlTest.php
+++ b/lib/Drupal/views/Tests/Handler/FieldUrlTest.php
@@ -9,20 +9,20 @@ namespace Drupal\views\Tests\Handler;
 
 use Drupal\views\Tests\ViewsSqlTest;
 /**
- * Tests the core views_handler_field_url handler.
+ * Tests the core Drupal\views\Plugin\views\field\Url handler.
  */
 class FieldUrlTest extends ViewsSqlTest {
   public static function getInfo() {
     return array(
       'name' => 'Field: Url',
-      'description' => 'Test the core views_handler_field_url handler.',
+      'description' => 'Test the core Drupal\views\Plugin\views\field\Url handler.',
       'group' => 'Views Handlers',
     );
   }
 
   function viewsData() {
     $data = parent::viewsData();
-    $data['views_test']['name']['field']['handler'] = 'views_handler_field_url';
+    $data['views_test']['name']['field']['id'] = 'url';
     return $data;
   }
 
diff --git a/lib/Drupal/views/Tests/Handler/FieldXssTest.php b/lib/Drupal/views/Tests/Handler/FieldXssTest.php
index 97f636d..c461915 100644
--- a/lib/Drupal/views/Tests/Handler/FieldXssTest.php
+++ b/lib/Drupal/views/Tests/Handler/FieldXssTest.php
@@ -10,7 +10,7 @@ namespace Drupal\views\Tests\Handler;
 use Drupal\views\Tests\ViewsSqlTest;
 
 /**
- * Tests the core views_handler_field_css handler.
+ * Tests the core Drupal\views\Plugin\views\field\Xss handler.
  *
  * @see CommonXssUnitTest
  */
@@ -18,7 +18,7 @@ class FieldXssTest extends ViewsSqlTest {
   public static function getInfo() {
     return array(
       'name' => 'Field: Xss',
-      'description' => 'Test the core views_handler_field_css handler.',
+      'description' => 'Test the core Drupal\views\Plugin\views\field\Xss handler.',
       'group' => 'Views Handlers',
     );
   }
@@ -36,7 +36,7 @@ class FieldXssTest extends ViewsSqlTest {
 
   function viewsData() {
     $data = parent::viewsData();
-    $data['views_test']['name']['field']['handler'] = 'views_handler_field_xss';
+    $data['views_test']['name']['field']['id'] = 'xss';
 
     return $data;
   }
diff --git a/lib/Drupal/views/Tests/Handler/FilterDateTest.php b/lib/Drupal/views/Tests/Handler/FilterDateTest.php
index 19d96a5..e86bed1 100644
--- a/lib/Drupal/views/Tests/Handler/FilterDateTest.php
+++ b/lib/Drupal/views/Tests/Handler/FilterDateTest.php
@@ -11,13 +11,13 @@ use Drupal\views\Tests\ViewsSqlTest;
 use Drupal\views\View;
 
 /**
- * Tests the core views_handler_filter_date handler.
+ * Tests the core Drupal\views\Plugin\views\filter\Date handler.
  */
 class FilterDateTest extends ViewsSqlTest {
   public static function getInfo() {
     return array(
       'name' => 'Filter: Date',
-      'description' => 'Test the core views_handler_filter_date handler.',
+      'description' => 'Test the core Drupal\views\Plugin\views\filter\Date handler.',
       'group' => 'Views Handlers',
     );
   }
@@ -34,11 +34,10 @@ class FilterDateTest extends ViewsSqlTest {
     $this->map = array(
       'nid' => 'nid',
     );
-    $this->enableViewsUi();
   }
 
   /**
-  /* Test the general offset functionality.
+   * Test the general offset functionality.
    */
   function testOffset() {
     $view = $this->views_test_offset();
diff --git a/lib/Drupal/views/Tests/Handler/FilterEqualityTest.php b/lib/Drupal/views/Tests/Handler/FilterEqualityTest.php
index 7e1874b..50d9ef5 100644
--- a/lib/Drupal/views/Tests/Handler/FilterEqualityTest.php
+++ b/lib/Drupal/views/Tests/Handler/FilterEqualityTest.php
@@ -10,13 +10,13 @@ namespace Drupal\views\Tests\Handler;
 use Drupal\views\Tests\ViewsSqlTest;
 
 /**
- * Tests the core views_handler_filter_equality handler.
+ * Tests the core Drupal\views\Plugin\views\filter\Equality handler.
  */
 class FilterEqualityTest extends ViewsSqlTest {
   public static function getInfo() {
     return array(
       'name' => 'Filter: Equality',
-      'description' => 'Test the core views_handler_filter_equality handler.',
+      'description' => 'Test the core Drupal\views\Plugin\views\filter\Equality handler.',
       'group' => 'Views Handlers',
     );
   }
@@ -30,7 +30,7 @@ class FilterEqualityTest extends ViewsSqlTest {
 
   function viewsData() {
     $data = parent::viewsData();
-    $data['views_test']['name']['filter']['handler'] = 'views_handler_filter_equality';
+    $data['views_test']['name']['filter']['id'] = 'equality';
 
     return $data;
   }
diff --git a/lib/Drupal/views/Tests/Handler/FilterInOperatorTest.php b/lib/Drupal/views/Tests/Handler/FilterInOperatorTest.php
index f3b0da5..aff3734 100644
--- a/lib/Drupal/views/Tests/Handler/FilterInOperatorTest.php
+++ b/lib/Drupal/views/Tests/Handler/FilterInOperatorTest.php
@@ -10,20 +10,20 @@ namespace Drupal\views\Tests\Handler;
 use Drupal\views\Tests\ViewsSqlTest;
 
 /**
- * Tests the core views_handler_filter_in_operator handler.
+ * Tests the core Drupal\views\Plugin\views\filter\InOperator handler.
  */
 class FilterInOperatorTest extends ViewsSqlTest {
   public static function getInfo() {
     return array(
       'name' => 'Filter: in_operator',
-      'description' => 'Test the core views_handler_filter_in_operator handler.',
+      'description' => 'Test the core Drupal\views\Plugin\views\filter\InOperator handler.',
       'group' => 'Views Handlers',
     );
   }
 
   function viewsData() {
     $data = parent::viewsData();
-    $data['views_test']['age']['filter']['handler'] = 'views_handler_filter_in_operator';
+    $data['views_test']['age']['filter']['id'] = 'in_operator';
 
     return $data;
   }
diff --git a/lib/Drupal/views/Tests/Handler/FilterStringTest.php b/lib/Drupal/views/Tests/Handler/FilterStringTest.php
index 426e657..ce6f826 100644
--- a/lib/Drupal/views/Tests/Handler/FilterStringTest.php
+++ b/lib/Drupal/views/Tests/Handler/FilterStringTest.php
@@ -10,7 +10,7 @@ namespace Drupal\views\Tests\Handler;
 use Drupal\views\Tests\ViewsSqlTest;
 
 /**
- * Tests the core views_handler_filter_string handler.
+ * Tests the core Drupal\views\Plugin\views\filter\String handler.
  */
 class FilterStringTest extends ViewsSqlTest {
   var $column_map = array();
@@ -18,7 +18,7 @@ class FilterStringTest extends ViewsSqlTest {
   public static function getInfo() {
     return array(
       'name' => 'Filter: String',
-      'description' => 'Tests the core views_handler_filter_string handler.',
+      'description' => 'Tests the core Drupal\views\Plugin\views\filter\String handler.',
       'group' => 'Views Handlers',
     );
   }
diff --git a/lib/Drupal/views/Tests/Handler/SortDateTest.php b/lib/Drupal/views/Tests/Handler/SortDateTest.php
index f2f67a2..a0756f7 100644
--- a/lib/Drupal/views/Tests/Handler/SortDateTest.php
+++ b/lib/Drupal/views/Tests/Handler/SortDateTest.php
@@ -10,13 +10,13 @@ namespace Drupal\views\Tests\Handler;
 use Drupal\views\Tests\ViewsSqlTest;
 
 /**
- * Tests for core views_handler_sort_date handler.
+ * Tests for core Drupal\views\Plugin\views\sort\Date handler.
  */
 class SortDateTest extends ViewsSqlTest {
   public static function getInfo() {
     return array(
       'name' => 'Sort: date',
-      'description' => 'Test the core views_handler_sort_date handler.',
+      'description' => 'Test the core Drupal\views\Plugin\views\sort\Date handler.',
       'group' => 'Views Handlers',
     );
   }
diff --git a/lib/Drupal/views/Tests/Handler/SortRandomTest.php b/lib/Drupal/views/Tests/Handler/SortRandomTest.php
index da9f4aa..577e6ba 100644
--- a/lib/Drupal/views/Tests/Handler/SortRandomTest.php
+++ b/lib/Drupal/views/Tests/Handler/SortRandomTest.php
@@ -10,13 +10,13 @@ namespace Drupal\views\Tests\Handler;
 use Drupal\views\Tests\ViewsSqlTest;
 
 /**
- * Tests for core views_handler_sort_random handler.
+ * Tests for core Drupal\views\Plugin\views\sort\Random handler.
  */
 class SortRandomTest extends ViewsSqlTest {
   public static function getInfo() {
     return array(
       'name' => 'Sort: random',
-      'description' => 'Test the core views_handler_sort_random handler.',
+      'description' => 'Test the core Drupal\views\Plugin\views\sort\Random handler.',
       'group' => 'Views Handlers',
     );
   }
diff --git a/lib/Drupal/views/Tests/Handler/SortTest.php b/lib/Drupal/views/Tests/Handler/SortTest.php
index cf6a4ca..86f22d1 100644
--- a/lib/Drupal/views/Tests/Handler/SortTest.php
+++ b/lib/Drupal/views/Tests/Handler/SortTest.php
@@ -10,13 +10,13 @@ namespace Drupal\views\Tests\Handler;
 use Drupal\views\Tests\ViewsSqlTest;
 
 /**
- * Tests for core views_handler_sort handler.
+ * Tests for core Drupal\views\Plugin\views\sort\SortPluginBase handler.
  */
 class SortTest extends ViewsSqlTest {
   public static function getInfo() {
     return array(
       'name' => 'Sort: generic',
-      'description' => 'Test the core views_handler_sort handler.',
+      'description' => 'Test the core Drupal\views\Plugin\views\sort\SortPluginBase handler.',
       'group' => 'Views Handlers',
     );
   }
diff --git a/lib/Drupal/views/Tests/ModuleTest.php b/lib/Drupal/views/Tests/ModuleTest.php
index 6cd8e37..22d8a69 100644
--- a/lib/Drupal/views/Tests/ModuleTest.php
+++ b/lib/Drupal/views/Tests/ModuleTest.php
@@ -111,7 +111,7 @@ class ModuleTest extends ViewsSqlTest {
     $types = array('field', 'area', 'filter');
     foreach ($types as $type) {
       $handler = views_get_handler($this->randomName(), $this->randomName(), $type);
-      $this->assertEqual('views_handler_' . $type . '_broken', get_class($handler), t('Make sure that a broken handler of type: @type are created', array('@type' => $type)));
+      $this->assertEqual('Drupal\views\Plugin\views\\' . $type . '\Broken', get_class($handler), t('Make sure that a broken handler of type: @type are created', array('@type' => $type)));
     }
 
     $views_data = $this->viewsData();
@@ -147,10 +147,6 @@ class ModuleTest extends ViewsSqlTest {
     $this->assertInstanceHandler($handler, 'views_test', 'name', 'field');
     $handler = views_get_handler('views_test_previous', 'name_previous', 'argument');
     $this->assertInstanceHandler($handler, 'views_test', 'name', 'argument');
-
-    // Test the override handler feature.
-    $handler = views_get_handler('views_test', 'job', 'filter', 'views_handler_filter');
-    $this->assertEqual('views_handler_filter', get_class($handler));
   }
 
   /**
@@ -160,6 +156,6 @@ class ModuleTest extends ViewsSqlTest {
     $table_data = views_fetch_data($table);
     $field_data = $table_data[$field][$id];
 
-    $this->assertEqual($field_data['handler'], get_class($handler));
+    $this->assertEqual($field_data['id'], $handler->getPluginId());
   }
 }
diff --git a/lib/Drupal/views/Tests/Plugins/DisplayTestCase.php b/lib/Drupal/views/Tests/Plugin/DisplayTestCase.php
similarity index 98%
rename from lib/Drupal/views/Tests/Plugins/DisplayTestCase.php
rename to lib/Drupal/views/Tests/Plugin/DisplayTestCase.php
index 542d3ff..76cc457 100644
--- a/lib/Drupal/views/Tests/Plugins/DisplayTestCase.php
+++ b/lib/Drupal/views/Tests/Plugin/DisplayTestCase.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Drupal\views\Tests\Plugins\DisplayTestCase.
+ * Definition of Drupal\views\Tests\Plugin\DisplayTestCase.
  */
 
-namespace Drupal\views\Tests\Plugins;
+namespace Drupal\views\Tests\Plugin;
 
 use Drupal\views\Tests\ViewsSqlTest;
 use Drupal\views\View;
diff --git a/lib/Drupal/views/Tests/Taxonomy/RelationshipNodeTermDataTest.php b/lib/Drupal/views/Tests/Taxonomy/RelationshipNodeTermDataTest.php
index 9b4644b..b6d2efa 100644
--- a/lib/Drupal/views/Tests/Taxonomy/RelationshipNodeTermDataTest.php
+++ b/lib/Drupal/views/Tests/Taxonomy/RelationshipNodeTermDataTest.php
@@ -14,6 +14,14 @@ use Drupal\views\View;
  * Tests the node_term_data relationship handler.
  */
 class RelationshipNodeTermDataTest extends ViewsSqlTest {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('views_test');
+
   protected $profile = 'standard';
 
   public static function getInfo() {
diff --git a/lib/Drupal/views/Tests/TranslatableTest.php b/lib/Drupal/views/Tests/TranslatableTest.php
index 93efcb5..7a10282 100644
--- a/lib/Drupal/views/Tests/TranslatableTest.php
+++ b/lib/Drupal/views/Tests/TranslatableTest.php
@@ -23,32 +23,13 @@ class TranslatableTest extends ViewsSqlTest {
     );
   }
 
-  /**
-   * The views plugin definition. Override it if you test provides a plugin.
-   */
-  public function viewsPlugins() {
-    return array(
-      'localization' => array(
-        'test' => array(
-          'no ui' => TRUE,
-          'title' => t('Test'),
-          'help' => t('This is a test description.'),
-          'handler' => 'views_plugin_localization_test',
-          'parent' => 'parent',
-          'path' => drupal_get_path('module', 'views') .'/tests',
-        ),
-      ),
-    );
-  }
-
   public function setUp() {
     parent::setUp();
 
-    config('views.settings')->set('views_localization_plugin', 'test')->save();
+    config('views.settings')->set('views_localization_plugin', 'test_localization')->save();
     // Reset the plugin data.
     views_fetch_plugin_data(NULL, NULL, TRUE);
     $this->strings = array('Master1', 'Apply1', 'Sort By1', 'Asc1', 'Desc1', 'more1', 'Reset1', 'Offset1', 'Master1', 'title1', 'Items per page1', 'fieldlabel1', 'filterlabel1');
-    $this->enableViewsUi();
   }
 
   /**
@@ -58,7 +39,7 @@ class TranslatableTest extends ViewsSqlTest {
     $view = $this->view_unpack_translatable();
     $view->init_localization();
 
-    $this->assertEqual('views_plugin_localization_test', get_class($view->localization_plugin), 'Make sure that init_localization initializes the right translation plugin');
+    $this->assertEqual('Drupal\views_test\Plugin\views\localization\LocalizationTest', get_class($view->localization_plugin), 'Make sure that init_localization initializes the right translation plugin');
 
     $view->export_locale_strings();
 
diff --git a/lib/Drupal/views/Tests/UiGroupByTest.php b/lib/Drupal/views/Tests/UiGroupByTest.php
index 0641878..d4174f0 100644
--- a/lib/Drupal/views/Tests/UiGroupByTest.php
+++ b/lib/Drupal/views/Tests/UiGroupByTest.php
@@ -7,12 +7,10 @@
 
 namespace Drupal\views\Tests;
 
-use Drupal\simpletest\WebTestBase;
-
 /**
  * Tests UI of aggregate functionality..
  */
-class UiGroupByTest extends WebTestBase {
+class UiGroupByTest extends ViewsTestBase {
 
   /**
    * Modules to enable.
diff --git a/lib/Drupal/views/Tests/UiSettingsTest.php b/lib/Drupal/views/Tests/UiSettingsTest.php
index 2f36be3..5542847 100644
--- a/lib/Drupal/views/Tests/UiSettingsTest.php
+++ b/lib/Drupal/views/Tests/UiSettingsTest.php
@@ -7,12 +7,10 @@
 
 namespace Drupal\views\Tests;
 
-use Drupal\simpletest\WebTestBase;
-
 /**
  * Tests the various settings in the views ui.
  */
-class UiSettingsTest extends WebTestBase {
+class UiSettingsTest extends ViewsTestBase {
 
   /**
    * Modules to enable.
diff --git a/lib/Drupal/views/Tests/ViewsSqlTest.php b/lib/Drupal/views/Tests/ViewsSqlTest.php
index bff82cc..2a29457 100644
--- a/lib/Drupal/views/Tests/ViewsSqlTest.php
+++ b/lib/Drupal/views/Tests/ViewsSqlTest.php
@@ -22,7 +22,6 @@ abstract class ViewsSqlTest extends ViewsTestBase {
     // Define the schema and views data variable before enabling the test module.
     variable_set('views_test_schema', $this->schemaDefinition());
     variable_set('views_test_views_data', $this->viewsData());
-    variable_set('views_test_views_plugins', $this->viewsPlugins());
 
     module_enable(array('views_test'));
     $this->resetAll();
@@ -39,20 +38,6 @@ abstract class ViewsSqlTest extends ViewsTestBase {
   }
 
   /**
-   * This function allows to enable views ui from a higher class which can't change the setup function anymore.
-   *
-   * @TODO
-   *   Convert existing setUp functions.
-   */
-  function enableViewsUi() {
-    module_enable(array('views_ui'));
-    // @TODO Figure out why it's required to clear the cache here.
-    views_module_include('views_default', TRUE);
-    views_get_all_views(TRUE);
-    menu_router_rebuild();
-  }
-
-  /**
    * The schema definition.
    */
   protected function schemaDefinition() {
@@ -122,94 +107,90 @@ abstract class ViewsSqlTest extends ViewsTestBase {
       'title' => t('ID'),
       'help' => t('The test data ID'),
       'field' => array(
-        'handler' => 'views_handler_field_numeric',
+        'id' => 'numeric',
         'click sortable' => TRUE,
       ),
       'argument' => array(
-        'handler' => 'views_handler_argument_numeric',
+        'id' => 'numeric',
       ),
       'filter' => array(
-        'handler' => 'views_handler_filter_numeric',
+        'id' => 'numeric',
       ),
       'sort' => array(
-        'handler' => 'views_handler_sort',
+        'id' => 'standard',
       ),
     );
     $data['views_test']['name'] = array(
       'title' => t('Name'),
       'help' => t('The name of the person'),
       'field' => array(
-        'handler' => 'views_handler_field',
+        'id' => 'standard',
         'click sortable' => TRUE,
       ),
       'argument' => array(
-        'handler' => 'views_handler_argument_string',
+        'id' => 'string',
       ),
       'filter' => array(
-        'handler' => 'views_handler_filter_string',
+        'id' => 'string',
       ),
       'sort' => array(
-        'handler' => 'views_handler_sort',
+        'id' => 'standard',
       ),
     );
     $data['views_test']['age'] = array(
       'title' => t('Age'),
       'help' => t('The age of the person'),
       'field' => array(
-        'handler' => 'views_handler_field_numeric',
+        'id' => 'numeric',
         'click sortable' => TRUE,
       ),
       'argument' => array(
-        'handler' => 'views_handler_argument_numeric',
+        'id' => 'numeric',
       ),
       'filter' => array(
-        'handler' => 'views_handler_filter_numeric',
+        'id' => 'numeric',
       ),
       'sort' => array(
-        'handler' => 'views_handler_sort',
+        'id' => 'standard',
       ),
     );
     $data['views_test']['job'] = array(
       'title' => t('Job'),
       'help' => t('The job of the person'),
       'field' => array(
-        'handler' => 'views_handler_field',
+        'id' => 'standard',
         'click sortable' => TRUE,
       ),
       'argument' => array(
-        'handler' => 'views_handler_argument_string',
+        'id' => 'string',
       ),
       'filter' => array(
-        'handler' => 'views_handler_filter_string',
+        'id' => 'string',
       ),
       'sort' => array(
-        'handler' => 'views_handler_sort',
+        'id' => 'standard',
       ),
     );
     $data['views_test']['created'] = array(
       'title' => t('Created'),
       'help' => t('The creation date of this record'),
       'field' => array(
-        'handler' => 'views_handler_field_date',
+        'id' => 'date',
         'click sortable' => TRUE,
       ),
       'argument' => array(
-        'handler' => 'views_handler_argument_date',
+        'id' => 'date',
       ),
       'filter' => array(
-        'handler' => 'views_handler_filter_date',
+        'id' => 'date',
       ),
       'sort' => array(
-        'handler' => 'views_handler_sort_date',
+        'id' => 'date',
       ),
     );
     return $data;
   }
 
-  protected function viewsPlugins() {
-    return array();
-  }
-
   /**
    * A very simple test dataset.
    */
diff --git a/lib/Drupal/views/Tests/ViewsTestBase.php b/lib/Drupal/views/Tests/ViewsTestBase.php
index 443ffa1..5e0db30 100644
--- a/lib/Drupal/views/Tests/ViewsTestBase.php
+++ b/lib/Drupal/views/Tests/ViewsTestBase.php
@@ -18,7 +18,17 @@ abstract class ViewsTestBase extends WebTestBase {
    *
    * @var array
    */
-  public static $modules = array('views');
+  public static $modules = array('views', 'views_ui');
+
+  protected function setUp() {
+    parent::setUp();
+
+    // @todo Remove this hack or move it to child classes.
+    views_init();
+    views_module_include('views_default', TRUE);
+    views_get_all_views(TRUE);
+    menu_router_rebuild();
+  }
 
   /**
    * Helper function: verify a result set returned by view.
diff --git a/lib/Drupal/views/Tests/WizardJumpMenuTest.php b/lib/Drupal/views/Tests/WizardJumpMenuTest.php
index 897cc7e..d1d6a30 100644
--- a/lib/Drupal/views/Tests/WizardJumpMenuTest.php
+++ b/lib/Drupal/views/Tests/WizardJumpMenuTest.php
@@ -70,6 +70,10 @@ class WizardJumpMenuTest extends WizardTestBase {
       // 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']);
+      if (!$view_object) {
+        $this->fail('The view could not be loaded.');
+        return;
+      }
       $view_object->preview('page');
       $form = $view_object->style_plugin->render();
       $jump_options = $form['jump']['#options'];
@@ -169,4 +173,3 @@ class WizardJumpMenuTest extends WizardTestBase {
     return 'node/' . $node->nid . '/revisions/' . $node->vid . '/view';
   }
 }
-
diff --git a/lib/Drupal/views/View.php b/lib/Drupal/views/View.php
index 6d09b8d..3b539aa 100644
--- a/lib/Drupal/views/View.php
+++ b/lib/Drupal/views/View.php
@@ -8,6 +8,7 @@
 namespace Drupal\views;
 
 use Symfony\Component\HttpFoundation\Response;
+use Drupal\views\Plugin\Type\ViewsPluginManager;
 
 /**
  * @defgroup views_objects Objects that represent a View or part of a view
@@ -915,7 +916,8 @@ class View extends ViewsDbObject {
 
     // Create and initialize the query object.
     $plugin = !empty($views_data['table']['base']['query class']) ? $views_data['table']['base']['query class'] : 'views_query';
-    $this->query = views_get_plugin('query', $plugin);
+    $plugin_type = new ViewsPluginManager('query');
+    $this->query = $plugin_type->createInstance($plugin);
 
     if (empty($this->query)) {
       return FALSE;
@@ -2095,7 +2097,9 @@ class View extends ViewsDbObject {
    * Find and initialize the localizer plugin.
    */
   function init_localization() {
-    if (isset($this->localization_plugin) && is_object($this->localization_plugin)) {
+    // @todo The check for the view was added to ensure that
+    //   $this->localization_plugin->init() is run.
+    if (isset($this->localization_plugin) && is_object($this->localization_plugin) && isset($this->view)) {
       return TRUE;
     }
 
diff --git a/lib/Drupal/views/ViewsDisplay.php b/lib/Drupal/views/ViewsDisplay.php
index 9c481e8..5e465d4 100644
--- a/lib/Drupal/views/ViewsDisplay.php
+++ b/lib/Drupal/views/ViewsDisplay.php
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Definition of Drupal\views\views_display.
+ * Definition of Drupal\views\ViewsDisplay.
  */
 
 namespace Drupal\views;
diff --git a/modules/aggregator/views_handler_argument_aggregator_category_cid.inc b/lib/Views/aggregator/Plugin/views/argument/CategoryCid.php
similarity index 70%
rename from modules/aggregator/views_handler_argument_aggregator_category_cid.inc
rename to lib/Views/aggregator/Plugin/views/argument/CategoryCid.php
index 92ae8b7..85cdcec 100644
--- a/modules/aggregator/views_handler_argument_aggregator_category_cid.inc
+++ b/lib/Views/aggregator/Plugin/views/argument/CategoryCid.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_argument_aggregator_category_cid.
  */
 
+namespace Views\aggregator\Plugin\views\argument;
+
+use Drupal\views\Plugin\views\argument\Numeric;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Argument handler to accept an aggregator category id.
  *
  * @ingroup views_argument_handlers
  */
-class views_handler_argument_aggregator_category_cid extends views_handler_argument_numeric {
+
+/**
+ * @Plugin(
+ *   id = "aggregator_category_cid"
+ * )
+ */
+class CategoryCid extends Numeric {
   /**
    * Override the behavior of title(). Get the title of the category.
    */
diff --git a/modules/aggregator/views_handler_argument_aggregator_fid.inc b/lib/Views/aggregator/Plugin/views/argument/Fid.php
similarity index 71%
rename from modules/aggregator/views_handler_argument_aggregator_fid.inc
rename to lib/Views/aggregator/Plugin/views/argument/Fid.php
index 4147626..7cfbd9b 100644
--- a/modules/aggregator/views_handler_argument_aggregator_fid.inc
+++ b/lib/Views/aggregator/Plugin/views/argument/Fid.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_argument_aggregator_fid.
  */
 
+namespace Views\aggregator\Plugin\views\argument;
+
+use Drupal\views\Plugin\views\argument\Numeric;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Argument handler to accept an aggregator feed id.
  *
  * @ingroup views_argument_handlers
  */
-class views_handler_argument_aggregator_fid extends views_handler_argument_numeric {
+
+/**
+ * @Plugin(
+ *   id = "aggregator_fid"
+ * )
+ */
+class Fid extends Numeric {
   /**
    * Override the behavior of title(). Get the title of the feed.
    */
diff --git a/modules/aggregator/views_handler_argument_aggregator_iid.inc b/lib/Views/aggregator/Plugin/views/argument/Iid.php
similarity index 74%
rename from modules/aggregator/views_handler_argument_aggregator_iid.inc
rename to lib/Views/aggregator/Plugin/views/argument/Iid.php
index d959b04..576e4b5 100644
--- a/modules/aggregator/views_handler_argument_aggregator_iid.inc
+++ b/lib/Views/aggregator/Plugin/views/argument/Iid.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_argument_aggregator_iid.
  */
 
+namespace Views\aggregator\Plugin\views\argument;
+
+use Drupal\views\Plugin\views\argument\Numeric;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Argument handler to accept an aggregator item id.
  *
  * @ingroup views_argument_handlers
  */
-class views_handler_argument_aggregator_iid extends views_handler_argument_numeric {
+
+/**
+ * @Plugin(
+ *   id = "aggregator_iid"
+ * )
+ */
+class Iid extends Numeric {
   /**
    * Override the behavior of title(). Get the title of the category.
    */
diff --git a/modules/aggregator/views_handler_field_aggregator_category.inc b/lib/Views/aggregator/Plugin/views/field/Category.php
similarity index 87%
rename from modules/aggregator/views_handler_field_aggregator_category.inc
rename to lib/Views/aggregator/Plugin/views/field/Category.php
index 99fffa1..b181ba3 100644
--- a/modules/aggregator/views_handler_field_aggregator_category.inc
+++ b/lib/Views/aggregator/Plugin/views/field/Category.php
@@ -5,13 +5,24 @@
  * Definition of views_handler_field_aggregator_category.
  */
 
+namespace Views\aggregator\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "aggregator_category"
+ * )
+ */
+class Category extends FieldPluginBase {
   /**
    * Constructor to provide additional field to add.
    */
diff --git a/modules/aggregator/views_handler_field_aggregator_title_link.inc b/lib/Views/aggregator/Plugin/views/field/TitleLink.php
similarity index 84%
rename from modules/aggregator/views_handler_field_aggregator_title_link.inc
rename to lib/Views/aggregator/Plugin/views/field/TitleLink.php
index d8bf578..d90b80e 100644
--- a/modules/aggregator/views_handler_field_aggregator_title_link.inc
+++ b/lib/Views/aggregator/Plugin/views/field/TitleLink.php
@@ -5,13 +5,24 @@
  * Definition of views_handler_field_aggregator_title_link.
  */
 
+namespace Views\aggregator\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "aggregator_title_link"
+ * )
+ */
+class TitleLink extends FieldPluginBase {
   function construct() {
     parent::construct();
     $this->additional_fields['link'] = 'link';
diff --git a/modules/aggregator/views_handler_field_aggregator_xss.inc b/lib/Views/aggregator/Plugin/views/field/Xss.php
similarity index 54%
rename from modules/aggregator/views_handler_field_aggregator_xss.inc
rename to lib/Views/aggregator/Plugin/views/field/Xss.php
index d39b101..358b70a 100644
--- a/modules/aggregator/views_handler_field_aggregator_xss.inc
+++ b/lib/Views/aggregator/Plugin/views/field/Xss.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_aggregator_xss.
  */
 
+namespace Views\aggregator\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Filters htmls tags from item.
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_aggregator_xss extends views_handler_field {
+
+/**
+ * @Plugin(
+ *   id = "aggregator_xss"
+ * )
+ */
+class Xss extends FieldPluginBase {
   function render($values) {
     $value = $this->get_value($values);
     return aggregator_filter_xss($value);
diff --git a/modules/aggregator/views_handler_filter_aggregator_category_cid.inc b/lib/Views/aggregator/Plugin/views/filter/CategoryCid.php
similarity index 67%
rename from modules/aggregator/views_handler_filter_aggregator_category_cid.inc
rename to lib/Views/aggregator/Plugin/views/filter/CategoryCid.php
index f9931c8..5de4e4d 100644
--- a/modules/aggregator/views_handler_filter_aggregator_category_cid.inc
+++ b/lib/Views/aggregator/Plugin/views/filter/CategoryCid.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_filter_aggregator_category_cid.
  */
 
+namespace Views\aggregator\Plugin\views\filter;
+
+use Drupal\views\Plugin\views\filter\InOperator;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Filter by aggregator category cid
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter_aggregator_category_cid extends views_handler_filter_in_operator {
+
+/**
+ * @Plugin(
+ *   id = "aggregator_category_cid"
+ * )
+ */
+class CategoryCid extends InOperator {
   function get_value_options() {
     if (isset($this->value_options)) {
       return;
diff --git a/modules/aggregator/views_plugin_row_aggregator_rss.inc b/lib/Views/aggregator/Plugin/views/row/Rss.php
similarity index 79%
rename from modules/aggregator/views_plugin_row_aggregator_rss.inc
rename to lib/Views/aggregator/Plugin/views/row/Rss.php
index 672952e..7dbc218 100644
--- a/modules/aggregator/views_plugin_row_aggregator_rss.inc
+++ b/lib/Views/aggregator/Plugin/views/row/Rss.php
@@ -5,10 +5,26 @@
  * Contains the Aggregator Item RSS row style plugin.
  */
 
+namespace Views\aggregator\Plugin\views\row;
+
+use Drupal\views\Plugin\views\row\RowPluginBase;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Plugin which loads an aggregator item and formats it as an RSS item.
+ *
+ * @Plugin(
+ *   id = "aggregator_rss",
+ *   theme = "views_view_row_rss",
+ *   title = @Translation("Aggregator item"),
+ *   help = @Translation("Display the aggregator item using the data from the original source."),
+ *   uses_options = TRUE,
+ *   type = "feed",
+ *   help_topic = "style-aggregator-rss"
+ * )
  */
-class views_plugin_row_aggregator_rss extends views_plugin_row {
+class Rss extends RowPluginBase {
   var $base_table = 'aggregator_item';
   var $base_field = 'iid';
 
diff --git a/modules/book/views_plugin_argument_default_book_root.inc b/lib/Views/book/Plugin/views/argument_default/Root.php
similarity index 58%
rename from modules/book/views_plugin_argument_default_book_root.inc
rename to lib/Views/book/Plugin/views/argument_default/Root.php
index 1ce3046..6669fa9 100644
--- a/modules/book/views_plugin_argument_default_book_root.inc
+++ b/lib/Views/book/Plugin/views/argument_default/Root.php
@@ -4,10 +4,23 @@
  * Contains the book root from current node argument default plugin.
  */
 
+namespace Views\book\Plugin\views\argument_default;
+
+use Views\node\Plugin\views\argument_default\Node;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Default argument plugin to get the current node's book root.
  */
-class views_plugin_argument_default_book_root extends views_plugin_argument_default_node {
+
+/**
+ * @Plugin(
+ *   id = "book_root",
+ *   title = @Translation("Book root from current node")
+ * )
+ */
+class Root extends Node {
   function get_argument() {
     // Use the argument_default_node plugin to get the nid argument.
     $nid = parent::get_argument();
diff --git a/modules/comment/views_handler_argument_comment_user_uid.inc b/lib/Views/comment/Plugin/views/argument/UserUid.php
similarity index 85%
rename from modules/comment/views_handler_argument_comment_user_uid.inc
rename to lib/Views/comment/Plugin/views/argument/UserUid.php
index d821f32..c621aaa 100644
--- a/modules/comment/views_handler_argument_comment_user_uid.inc
+++ b/lib/Views/comment/Plugin/views/argument/UserUid.php
@@ -5,13 +5,24 @@
  * Definition of views_handler_argument_comment_user_uid.
  */
 
+namespace Views\comment\Plugin\views\argument;
+
+use Drupal\views\Plugin\views\argument\ArgumentPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "argument_comment_user_uid"
+ * )
+ */
+class UserUid extends ArgumentPluginBase {
   function title() {
     if (!$this->argument) {
       $title = variable_get('anonymous', t('Anonymous'));
diff --git a/modules/comment/views_handler_field_comment.inc b/lib/Views/comment/Plugin/views/field/Comment.php
similarity index 90%
rename from modules/comment/views_handler_field_comment.inc
rename to lib/Views/comment/Plugin/views/field/Comment.php
index cef33e5..bcc8c4d 100644
--- a/modules/comment/views_handler_field_comment.inc
+++ b/lib/Views/comment/Plugin/views/field/Comment.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_comment.
  */
 
+namespace Views\comment\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Field handler to allow linking to a comment.
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_comment extends views_handler_field {
+
+/**
+ * @Plugin(
+ *   id = "comment"
+ * )
+ */
+class Comment extends FieldPluginBase {
   /**
    * Override init function to provide generic option to link to comment.
    */
diff --git a/modules/comment/views_handler_field_comment_depth.inc b/lib/Views/comment/Plugin/views/field/Depth.php
similarity index 61%
rename from modules/comment/views_handler_field_comment_depth.inc
rename to lib/Views/comment/Plugin/views/field/Depth.php
index 4840a1e..60f930c 100644
--- a/modules/comment/views_handler_field_comment_depth.inc
+++ b/lib/Views/comment/Plugin/views/field/Depth.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_comment_depth.
  */
 
+namespace Views\comment\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+
 /**
  * Field handler to display the depth of a comment.
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_comment_depth extends views_handler_field {
+
+/**
+ * @Plugin(
+ *   id = "comment_depth"
+ * )
+ */
+class Depth extends FieldPluginBase {
   /**
    * Work out the depth of this comment
    */
diff --git a/modules/comment/views_handler_field_comment_link_delete.inc b/lib/Views/comment/Plugin/views/field/LInkDelete.php
similarity index 80%
rename from modules/comment/views_handler_field_comment_link_delete.inc
rename to lib/Views/comment/Plugin/views/field/LInkDelete.php
index c55ac1c..6f95720 100644
--- a/modules/comment/views_handler_field_comment_link_delete.inc
+++ b/lib/Views/comment/Plugin/views/field/LInkDelete.php
@@ -5,12 +5,22 @@
  * Definition of views_handler_field_comment_link_delete.
  */
 
+namespace Views\comment\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "comment_link_delete"
+ * )
+ */
+class LinkDelete extends Link {
   function access() {
     //needs permission to administer comments in general
     return user_access('administer comments');
diff --git a/modules/comment/views_handler_field_last_comment_timestamp.inc b/lib/Views/comment/Plugin/views/field/LastTimestamp.php
similarity index 72%
rename from modules/comment/views_handler_field_last_comment_timestamp.inc
rename to lib/Views/comment/Plugin/views/field/LastTimestamp.php
index e7cf8bd..de6b67a 100644
--- a/modules/comment/views_handler_field_last_comment_timestamp.inc
+++ b/lib/Views/comment/Plugin/views/field/LastTimestamp.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_last_comment_timestamp.
  */
 
+namespace Views\comment\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\Date;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "comment_last_timestamp"
+ * )
+ */
+class LastTimestamp extends Date {
   function construct() {
     parent::construct();
     $this->additional_fields['comment_count'] = 'comment_count';
diff --git a/modules/comment/views_handler_field_comment_link.inc b/lib/Views/comment/Plugin/views/field/Link.php
similarity index 89%
rename from modules/comment/views_handler_field_comment_link.inc
rename to lib/Views/comment/Plugin/views/field/Link.php
index 11828ae..75deb9e 100644
--- a/modules/comment/views_handler_field_comment_link.inc
+++ b/lib/Views/comment/Plugin/views/field/Link.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_comment_link.
  */
 
+namespace Views\comment\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\Entity;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Base field handler to present a link.
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_comment_link extends views_handler_field_entity {
+
+/**
+ * @Plugin(
+ *   id = "comment_link"
+ * )
+ */
+class Link extends Entity {
   function construct() {
     parent::construct();
   }
diff --git a/modules/comment/views_handler_field_comment_link_approve.inc b/lib/Views/comment/Plugin/views/field/LinkApprove.php
similarity index 83%
rename from modules/comment/views_handler_field_comment_link_approve.inc
rename to lib/Views/comment/Plugin/views/field/LinkApprove.php
index 0953d0c..b1a3561 100644
--- a/modules/comment/views_handler_field_comment_link_approve.inc
+++ b/lib/Views/comment/Plugin/views/field/LinkApprove.php
@@ -5,12 +5,22 @@
  * Definition of views_handler_field_comment_link_approve.
  */
 
+namespace Views\comment\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Provides a comment approve link.
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_comment_link_approve extends views_handler_field_comment_link {
+
+/**
+ * @Plugin(
+ *   id = "comment_link_approve"
+ * )
+ */
+class LinkApprove extends Link {
   function access() {
     //needs permission to administer comments in general
     return user_access('administer comments');
diff --git a/modules/comment/views_handler_field_comment_link_edit.inc b/lib/Views/comment/Plugin/views/field/LinkEdit.php
similarity index 88%
rename from modules/comment/views_handler_field_comment_link_edit.inc
rename to lib/Views/comment/Plugin/views/field/LinkEdit.php
index 0b06c0e..305cabe 100644
--- a/modules/comment/views_handler_field_comment_link_edit.inc
+++ b/lib/Views/comment/Plugin/views/field/LinkEdit.php
@@ -5,12 +5,22 @@
  * Definition of views_handler_field_comment_link_edit.
  */
 
+namespace Views\comment\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "comment_link_edit"
+ * )
+ */
+class LinkEdit extends Link {
   function option_definition() {
     $options = parent::option_definition();
     $options['destination'] = array('default' => FALSE, 'bool' => TRUE);
diff --git a/modules/comment/views_handler_field_comment_link_reply.inc b/lib/Views/comment/Plugin/views/field/LinkReply.php
similarity index 79%
rename from modules/comment/views_handler_field_comment_link_reply.inc
rename to lib/Views/comment/Plugin/views/field/LinkReply.php
index 47d0f17..541d0dc 100644
--- a/modules/comment/views_handler_field_comment_link_reply.inc
+++ b/lib/Views/comment/Plugin/views/field/LinkReply.php
@@ -5,12 +5,22 @@
  * Definition of views_handler_field_comment_link_reply.
  */
 
+namespace Views\comment\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "comment_link_reply"
+ * )
+ */
+class LinkReply extends Link {
   function access() {
     //check for permission to reply to comments
     return user_access('post comments');
diff --git a/modules/comment/views_handler_field_ncs_last_comment_name.inc b/lib/Views/comment/Plugin/views/field/NcsLastCommentName.php
similarity index 87%
rename from modules/comment/views_handler_field_ncs_last_comment_name.inc
rename to lib/Views/comment/Plugin/views/field/NcsLastCommentName.php
index 45b7966..e4ff778 100644
--- a/modules/comment/views_handler_field_ncs_last_comment_name.inc
+++ b/lib/Views/comment/Plugin/views/field/NcsLastCommentName.php
@@ -5,14 +5,24 @@
  * Definition of views_handler_field_ncs_last_comment_name.
  */
 
+namespace Views\comment\Plugin\views\field;
+
 use Drupal\views\Join;
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+use Drupal\Core\Annotation\Plugin;
 
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "comment_ncs_last_comment_name"
+ * )
+ */
+class NcsLastCommentName extends FieldPluginBase {
   function query() {
     // last_comment_name only contains data if the user is anonymous. So we
     // have to join in a specially related user table.
diff --git a/modules/comment/views_handler_field_ncs_last_updated.inc b/lib/Views/comment/Plugin/views/field/NcsLastUpdated.php
similarity index 70%
rename from modules/comment/views_handler_field_ncs_last_updated.inc
rename to lib/Views/comment/Plugin/views/field/NcsLastUpdated.php
index d1d7306..8db9948 100644
--- a/modules/comment/views_handler_field_ncs_last_updated.inc
+++ b/lib/Views/comment/Plugin/views/field/NcsLastUpdated.php
@@ -4,12 +4,24 @@
  * @file
  * Definition of views_handler_field_ncs_last_updated.
  */
+
+namespace Views\comment\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\Date;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "comment_ncs_last_updated"
+ * )
+ */
+class NcsLastUpdated extends Date {
   function query() {
     $this->ensure_my_table();
     $this->node_table = $this->query->ensure_table('node', $this->relationship);
diff --git a/modules/comment/views_handler_field_node_comment.inc b/lib/Views/comment/Plugin/views/field/NodeComment.php
similarity index 66%
rename from modules/comment/views_handler_field_node_comment.inc
rename to lib/Views/comment/Plugin/views/field/NodeComment.php
index d863c44..5e9772d 100644
--- a/modules/comment/views_handler_field_node_comment.inc
+++ b/lib/Views/comment/Plugin/views/field/NodeComment.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_node_comment.
  */
 
+namespace Views\comment\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Display node comment status.
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_node_comment extends views_handler_field {
+
+/**
+ * @Plugin(
+ *   id = "node_comment"
+ * )
+ */
+class NodeComment extends FieldPluginBase {
   function render($values) {
     $value = $this->get_value($values);
     switch ($value) {
diff --git a/modules/comment/views_handler_field_comment_node_link.inc b/lib/Views/comment/Plugin/views/field/NodeLink.php
similarity index 89%
rename from modules/comment/views_handler_field_comment_node_link.inc
rename to lib/Views/comment/Plugin/views/field/NodeLink.php
index 7feecfb..3105c70 100644
--- a/modules/comment/views_handler_field_comment_node_link.inc
+++ b/lib/Views/comment/Plugin/views/field/NodeLink.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_comment_node_link.
  */
 
+namespace Views\comment\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\Entity;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Handler for showing comment module's node link.
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_comment_node_link extends views_handler_field_entity {
+
+/**
+ * @Plugin(
+ *   id = "comment_node_link"
+ * )
+ */
+class NodeLink extends Entity {
   function construct() {
     parent::construct();
 
diff --git a/modules/comment/views_handler_field_node_new_comments.inc b/lib/Views/comment/Plugin/views/field/NodeNewComments.php
similarity index 94%
rename from modules/comment/views_handler_field_node_new_comments.inc
rename to lib/Views/comment/Plugin/views/field/NodeNewComments.php
index 6203048..0dee220 100644
--- a/modules/comment/views_handler_field_node_new_comments.inc
+++ b/lib/Views/comment/Plugin/views/field/NodeNewComments.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_node_new_comments.
  */
 
+namespace Views\comment\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\Numeric;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "node_new_comments"
+ * )
+ */
+class NodeNewComments extends Numeric {
   function init(&$view, &$options) {
     parent::init($view, $options);
 
diff --git a/modules/comment/views_handler_field_comment_username.inc b/lib/Views/comment/Plugin/views/field/Username.php
similarity index 86%
rename from modules/comment/views_handler_field_comment_username.inc
rename to lib/Views/comment/Plugin/views/field/Username.php
index 551b12a..e99529d 100644
--- a/modules/comment/views_handler_field_comment_username.inc
+++ b/lib/Views/comment/Plugin/views/field/Username.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_comment_username.
  */
 
+namespace Views\comment\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "comment_username"
+ * )
+ */
+class Username extends FieldPluginBase {
   /**
    * Override init function to add uid and homepage fields.
    */
diff --git a/modules/comment/views_handler_filter_ncs_last_updated.inc b/lib/Views/comment/Plugin/views/filter/NcsLastUpdated.php
similarity index 73%
rename from modules/comment/views_handler_filter_ncs_last_updated.inc
rename to lib/Views/comment/Plugin/views/filter/NcsLastUpdated.php
index 2319edf..a3dc931 100644
--- a/modules/comment/views_handler_filter_ncs_last_updated.inc
+++ b/lib/Views/comment/Plugin/views/filter/NcsLastUpdated.php
@@ -5,12 +5,24 @@
  * Definition of views_handler_filter_ncs_last_updated.
  */
 
+namespace Views\comment\Plugin\views\filter;
+
+use Drupal\views\Plugin\views\filter\Date;
+use Drupal\Core\Annotation\Plugin;
+
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "ncs_last_updated"
+ * )
+ */
+class NcsLastUpdated extends Date {
   function query() {
     $this->ensure_my_table();
     $this->node_table = $this->query->ensure_table('node', $this->relationship);
diff --git a/modules/comment/views_handler_filter_node_comment.inc b/lib/Views/comment/Plugin/views/filter/NodeComment.php
similarity index 62%
rename from modules/comment/views_handler_filter_node_comment.inc
rename to lib/Views/comment/Plugin/views/filter/NodeComment.php
index befce10..3334edf 100644
--- a/modules/comment/views_handler_filter_node_comment.inc
+++ b/lib/Views/comment/Plugin/views/filter/NodeComment.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_filter_node_comment.
  */
 
+namespace Views\comment\Plugin\views\filter;
+
+use Drupal\views\Plugin\views\filter\InOperator;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Filter based on comment node status.
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter_node_comment extends views_handler_filter_in_operator {
+
+/**
+ * @Plugin(
+ *   id = "node_comment"
+ * )
+ */
+class NodeComment extends InOperator {
   function get_value_options() {
     $this->value_options = array(
       COMMENT_NODE_HIDDEN => t('Hidden'),
diff --git a/modules/comment/views_handler_filter_comment_user_uid.inc b/lib/Views/comment/Plugin/views/filter/UserUid.php
similarity index 74%
rename from modules/comment/views_handler_filter_comment_user_uid.inc
rename to lib/Views/comment/Plugin/views/filter/UserUid.php
index e76ebb7..ee89746 100644
--- a/modules/comment/views_handler_filter_comment_user_uid.inc
+++ b/lib/Views/comment/Plugin/views/filter/UserUid.php
@@ -5,13 +5,24 @@
  * Definition of views_handler_filter_comment_user_uid.
  */
 
+namespace Views\comment\Plugin\views\filter;
+
+use Drupal\views\Plugin\views\filter\FilterPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "comment_user_uid"
+ * )
+ */
+class UserUid extends FilterPluginBase {
   function query() {
     $this->ensure_my_table();
 
diff --git a/modules/comment/views_plugin_row_comment_rss.inc b/lib/Views/comment/Plugin/views/row/Rss.php
similarity index 89%
rename from modules/comment/views_plugin_row_comment_rss.inc
rename to lib/Views/comment/Plugin/views/row/Rss.php
index 69c4cb4..4e81127 100644
--- a/modules/comment/views_plugin_row_comment_rss.inc
+++ b/lib/Views/comment/Plugin/views/row/Rss.php
@@ -5,10 +5,27 @@
  * Contains the comment RSS row style plugin.
  */
 
+namespace Views\comment\Plugin\views\row;
+
+use Drupal\views\Plugin\views\row\RowPluginBase;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Plugin which formats the comments as RSS items.
+ *
+ * @Plugin(
+ *   id = "comment_rss",
+ *   title = @Translation("Comment"),
+ *   help = @Translation("Display the comment as RSS."),
+ *   theme = "views_view_row_rss",
+ *   base = {"comment"},
+ *   uses_options = TRUE,
+ *   type = "feed",
+ *   help_topic = "style-comment-rss"
+ * )
  */
-class views_plugin_row_comment_rss extends views_plugin_row {
+class Rss extends RowPluginBase {
    var $base_table = 'comment';
    var $base_field = 'cid';
 
diff --git a/modules/comment/views_plugin_row_comment_view.inc b/lib/Views/comment/Plugin/views/row/View.php
similarity index 81%
rename from modules/comment/views_plugin_row_comment_view.inc
rename to lib/Views/comment/Plugin/views/row/View.php
index f78fa36..066188b 100644
--- a/modules/comment/views_plugin_row_comment_view.inc
+++ b/lib/Views/comment/Plugin/views/row/View.php
@@ -5,10 +5,27 @@
  * Contains the node RSS row style plugin.
  */
 
+namespace Views\comment\Plugin\views\row;
+
+use Drupal\views\Plugin\views\row\RowPluginBase;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Plugin which performs a comment_view on the resulting object.
+ *
+ * @Plugin(
+ *   id = "comment_view",
+ *   title = @Translation("Comment"),
+ *   help = @Translation("Display the comment with standard comment view."),
+ *   theme = "views_view_row_comment",
+ *   base = {"comment"},
+ *   uses_options = TRUE,
+ *   type = "normal",
+ *   help_topic = "style-comment"
+ * )
  */
-class views_plugin_row_comment_view extends views_plugin_row {
+class View extends RowPluginBase {
   var $base_field = 'cid';
   var $base_table = 'comment';
 
diff --git a/modules/comment/views_handler_sort_ncs_last_comment_name.inc b/lib/Views/comment/Plugin/views/sort/NcsLastCommentName.php
similarity index 81%
rename from modules/comment/views_handler_sort_ncs_last_comment_name.inc
rename to lib/Views/comment/Plugin/views/sort/NcsLastCommentName.php
index 31ea6bf..9d5cc81 100644
--- a/modules/comment/views_handler_sort_ncs_last_comment_name.inc
+++ b/lib/Views/comment/Plugin/views/sort/NcsLastCommentName.php
@@ -5,7 +5,11 @@
  * Definition of views_handler_sort_ncs_last_comment_name.
  */
 
+namespace Views\comment\Plugin\views\sort;
+
 use Drupal\views\Join;
+use Drupal\views\Plugin\views\sort\SortPluginBase;
+use Drupal\Core\Annotation\Plugin;
 
 /**
  * Sort handler to sort by last comment name which might be in 2 different
@@ -13,7 +17,13 @@ use Drupal\views\Join;
  *
  * @ingroup views_sort_handlers
  */
-class views_handler_sort_ncs_last_comment_name extends views_handler_sort {
+
+/**
+ * @Plugin(
+ *   id = "ncs_last_comment_name"
+ * )
+ */
+class NcsLastCommentName extends SortPluginBase {
   function query() {
     $this->ensure_my_table();
     $join = new Join();
diff --git a/modules/comment/views_handler_sort_ncs_last_updated.inc b/lib/Views/comment/Plugin/views/sort/NcsLastUpdated.php
similarity index 71%
rename from modules/comment/views_handler_sort_ncs_last_updated.inc
rename to lib/Views/comment/Plugin/views/sort/NcsLastUpdated.php
index 83f0f54..a46798e 100644
--- a/modules/comment/views_handler_sort_ncs_last_updated.inc
+++ b/lib/Views/comment/Plugin/views/sort/NcsLastUpdated.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_sort_ncs_last_updated.
  */
 
+namespace Views\comment\Plugin\views\sort;
+
+use Drupal\views\Plugin\views\sort\Date;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "ncs_last_updated"
+ * )
+ */
+class NcsLastUpdated extends Date {
   function query() {
     $this->ensure_my_table();
     $this->node_table = $this->query->ensure_table('node', $this->relationship);
diff --git a/modules/comment/views_handler_sort_comment_thread.inc b/lib/Views/comment/Plugin/views/sort/Thread.php
similarity index 77%
rename from modules/comment/views_handler_sort_comment_thread.inc
rename to lib/Views/comment/Plugin/views/sort/Thread.php
index e513a93..8b8e773 100644
--- a/modules/comment/views_handler_sort_comment_thread.inc
+++ b/lib/Views/comment/Plugin/views/sort/Thread.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_sort_comment_thread.
  */
 
+namespace Views\comment\Plugin\views\sort;
+
+use Drupal\views\Plugin\views\sort\SortPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Sort handler for ordering by thread.
  *
  * @ingroup views_sort_handlers
  */
-class views_handler_sort_comment_thread extends views_handler_sort {
+
+/**
+ * @Plugin(
+ *   id = "comment_thread"
+ * )
+ */
+class Thread extends SortPluginBase {
   function query() {
     $this->ensure_my_table();
 
diff --git a/modules/contact/views_handler_field_contact_link.inc b/lib/Views/contact/Plugin/views/field/ContactLink.php
similarity index 88%
rename from modules/contact/views_handler_field_contact_link.inc
rename to lib/Views/contact/Plugin/views/field/ContactLink.php
index 9d22f01..a49abdb 100644
--- a/modules/contact/views_handler_field_contact_link.inc
+++ b/lib/Views/contact/Plugin/views/field/ContactLink.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_contact_link.
  */
 
+namespace Views\contact\Plugin\views\field;
+
+use Views\user\Plugin\views\field\Link;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "contact_link"
+ * )
+ */
+class ContactLink extends Link {
 
   function options_form(&$form, &$form_state) {
     $form['text']['#title'] = t('Link label');
diff --git a/modules/field/views_handler_argument_field_list.inc b/lib/Views/field/Plugin/views/argument/FieldList.php
similarity index 87%
rename from modules/field/views_handler_argument_field_list.inc
rename to lib/Views/field/Plugin/views/argument/FieldList.php
index 965bd18..efd1377 100644
--- a/modules/field/views_handler_argument_field_list.inc
+++ b/lib/Views/field/Plugin/views/argument/FieldList.php
@@ -5,13 +5,24 @@
  * Definition of views_handler_argument_field_list.
  */
 
+namespace Views\field\Plugin\views\argument;
+
+use Drupal\views\Plugin\views\argument\Numeric;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "field_list"
+ * )
+ */
+class FieldList extends Numeric {
   /**
    * Stores the allowed values of this field.
    *
diff --git a/modules/field/views_handler_argument_field_list_string.inc b/lib/Views/field/Plugin/views/argument/ListString.php
similarity index 88%
rename from modules/field/views_handler_argument_field_list_string.inc
rename to lib/Views/field/Plugin/views/argument/ListString.php
index c3537f3..d629644 100644
--- a/modules/field/views_handler_argument_field_list_string.inc
+++ b/lib/Views/field/Plugin/views/argument/ListString.php
@@ -5,13 +5,25 @@
  * Definition of views_handler_argument_field_list_text.
  */
 
+namespace Views\field\Plugin\views\argument;
+
+use Drupal\views\Plugin\views\argument\String;
+use Drupal\Core\Annotation\Plugin;
+
+
 /**
  * Argument handler for list field to show the human readable name in the
  * summary.
  *
  * @ingroup views_argument_handlers
  */
-class views_handler_argument_field_list_string extends views_handler_argument_string {
+
+/**
+ * @Plugin(
+ *   id = "field_list_string"
+ * )
+ */
+class ListString extends String {
   /**
    * Stores the allowed values of this field.
    *
diff --git a/modules/field/views_handler_field_field.inc b/lib/Views/field/Plugin/views/field/Field.php
similarity index 96%
rename from modules/field/views_handler_field_field.inc
rename to lib/Views/field/Plugin/views/field/Field.php
index 0444f26..cc17150 100644
--- a/modules/field/views_handler_field_field.inc
+++ b/lib/Views/field/Plugin/views/field/Field.php
@@ -5,39 +5,23 @@
  * Definition of views_handler_field_field.
  */
 
-/**
- * Helper function: Return an array of formatter options for a field type.
- *
- * Borrowed from field_ui.
- */
-function _field_view_formatter_options($field_type = NULL) {
-  $options = &drupal_static(__FUNCTION__);
-
-  if (!isset($options)) {
-    $field_types = field_info_field_types();
-    $options = array();
-    foreach (field_info_formatter_types() as $name => $formatter) {
-      foreach ($formatter['field types'] as $formatter_field_type) {
-        // Check that the field type exists.
-        if (isset($field_types[$formatter_field_type])) {
-          $options[$formatter_field_type][$name] = $formatter['label'];
-        }
-      }
-    }
-  }
+namespace Views\field\Plugin\views\field;
 
-  if ($field_type) {
-    return !empty($options[$field_type]) ? $options[$field_type] : array();
-  }
-  return $options;
-}
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+use Drupal\Core\Annotation\Plugin;
 
 /**
  * A field that displays fieldapi fields.
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_field extends views_handler_field {
+
+/**
+ * @Plugin(
+ *   id = "field"
+ * )
+ */
+class Field extends FieldPluginBase {
   /**
    * An array to store field renderable arrays for use by render_items.
    * @var array
@@ -241,7 +225,7 @@ class views_handler_field_field extends views_handler_field {
         // @see this::field_language()
         $default_language = language_default()->langcode;
         $language = str_replace(array('***CURRENT_LANGUAGE***', '***DEFAULT_LANGUAGE***'),
-                                array(language_manager(LANGUAGE_TYPE_CONTENT)->langcode, $default_language),
+                                array(drupal_container()->get(LANGUAGE_TYPE_CONTENT)->langcode, $default_language),
                                 $this->view->display_handler->options['field_language']);
         $placeholder = $this->placeholder();
         $language_fallback_candidates = array($language);
@@ -919,7 +903,7 @@ class views_handler_field_field extends views_handler_field {
     if (field_is_translatable($entity_type, $this->field_info)) {
       $default_language = language_default()->langcode;
       $language = str_replace(array('***CURRENT_LANGUAGE***', '***DEFAULT_LANGUAGE***'),
-                              array(language_manager(LANGUAGE_TYPE_CONTENT)->langcode, $default_language),
+                              array(drupal_container()->get(LANGUAGE_TYPE_CONTENT)->langcode, $default_language),
                               $this->view->display_handler->options['field_language']);
 
       // Give the Field Language API a chance to fallback to a different language
diff --git a/modules/field/views_handler_filter_field_list.inc b/lib/Views/field/Plugin/views/filter/FieldList.php
similarity index 60%
rename from modules/field/views_handler_filter_field_list.inc
rename to lib/Views/field/Plugin/views/filter/FieldList.php
index b955e70..523775e 100644
--- a/modules/field/views_handler_filter_field_list.inc
+++ b/lib/Views/field/Plugin/views/filter/FieldList.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_filter_field_list.
  */
 
+namespace Views\field\Plugin\views\filter;
+
+use Drupal\views\Plugin\views\filter\InOperator;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Filter handler which uses list-fields as options.
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter_field_list extends views_handler_filter_in_operator {
+
+/**
+ * @Plugin(
+ *   id = "field_list"
+ * )
+ */
+class FieldList extends InOperator {
   function get_value_options() {
     $field = field_info_field($this->definition['field_name']);
     $this->value_options = list_allowed_values($field);
diff --git a/modules/field/views_handler_relationship_entity_reverse.inc b/lib/Views/field/Plugin/views/relationship/EntityReverse.php
similarity index 90%
rename from modules/field/views_handler_relationship_entity_reverse.inc
rename to lib/Views/field/Plugin/views/relationship/EntityReverse.php
index 50ffcbc..6f5065e 100644
--- a/modules/field/views_handler_relationship_entity_reverse.inc
+++ b/lib/Views/field/Plugin/views/relationship/EntityReverse.php
@@ -5,14 +5,24 @@
  * Definition of views_handler_relationship_entity_reverse.
  */
 
+namespace Views\field\Plugin\views\relationship;
+
 use Drupal\views\Join;
+use Drupal\views\Plugin\views\relationship\RelationshipPluginBase;
+use Drupal\Core\Annotation\Plugin;
 
 /**
  * A relationship handlers which reverse entity references.
  *
  * @ingroup views_relationship_handlers
  */
-class views_handler_relationship_entity_reverse extends views_handler_relationship  {
+
+/**
+ * @Plugin(
+ *   id = "entity_reverse"
+ * )
+ */
+class EntityReverse extends RelationshipPluginBase  {
   function init(&$view, &$options) {
     parent::init($view, $options);
 
diff --git a/modules/system/views_handler_argument_file_fid.inc b/lib/Views/file/Plugin/views/argument/Fid.php
similarity index 72%
rename from modules/system/views_handler_argument_file_fid.inc
rename to lib/Views/file/Plugin/views/argument/Fid.php
index aa2d947..8bbca51 100644
--- a/modules/system/views_handler_argument_file_fid.inc
+++ b/lib/Views/file/Plugin/views/argument/Fid.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_argument_file_fid.
  */
 
+namespace Views\file\Plugin\views\argument;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\argument\Numeric;
+
 /**
  * Argument handler to accept multiple file ids.
  *
  * @ingroup views_argument_handlers
  */
-class views_handler_argument_file_fid extends views_handler_argument_numeric {
+
+/**
+ * @Plugin(
+ *   id = "file_fid"
+ * )
+ */
+class Fid extends Numeric {
   /**
    * Override the behavior of title_query(). Get the filenames.
    */
diff --git a/modules/system/views_handler_field_file_extension.inc b/lib/Views/file/Plugin/views/field/Extension.php
similarity index 61%
rename from modules/system/views_handler_field_file_extension.inc
rename to lib/Views/file/Plugin/views/field/Extension.php
index 6f9a03f..1b2a915 100644
--- a/modules/system/views_handler_field_file_extension.inc
+++ b/lib/Views/file/Plugin/views/field/Extension.php
@@ -5,11 +5,23 @@
  * Definition of views_handler_field_file_extension.
  */
 
+namespace Views\file\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "file_extension"
+ * )
+ */
+class Extension extends FieldPluginBase {
   function render($values) {
     $value = $this->get_value($values);
     if (preg_match('/\.([^\.]+)$/', $value, $match)) {
diff --git a/modules/system/views_handler_field_file.inc b/lib/Views/file/Plugin/views/field/File.php
similarity index 88%
rename from modules/system/views_handler_field_file.inc
rename to lib/Views/file/Plugin/views/field/File.php
index 4168acf..58de8b5 100644
--- a/modules/system/views_handler_field_file.inc
+++ b/lib/Views/file/Plugin/views/field/File.php
@@ -5,12 +5,24 @@
  * Definition of views_handler_field_file.
  */
 
+namespace Views\file\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "file"
+ * )
+ */
+class File extends FieldPluginBase {
   /**
    * Constructor to provide additional field to add.
    */
diff --git a/modules/system/views_handler_field_file_filemime.inc b/lib/Views/file/Plugin/views/field/FileMime.php
similarity index 87%
rename from modules/system/views_handler_field_file_filemime.inc
rename to lib/Views/file/Plugin/views/field/FileMime.php
index 318fdcf..e503c67 100644
--- a/modules/system/views_handler_field_file_filemime.inc
+++ b/lib/Views/file/Plugin/views/field/FileMime.php
@@ -5,12 +5,22 @@
  * Definition of views_handler_field_file_filemime.
  */
 
+namespace Views\file\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "file_filemime"
+ * )
+ */
+class FileMime extends File {
   function option_definition() {
     $options = parent::option_definition();
     $options['filemime_image'] = array('default' => FALSE, 'bool' => TRUE);
diff --git a/modules/system/views_handler_field_file_status.inc b/lib/Views/file/Plugin/views/field/Status.php
similarity index 57%
rename from modules/system/views_handler_field_file_status.inc
rename to lib/Views/file/Plugin/views/field/Status.php
index ac1022c..9ab4e7f 100644
--- a/modules/system/views_handler_field_file_status.inc
+++ b/lib/Views/file/Plugin/views/field/Status.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_file_status.
  */
 
+namespace Views\file\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "file_status"
+ * )
+ */
+class Status extends FieldPluginBase {
   function render($values) {
     $value = $this->get_value($values);
     return _views_file_status($value);
diff --git a/modules/system/views_handler_field_file_uri.inc b/lib/Views/file/Plugin/views/field/Uri.php
similarity index 87%
rename from modules/system/views_handler_field_file_uri.inc
rename to lib/Views/file/Plugin/views/field/Uri.php
index 334e505..a1862a4 100644
--- a/modules/system/views_handler_field_file_uri.inc
+++ b/lib/Views/file/Plugin/views/field/Uri.php
@@ -5,10 +5,18 @@
  * Definition of views_handler_field_file_uri.
  */
 
+namespace Views\file\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Field handler to add rendering file paths as file URLs instead of as internal file URIs.
+ *
+ * @Plugin(
+ *   id = "file_uri"
+ * )
  */
-class views_handler_field_file_uri extends views_handler_field_file {
+class Uri extends File {
   function option_definition() {
     $options = parent::option_definition();
     $options['file_download_path'] = array('default' => FALSE, 'bool' => TRUE);
diff --git a/modules/system/views_handler_filter_file_status.inc b/lib/Views/file/Plugin/views/filter/Status.php
similarity index 57%
rename from modules/system/views_handler_filter_file_status.inc
rename to lib/Views/file/Plugin/views/filter/Status.php
index 6194395..d9de88a 100644
--- a/modules/system/views_handler_filter_file_status.inc
+++ b/lib/Views/file/Plugin/views/filter/Status.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_filter_file_status.
  */
 
+namespace Views\file\Plugin\views\filter;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\filter\InOperator;
+
 /**
  * Filter by file status.
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter_file_status extends views_handler_filter_in_operator {
+
+/**
+ * @Plugin(
+ *   id = "file_status"
+ * )
+ */
+class Status extends InOperator {
   function get_value_options() {
     if (!isset($this->value_options)) {
       $this->value_options = _views_file_status();
diff --git a/modules/filter/views_handler_field_filter_format_name.inc b/lib/Views/filter/Plugin/views/field/FormatName.php
similarity index 79%
rename from modules/filter/views_handler_field_filter_format_name.inc
rename to lib/Views/filter/Plugin/views/field/FormatName.php
index 0a7bf3b..0c65ddb 100644
--- a/modules/filter/views_handler_field_filter_format_name.inc
+++ b/lib/Views/filter/Plugin/views/field/FormatName.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_filter_format_name.
  */
 
+namespace Views\filter\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "filter_format_name"
+ * )
+ */
+class FormatName extends FieldPluginBase {
   function construct() {
     parent::construct();
     // Be explicit about the table we are using.
diff --git a/modules/locale/views_handler_argument_locale_group.inc b/lib/Views/locale/Plugin/views/argument/Group.php
similarity index 77%
rename from modules/locale/views_handler_argument_locale_group.inc
rename to lib/Views/locale/Plugin/views/argument/Group.php
index 7ced836..6cd1ac1 100644
--- a/modules/locale/views_handler_argument_locale_group.inc
+++ b/lib/Views/locale/Plugin/views/argument/Group.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_argument_locale_group.
  */
 
+namespace Views\locale\Plugin\views\argument;
+
+use Drupal\views\Plugin\views\argument\ArgumentPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Argument handler to accept a language.
  *
  * @ingroup views_argument_handlers
  */
-class views_handler_argument_locale_group extends views_handler_argument {
+
+/**
+ * @Plugin(
+ *   id = "locale_group"
+ * )
+ */
+class Group extends ArgumentPluginBase {
   function construct() {
     parent::construct('group');
   }
diff --git a/modules/locale/views_handler_argument_locale_language.inc b/lib/Views/locale/Plugin/views/argument/Language.php
similarity index 76%
rename from modules/locale/views_handler_argument_locale_language.inc
rename to lib/Views/locale/Plugin/views/argument/Language.php
index 316d4b1..808d5ec 100644
--- a/modules/locale/views_handler_argument_locale_language.inc
+++ b/lib/Views/locale/Plugin/views/argument/Language.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_argument_locale_language.
  */
 
+namespace Views\locale\Plugin\views\argument;
+
+use Drupal\views\Plugin\views\argument\ArgumentPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Argument handler to accept a language.
  *
  * @ingroup views_argument_handlers
  */
-class views_handler_argument_locale_language extends views_handler_argument {
+
+/**
+ * @Plugin(
+ *   id = "locale_language"
+ * )
+ */
+class Language extends ArgumentPluginBase {
   function construct() {
     parent::construct('language');
   }
diff --git a/modules/locale/views_handler_field_locale_group.inc b/lib/Views/locale/Plugin/views/field/Group.php
similarity index 64%
rename from modules/locale/views_handler_field_locale_group.inc
rename to lib/Views/locale/Plugin/views/field/Group.php
index 393a948..710b8ff 100644
--- a/modules/locale/views_handler_field_locale_group.inc
+++ b/lib/Views/locale/Plugin/views/field/Group.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_locale_group.
  */
 
+namespace Views\locale\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Field handler to translate a group into its readable form.
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_locale_group extends views_handler_field {
+
+/**
+ * @Plugin(
+ *   id = "locale_group"
+ * )
+ */
+class Group extends FieldPluginBase {
   function render($values) {
     $groups = module_invoke_all('locale', 'groups');
     // Sort the list.
diff --git a/modules/locale/views_handler_field_locale_language.inc b/lib/Views/locale/Plugin/views/field/Language.php
similarity index 81%
rename from modules/locale/views_handler_field_locale_language.inc
rename to lib/Views/locale/Plugin/views/field/Language.php
index 8038e2b..c952d20 100644
--- a/modules/locale/views_handler_field_locale_language.inc
+++ b/lib/Views/locale/Plugin/views/field/Language.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_locale_language.
  */
 
+namespace Views\locale\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Field handler to translate a language into its readable form.
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_locale_language extends views_handler_field {
+
+/**
+ * @Plugin(
+ *   id = "locale_language"
+ * )
+ */
+class Language extends FieldPluginBase {
   function option_definition() {
     $options = parent::option_definition();
     $options['native_language'] = array('default' => FALSE, 'bool' => TRUE);
diff --git a/modules/locale/views_handler_field_locale_link_edit.inc b/lib/Views/locale/Plugin/views/field/LinkEdit.php
similarity index 86%
rename from modules/locale/views_handler_field_locale_link_edit.inc
rename to lib/Views/locale/Plugin/views/field/LinkEdit.php
index 3789355..5ca8145 100644
--- a/modules/locale/views_handler_field_locale_link_edit.inc
+++ b/lib/Views/locale/Plugin/views/field/LinkEdit.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_locale_link_edit.
  */
 
+namespace Views\locale\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "locale_link_edit"
+ * )
+ */
+class LinkEdit extends FieldPluginBase {
   function construct() {
     parent::construct();
     $this->additional_fields['lid'] = 'lid';
diff --git a/modules/locale/views_handler_field_node_language.inc b/lib/Views/locale/Plugin/views/field/NodeLanguage.php
similarity index 83%
rename from modules/locale/views_handler_field_node_language.inc
rename to lib/Views/locale/Plugin/views/field/NodeLanguage.php
index 467605b..b23fee8 100644
--- a/modules/locale/views_handler_field_node_language.inc
+++ b/lib/Views/locale/Plugin/views/field/NodeLanguage.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_node_language.
  */
 
+namespace Views\locale\Plugin\views\field;
+
+use Views\node\Plugin\views\field\Node;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "node_language"
+ * )
+ */
+class NodeLanguage extends Node {
   function option_definition() {
     $options = parent::option_definition();
     $options['native_language'] = array('default' => FALSE, 'bool' => TRUE);
diff --git a/modules/locale/views_handler_filter_locale_group.inc b/lib/Views/locale/Plugin/views/filter/Group.php
similarity index 65%
rename from modules/locale/views_handler_filter_locale_group.inc
rename to lib/Views/locale/Plugin/views/filter/Group.php
index 5ec1e92..943c4f8 100644
--- a/modules/locale/views_handler_filter_locale_group.inc
+++ b/lib/Views/locale/Plugin/views/filter/Group.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_filter_locale_group.
  */
 
+namespace Views\locale\Plugin\views\filter;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\filter\InOperator;
+
 /**
  * Filter by locale group.
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter_locale_group extends views_handler_filter_in_operator {
+
+/**
+ * @Plugin(
+ *   id = "locale_group"
+ * )
+ */
+class Group extends InOperator {
   function get_value_options() {
     if (!isset($this->value_options)) {
       $this->value_title = t('Group');
diff --git a/modules/locale/views_handler_filter_locale_language.inc b/lib/Views/locale/Plugin/views/filter/Language.php
similarity index 73%
rename from modules/locale/views_handler_filter_locale_language.inc
rename to lib/Views/locale/Plugin/views/filter/Language.php
index 6ad1a03..7295418 100644
--- a/modules/locale/views_handler_filter_locale_language.inc
+++ b/lib/Views/locale/Plugin/views/filter/Language.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_filter_locale_language.
  */
 
+namespace Views\locale\Plugin\views\filter;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\filter\InOperator;
+
 /**
  * Filter by language.
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter_locale_language extends views_handler_filter_in_operator {
+
+/**
+ * @Plugin(
+ *   id = "locale_language"
+ * )
+ */
+class Language extends InOperator {
   function get_value_options() {
     if (!isset($this->value_options)) {
       $this->value_title = t('Language');
diff --git a/modules/locale/views_handler_filter_node_language.inc b/lib/Views/locale/Plugin/views/filter/NodeLanguage.php
similarity index 72%
rename from modules/locale/views_handler_filter_node_language.inc
rename to lib/Views/locale/Plugin/views/filter/NodeLanguage.php
index aaf283c..075c23c 100644
--- a/modules/locale/views_handler_filter_node_language.inc
+++ b/lib/Views/locale/Plugin/views/filter/NodeLanguage.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_filter_node_language.
  */
 
+namespace Views\locale\Plugin\views\filter;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\filter\InOperator;
+
 /**
  * Filter by language.
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter_node_language extends views_handler_filter_in_operator {
+
+/**
+ * @Plugin(
+ *   id = "node_language"
+ * )
+ */
+class NodeLanguage extends InOperator {
   function get_value_options() {
     if (!isset($this->value_options)) {
       $this->value_title = t('Language');
diff --git a/modules/locale/views_handler_filter_locale_version.inc b/lib/Views/locale/Plugin/views/filter/Version.php
similarity index 76%
rename from modules/locale/views_handler_filter_locale_version.inc
rename to lib/Views/locale/Plugin/views/filter/Version.php
index 7170860..396b50e 100644
--- a/modules/locale/views_handler_filter_locale_version.inc
+++ b/lib/Views/locale/Plugin/views/filter/Version.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_filter_locale_version.
  */
 
+namespace Views\locale\Plugin\views\filter;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\filter\InOperator;
+
 /**
  * Filter by version.
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter_locale_version extends views_handler_filter_in_operator {
+
+/**
+ * @Plugin(
+ *   id = "locale_version"
+ * )
+ */
+class Version extends InOperator {
   function get_value_options() {
     if (!isset($this->value_options)) {
       $this->value_title = t('Version');
diff --git a/lib/Views/node/Plugin/views/argument/CreatedDay.php b/lib/Views/node/Plugin/views/argument/CreatedDay.php
new file mode 100644
index 0000000..d321dad
--- /dev/null
+++ b/lib/Views/node/Plugin/views/argument/CreatedDay.php
@@ -0,0 +1,49 @@
+<?php
+
+namespace Views\node\Plugin\views\argument;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\argument\Date;
+
+/**
+ * Argument handler for a day (DD)
+ */
+
+/**
+ * @Plugin(
+ *   id = "node_created_day"
+ * )
+ */
+class CreatedDay extends Date {
+  /**
+   * Constructor implementation
+   */
+  function construct() {
+    parent::construct();
+    $this->formula = views_date_sql_extract('DAY', "***table***.$this->real_field");
+    $this->format = 'j';
+    $this->arg_format = 'd';
+  }
+
+  /**
+   * Provide a link to the next level of the view
+   */
+  function summary_name($data) {
+    $day = str_pad($data->{$this->name_alias}, 2, '0', STR_PAD_LEFT);
+    // strtotime respects server timezone, so we need to set the time fixed as utc time
+    return format_date(strtotime("2005" . "05" . $day . " 00:00:00 UTC"), 'custom', $this->format, 'UTC');
+  }
+
+  /**
+   * Provide a link to the next level of the view
+   */
+  function title() {
+    $day = str_pad($this->argument, 2, '0', STR_PAD_LEFT);
+    return format_date(strtotime("2005" . "05" . $day . " 00:00:00 UTC"), 'custom', $this->format, 'UTC');
+  }
+
+  function summary_argument($data) {
+    // Make sure the argument contains leading zeroes.
+    return str_pad($data->{$this->base_alias}, 2, '0', STR_PAD_LEFT);
+  }
+}
diff --git a/lib/Views/node/Plugin/views/argument/CreatedFullDate.php b/lib/Views/node/Plugin/views/argument/CreatedFullDate.php
new file mode 100644
index 0000000..712dd35
--- /dev/null
+++ b/lib/Views/node/Plugin/views/argument/CreatedFullDate.php
@@ -0,0 +1,42 @@
+<?php
+
+namespace Views\node\Plugin\views\argument;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\argument\Date;
+
+/**
+ * Argument handler for a full date (CCYYMMDD)
+ */
+
+/**
+ * @Plugin(
+ *   id = "node_created_fulldate"
+ * )
+ */
+class CreatedFullDate extends Date {
+  /**
+   * Constructor implementation
+   */
+  function construct() {
+    parent::construct();
+    $this->format = 'F j, Y';
+    $this->arg_format = 'Ymd';
+    $this->formula = views_date_sql_format($this->arg_format, "***table***.$this->real_field");
+  }
+
+  /**
+   * Provide a link to the next level of the view
+   */
+  function summary_name($data) {
+    $created = $data->{$this->name_alias};
+    return format_date(strtotime($created . " 00:00:00 UTC"), 'custom', $this->format, 'UTC');
+  }
+
+  /**
+   * Provide a link to the next level of the view
+   */
+  function title() {
+    return format_date(strtotime($this->argument . " 00:00:00 UTC"), 'custom', $this->format, 'UTC');
+  }
+}
diff --git a/lib/Views/node/Plugin/views/argument/CreatedMonth.php b/lib/Views/node/Plugin/views/argument/CreatedMonth.php
new file mode 100644
index 0000000..f4efee4
--- /dev/null
+++ b/lib/Views/node/Plugin/views/argument/CreatedMonth.php
@@ -0,0 +1,48 @@
+<?php
+
+namespace Views\node\Plugin\views\argument;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\argument\Date;
+
+/**
+ * Argument handler for a month (MM)
+ */
+
+/**
+ * @Plugin(
+ *   id = "node_created_month"
+ * )
+ */
+class CreatedMonth extends Date {
+  /**
+   * Constructor implementation
+   */
+  function construct() {
+    parent::construct();
+    $this->formula = views_date_sql_extract('MONTH', "***table***.$this->real_field");
+    $this->format = 'F';
+    $this->arg_format = 'm';
+  }
+
+  /**
+   * Provide a link to the next level of the view
+   */
+  function summary_name($data) {
+    $month = str_pad($data->{$this->name_alias}, 2, '0', STR_PAD_LEFT);
+    return format_date(strtotime("2005" . $month . "15" . " 00:00:00 UTC" ), 'custom', $this->format, 'UTC');
+  }
+
+  /**
+   * Provide a link to the next level of the view
+   */
+  function title() {
+    $month = str_pad($this->argument, 2, '0', STR_PAD_LEFT);
+    return format_date(strtotime("2005" . $month . "15" . " 00:00:00 UTC"), 'custom', $this->format, 'UTC');
+  }
+
+  function summary_argument($data) {
+    // Make sure the argument contains leading zeroes.
+    return str_pad($data->{$this->base_alias}, 2, '0', STR_PAD_LEFT);
+  }
+}
diff --git a/lib/Views/node/Plugin/views/argument/CreatedWeek.php b/lib/Views/node/Plugin/views/argument/CreatedWeek.php
new file mode 100644
index 0000000..e9f337e
--- /dev/null
+++ b/lib/Views/node/Plugin/views/argument/CreatedWeek.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace Views\node\Plugin\views\argument;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\argument\Date;
+
+/**
+ * Argument handler for a week.
+ */
+
+/**
+ * @Plugin(
+ *   id = "node_created_week"
+ * )
+ */
+class CreatedWeek extends Date {
+  /**
+   * Constructor implementation
+   */
+  function construct() {
+    parent::construct();
+    $this->arg_format = 'w';
+    $this->formula = views_date_sql_extract('WEEK', "***table***.$this->real_field");
+  }
+
+  /**
+   * Provide a link to the next level of the view
+   */
+  function summary_name($data) {
+    $created = $data->{$this->name_alias};
+    return t('Week @week', array('@week' => $created));
+  }
+}
diff --git a/lib/Views/node/Plugin/views/argument/CreatedYear.php b/lib/Views/node/Plugin/views/argument/CreatedYear.php
new file mode 100644
index 0000000..cd1a294
--- /dev/null
+++ b/lib/Views/node/Plugin/views/argument/CreatedYear.php
@@ -0,0 +1,26 @@
+<?php
+
+namespace Views\node\Plugin\views\argument;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\argument\Date;
+
+/**
+ * Argument handler for a year (CCYY)
+ */
+
+/**
+ * @Plugin(
+ *   id = "node_created_year"
+ * )
+ */
+class CreatedYear extends Date {
+  /**
+   * Constructor implementation
+   */
+  function construct() {
+    parent::construct();
+    $this->arg_format = 'Y';
+    $this->formula = views_date_sql_extract('YEAR', "***table***.$this->real_field");
+  }
+}
diff --git a/lib/Views/node/Plugin/views/argument/CreatedYearMonth.php b/lib/Views/node/Plugin/views/argument/CreatedYearMonth.php
new file mode 100644
index 0000000..b4ff62a
--- /dev/null
+++ b/lib/Views/node/Plugin/views/argument/CreatedYearMonth.php
@@ -0,0 +1,42 @@
+<?php
+
+namespace Views\node\Plugin\views\argument;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\argument\Date;
+
+/**
+ * Argument handler for a year plus month (CCYYMM)
+ */
+
+/**
+ * @Plugin(
+ *   id = "node_created_year_month"
+ * )
+ */
+class CreatedYearMonth extends Date {
+  /**
+   * Constructor implementation
+   */
+  function construct() {
+    parent::construct();
+    $this->format = 'F Y';
+    $this->arg_format = 'Ym';
+    $this->formula = views_date_sql_format($this->arg_format, "***table***.$this->real_field");
+  }
+
+  /**
+   * Provide a link to the next level of the view
+   */
+  function summary_name($data) {
+    $created = $data->{$this->name_alias};
+    return format_date(strtotime($created . "15" . " 00:00:00 UTC"), 'custom', $this->format, 'UTC');
+  }
+
+  /**
+   * Provide a link to the next level of the view
+   */
+  function title() {
+    return format_date(strtotime($this->argument . "15" . " 00:00:00 UTC"), 'custom', $this->format, 'UTC');
+  }
+}
diff --git a/modules/node/views_handler_argument_node_language.inc b/lib/Views/node/Plugin/views/argument/Language.php
similarity index 76%
rename from modules/node/views_handler_argument_node_language.inc
rename to lib/Views/node/Plugin/views/argument/Language.php
index 170388a..2ac222e 100644
--- a/modules/node/views_handler_argument_node_language.inc
+++ b/lib/Views/node/Plugin/views/argument/Language.php
@@ -5,10 +5,21 @@
  * Definition of views_handler_argument_node_language.
  */
 
+namespace Views\node\Plugin\views\argument;
+
+use Drupal\views\Plugin\views\argument\ArgumentPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Argument handler to accept a language.
  */
-class views_handler_argument_node_language extends views_handler_argument {
+
+/**
+ * @Plugin(
+ *   id = "node_language"
+ * )
+ */
+class Language extends ArgumentPluginBase {
   function construct() {
     parent::construct('language');
   }
diff --git a/modules/node/views_handler_argument_node_nid.inc b/lib/Views/node/Plugin/views/argument/Nid.php
similarity index 66%
rename from modules/node/views_handler_argument_node_nid.inc
rename to lib/Views/node/Plugin/views/argument/Nid.php
index d951f88..ed329b4 100644
--- a/modules/node/views_handler_argument_node_nid.inc
+++ b/lib/Views/node/Plugin/views/argument/Nid.php
@@ -5,10 +5,21 @@
  * Provide node nid argument handler.
  */
 
+namespace Views\node\Plugin\views\argument;
+
+use Drupal\views\Plugin\views\argument\Numeric;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Argument handler to accept a node id.
  */
-class views_handler_argument_node_nid extends views_handler_argument_numeric {
+
+/**
+ * @Plugin(
+ *   id = "node_nid"
+ * )
+ */
+class Nid extends Numeric {
   /**
    * Override the behavior of title(). Get the title of the node.
    */
diff --git a/modules/node/views_handler_argument_node_type.inc b/lib/Views/node/Plugin/views/argument/Type.php
similarity index 78%
rename from modules/node/views_handler_argument_node_type.inc
rename to lib/Views/node/Plugin/views/argument/Type.php
index ea99d7c..fd8256e 100644
--- a/modules/node/views_handler_argument_node_type.inc
+++ b/lib/Views/node/Plugin/views/argument/Type.php
@@ -5,10 +5,21 @@
  * Definition of views_handler_argument_node_type.
  */
 
+namespace Views\node\Plugin\views\argument;
+
+use Drupal\views\Plugin\views\argument\String;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Argument handler to accept a node type.
  */
-class views_handler_argument_node_type extends views_handler_argument_string {
+
+/**
+ * @Plugin(
+ *   id = "node_type"
+ * )
+ */
+class Type extends String {
   function construct() {
     parent::construct('type');
   }
diff --git a/modules/node/views_handler_argument_node_uid_revision.inc b/lib/Views/node/Plugin/views/argument/UidRevision.php
similarity index 72%
rename from modules/node/views_handler_argument_node_uid_revision.inc
rename to lib/Views/node/Plugin/views/argument/UidRevision.php
index 142882a..56b6525 100644
--- a/modules/node/views_handler_argument_node_uid_revision.inc
+++ b/lib/Views/node/Plugin/views/argument/UidRevision.php
@@ -5,11 +5,22 @@
  * Defintion of views_handler_argument_node_uid_revision.
  */
 
+namespace Views\node\Plugin\views\argument;
+
+use Views\user\Plugin\views\argument\Uid;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Filter handler to accept a user id to check for nodes that
  * user posted or created a revision on.
  */
-class views_handler_argument_node_uid_revision extends views_handler_argument_comment_user_uid {
+
+/**
+ * @Plugin(
+ *   id = "node_uid_revision"
+ * )
+ */
+class UidRevision extends Uid {
   function query($group_by = FALSE) {
     $this->ensure_my_table();
     $placeholder = $this->placeholder();
diff --git a/modules/node/views_handler_argument_node_vid.inc b/lib/Views/node/Plugin/views/argument/Vid.php
similarity index 80%
rename from modules/node/views_handler_argument_node_vid.inc
rename to lib/Views/node/Plugin/views/argument/Vid.php
index 3e684af..8b7717a 100644
--- a/modules/node/views_handler_argument_node_vid.inc
+++ b/lib/Views/node/Plugin/views/argument/Vid.php
@@ -5,10 +5,21 @@
  * Provide node vid argument handler.
  */
 
+namespace Views\node\Plugin\views\argument;
+
+use Drupal\views\Plugin\views\argument\Numeric;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Argument handler to accept a node revision id.
  */
-class views_handler_argument_node_vid extends views_handler_argument_numeric {
+
+/**
+ * @Plugin(
+ *   id = "node_vid"
+ * )
+ */
+class Vid extends Numeric {
   // No constructor is necessary.
 
   /**
diff --git a/modules/node/views_plugin_argument_default_node.inc b/lib/Views/node/Plugin/views/argument_default/Node.php
similarity index 58%
rename from modules/node/views_plugin_argument_default_node.inc
rename to lib/Views/node/Plugin/views/argument_default/Node.php
index 65fc0eb..1868697 100644
--- a/modules/node/views_plugin_argument_default_node.inc
+++ b/lib/Views/node/Plugin/views/argument_default/Node.php
@@ -5,12 +5,25 @@
  * Contains the node from URL argument default plugin.
  */
 
+namespace Views\node\Plugin\views\argument_default;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+use Drupal\views\Plugin\views\argument_default\ArgumentDefaultPluginBase;
+
 /**
  * Default argument plugin to extract a node via menu_get_object
  *
  * This plugin actually has no options so it odes not need to do a great deal.
  */
-class views_plugin_argument_default_node extends views_plugin_argument_default {
+
+/**
+ * @Plugin(
+ *   id = "node",
+ *   title = @Translation("Content ID from URL")
+ * )
+ */
+class Node extends ArgumentDefaultPluginBase {
   function get_argument() {
     foreach (range(1, 3) as $i) {
       $node = menu_get_object('node', $i);
diff --git a/modules/node/views_plugin_argument_validate_node.inc b/lib/Views/node/Plugin/views/argument_validator/Node.php
similarity index 92%
rename from modules/node/views_plugin_argument_validate_node.inc
rename to lib/Views/node/Plugin/views/argument_validator/Node.php
index 1463a72..bf3543f 100644
--- a/modules/node/views_plugin_argument_validate_node.inc
+++ b/lib/Views/node/Plugin/views/argument_validator/Node.php
@@ -5,10 +5,23 @@
  * Contains the 'node' argument validator plugin.
  */
 
+namespace Views\node\Plugin\views\argument_validator;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+use Drupal\views\Plugin\views\argument_validator\ArgumentValidatorPluginBase;
+
 /**
  * Validate whether an argument is an acceptable node.
  */
-class views_plugin_argument_validate_node extends views_plugin_argument_validate {
+
+/**
+ * @Plugin(
+ *   id = "node",
+ *   title = @Translation("Content")
+ * )
+ */
+class Node extends ArgumentValidatorPluginBase {
   function option_definition() {
     $options = parent::option_definition();
     $options['types'] = array('default' => array());
diff --git a/modules/node/views_handler_field_history_user_timestamp.inc b/lib/Views/node/Plugin/views/field/HistoryUserTimestamp.php
similarity index 91%
rename from modules/node/views_handler_field_history_user_timestamp.inc
rename to lib/Views/node/Plugin/views/field/HistoryUserTimestamp.php
index e4964ea..8f7cdb1 100644
--- a/modules/node/views_handler_field_history_user_timestamp.inc
+++ b/lib/Views/node/Plugin/views/field/HistoryUserTimestamp.php
@@ -5,6 +5,11 @@
  * Definition of views_handler_field_history_user_timestamp.
  */
 
+namespace Views\node\Plugin\views\field;
+
+use Views\node\Plugin\views\field\Node;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Field handler to display the marker for new content.
  *
@@ -13,7 +18,13 @@
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_history_user_timestamp extends views_handler_field_node {
+
+/**
+ * @Plugin(
+ *   id = "node_history_user_timestamp"
+ * )
+ */
+class HistoryUserTimestamp extends Node {
   function init(&$view, &$options) {
     parent::init($view, $options);
     global $user;
diff --git a/modules/node/views_handler_field_node_link.inc b/lib/Views/node/Plugin/views/field/Link.php
similarity index 86%
rename from modules/node/views_handler_field_node_link.inc
rename to lib/Views/node/Plugin/views/field/Link.php
index 7e9bbd2..bb7ebc6 100644
--- a/modules/node/views_handler_field_node_link.inc
+++ b/lib/Views/node/Plugin/views/field/Link.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_node_link.
  */
 
+namespace Views\node\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\Entity;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Field handler to present a link to the node.
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_node_link extends views_handler_field_entity {
+
+/**
+ * @Plugin(
+ *   id = "node_link"
+ * )
+ */
+class Link extends Entity {
 
   function option_definition() {
     $options = parent::option_definition();
diff --git a/modules/node/views_handler_field_node_link_delete.inc b/lib/Views/node/Plugin/views/field/LinkDelete.php
similarity index 76%
rename from modules/node/views_handler_field_node_link_delete.inc
rename to lib/Views/node/Plugin/views/field/LinkDelete.php
index 8271c0b..433d6bb 100644
--- a/modules/node/views_handler_field_node_link_delete.inc
+++ b/lib/Views/node/Plugin/views/field/LinkDelete.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_node_link_delete.
  */
 
+namespace Views\node\Plugin\views\field;
+
+use Views\node\Plugin\views\field\Link;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "node_link_delete"
+ * )
+ */
+class LinkDelete extends Link {
 
   /**
    * Renders the link.
diff --git a/modules/node/views_handler_field_node_link_edit.inc b/lib/Views/node/Plugin/views/field/LinkEdit.php
similarity index 76%
rename from modules/node/views_handler_field_node_link_edit.inc
rename to lib/Views/node/Plugin/views/field/LinkEdit.php
index 4e8aad0..279dfc1 100644
--- a/modules/node/views_handler_field_node_link_edit.inc
+++ b/lib/Views/node/Plugin/views/field/LinkEdit.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_node_link_edit.
  */
 
+namespace Views\node\Plugin\views\field;
+
+use Views\node\Plugin\views\field\Link;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "node_link_edit"
+ * )
+ */
+class LinkEdit extends Link {
 
   /**
    * Renders the link.
diff --git a/modules/node/views_handler_field_node.inc b/lib/Views/node/Plugin/views/field/Node.php
similarity index 92%
rename from modules/node/views_handler_field_node.inc
rename to lib/Views/node/Plugin/views/field/Node.php
index f712a53..e41c524 100644
--- a/modules/node/views_handler_field_node.inc
+++ b/lib/Views/node/Plugin/views/field/Node.php
@@ -5,6 +5,11 @@
  * Contains the basic 'node' field handler.
  */
 
+namespace Views\node\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Field handler to provide simple renderer that allows linking to a node.
  * Definition terms:
@@ -12,7 +17,13 @@
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_node extends views_handler_field {
+
+/**
+ * @Plugin(
+ *   id = "node"
+ * )
+ */
+class Node extends FieldPluginBase {
 
   function init(&$view, &$options) {
     parent::init($view, $options);
diff --git a/modules/node/views_handler_field_node_path.inc b/lib/Views/node/Plugin/views/field/Path.php
similarity index 84%
rename from modules/node/views_handler_field_node_path.inc
rename to lib/Views/node/Plugin/views/field/Path.php
index f47f85f..c98b337 100644
--- a/modules/node/views_handler_field_node_path.inc
+++ b/lib/Views/node/Plugin/views/field/Path.php
@@ -5,12 +5,23 @@
  * Handler for node path field.
  */
 
+namespace Views\node\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Field handler to present the path to the node.
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_node_path extends views_handler_field {
+
+/**
+ * @Plugin(
+ *   id = "node_path"
+ * )
+ */
+class Path extends FieldPluginBase {
 
   function option_definition() {
     $options = parent::option_definition();
diff --git a/modules/node/views_handler_field_node_revision.inc b/lib/Views/node/Plugin/views/field/Revision.php
similarity index 91%
rename from modules/node/views_handler_field_node_revision.inc
rename to lib/Views/node/Plugin/views/field/Revision.php
index c04693a..01161d9 100644
--- a/modules/node/views_handler_field_node_revision.inc
+++ b/lib/Views/node/Plugin/views/field/Revision.php
@@ -5,6 +5,11 @@
  * Definition of views_handler_field_node_revision.
  */
 
+namespace Views\node\Plugin\views\field;
+
+use Views\node\Plugin\views\field\Node;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Contains the basic 'node_revision' field handler.
  */
@@ -14,7 +19,13 @@
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_node_revision extends views_handler_field_node {
+
+/**
+ * @Plugin(
+ *   id = "node_revision"
+ * )
+ */
+class Revision extends Node {
   function init(&$view, &$options) {
     parent::init($view, $options);
     if (!empty($this->options['link_to_node_revision'])) {
diff --git a/modules/node/views_handler_field_node_revision_link.inc b/lib/Views/node/Plugin/views/field/RevisionLink.php
similarity index 89%
rename from modules/node/views_handler_field_node_revision_link.inc
rename to lib/Views/node/Plugin/views/field/RevisionLink.php
index 69047bb..032d8e2 100644
--- a/modules/node/views_handler_field_node_revision_link.inc
+++ b/lib/Views/node/Plugin/views/field/RevisionLink.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_node_revision_link.
  */
 
+namespace Views\node\Plugin\views\field;
+
+use Views\node\Plugin\views\field\Link;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Field handler to present a link to a node revision.
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_node_revision_link extends views_handler_field_node_link {
+
+/**
+ * @Plugin(
+ *   id = "node_revision_link"
+ * )
+ */
+class RevisionLink extends Link {
 
   function construct() {
     parent::construct();
diff --git a/modules/node/views_handler_field_node_revision_link_delete.inc b/lib/Views/node/Plugin/views/field/RevisionLinkDelete.php
similarity index 77%
rename from modules/node/views_handler_field_node_revision_link_delete.inc
rename to lib/Views/node/Plugin/views/field/RevisionLinkDelete.php
index e0d00a7..6441c5d 100644
--- a/modules/node/views_handler_field_node_revision_link_delete.inc
+++ b/lib/Views/node/Plugin/views/field/RevisionLinkDelete.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_node_revision_link_delete.
  */
 
+namespace Views\node\Plugin\views\field;
+
+use Views\node\Plugin\views\field\RevisionLink;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Field handler to present link to delete a node revision.
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_node_revision_link_delete extends views_handler_field_node_revision_link {
+
+/**
+ * @Plugin(
+ *   id = "node_revision_link_delete"
+ * )
+ */
+class RevisionLinkDelete extends RevisionLink {
 
   function access() {
     return user_access('delete revisions') || user_access('administer nodes');
diff --git a/modules/node/views_handler_field_node_revision_link_revert.inc b/lib/Views/node/Plugin/views/field/RevisionLinkRevert.php
similarity index 78%
rename from modules/node/views_handler_field_node_revision_link_revert.inc
rename to lib/Views/node/Plugin/views/field/RevisionLinkRevert.php
index af20442..d2fce3a 100644
--- a/modules/node/views_handler_field_node_revision_link_revert.inc
+++ b/lib/Views/node/Plugin/views/field/RevisionLinkRevert.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_node_revision_link_revert.
  */
 
+namespace Views\node\Plugin\views\field;
+
+use Views\node\Plugin\views\field\RevisionLink;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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_revision_link {
+
+/**
+ * @Plugin(
+ *   id = "node_revision_link_revert"
+ * )
+ */
+class RevisionLinkRevert extends RevisionLink {
 
   function access() {
     return user_access('revert revisions') || user_access('administer nodes');
diff --git a/modules/node/views_handler_field_node_type.inc b/lib/Views/node/Plugin/views/field/Type.php
similarity index 86%
rename from modules/node/views_handler_field_node_type.inc
rename to lib/Views/node/Plugin/views/field/Type.php
index ba8ee3e..68bb561 100644
--- a/modules/node/views_handler_field_node_type.inc
+++ b/lib/Views/node/Plugin/views/field/Type.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_node_type.
  */
 
+namespace Views\node\Plugin\views\field;
+
+use Views\node\Plugin\views\field\Node;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "node_type"
+ * )
+ */
+class Type extends Node {
   function option_definition() {
     $options = parent::option_definition();
     $options['machine_name'] = array('default' => FALSE, 'bool' => TRUE);
diff --git a/modules/node/views_handler_filter_node_access.inc b/lib/Views/node/Plugin/views/filter/Access.php
similarity index 80%
rename from modules/node/views_handler_filter_node_access.inc
rename to lib/Views/node/Plugin/views/filter/Access.php
index a9ee85c..e718283 100644
--- a/modules/node/views_handler_filter_node_access.inc
+++ b/lib/Views/node/Plugin/views/filter/Access.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_filter_node_access.
  */
 
+namespace Views\node\Plugin\views\filter;
+
+use Drupal\views\Plugin\views\filter\FilterPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Filter by node_access records.
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter_node_access extends views_handler_filter {
+
+/**
+ * @Plugin(
+ *   id = "node_access"
+ * )
+ */
+class Access extends FilterPluginBase {
   function admin_summary() { }
   function operator_form(&$form, &$form_state) { }
   function can_expose() {
diff --git a/modules/node/views_handler_filter_history_user_timestamp.inc b/lib/Views/node/Plugin/views/filter/HistoryUserTimestamp.php
similarity index 91%
rename from modules/node/views_handler_filter_history_user_timestamp.inc
rename to lib/Views/node/Plugin/views/filter/HistoryUserTimestamp.php
index acdb831..df39c40 100644
--- a/modules/node/views_handler_filter_history_user_timestamp.inc
+++ b/lib/Views/node/Plugin/views/filter/HistoryUserTimestamp.php
@@ -5,6 +5,11 @@
  * Definition of views_handler_filter_history_user_timestamp.
  */
 
+namespace Views\node\Plugin\views\filter;
+
+use Drupal\views\Plugin\views\filter\FilterPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Filter for new content.
  *
@@ -13,7 +18,13 @@
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter_history_user_timestamp extends views_handler_filter {
+
+/**
+ * @Plugin(
+ *   id = "node_history_user_timestamp"
+ * )
+ */
+class HistoryUserTimestamp extends FilterPluginBase {
   // Don't display empty space where the operator would be.
   var $no_operator = TRUE;
 
diff --git a/modules/node/views_handler_filter_node_status.inc b/lib/Views/node/Plugin/views/filter/Status.php
similarity index 64%
rename from modules/node/views_handler_filter_node_status.inc
rename to lib/Views/node/Plugin/views/filter/Status.php
index 2afb286..b66d6f7 100644
--- a/modules/node/views_handler_filter_node_status.inc
+++ b/lib/Views/node/Plugin/views/filter/Status.php
@@ -2,15 +2,26 @@
 
 /**
  * @file
- * Definition of views_handler_filter_node_status.
+ * Definition of Drupal\node\Plugins\views\filter\Status
  */
 
+namespace Views\node\Plugin\views\filter;
+
+use Drupal\views\Plugin\views\filter\FilterPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Filter by published status.
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter_node_status extends views_handler_filter {
+
+/**
+ * @Plugin(
+ *   id = "node_status"
+ * )
+ */
+class Status extends FilterPluginBase {
   function admin_summary() { }
   function operator_form(&$form, &$form_state) { }
   function can_expose() { return FALSE; }
diff --git a/modules/node/views_handler_filter_node_type.inc b/lib/Views/node/Plugin/views/filter/Type.php
similarity index 70%
rename from modules/node/views_handler_filter_node_type.inc
rename to lib/Views/node/Plugin/views/filter/Type.php
index 7f8ab4b..326e1ab 100644
--- a/modules/node/views_handler_filter_node_type.inc
+++ b/lib/Views/node/Plugin/views/filter/Type.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_filter_node_type.
  */
 
+namespace Views\node\Plugin\views\filter;
+
+use Drupal\views\Plugin\views\filter\InOperator;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Filter by node type.
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter_node_type extends views_handler_filter_in_operator {
+
+/**
+ * @Plugin(
+ *   id = "node_type"
+ * )
+ */
+class Type extends InOperator {
   function get_value_options() {
     if (!isset($this->value_options)) {
       $this->value_title = t('Content types');
diff --git a/modules/node/views_handler_filter_node_uid_revision.inc b/lib/Views/node/Plugin/views/filter/UidRevision.php
similarity index 75%
rename from modules/node/views_handler_filter_node_uid_revision.inc
rename to lib/Views/node/Plugin/views/filter/UidRevision.php
index 4d3d9a7..11b233e 100644
--- a/modules/node/views_handler_filter_node_uid_revision.inc
+++ b/lib/Views/node/Plugin/views/filter/UidRevision.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_filter_node_uid_revision.
  */
 
+namespace Views\node\Plugin\views\filter;
+
+use Views\user\Plugin\views\filter\Name;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "node_uid_revision"
+ * )
+ */
+class UidRevision extends Name {
   function query($group_by = FALSE) {
     $this->ensure_my_table();
 
diff --git a/modules/node/views_plugin_row_node_rss.inc b/lib/Views/node/Plugin/views/row/Rss.php
similarity index 89%
rename from modules/node/views_plugin_row_node_rss.inc
rename to lib/Views/node/Plugin/views/row/Rss.php
index b0161c5..4a2a0b6 100644
--- a/modules/node/views_plugin_row_node_rss.inc
+++ b/lib/Views/node/Plugin/views/row/Rss.php
@@ -5,11 +5,30 @@
  * Contains the node RSS row style plugin.
  */
 
+namespace Views\node\Plugin\views\row;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+use Drupal\views\Plugin\views\row\RowPluginBase;
+
 /**
  * Plugin which performs a node_view on the resulting object
  * and formats it as an RSS item.
  */
-class views_plugin_row_node_rss extends views_plugin_row {
+
+/**
+ * @Plugin(
+ *   id = "node_rss",
+ *   title = @Translation("Content"),
+ *   help = @Translation("Display the content with standard node view."),
+ *   theme = "views_view_row_rss",
+ *   base = {"node"},
+ *   uses_options = TRUE,
+ *   type = "feed",
+ *   help_topic = "style-node-rss"
+ * )
+ */
+class Rss extends RowPluginBase {
   // Basic properties that let the row style follow relationships.
   var $base_table = 'node';
   var $base_field = 'nid';
@@ -160,7 +179,7 @@ class views_plugin_row_node_rss extends views_plugin_row {
 
     $item = new stdClass();
     $item->description = $item_text;
-    $item->title = $node->title;
+    $item->title = $node->label();
     $item->link = $node->link;
     $item->elements = $node->rss_elements;
     $item->nid = $node->nid;
diff --git a/modules/node/views_plugin_row_node_view.inc b/lib/Views/node/Plugin/views/row/View.php
similarity index 86%
rename from modules/node/views_plugin_row_node_view.inc
rename to lib/Views/node/Plugin/views/row/View.php
index 6060aa9..f035a64 100644
--- a/modules/node/views_plugin_row_node_view.inc
+++ b/lib/Views/node/Plugin/views/row/View.php
@@ -5,6 +5,12 @@
  * Contains the node view row style plugin.
  */
 
+namespace Views\node\Plugin\views\row;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+use Drupal\views\Plugin\views\row\RowPluginBase;
+
 /**
  * Plugin which performs a node_view on the resulting object.
  *
@@ -12,7 +18,19 @@
  *
  * @ingroup views_row_plugins
  */
-class views_plugin_row_node_view extends views_plugin_row {
+
+/**
+ * @Plugin(
+ *   id = "node",
+ *   title = @Translation("Content"),
+ *   help = @Translation("Display the content with standard node view."),
+ *   base = {"node"},
+ *   uses_options = TRUE,
+ *   type = "normal",
+ *   help_topic = "style-node"
+ * )
+ */
+class View extends RowPluginBase {
   // Basic properties that let the row style follow relationships.
   var $base_table = 'node';
   var $base_field = 'nid';
diff --git a/modules/search/views_handler_argument_search.inc b/lib/Views/search/Plugin/views/argument/Search.php
similarity index 93%
rename from modules/search/views_handler_argument_search.inc
rename to lib/Views/search/Plugin/views/argument/Search.php
index 6a43595..0677724 100644
--- a/modules/search/views_handler_argument_search.inc
+++ b/lib/Views/search/Plugin/views/argument/Search.php
@@ -5,14 +5,24 @@
  * Definition of views_handler_argument_search.
  */
 
+namespace Views\search\Plugin\views\argument;
+
 use Drupal\views\Join;
+use Drupal\views\Plugin\views\argument\ArgumentPluginBase;
+use Drupal\Core\Annotation\Plugin;
 
 /**
  * Argument that accepts query keys for search.
  *
  * @ingroup views_argument_handlers
  */
-class views_handler_argument_search extends views_handler_argument {
+
+/**
+ * @Plugin(
+ *   id = "search"
+ * )
+ */
+class Search extends ArgumentPluginBase {
 
   /**
    * Take sure that parseSearchExpression is runned and everything is set up for it.
diff --git a/modules/search/views_handler_field_search_score.inc b/lib/Views/search/Plugin/views/field/Score.php
similarity index 93%
rename from modules/search/views_handler_field_search_score.inc
rename to lib/Views/search/Plugin/views/field/Score.php
index 0feddac..2663be4 100644
--- a/modules/search/views_handler_field_search_score.inc
+++ b/lib/Views/search/Plugin/views/field/Score.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_search_score.
  */
 
+namespace Views\search\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\Numeric;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "search_score"
+ * )
+ */
+class Score extends Numeric {
   function option_definition() {
     $options = parent::option_definition();
 
diff --git a/modules/search/views_handler_filter_search.inc b/lib/Views/search/Plugin/views/filter/Search.php
similarity index 84%
rename from modules/search/views_handler_filter_search.inc
rename to lib/Views/search/Plugin/views/filter/Search.php
index d9292eb..c159053 100644
--- a/modules/search/views_handler_filter_search.inc
+++ b/lib/Views/search/Plugin/views/filter/Search.php
@@ -5,15 +5,25 @@
  * Contains a search filter handler.
  */
 
+namespace Views\search\Plugin\views\filter;
+
 use Drupal\views\Join;
 use Drupal\search\SearchQuery;
+use Drupal\views\Plugin\views\filter\FilterPluginBase;
+use Drupal\Core\Annotation\Plugin;
 
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "search"
+ * )
+ */
+class Search extends FilterPluginBase {
   var $always_multiple = TRUE;
 
   /**
@@ -90,7 +100,7 @@ class views_handler_filter_search extends views_handler_filter {
   function query_parse_search_expression($input) {
     if (!isset($this->search_query)) {
       $this->parsed = TRUE;
-      $this->search_query = db_select('search_index', 'i', array('target' => 'slave'))->extend('viewsSearchQuery');
+      $this->search_query = db_select('search_index', 'i', array('target' => 'slave'))->extend('Drupal\search\ViewsSearchQuery');
       $this->search_query->searchExpression($input, $this->view->base_table);
       $this->search_query->publicParseSearchExpression();
     }
@@ -177,43 +187,3 @@ class views_handler_filter_search extends views_handler_filter {
     $this->search_query = NULL;
   }
 }
-
-/**
- * Extends the core SearchQuery.
- *
- * @todo: Make this class PSR-0 compatible.
- */
-class viewsSearchQuery extends SearchQuery {
-  public function &conditions() {
-    return $this->conditions;
-  }
-  public function words() {
-    return $this->words;
-  }
-
-  public function simple() {
-    return $this->simple;
-  }
-
-  public function matches() {
-    return $this->matches;
-  }
-
-  public function publicParseSearchExpression() {
-    return $this->parseSearchExpression();
-  }
-
-  function condition_replace_string($search, $replace, &$condition) {
-    if ($condition['field'] instanceof DatabaseCondition) {
-      $conditions =& $condition['field']->conditions();
-      foreach ($conditions as $key => &$subcondition) {
-        if (is_numeric($key)) {
-          $this->condition_replace_string($search, $replace, $subcondition);
-        }
-      }
-    }
-    else {
-      $condition['field'] = str_replace($search, $replace, $condition['field']);
-    }
-  }
-}
diff --git a/modules/search/views_plugin_row_search_view.inc b/lib/Views/search/Plugin/views/row/View.php
similarity index 71%
rename from modules/search/views_plugin_row_search_view.inc
rename to lib/Views/search/Plugin/views/row/View.php
index e4aacdc..d5818e2 100644
--- a/modules/search/views_plugin_row_search_view.inc
+++ b/lib/Views/search/Plugin/views/row/View.php
@@ -5,10 +5,22 @@
  * Definition of views_plugin_row_search_view.
  */
 
+namespace Views\search\Plugin\views\row;
+
+use Drupal\views\Plugin\views\row\RowPluginBase;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * Plugin which performs a node_view on the resulting object.
+ *
+ * @Plugin(
+ *   id = "search_view",
+ *   title = @Translation("Search"),
+ *   no_uid = TRUE
+ * )
  */
-class views_plugin_row_search_view extends views_plugin_row {
+class View extends RowPluginBase {
   function option_definition() {
     $options = parent::option_definition();
 
diff --git a/modules/search/views_handler_sort_search_score.inc b/lib/Views/search/Plugin/views/sort/Score.php
similarity index 82%
rename from modules/search/views_handler_sort_search_score.inc
rename to lib/Views/search/Plugin/views/sort/Score.php
index d37fb65..bb9b12c 100644
--- a/modules/search/views_handler_sort_search_score.inc
+++ b/lib/Views/search/Plugin/views/sort/Score.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_sort_search_score.
  */
 
+namespace Views\search\Plugin\views\sort;
+
+use Drupal\views\Plugin\views\sort\SortPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "search_score"
+ * )
+ */
+class Score extends SortPluginBase {
   function query() {
     // Check to see if the search filter/argument added 'score' to the table.
     // Our filter stores it as $handler->search_score -- and we also
diff --git a/modules/statistics/views_handler_field_accesslog_path.inc b/lib/Views/statistics/Plugin/views/field/AccesslogPath.php
similarity index 85%
rename from modules/statistics/views_handler_field_accesslog_path.inc
rename to lib/Views/statistics/Plugin/views/field/AccesslogPath.php
index 85b2352..2ace184 100644
--- a/modules/statistics/views_handler_field_accesslog_path.inc
+++ b/lib/Views/statistics/Plugin/views/field/AccesslogPath.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_accesslog_path.
  */
 
+namespace Views\statistics\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "statistics_accesslog_path"
+ * )
+ */
+class AccesslogPath extends FieldPluginBase {
   /**
    * Override init function to provide generic option to link to node.
    */
diff --git a/modules/system/views_handler_filter_system_type.inc b/lib/Views/system/Plugin/views/filter/Type.php
similarity index 67%
rename from modules/system/views_handler_filter_system_type.inc
rename to lib/Views/system/Plugin/views/filter/Type.php
index 84d4bcd..e63ed13 100644
--- a/modules/system/views_handler_filter_system_type.inc
+++ b/lib/Views/system/Plugin/views/filter/Type.php
@@ -5,10 +5,19 @@
  * Definition of views_handler_filter_system_type.
  */
 
+namespace Views\system\Plugin\views\filter;
+
+use Drupal\views\Plugin\views\filter\InOperator;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Filter by system type.
+ *
+ * @Plugin(
+ *   id = "system_type"
+ * )
  */
-class views_handler_filter_system_type extends views_handler_filter_in_operator {
+class Type extends InOperator {
   function get_value_options() {
     if (!isset($this->value_options)) {
       $this->value_title = t('Type');
diff --git a/modules/taxonomy/views_handler_argument_term_node_tid.inc b/lib/Views/taxonomy/Plugin/views/argument/IndexTid.php
similarity index 85%
rename from modules/taxonomy/views_handler_argument_term_node_tid.inc
rename to lib/Views/taxonomy/Plugin/views/argument/IndexTid.php
index f47f08a..5d1e8fd 100644
--- a/modules/taxonomy/views_handler_argument_term_node_tid.inc
+++ b/lib/Views/taxonomy/Plugin/views/argument/IndexTid.php
@@ -10,7 +10,18 @@
  *
  * @ingroup views_argument_handlers
  */
-class views_handler_argument_term_node_tid extends views_handler_argument_many_to_one {
+
+namespace Views\taxonomy\Plugin\views\argument;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\argument\ManyToOne;
+
+/**
+ * @Plugin(
+ *   id = "taxonomy_index_tid"
+ * )
+ */
+class IndexTid extends ManyToOne {
   function option_definition() {
     $options = parent::option_definition();
     $options['set_breadcrumb'] = array('default' => FALSE, 'bool' => TRUE);
diff --git a/modules/taxonomy/views_handler_argument_term_node_tid_depth.inc b/lib/Views/taxonomy/Plugin/views/argument/IndexTidDepth.php
similarity index 95%
rename from modules/taxonomy/views_handler_argument_term_node_tid_depth.inc
rename to lib/Views/taxonomy/Plugin/views/argument/IndexTidDepth.php
index 5b0b34d..89028b9 100644
--- a/modules/taxonomy/views_handler_argument_term_node_tid_depth.inc
+++ b/lib/Views/taxonomy/Plugin/views/argument/IndexTidDepth.php
@@ -5,6 +5,11 @@
  * Definition of views_handler_argument_term_node_tid_depth.
  */
 
+namespace Views\taxonomy\Plugin\views\argument;
+
+use Drupal\views\Plugin\views\argument\ArgumentPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Argument handler for taxonomy terms with depth.
  *
@@ -13,7 +18,13 @@
  *
  * @ingroup views_argument_handlers
  */
-class views_handler_argument_term_node_tid_depth extends views_handler_argument {
+
+/**
+ * @Plugin(
+ *   id = "taxonomy_index_tid_depth"
+ * )
+ */
+class IndexTidDepth extends ArgumentPluginBase {
   function option_definition() {
     $options = parent::option_definition();
 
diff --git a/modules/taxonomy/views_handler_argument_term_node_tid_depth_modifier.inc b/lib/Views/taxonomy/Plugin/views/argument/IndexTidDepthModifier.php
similarity index 83%
rename from modules/taxonomy/views_handler_argument_term_node_tid_depth_modifier.inc
rename to lib/Views/taxonomy/Plugin/views/argument/IndexTidDepthModifier.php
index 2f9dd4e..aaac241 100644
--- a/modules/taxonomy/views_handler_argument_term_node_tid_depth_modifier.inc
+++ b/lib/Views/taxonomy/Plugin/views/argument/IndexTidDepthModifier.php
@@ -2,9 +2,14 @@
 
 /**
  * @file
- * Definition of views_handler_argument_term_node_tid_depth_modif.
+ * Definition of views_handler_argument_term_node_tid_depth_modifier.
  */
 
+namespace Views\taxonomy\Plugin\views\argument;
+
+use Drupal\views\Plugin\views\argument\ArgumentPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Argument handler for to modify depth for a previous term.
  *
@@ -13,7 +18,13 @@
  *
  * @ingroup views_argument_handlers
  */
-class views_handler_argument_term_node_tid_depth_modifier extends views_handler_argument {
+
+/**
+ * @Plugin(
+ *   id = "taxonomy_index_tid_depth_modifier"
+ * )
+ */
+class IndexTidDepthModifier extends ArgumentPluginBase {
   function options_form(&$form, &$form_state) { }
   function query($group_by = FALSE) { }
   function pre_query() {
diff --git a/modules/taxonomy/views_handler_argument_taxonomy.inc b/lib/Views/taxonomy/Plugin/views/argument/Taxonomy.php
similarity index 71%
rename from modules/taxonomy/views_handler_argument_taxonomy.inc
rename to lib/Views/taxonomy/Plugin/views/argument/Taxonomy.php
index 10fc500..0666d19 100644
--- a/modules/taxonomy/views_handler_argument_taxonomy.inc
+++ b/lib/Views/taxonomy/Plugin/views/argument/Taxonomy.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_argument_taxonomy.
  */
 
+namespace Views\taxonomy\Plugin\views\argument;
+
+use Drupal\views\Plugin\views\argument\Numeric;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Argument handler for basic taxonomy tid.
  *
  * @ingroup views_argument_handlers
  */
-class views_handler_argument_taxonomy extends views_handler_argument_numeric {
+
+/**
+ * @plugin(
+ *   id = "taxonomy"
+ * )
+ */
+class Taxonomy extends Numeric {
 
   /**
    * Override the behavior of title(). Get the title of the node.
diff --git a/modules/taxonomy/views_handler_argument_vocabulary_machine_name.inc b/lib/Views/taxonomy/Plugin/views/argument/VocabularyMachineName.php
similarity index 70%
rename from modules/taxonomy/views_handler_argument_vocabulary_machine_name.inc
rename to lib/Views/taxonomy/Plugin/views/argument/VocabularyMachineName.php
index 427cf2b..047c40b 100644
--- a/modules/taxonomy/views_handler_argument_vocabulary_machine_name.inc
+++ b/lib/Views/taxonomy/Plugin/views/argument/VocabularyMachineName.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_argument_vocabulary_machine_name.
  */
 
+namespace Views\taxonomy\Plugin\views\argument;
+
+use Drupal\views\Plugin\views\argument\String;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Argument handler to accept a vocabulary machine name.
  *
  * @ingroup views_argument_handlers
  */
-class views_handler_argument_vocabulary_machine_name extends views_handler_argument_string {
+
+/**
+ * @Plugin(
+ *   id = "vocabulary_machine_name"
+ * )
+ */
+class VocabularyMachineName extends String {
   /**
    * Override the behavior of title(). Get the name of the vocabulary..
    */
diff --git a/modules/taxonomy/views_handler_argument_vocabulary_vid.inc b/lib/Views/taxonomy/Plugin/views/argument/VocabularyVid.php
similarity index 69%
rename from modules/taxonomy/views_handler_argument_vocabulary_vid.inc
rename to lib/Views/taxonomy/Plugin/views/argument/VocabularyVid.php
index c696640..07d2589 100644
--- a/modules/taxonomy/views_handler_argument_vocabulary_vid.inc
+++ b/lib/Views/taxonomy/Plugin/views/argument/VocabularyVid.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_argument_vocabulary_vid.
  */
 
+namespace Views\taxonomy\Plugin\views\argument;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\argument\Numeric;
+
 /**
  * Argument handler to accept a vocabulary id.
  *
  * @ingroup views_argument_handlers
  */
-class views_handler_argument_vocabulary_vid extends views_handler_argument_numeric {
+
+/**
+ * @Plugin(
+ *   id = "vocabulary_vid"
+ * )
+ */
+class VocabularyVid extends Numeric {
   /**
    * Override the behavior of title(). Get the name of the vocabulary.
    */
diff --git a/modules/taxonomy/views_plugin_argument_default_taxonomy_tid.inc b/lib/Views/taxonomy/Plugin/views/argument_default/Tid.php
similarity index 93%
rename from modules/taxonomy/views_plugin_argument_default_taxonomy_tid.inc
rename to lib/Views/taxonomy/Plugin/views/argument_default/Tid.php
index 823b561..1707eb3 100644
--- a/modules/taxonomy/views_plugin_argument_default_taxonomy_tid.inc
+++ b/lib/Views/taxonomy/Plugin/views/argument_default/Tid.php
@@ -5,10 +5,21 @@
  * Definition of views_plugin_argument_default_taxonomy_tid.
  */
 
+namespace Views\taxonomy\Plugin\views\argument_default;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+use Drupal\views\Plugin\views\argument_default\ArgumentDefaultPluginBase;
+
 /**
  * Taxonomy tid default argument.
+ *
+ * @Plugin(
+ *   id = "taxonomy_tid",
+ *   title = @Translation("Taxonomy term ID from URL")
+ * )
  */
-class views_plugin_argument_default_taxonomy_tid extends views_plugin_argument_default {
+class Tid extends ArgumentDefaultPluginBase {
   function init(&$view, &$argument, $options) {
     parent::init($view, $argument, $options);
 
diff --git a/modules/taxonomy/views_plugin_argument_validate_taxonomy_term.inc b/lib/Views/taxonomy/Plugin/views/argument_validate/Term.php
similarity index 95%
rename from modules/taxonomy/views_plugin_argument_validate_taxonomy_term.inc
rename to lib/Views/taxonomy/Plugin/views/argument_validate/Term.php
index a324a01..cf1aff5 100644
--- a/modules/taxonomy/views_plugin_argument_validate_taxonomy_term.inc
+++ b/lib/Views/taxonomy/Plugin/views/argument_validate/Term.php
@@ -5,10 +5,22 @@
  * Contains the 'taxonomy term' argument validator plugin.
  */
 
+
+namespace Views\taxonomy\Plugin\views\argument_validator;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+use Drupal\views\Plugin\views\argument_validator\ArgumentValidatorPluginBase;
+
+
 /**
  * Validate whether an argument is an acceptable node.
+ *
+ * @Plugin(
+ *   id = "taxonomy_term",
+ *   title = @Translation("Taxonomy term")
  */
-class views_plugin_argument_validate_taxonomy_term extends views_plugin_argument_validate {
+class Term extends ArgumentValidatorPluginBase {
   function init(&$view, &$argument, $options) {
     parent::init($view, $argument, $options);
 
diff --git a/modules/taxonomy/views_handler_field_term_link_edit.inc b/lib/Views/taxonomy/Plugin/views/field/LinkEdit.php
similarity index 88%
rename from modules/taxonomy/views_handler_field_term_link_edit.inc
rename to lib/Views/taxonomy/Plugin/views/field/LinkEdit.php
index 5605b9f..b114948 100644
--- a/modules/taxonomy/views_handler_field_term_link_edit.inc
+++ b/lib/Views/taxonomy/Plugin/views/field/LinkEdit.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_term_link_edit.
  */
 
+namespace Views\taxonomy\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Field handler to present a term edit link.
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_term_link_edit extends views_handler_field {
+
+/**
+ * @Plugin(
+ *   id = "term_link_edit"
+ * )
+ */
+class LinkEdit extends FieldPluginBase {
   function construct() {
     parent::construct();
     $this->additional_fields['tid'] = 'tid';
diff --git a/modules/taxonomy/views_handler_field_taxonomy.inc b/lib/Views/taxonomy/Plugin/views/field/Taxonomy.php
similarity index 92%
rename from modules/taxonomy/views_handler_field_taxonomy.inc
rename to lib/Views/taxonomy/Plugin/views/field/Taxonomy.php
index 05ee45d..bbd9423 100644
--- a/modules/taxonomy/views_handler_field_taxonomy.inc
+++ b/lib/Views/taxonomy/Plugin/views/field/Taxonomy.php
@@ -5,13 +5,25 @@
  * Definition of views_handler_field_taxonomy.
  */
 
+
+namespace Views\taxonomy\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "taxonomy"
+ * )
+ */
+class Taxonomy extends FieldPluginBase {
   /**
    * Constructor to provide additional field to add.
    *
diff --git a/modules/taxonomy/views_handler_field_term_node_tid.inc b/lib/Views/taxonomy/Plugin/views/field/TaxonomyIndexTid.php
similarity index 95%
rename from modules/taxonomy/views_handler_field_term_node_tid.inc
rename to lib/Views/taxonomy/Plugin/views/field/TaxonomyIndexTid.php
index 7e3ad21..b24acf1 100644
--- a/modules/taxonomy/views_handler_field_term_node_tid.inc
+++ b/lib/Views/taxonomy/Plugin/views/field/TaxonomyIndexTid.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_term_node_tid.
  */
 
+namespace Views\taxonomy\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\PrerenderList;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "taxonomy_index_tid"
+ * )
+ */
+class TaxonomyIndexTid extends PrerenderList {
   function init(&$view, &$options) {
     parent::init($view, $options);
     // @todo: Wouldn't it be possible to use $this->base_table and no if here?
diff --git a/modules/taxonomy/views_handler_filter_term_node_tid.inc b/lib/Views/taxonomy/Plugin/views/filter/TaxonomyIndexTid.php
similarity index 98%
rename from modules/taxonomy/views_handler_filter_term_node_tid.inc
rename to lib/Views/taxonomy/Plugin/views/filter/TaxonomyIndexTid.php
index 8945edc..feaceb5 100644
--- a/modules/taxonomy/views_handler_filter_term_node_tid.inc
+++ b/lib/Views/taxonomy/Plugin/views/filter/TaxonomyIndexTid.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_filter_term_node_tid.
  */
 
+namespace Views\taxonomy\Plugin\views\filter;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\filter\ManyToOne;
+
 /**
  * Filter by term id.
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter_term_node_tid extends views_handler_filter_many_to_one {
+
+/**
+ * @Plugin(
+ *   id = "taxonomy_index_tid"
+ * )
+ */
+class TaxonomyIndexTid extends ManyToOne {
   // Stores the exposed input for this filter.
   var $validated_exposed_input = NULL;
 
diff --git a/modules/taxonomy/views_handler_filter_term_node_tid_depth.inc b/lib/Views/taxonomy/Plugin/views/filter/TaxonomyIndexTidDepth.php
similarity index 94%
rename from modules/taxonomy/views_handler_filter_term_node_tid_depth.inc
rename to lib/Views/taxonomy/Plugin/views/filter/TaxonomyIndexTidDepth.php
index fe12780..2ef9381 100644
--- a/modules/taxonomy/views_handler_filter_term_node_tid_depth.inc
+++ b/lib/Views/taxonomy/Plugin/views/filter/TaxonomyIndexTidDepth.php
@@ -5,6 +5,11 @@
  * Definition of views_handler_filter_term_node_tid_depth.
  */
 
+
+namespace Views\taxonomy\Plugin\views\filter;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Filter handler for taxonomy terms with depth.
  *
@@ -13,7 +18,13 @@
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter_term_node_tid_depth extends views_handler_filter_term_node_tid {
+
+/**
+ * @Plugin(
+ *   id = "taxonomy_index_tid_depth"
+ * )
+ */
+class TaxonomyIndexTidDepth extends TaxonomyIndexTid {
   function operator_options($which = 'title') {
     return array(
       'or' => t('Is one of'),
diff --git a/modules/taxonomy/views_handler_filter_vocabulary_machine_name.inc b/lib/Views/taxonomy/Plugin/views/filter/VocabularyMachineName.php
similarity index 65%
rename from modules/taxonomy/views_handler_filter_vocabulary_machine_name.inc
rename to lib/Views/taxonomy/Plugin/views/filter/VocabularyMachineName.php
index 18754b2..02d9db1 100644
--- a/modules/taxonomy/views_handler_filter_vocabulary_machine_name.inc
+++ b/lib/Views/taxonomy/Plugin/views/filter/VocabularyMachineName.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_filter_vocabulary_machine_name.
  */
 
+namespace Views\taxonomy\Plugin\views\filter;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\filter\InOperator;
+
 /**
  * Filter by vocabulary machine name.
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter_vocabulary_machine_name extends views_handler_filter_in_operator {
+
+/**
+ * @Plugin(
+ *   id = "vocabulary_machine_name"
+ * )
+ */
+class VocabularyMachineName extends InOperator {
   function get_value_options() {
     if (isset($this->value_options)) {
       return;
diff --git a/modules/taxonomy/views_handler_filter_vocabulary_vid.inc b/lib/Views/taxonomy/Plugin/views/filter/VocabularyVid.php
similarity index 65%
rename from modules/taxonomy/views_handler_filter_vocabulary_vid.inc
rename to lib/Views/taxonomy/Plugin/views/filter/VocabularyVid.php
index f2c4ccd..379ce37 100644
--- a/modules/taxonomy/views_handler_filter_vocabulary_vid.inc
+++ b/lib/Views/taxonomy/Plugin/views/filter/VocabularyVid.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_filter_vocabulary_vid.
  */
 
+namespace Views\taxonomy\Plugin\views\filter;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\filter\InOperator;
+
 /**
  * Filter by vocabulary id.
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter_vocabulary_vid extends views_handler_filter_in_operator {
+
+/**
+ * @Plugin(
+ *   id = "vocabulary_vid"
+ * )
+ */
+class VocabularyVid extends InOperator {
   function get_value_options() {
     if (isset($this->value_options)) {
       return;
diff --git a/modules/taxonomy/views_handler_relationship_node_term_data.inc b/lib/Views/taxonomy/Plugin/views/relationship/NodeTermData.php
similarity index 88%
rename from modules/taxonomy/views_handler_relationship_node_term_data.inc
rename to lib/Views/taxonomy/Plugin/views/relationship/NodeTermData.php
index b7698b0..b62a5cc 100644
--- a/modules/taxonomy/views_handler_relationship_node_term_data.inc
+++ b/lib/Views/taxonomy/Plugin/views/relationship/NodeTermData.php
@@ -5,14 +5,24 @@
  * Definition of views_handler_relationship_node_term_data.
  */
 
+namespace Views\taxonomy\Plugin\views\relationship;
+
 use Drupal\views\Join;
+use Drupal\views\Plugin\views\relationship\RelationshipPluginBase;
+use Drupal\Core\Annotation\Plugin;
 
 /**
  * Relationship handler to return the taxonomy terms of nodes.
  *
  * @ingroup views_relationship_handlers
  */
-class views_handler_relationship_node_term_data extends views_handler_relationship  {
+
+/**
+ * @Plugin(
+ *   id = "node_term_data"
+ * )
+ */
+class NodeTermData extends RelationshipPluginBase  {
   function init(&$view, &$options) {
     parent::init($view, $options);
 
@@ -60,8 +70,8 @@ class views_handler_relationship_node_term_data extends views_handler_relationsh
     $def['table'] = 'taxonomy_term_data';
 
     if (!array_filter($this->options['vocabularies'])) {
-      $taxonomy_index = $this->query->add_table('taxonomy_index', $this->relationship);
-      $def['left_table'] = $taxonomy_index;
+      $term_node = $this->query->add_table('taxonomy_index', $this->relationship);
+      $def['left_table'] = 'taxonomy_index';
       $def['left_field'] = 'tid';
       $def['field'] = 'tid';
       $def['type'] = empty($this->options['required']) ? 'LEFT' : 'INNER';
diff --git a/modules/translation/views_handler_argument_node_tnid.inc b/lib/Views/translation/Plugin/views/argument/NodeTnid.php
similarity index 70%
rename from modules/translation/views_handler_argument_node_tnid.inc
rename to lib/Views/translation/Plugin/views/argument/NodeTnid.php
index 61e9eba..286dbea 100644
--- a/modules/translation/views_handler_argument_node_tnid.inc
+++ b/lib/Views/translation/Plugin/views/argument/NodeTnid.php
@@ -5,12 +5,23 @@
  * Provide node tnid argument handler.
  */
 
+namespace Views\translation\Plugin\views\argument;
+
+use Drupal\views\Plugin\views\argument\Numeric;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Argument handler to accept a node translation id.
  *
  * @ingroup views_argument_handlers
  */
-class views_handler_argument_node_tnid extends views_handler_argument_numeric {
+
+/**
+ * @Plugin(
+ *   id = "node_tnid"
+ * )
+ */
+class NodeTnid extends Numeric {
   /**
    * Override the behavior of title(). Get the title of the node.
    */
diff --git a/modules/translation/views_handler_field_node_link_translate.inc b/lib/Views/translation/Plugin/views/field/NodeLinkTranslate.php
similarity index 78%
rename from modules/translation/views_handler_field_node_link_translate.inc
rename to lib/Views/translation/Plugin/views/field/NodeLinkTranslate.php
index 3e30725..dc4187b 100644
--- a/modules/translation/views_handler_field_node_link_translate.inc
+++ b/lib/Views/translation/Plugin/views/field/NodeLinkTranslate.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_node_link_translate.
  */
 
+namespace Views\translation\Plugin\views\field;
+
+use Views\node\Plugin\views\field\Link;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "node_link_translate"
+ * )
+ */
+class NodeLinkTranslate extends Link {
   function render_link($data, $values) {
     // ensure user has access to edit this node.
     $node = $this->get_value($values);
diff --git a/modules/translation/views_handler_field_node_translation_link.inc b/lib/Views/translation/Plugin/views/field/NodeTranslationLink.php
similarity index 81%
rename from modules/translation/views_handler_field_node_translation_link.inc
rename to lib/Views/translation/Plugin/views/field/NodeTranslationLink.php
index 61dc850..55f5805 100644
--- a/modules/translation/views_handler_field_node_translation_link.inc
+++ b/lib/Views/translation/Plugin/views/field/NodeTranslationLink.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_node_translation_link.
  */
 
+namespace Views\translation\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Field handler to present a link to the node.
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_node_translation_link extends views_handler_field {
+
+/**
+ * @Plugin(
+ *   id = "node_translation_link"
+ * )
+ */
+class NodeTranslationLink extends FieldPluginBase {
   function construct() {
     parent::construct();
     $this->additional_fields['nid'] = 'nid';
@@ -30,7 +41,7 @@ class views_handler_field_node_translation_link extends views_handler_field {
   }
 
   function render_link($data, $values) {
-    $language_interface = language_manager(LANGUAGE_TYPE_INTERFACE);
+    $language_interface = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
 
     $tnid = $this->get_value($values, 'tnid');
     // Only load translations if the node isn't in the current language.
diff --git a/modules/translation/views_handler_filter_node_tnid.inc b/lib/Views/translation/Plugin/views/filter/NodeTnid.php
similarity index 82%
rename from modules/translation/views_handler_filter_node_tnid.inc
rename to lib/Views/translation/Plugin/views/filter/NodeTnid.php
index ed4d6a9..6497d44 100644
--- a/modules/translation/views_handler_filter_node_tnid.inc
+++ b/lib/Views/translation/Plugin/views/filter/NodeTnid.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_filter_node_tnid.
  */
 
+namespace Views\translation\Plugin\views\filter;
+
+use Drupal\views\Plugin\views\filter\FilterPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Filter by whether the node is the original translation.
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter_node_tnid extends views_handler_filter {
+
+/**
+ * @Plugin(
+ *   id = "node_tnid"
+ * )
+ */
+class NodeTnid extends FilterPluginBase {
   function admin_summary() { }
   function option_definition() {
     $options = parent::option_definition();
diff --git a/modules/translation/views_handler_filter_node_tnid_child.inc b/lib/Views/translation/Plugin/views/filter/NodeTnidChild.php
similarity index 67%
rename from modules/translation/views_handler_filter_node_tnid_child.inc
rename to lib/Views/translation/Plugin/views/filter/NodeTnidChild.php
index 51316eb..05cd5e9 100644
--- a/modules/translation/views_handler_filter_node_tnid_child.inc
+++ b/lib/Views/translation/Plugin/views/filter/NodeTnidChild.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_filter_node_tnid_child.
  */
 
+namespace Views\translation\Plugin\views\filter;
+
+use Drupal\views\Plugin\views\filter\FilterPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "node_tnid_child"
+ * )
+ */
+class NodeTnidChild extends FilterPluginBase {
   function admin_summary() { }
   function operator_form(&$form, &$form_state) { }
   function can_expose() { return FALSE; }
diff --git a/modules/translation/views_handler_relationship_translation.inc b/lib/Views/translation/Plugin/views/relationship/Translation.php
similarity index 92%
rename from modules/translation/views_handler_relationship_translation.inc
rename to lib/Views/translation/Plugin/views/relationship/Translation.php
index 6dd9f05..847907b 100644
--- a/modules/translation/views_handler_relationship_translation.inc
+++ b/lib/Views/translation/Plugin/views/relationship/Translation.php
@@ -5,7 +5,11 @@
  * Definition of views_handler_relationship_translation.
  */
 
+namespace Views\translation\Plugin\views\relationship;
+
 use Drupal\views\Join;
+use Drupal\views\Plugin\views\relationship\RelationshipPluginBase;
+use Drupal\Core\Annotation\Plugin;
 
 /**
  * Handles relationships for content translation sets and provides multiple
@@ -13,7 +17,13 @@ use Drupal\views\Join;
  *
  * @ingroup views_relationship_handlers
  */
-class views_handler_relationship_translation extends views_handler_relationship {
+
+/**
+ * @Plugin(
+ *   id = "translation"
+ * )
+ */
+class Translation extends RelationshipPluginBase {
   function option_definition() {
     $options = parent::option_definition();
     $options['language'] = array('default' => 'current');
diff --git a/modules/user/views_handler_argument_users_roles_rid.inc b/lib/Views/user/Plugin/views/argument/RolesRid.php
similarity index 65%
rename from modules/user/views_handler_argument_users_roles_rid.inc
rename to lib/Views/user/Plugin/views/argument/RolesRid.php
index 31c5814..ba15913 100644
--- a/modules/user/views_handler_argument_users_roles_rid.inc
+++ b/lib/Views/user/Plugin/views/argument/RolesRid.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_argument_users_roles_rid.
  */
 
+namespace Views\user\Plugin\views\argument;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\argument\ManyToOne;
+
 /**
  * Allow role ID(s) as argument.
  *
  * @ingroup views_argument_handlers
  */
-class views_handler_argument_users_roles_rid extends views_handler_argument_many_to_one {
+
+/**
+ * @Plugin(
+ *   id = "users_roles_rid"
+ * )
+ */
+class RolesRid extends ManyToOne {
   function title_query() {
     $titles = array();
 
diff --git a/modules/user/views_handler_argument_user_uid.inc b/lib/Views/user/Plugin/views/argument/Uid.php
similarity index 74%
rename from modules/user/views_handler_argument_user_uid.inc
rename to lib/Views/user/Plugin/views/argument/Uid.php
index c945565..4f33c67 100644
--- a/modules/user/views_handler_argument_user_uid.inc
+++ b/lib/Views/user/Plugin/views/argument/Uid.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_argument_user_uid.
  */
 
+namespace Views\user\Plugin\views\argument;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\argument\Numeric;
+
 /**
  * Argument handler to accept a user id.
  *
  * @ingroup views_argument_handlers
  */
-class views_handler_argument_user_uid extends views_handler_argument_numeric {
+
+/**
+ * @Plugin(
+ *   id = "user_uid"
+ * )
+ */
+class Uid extends Numeric {
   /**
    * Override the behavior of title(). Get the name of the user.
    *
diff --git a/lib/Views/user/Plugin/views/argument_default/CurrentUser.php b/lib/Views/user/Plugin/views/argument_default/CurrentUser.php
new file mode 100644
index 0000000..933c9f9
--- /dev/null
+++ b/lib/Views/user/Plugin/views/argument_default/CurrentUser.php
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * @file
+ * Contains the current user argument default plugin.
+ */
+
+namespace Views\user\Plugin\views\argument_default;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+use Drupal\views\Plugin\views\argument_default\ArgumentDefaultPluginBase;
+
+/**
+ * Default argument plugin to extract the global $user
+ *
+ * This plugin actually has no options so it odes not need to do a great deal.
+ *
+ * @Plugin(
+ *   id = "current_user",
+ *   title = @Translation("User ID from logged in user")
+ * )
+ */
+class CurrentUser extends ArgumentDefaultPluginBase {
+  function get_argument() {
+    global $user;
+    return $user->uid;
+  }
+}
diff --git a/modules/user/views_plugin_argument_default_user.inc b/lib/Views/user/Plugin/views/argument_default/User.php
similarity index 84%
rename from modules/user/views_plugin_argument_default_user.inc
rename to lib/Views/user/Plugin/views/argument_default/User.php
index bb10429..e5a6c00 100644
--- a/modules/user/views_plugin_argument_default_user.inc
+++ b/lib/Views/user/Plugin/views/argument_default/User.php
@@ -5,10 +5,21 @@
  * Contains the user from URL argument default plugin.
  */
 
+namespace Views\user\Plugin\views\argument_default;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+use Drupal\views\Plugin\views\argument_default\ArgumentDefaultPluginBase;
+
 /**
  * Default argument plugin to extract a user via menu_get_object.
+ *
+ * @Plugin(
+ *   id = "user",
+ *   title = @Translation("User ID from URL")
+ * )
  */
-class views_plugin_argument_default_user extends views_plugin_argument_default {
+class User extends ArgumentDefaultPluginBase {
   function option_definition() {
     $options = parent::option_definition();
     $options['user'] = array('default' => '', 'bool' => TRUE, 'translatable' => FALSE);
diff --git a/modules/user/views_plugin_argument_validate_user.inc b/lib/Views/user/Plugin/views/argument_validator/User.php
similarity index 93%
rename from modules/user/views_plugin_argument_validate_user.inc
rename to lib/Views/user/Plugin/views/argument_validator/User.php
index 99f33aa..da2c342 100644
--- a/modules/user/views_plugin_argument_validate_user.inc
+++ b/lib/Views/user/Plugin/views/argument_validator/User.php
@@ -5,14 +5,25 @@
  * Definition of views_plugin_argument_validate_user.
  */
 
+namespace Views\user\Plugin\views\argument_validator;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+use Drupal\views\Plugin\views\argument_validator\ArgumentValidatorPluginBase;
+
 /**
  * Validate whether an argument is a valid user.
  *
  * This supports either numeric arguments (UID) or strings (username) and
  * converts either one into the user's UID.  This validator also sets the
  * argument's title to the username.
+ *
+ * @Plugin(
+ *   id = "user",
+ *   title = @Translation("User")
+ * )
  */
-class views_plugin_argument_validate_user extends views_plugin_argument_validate {
+class User extends ArgumentValidatorPluginBase {
   function option_definition() {
     $options = parent::option_definition();
     $options['type'] = array('default' => 'uid');
diff --git a/modules/user/views_handler_field_user_language.inc b/lib/Views/user/Plugin/views/field/Language.php
similarity index 84%
rename from modules/user/views_handler_field_user_language.inc
rename to lib/Views/user/Plugin/views/field/Language.php
index e29da31..8dfd06f 100644
--- a/modules/user/views_handler_field_user_language.inc
+++ b/lib/Views/user/Plugin/views/field/Language.php
@@ -5,12 +5,22 @@
  * Definition of views_handler_field_user_language.
  */
 
+namespace Views\user\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Views field handler for user language.
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_user_language extends views_handler_field_user {
+
+/**
+ * @Plugin(
+ *   id = "user_language"
+ * )
+ */
+class Language extends User {
 
   function render_link($data, $values) {
     $uid = $this->get_value($values, 'uid');
diff --git a/modules/user/views_handler_field_user_link.inc b/lib/Views/user/Plugin/views/field/Link.php
similarity index 85%
rename from modules/user/views_handler_field_user_link.inc
rename to lib/Views/user/Plugin/views/field/Link.php
index 03b5e0d..b0ab040 100644
--- a/modules/user/views_handler_field_user_link.inc
+++ b/lib/Views/user/Plugin/views/field/Link.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_user_link.
  */
 
+namespace Views\user\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Field handler to present a link to the user.
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_user_link extends views_handler_field {
+
+/**
+ * @Plugin(
+ *   id = "user_link"
+ * )
+ */
+class Link extends FieldPluginBase {
   function construct() {
     parent::construct();
     $this->additional_fields['uid'] = 'uid';
diff --git a/modules/user/views_handler_field_user_link_cancel.inc b/lib/Views/user/Plugin/views/field/LinkCancel.php
similarity index 82%
rename from modules/user/views_handler_field_user_link_cancel.inc
rename to lib/Views/user/Plugin/views/field/LinkCancel.php
index d66f98f..4dff269 100644
--- a/modules/user/views_handler_field_user_link_cancel.inc
+++ b/lib/Views/user/Plugin/views/field/LinkCancel.php
@@ -5,12 +5,22 @@
  * Definition of views_handler_field_user_link_cancel.
  */
 
+namespace Views\user\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "user_link_cancel"
+ * )
+ */
+class LinkCancel extends Link {
 
   function render_link($data, $values) {
     $uid = $values->{$this->aliases['uid']};
diff --git a/modules/user/views_handler_field_user_link_edit.inc b/lib/Views/user/Plugin/views/field/LinkEdit.php
similarity index 81%
rename from modules/user/views_handler_field_user_link_edit.inc
rename to lib/Views/user/Plugin/views/field/LinkEdit.php
index 252cecd..0003d01 100644
--- a/modules/user/views_handler_field_user_link_edit.inc
+++ b/lib/Views/user/Plugin/views/field/LinkEdit.php
@@ -5,12 +5,22 @@
  * Definition of views_handler_field_user_link_edit.
  */
 
+namespace Views\user\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "user_link_edit"
+ * )
+ */
+class LinkEdit extends Link {
   function render_link($data, $values) {
     // Build a pseudo account object to be able to check the access.
     $account = entity_create('user', array());
diff --git a/modules/user/views_handler_field_user_mail.inc b/lib/Views/user/Plugin/views/field/Mail.php
similarity index 86%
rename from modules/user/views_handler_field_user_mail.inc
rename to lib/Views/user/Plugin/views/field/Mail.php
index 82d1933..3cd28fa 100644
--- a/modules/user/views_handler_field_user_mail.inc
+++ b/lib/Views/user/Plugin/views/field/Mail.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_user_mail.
  */
 
+namespace Views\user\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+
+/**
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "user_mail"
+ * )
+ */
+class Mail extends User {
   function option_definition() {
     $options = parent::option_definition();
     $options['link_to_user'] = array('default' => 'mailto');
diff --git a/modules/user/views_handler_field_user_name.inc b/lib/Views/user/Plugin/views/field/Name.php
similarity index 93%
rename from modules/user/views_handler_field_user_name.inc
rename to lib/Views/user/Plugin/views/field/Name.php
index 8947db1..c77f352 100644
--- a/modules/user/views_handler_field_user_name.inc
+++ b/lib/Views/user/Plugin/views/field/Name.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_user_name.
  */
 
+namespace Views\user\Plugin\views\field;
+
+use Views\user\Plugin\views\field\User;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "user_name"
+ * )
+ */
+class Name extends User {
   /**
    * Add uid in the query so we can test for anonymous if needed.
    */
diff --git a/modules/user/views_handler_field_user_permissions.inc b/lib/Views/user/Plugin/views/field/Permissions.php
similarity index 89%
rename from modules/user/views_handler_field_user_permissions.inc
rename to lib/Views/user/Plugin/views/field/Permissions.php
index edc9c44..3f4b0db 100644
--- a/modules/user/views_handler_field_user_permissions.inc
+++ b/lib/Views/user/Plugin/views/field/Permissions.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_user_permissions.
  */
 
+namespace Views\user\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\field\PrerenderList;
+
 /**
  * Field handler to provide a list of permissions.
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_user_permissions extends views_handler_field_prerender_list {
+
+/**
+ * @Plugin(
+ *   id = "user_permissions"
+ * )
+ */
+class Permissions extends PrerenderList {
   function construct() {
     parent::construct();
     $this->additional_fields['uid'] = array('table' => 'users', 'field' => 'uid');
diff --git a/modules/user/views_handler_field_user_picture.inc b/lib/Views/user/Plugin/views/field/Picture.php
similarity index 94%
rename from modules/user/views_handler_field_user_picture.inc
rename to lib/Views/user/Plugin/views/field/Picture.php
index 6d85d69..58a7d2d 100644
--- a/modules/user/views_handler_field_user_picture.inc
+++ b/lib/Views/user/Plugin/views/field/Picture.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_user_picture.
  */
 
+namespace Views\user\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "user_picture"
+ * )
+ */
+class Picture extends FieldPluginBase {
   function construct() {
     parent::construct();
     $this->additional_fields['uid'] = 'uid';
diff --git a/modules/user/views_handler_field_user_roles.inc b/lib/Views/user/Plugin/views/field/Roles.php
similarity index 87%
rename from modules/user/views_handler_field_user_roles.inc
rename to lib/Views/user/Plugin/views/field/Roles.php
index 7c5f07b..58e1e77 100644
--- a/modules/user/views_handler_field_user_roles.inc
+++ b/lib/Views/user/Plugin/views/field/Roles.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_user_roles.
  */
 
+namespace Views\user\Plugin\views\field;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\field\PrerenderList;
+
 /**
  * Field handler to provide a list of roles.
  *
  * @ingroup views_field_handlers
  */
-class views_handler_field_user_roles extends views_handler_field_prerender_list {
+
+/**
+ * @Plugin(
+ *   id = "user_roles"
+ * )
+ */
+class Roles extends PrerenderList {
   function construct() {
     parent::construct();
     $this->additional_fields['uid'] = array('table' => 'users', 'field' => 'uid');
diff --git a/modules/user/views_handler_field_user.inc b/lib/Views/user/Plugin/views/field/User.php
similarity index 87%
rename from modules/user/views_handler_field_user.inc
rename to lib/Views/user/Plugin/views/field/User.php
index f6b15b5..9b236d6 100644
--- a/modules/user/views_handler_field_user.inc
+++ b/lib/Views/user/Plugin/views/field/User.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_field_user.
  */
 
+namespace Views\user\Plugin\views\field;
+
+use Drupal\views\Plugin\views\field\FieldPluginBase;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * 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 {
+
+/**
+ * @Plugin(
+ *   id = "user"
+ * )
+ */
+class User extends FieldPluginBase {
   /**
    * Override init function to provide generic option to link to user.
    */
diff --git a/modules/user/views_handler_filter_user_current.inc b/lib/Views/user/Plugin/views/filter/Current.php
similarity index 76%
rename from modules/user/views_handler_filter_user_current.inc
rename to lib/Views/user/Plugin/views/filter/Current.php
index 5f8fe4c..ef1258c 100644
--- a/modules/user/views_handler_filter_user_current.inc
+++ b/lib/Views/user/Plugin/views/filter/Current.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_filter_user_current.
  */
 
+namespace Views\user\Plugin\views\filter;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\filter\BooleanOperator;
+
 /**
  * Filter handler for the current user.
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter_user_current extends views_handler_filter_boolean_operator {
+
+/**
+ * @Plugin(
+ *   id = "user_current"
+ * )
+ */
+class Current extends BooleanOperator {
   function construct() {
     parent::construct();
     $this->value_value = t('Is the logged in user');
diff --git a/modules/user/views_handler_filter_user_name.inc b/lib/Views/user/Plugin/views/filter/Name.php
similarity index 95%
rename from modules/user/views_handler_filter_user_name.inc
rename to lib/Views/user/Plugin/views/filter/Name.php
index f20196d..c0fd59d 100644
--- a/modules/user/views_handler_filter_user_name.inc
+++ b/lib/Views/user/Plugin/views/filter/Name.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_filter_user_name.
  */
 
+namespace Views\user\Plugin\views\filter;
+
+use Drupal\views\Plugin\views\filter\InOperator;
+use Drupal\Core\Annotation\Plugin;
+
 /**
  * Filter handler for usernames.
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter_user_name extends views_handler_filter_in_operator {
+
+/**
+ * @Plugin(
+ *   id = "user_name"
+ * )
+ */
+class Name extends InOperator {
   var $always_multiple = TRUE;
 
   function value_form(&$form, &$form_state) {
diff --git a/modules/user/views_handler_filter_user_permissions.inc b/lib/Views/user/Plugin/views/filter/Permissions.php
similarity index 80%
rename from modules/user/views_handler_filter_user_permissions.inc
rename to lib/Views/user/Plugin/views/filter/Permissions.php
index f999045..aac996d 100644
--- a/modules/user/views_handler_filter_user_permissions.inc
+++ b/lib/Views/user/Plugin/views/filter/Permissions.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_filter_user_permissions.
  */
 
+namespace Views\user\Plugin\views\filter;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\filter\ManyToOne;
+
 /**
  * Filter handler for user roles.
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter_user_permissions extends views_handler_filter_many_to_one {
+
+/**
+ * @Plugin(
+ *   id = "user_permissions"
+ * )
+ */
+class Permissions extends ManyToOne {
   function get_value_options() {
     $module_info = system_get_info('module');
 
diff --git a/modules/user/views_handler_filter_user_roles.inc b/lib/Views/user/Plugin/views/filter/Roles.php
similarity index 75%
rename from modules/user/views_handler_filter_user_roles.inc
rename to lib/Views/user/Plugin/views/filter/Roles.php
index ab9b8a2..42b14b8 100644
--- a/modules/user/views_handler_filter_user_roles.inc
+++ b/lib/Views/user/Plugin/views/filter/Roles.php
@@ -5,12 +5,23 @@
  * Definition of views_handler_filter_user_roles.
  */
 
+namespace Views\user\Plugin\views\filter;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\Plugin\views\filter\ManyToOne;
+
 /**
  * Filter handler for user roles.
  *
  * @ingroup views_filter_handlers
  */
-class views_handler_filter_user_roles extends views_handler_filter_many_to_one {
+
+/**
+ * @Plugin(
+ *   id = "user_roles"
+ * )
+ */
+class Roles extends ManyToOne {
   function get_value_options() {
     $this->value_options = user_roles(TRUE);
     unset($this->value_options[DRUPAL_AUTHENTICATED_RID]);
diff --git a/modules/user/views_plugin_row_user_view.inc b/lib/Views/user/Plugin/views/row/View.php
similarity index 83%
rename from modules/user/views_plugin_row_user_view.inc
rename to lib/Views/user/Plugin/views/row/View.php
index b48f459..26a77cd 100644
--- a/modules/user/views_plugin_row_user_view.inc
+++ b/lib/Views/user/Plugin/views/row/View.php
@@ -5,12 +5,29 @@
  * Contains the user view row plugin.
  */
 
+namespace Views\user\Plugin\views\row;
+
+use Drupal\views\Plugin\views\row\RowPluginBase;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
 /**
  * A row plugin which renders a user via user_view.
  *
  * @ingroup views_row_plugins
  */
-class views_plugin_row_user_view extends views_plugin_row {
+/**
+ * @Plugin(
+ *   id = "user",
+ *   title = @Translation("User"),
+ *   help = @Translation("Display the user with standard user view."),
+ *   base = {"users"},
+ *   uses_options = TRUE,
+ *   type = "normal",
+ *   help_topic = "style-users"
+ * )
+ */
+class View extends RowPluginBase {
   var $base_table = 'users';
   var $base_field = 'uid';
 
diff --git a/modules/aggregator.views.inc b/modules/aggregator.views.inc
index 0fcae2c..61aa906 100644
--- a/modules/aggregator.views.inc
+++ b/modules/aggregator.views.inc
@@ -28,48 +28,28 @@ function aggregator_views_data() {
   // ----------------------------------------------------------------
   // Fields
 
-  // item id.
-  $data['aggregator_item']['iid'] = array(
-    'title' => t('Feed Item ID'),
-    'help' => t('The unique ID of the aggregator item.'),
-    'field' => array(
-      'handler' => 'views_handler_field_numeric',
-      'click sortable' => TRUE,
-    ),
-    'argument' => array(
-      'handler' => 'views_handler_argument_numeric',
-      'numeric' => TRUE,
-    ),
-    'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
-    ),
-    'sort' => array(
-      'handler' => 'views_handler_sort',
-    ),
-  );
-
   // iid
   $data['aggregator_item']['iid'] = array(
     'title' => t('Item ID'),
     'help' => t('The unique ID of the aggregator item.'), // The help that appears on the UI,
     // Information for displaying the iid
     'field' => array(
-      'handler' => 'views_handler_field_numeric',
+      'id' => 'numeric',
       'click sortable' => TRUE,
     ),
     // Information for accepting a iid as an argument
     'argument' => array(
-      'handler' => 'views_handler_argument_aggregator_iid',
+      'id' => 'aggregator_iid',
       'name field' => 'title', // the field to display in the summary.
       'numeric' => TRUE,
     ),
     // Information for accepting a nid as a filter
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
+      'id' => 'numeric',
     ),
     // Information for sorting on a nid.
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
@@ -79,16 +59,16 @@ function aggregator_views_data() {
     'help' => t('The title of the aggregator item.'),
      // Information for displaying a title as a field
     'field' => array(
-      'handler' => 'views_handler_field_aggregator_title_link',
+      'id' => 'aggregator_title_link',
       'extra' => array('link'),
       'click sortable' => TRUE,
      ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     // Information for accepting a title as a filter
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
   );
 
@@ -97,15 +77,15 @@ function aggregator_views_data() {
     'title' => t('Link'), // The item it appears as on the UI,
     'help' => t('The link to the original source URL of the item.'),
     'field' => array(
-      'handler' => 'views_handler_field_url',
+      'id' => 'url',
       'click sortable' => TRUE,
      ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     // Information for accepting a title as a filter
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
   );
 
@@ -115,18 +95,18 @@ function aggregator_views_data() {
     'help' => t('The author of the original imported item.'),
      // Information for displaying a title as a field
     'field' => array(
-      'handler' => 'views_handler_field_aggregator_xss',
+      'id' => 'aggregator_xss',
       'click sortable' => TRUE,
      ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     // Information for accepting a title as a filter
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'string',
     ),
   );
 
@@ -136,18 +116,18 @@ function aggregator_views_data() {
     'help' => t('The guid of the original imported item.'),
      // Information for displaying a title as a field
     'field' => array(
-      'handler' => 'views_handler_field_xss',
+      'id' => 'xss',
       'click sortable' => TRUE,
      ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     // Information for accepting a title as a filter
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'string',
     ),
   );
 
@@ -157,12 +137,12 @@ function aggregator_views_data() {
     'help' => t('The actual content of the imported item.'),
      // Information for displaying a title as a field
     'field' => array(
-      'handler' => 'views_handler_field_aggregator_xss',
+      'id' => 'aggregator_xss',
       'click sortable' => FALSE,
      ),
     // Information for accepting a title as a filter
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
   );
 
@@ -172,18 +152,18 @@ function aggregator_views_data() {
     'help' => t('The date the original feed item was posted. (With some feeds, this will be the date it was imported.)'),
      // Information for displaying a title as a field
     'field' => array(
-      'handler' => 'views_handler_field_date',
+      'id' => 'date',
       'click sortable' => TRUE,
      ),
     'sort' => array(
-      'handler' => 'views_handler_sort_date',
+      'id' => 'date',
     ),
     // Information for accepting a title as a filter
     'filter' => array(
-      'handler' => 'views_handler_filter_date',
+      'id' => 'date',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_date',
+      'id' => 'date',
     ),
   );
 
@@ -207,22 +187,22 @@ function aggregator_views_data() {
     'help' => t('The unique ID of the aggregator feed.'), // The help that appears on the UI,
     // Information for displaying the fid
     'field' => array(
-      'handler' => 'views_handler_field_numeric',
+      'id' => 'numeric',
       'click sortable' => TRUE,
     ),
     // Information for accepting a fid as an argument
     'argument' => array(
-      'handler' => 'views_handler_argument_aggregator_fid',
+      'id' => 'aggregator_fid',
       'name field' => 'title', // the field to display in the summary.
       'numeric' => TRUE,
     ),
     // Information for accepting a nid as a filter
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
+      'id' => 'numeric',
     ),
     // Information for sorting on a fid.
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
@@ -232,19 +212,19 @@ function aggregator_views_data() {
     'help' => t('The title of the aggregator feed.'),
      // Information for displaying a title as a field
     'field' => array(
-      'handler' => 'views_handler_field_aggregator_title_link',
+      'id' => 'aggregator_title_link',
       'extra' => array('link'),
       'click sortable' => TRUE,
      ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     // Information for accepting a title as a filter
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'string',
     ),
   );
 
@@ -254,14 +234,14 @@ function aggregator_views_data() {
     'help' => t('The link to the source URL of the feed.'),
      // Information for displaying a title as a field
     'field' => array(
-      'handler' => 'views_handler_field_url',
+      'id' => 'url',
       'click sortable' => TRUE,
      ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
   );
 
@@ -271,17 +251,17 @@ function aggregator_views_data() {
     'help' => t('The date the feed was last checked for new content.'),
      // Information for displaying a title as a field
     'field' => array(
-      'handler' => 'views_handler_field_date',
+      'id' => 'date',
       'click sortable' => TRUE,
      ),
     'sort' => array(
-      'handler' => 'views_handler_sort_date',
+      'id' => 'date',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_date',
+      'id' => 'date',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_date',
+      'id' => 'date',
     ),
   );
 
@@ -291,11 +271,11 @@ function aggregator_views_data() {
     'help' => t('The description of the aggregator feed.'),
      // Information for displaying a title as a field
     'field' => array(
-      'handler' => 'views_handler_field_xss',
+      'id' => 'xss',
       'click sortable' => FALSE,
      ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
   );
 
@@ -305,18 +285,18 @@ function aggregator_views_data() {
     'help' => t('The date of the most recent new content on the feed.'),
      // Information for displaying a title as a field
     'field' => array(
-      'handler' => 'views_handler_field_date',
+      'id' => 'date',
       'click sortable' => TRUE,
      ),
     'sort' => array(
-      'handler' => 'views_handler_sort_date',
+      'id' => 'date',
     ),
     // Information for accepting a title as a filter
     'filter' => array(
-      'handler' => 'views_handler_filter_date',
+      'id' => 'date',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_date',
+      'id' => 'date',
     ),
   );
 
@@ -348,19 +328,19 @@ function aggregator_views_data() {
     'title' => t('Category ID'),
     'help' => t('The unique ID of the aggregator category.'),
     'field' => array(
-      'handler' => 'views_handler_field_numeric',
+      'id' => 'numeric',
       'click sortable' => TRUE,
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_aggregator_category_cid',
+      'id' => 'aggregator_category_cid',
       'name field' => 'title',
       'numeric' => TRUE,
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_aggregator_category_cid',
+      'id' => 'aggregator_category_cid',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
@@ -369,38 +349,17 @@ function aggregator_views_data() {
     'title' => t('Category'),
     'help' => t('The title of the aggregator category.'),
     'field' => array(
-      'handler' => 'views_handler_field_aggregator_category',
+      'id' => 'aggregator_category',
       'click sortable' => TRUE,
      ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
   );
 
   return $data;
 }
 
-/**
- * Implements hook_views_plugins().
- */
-function aggregator_views_plugins() {
-  return array(
-    'module' => 'views', // This just tells our themes are elsewhere.
-    'row' => array(
-      'aggregator_rss' => array(
-        'title' => t('Aggregator item'),
-        'help' => t('Display the aggregator item using the data from the original source.'),
-        'handler' => 'views_plugin_row_aggregator_rss',
-        'path' => drupal_get_path('module', 'views') . '/modules/node', // not necessary for most modules
-        'theme' => 'views_view_row_rss',
-        'base' => array('aggregator_item'), // only works with 'node' as base.
-        'uses options' => TRUE,
-        'type' => 'feed',
-        'help topic' => 'style-aggregator-rss',
-      ),
-    ),
-  );
-}
diff --git a/modules/book.views.inc b/modules/book.views.inc
index 15a2183..731a495 100644
--- a/modules/book.views.inc
+++ b/modules/book.views.inc
@@ -27,7 +27,7 @@ function book_views_data() {
     'help' => t('The book the node is in.'),
     'relationship' => array(
       'base' => 'node',
-      'handler' => 'views_handler_relationship',
+      'id' => 'standard',
       'label' => t('Book'),
     ),
     // There is no argument here; if you need an argument, add the relationship
@@ -52,11 +52,11 @@ function book_views_data() {
     'title' => t('Weight'),
     'help' => t('The weight of the book page.'),
     'field' => array(
-      'handler' => 'views_handler_field_numeric',
+      'id' => 'numeric',
       'click sortable' => TRUE,
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
@@ -64,17 +64,17 @@ function book_views_data() {
     'title' => t('Depth'),
     'help' => t('The depth of the book page in the hierarchy; top level books have a depth of 1.'),
     'field' => array(
-      'handler' => 'views_handler_field_numeric',
+      'id' => 'numeric',
       'click sortable' => TRUE,
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
+      'id' => 'numeric',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument',
+      'id' => 'standard',
     ),
   );
 
@@ -82,7 +82,7 @@ function book_views_data() {
     'title' => t('Hierarchy'),
     'help' => t('The order of pages in the book hierarchy.'),
     'sort' => array(
-      'handler' => 'views_handler_sort_menu_hierarchy',
+      'id' => 'menu_hierarchy',
     ),
   );
 
@@ -107,25 +107,10 @@ function book_views_data() {
     'relationship' => array(
       'base' => 'node',
       'base field' => 'nid',
-      'handler' => 'views_handler_relationship',
+      'id' => 'standard',
       'label' => t('Book parent'),
     ),
   );
 
   return $data;
 }
-
-/**
- * Implements hook_views_plugins().
- */
-function book_views_plugins() {
- return array(
-   'module' => 'views',
-   'argument default' => array(
-     'book_root' => array(
-       'title' => t('Book root from current node'),
-       'handler' => 'views_plugin_argument_default_book_root'
-     ),
-   ),
- );
-}
diff --git a/modules/comment.views.inc b/modules/comment.views.inc
index 65ef18c..53146f7 100644
--- a/modules/comment.views.inc
+++ b/modules/comment.views.inc
@@ -43,17 +43,17 @@ function comment_views_data() {
     'title' => t('Title'),
     'help' => t('The title of the comment.'),
     'field' => array(
-      'handler' => 'views_handler_field_comment',
+      'id' => 'comment',
       'click sortable' => TRUE,
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'string',
     ),
   );
 
@@ -62,17 +62,17 @@ function comment_views_data() {
     'title' => t('ID'),
     'help' => t('The comment ID of the field'),
     'field' => array(
-      'handler' => 'views_handler_field_comment',
+      'id' => 'comment',
       'click sortable' => TRUE,
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
+      'id' => 'numeric',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_numeric',
+      'id' => 'numeric',
     ),
   );
 
@@ -81,17 +81,17 @@ function comment_views_data() {
     'title' => t('Author'),
     'help' => t("The name of the comment's author. Can be rendered as a link to the author's homepage."),
     'field' => array(
-      'handler' => 'views_handler_field_comment_username',
+      'id' => 'comment_username',
       'click sortable' => TRUE,
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'string',
     ),
   );
 
@@ -100,17 +100,17 @@ function comment_views_data() {
     'title' => t("Author's website"),
     'help' => t("The website address of the comment's author. Can be rendered as a link. Will be empty if the author is a registered user."),
     'field' => array(
-      'handler' => 'views_handler_field_url',
+      'id' => 'url',
       'click sortable' => TRUE,
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'string',
     ),
   );
 
@@ -119,17 +119,17 @@ function comment_views_data() {
     'title' => t('Hostname'),
     'help' => t('Hostname of user that posted the comment.'),
     'field' => array(
-      'handler' => 'views_handler_field',
+      'id' => 'standard',
       'click sortable' => TRUE,
      ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'string',
     ),
   );
 
@@ -138,17 +138,17 @@ function comment_views_data() {
     'title' => t('Mail'),
     'help' => t('Email of user that posted the comment. Will be empty if the author is a registered user.'),
     'field' => array(
-      'handler' => 'views_handler_field',
+      'id' => 'standard',
       'click sortable' => TRUE,
      ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'string',
     ),
   );
 
@@ -157,14 +157,14 @@ function comment_views_data() {
     'title' => t('Post date'),
     'help' => t('Date and time of when the comment was created.'),
     'field' => array(
-      'handler' => 'views_handler_field_date',
+      'id' => 'date',
       'click sortable' => TRUE,
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort_date',
+      'id' => 'date',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_date',
+      'id' => 'date',
     ),
   );
 
@@ -175,17 +175,17 @@ function comment_views_data() {
       'title' => t('Language'),
       'help' => t('The language the comment is in.'),
       'field' => array(
-        'handler' => 'views_handler_field_locale_language',
+        'id' => 'locale_language',
         'click sortable' => TRUE,
       ),
       'filter' => array(
-        'handler' => 'views_handler_filter_locale_language',
+        'id' => 'locale_language',
       ),
       'argument' => array(
-        'handler' => 'views_handler_argument_locale_language',
+        'id' => 'locale_language',
       ),
       'sort' => array(
-        'handler' => 'views_handler_sort',
+        'id' => 'standard',
       ),
     );
   }
@@ -196,14 +196,14 @@ function comment_views_data() {
     'title' => t('Updated date'),
     'help' => t('Date and time of when the comment was last updated.'),
     'field' => array(
-      'handler' => 'views_handler_field_date',
+      'id' => 'date',
       'click sortable' => TRUE,
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort_date',
+      'id' => 'date',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_date',
+      'id' => 'date',
     ),
   );
 
@@ -213,7 +213,7 @@ function comment_views_data() {
     'help' => t('Date in the form of CCYYMMDD.'),
     'argument' => array(
       'field' => 'changed',
-      'handler' => 'views_handler_argument_node_created_fulldate',
+      'id' => 'node_created_fulldate',
     ),
   );
 
@@ -223,7 +223,7 @@ function comment_views_data() {
     'help' => t('Date in the form of YYYYMM.'),
     'argument' => array(
       'field' => 'changed',
-      'handler' => 'views_handler_argument_node_created_year_month',
+      'id' => 'node_created_year_month',
     ),
   );
 
@@ -233,7 +233,7 @@ function comment_views_data() {
     'help' => t('Date in the form of YYYY.'),
     'argument' => array(
       'field' => 'changed',
-      'handler' => 'views_handler_argument_node_created_year',
+      'id' => 'node_created_year',
     ),
   );
 
@@ -243,7 +243,7 @@ function comment_views_data() {
     'help' => t('Date in the form of MM (01 - 12).'),
     'argument' => array(
       'field' => 'changed',
-      'handler' => 'views_handler_argument_node_created_month',
+      'id' => 'node_created_month',
     ),
   );
 
@@ -253,7 +253,7 @@ function comment_views_data() {
     'help' => t('Date in the form of DD (01 - 31).'),
     'argument' => array(
       'field' => 'changed',
-      'handler' => 'views_handler_argument_node_created_day',
+      'id' => 'node_created_day',
     ),
   );
 
@@ -263,7 +263,7 @@ function comment_views_data() {
     'help' => t('Date in the form of WW (01 - 53).'),
     'argument' => array(
       'field' => 'changed',
-      'handler' => 'views_handler_argument_node_created_week',
+      'id' => 'node_created_week',
     ),
   );
 
@@ -272,19 +272,19 @@ function comment_views_data() {
     'title' => t('Approved'),
     'help' => t('Whether the comment is approved (or still in the moderation queue).'),
     'field' => array(
-      'handler' => 'views_handler_field_boolean',
+      'id' => 'boolean',
       'click sortable' => TRUE,
       'output formats' => array(
         'approved-not-approved' => array(t('Approved'), t('Not Approved')),
       ),
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_boolean_operator',
+      'id' => 'boolean',
       'label' => t('Approved comment'),
       'type' => 'yes-no',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
@@ -293,7 +293,7 @@ function comment_views_data() {
     'field' => array(
       'title' => t('View link'),
       'help' => t('Provide a simple link to view the comment.'),
-      'handler' => 'views_handler_field_comment_link',
+      'id' => 'comment_link',
     ),
   );
 
@@ -302,7 +302,7 @@ function comment_views_data() {
     'field' => array(
       'title' => t('Edit link'),
       'help' => t('Provide a simple link to edit the comment.'),
-      'handler' => 'views_handler_field_comment_link_edit',
+      'id' => 'comment_link_edit',
     ),
   );
 
@@ -311,7 +311,7 @@ function comment_views_data() {
     'field' => array(
       'title' => t('Delete link'),
       'help' => t('Provide a simple link to delete the comment.'),
-      'handler' => 'views_handler_field_comment_link_delete',
+      'id' => 'comment_link_delete',
     ),
   );
 
@@ -321,7 +321,7 @@ function comment_views_data() {
     'field' => array(
       'title' => t('Approve link'),
       'help' => t('Provide a simple link to approve the comment.'),
-      'handler' => 'views_handler_field_comment_link_approve',
+      'id' => 'comment_link_approve',
     ),
   );
 
@@ -330,7 +330,7 @@ function comment_views_data() {
     'field' => array(
       'title' => t('Reply-to link'),
       'help' => t('Provide a simple link to reply to the comment.'),
-      'handler' => 'views_handler_field_comment_link_reply',
+      'id' => 'comment_link_reply',
     ),
   );
 
@@ -338,12 +338,12 @@ function comment_views_data() {
     'field' => array(
       'title' => t('Depth'),
       'help' => t('Display the depth of the comment if it is threaded.'),
-      'handler' => 'views_handler_field_comment_depth',
+      'id' => 'comment_depth',
     ),
     'sort' => array(
       'title' => t('Thread'),
       'help' => t('Sort by the threaded order. This will keep child comments together with their parents.'),
-      'handler' => 'views_handler_sort_comment_thread',
+      'id' => 'comment_thread',
     ),
   );
 
@@ -355,17 +355,17 @@ function comment_views_data() {
       'help' => t('The content to which the comment is a reply to.'),
       'base' => 'node',
       'base field' => 'nid',
-      'handler' => 'views_handler_relationship',
+      'id' => 'standard',
       'label' => t('Content'),
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
+      'id' => 'numeric',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_numeric',
+      'id' => 'numeric',
     ),
     'field' => array(
-      'handler' => 'views_handler_field_numeric',
+      'id' => 'numeric',
     ),
   );
 
@@ -377,17 +377,17 @@ function comment_views_data() {
       'help' => t("The User ID of the comment's author."),
       'base' => 'users',
       'base field' => 'uid',
-      'handler' => 'views_handler_relationship',
+      'id' => 'standard',
       'label' => t('author'),
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
+      'id' => 'numeric',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_numeric',
+      'id' => 'numeric',
     ),
     'field' => array(
-      'handler' => 'views_handler_field_user',
+      'id' => 'user',
     ),
   );
 
@@ -395,14 +395,14 @@ function comment_views_data() {
     'title' => t('Parent CID'),
     'help' => t('The Comment ID of the parent comment.'),
     'field' => array(
-      'handler' => 'views_handler_field',
+      'id' => 'standard',
     ),
     'relationship' => array(
       'title' => t('Parent comment'),
       'help' => t('The parent comment.'),
       'base' => 'comment',
       'base field' => 'cid',
-      'handler' => 'views_handler_relationship',
+      'id' => 'standard',
       'label' => t('Parent comment'),
     ),
   );
@@ -428,14 +428,14 @@ function comment_views_data() {
     'title' => t('Last comment time'),
     'help' => t('Date and time of when the last comment was posted.'),
     'field' => array(
-      'handler' => 'views_handler_field_last_comment_timestamp',
+      'id' => 'comment_last_timestamp',
       'click sortable' => TRUE,
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort_date',
+      'id' => 'date',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_date',
+      'id' => 'date',
     ),
   );
 
@@ -444,12 +444,12 @@ function comment_views_data() {
     'title' => t("Last comment author"),
     'help' => t('The name of the author of the last posted comment.'),
     'field' => array(
-      'handler' => 'views_handler_field_ncs_last_comment_name',
+      'id' => 'comment_ncs_last_comment_name',
       'click sortable' => TRUE,
       'no group by' => TRUE,
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort_ncs_last_comment_name',
+      'id' => 'comment_ncs_last_comment_name',
       'no group by' => TRUE,
     ),
   );
@@ -459,17 +459,17 @@ function comment_views_data() {
     'title' => t('Comment count'),
     'help' => t('The number of comments a node has.'),
     'field' => array(
-      'handler' => 'views_handler_field_numeric',
+      'id' => 'numeric',
       'click sortable' => TRUE,
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
+      'id' => 'numeric',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument',
+      'id' => 'standard',
     ),
   );
 
@@ -478,16 +478,16 @@ function comment_views_data() {
     'title' => t('Updated/commented date'),
     'help' => t('The most recent of last comment posted or node updated time.'),
     'field' => array(
-      'handler' => 'views_handler_field_ncs_last_updated',
+      'id' => 'comment_ncs_last_updated',
       'click sortable' => TRUE,
       'no group by' => TRUE,
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort_ncs_last_updated',
+      'id' => 'comment_ncs_last_updated',
       'no group by' => TRUE,
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_ncs_last_updated',
+      'id' => 'comment_ncs_last_updated',
     ),
   );
 
@@ -500,7 +500,7 @@ function comment_views_data() {
       'group' => t('Comment'),
       'base' => 'comment',
       'base field' => 'cid',
-      'handler' => 'views_handler_relationship',
+      'id' => 'standard',
       'label' => t('Last Comment'),
     ),
   );
@@ -513,17 +513,17 @@ function comment_views_data() {
       'title' => t('Last comment author'),
       'base' => 'users',
       'base field' => 'uid',
-      'handler' => 'views_handler_relationship',
+      'id' => 'standard',
       'label' => t('Last comment author'),
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
+      'id' => 'numeric',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_numeric',
+      'id' => 'numeric',
     ),
     'field' => array(
-      'handler' => 'views_handler_field_numeric',
+      'id' => 'numeric',
     ),
   );
 
@@ -540,7 +540,7 @@ function comment_views_data_alter(&$data) {
     'title' => t('New comments'),
     'help' => t('The number of new comments on the node.'),
     'field' => array(
-      'handler' => 'views_handler_field_node_new_comments',
+      'id' => 'node_new_comments',
       'no group by' => TRUE,
     ),
   );
@@ -549,7 +549,7 @@ function comment_views_data_alter(&$data) {
     'field' => array(
       'title' => t('Add comment link'),
       'help' => t('Display the standard add comment link used on regular nodes, which will only display if the viewing user has access to add a comment.'),
-      'handler' => 'views_handler_field_comment_node_link',
+      'id' => 'comment_node_link',
     ),
   );
 
@@ -558,14 +558,14 @@ function comment_views_data_alter(&$data) {
     'title' => t('Comment status'),
     'help' => t('Whether comments are enabled or disabled on the node.'),
     'field' => array(
-      'handler' => 'views_handler_field_node_comment',
+      'id' => 'node_comment',
       'click sortable' => TRUE,
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_node_comment',
+      'id' => 'node_comment',
     ),
   );
 
@@ -576,14 +576,14 @@ function comment_views_data_alter(&$data) {
       'field' => 'uid',
       'name table' => 'users',
       'name field' => 'name',
-      'handler' => 'views_handler_argument_comment_user_uid',
+      'id' => 'argument_comment_user_uid',
       'no group by' => TRUE,
     ),
     'filter' => array(
       'field' => 'uid',
       'name table' => 'users',
       'name field' => 'name',
-      'handler' => 'views_handler_filter_comment_user_uid'
+      'id' => 'comment_user_uid',
     ),
   );
 
@@ -596,46 +596,13 @@ function comment_views_data_alter(&$data) {
       'base' => 'comment',
       'base field' => 'nid',
       'relationship field' => 'nid',
-      'handler' => 'views_handler_relationship',
+      'id' => 'standard',
     ),
   );
 
 }
 
 /**
- * Implements hook_views_plugins().
- */
-function comment_views_plugins() {
-  return array(
-    'module' => 'views',
-    'row' => array(
-      'comment' => array(
-        'title' => t('Comment'),
-        'help' => t('Display the comment with standard comment view.'),
-        'handler' => 'views_plugin_row_comment_view',
-        'theme' => 'views_view_row_comment',
-        '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' => 'normal',
-        'help topic' => 'style-comment',
-      ),
-      'comment_rss' => array(
-        'title' => t('Comment'),
-        'help' => t('Display the comment as RSS.'),
-        'handler' => 'views_plugin_row_comment_rss',
-        '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',
-      ),
-    ),
-  );
-}
-
-/**
  * Template helper for theme_views_view_row_comment
  */
 function template_preprocess_views_view_row_comment(&$vars) {
diff --git a/modules/comment.views_default.inc b/modules/comment.views_default.inc
index 414f721..1609cae 100644
--- a/modules/comment.views_default.inc
+++ b/modules/comment.views_default.inc
@@ -32,7 +32,7 @@ function comment_views_default_views() {
   $handler->display->display_options['exposed_form']['type'] = 'basic';
   $handler->display->display_options['pager']['type'] = 'some';
   $handler->display->display_options['pager']['options']['items_per_page'] = 5;
-  $handler->display->display_options['style_plugin'] = 'list';
+  $handler->display->display_options['style_plugin'] = 'html_list';
   $handler->display->display_options['row_plugin'] = 'fields';
   /* Relationship: Comment: Content */
   $handler->display->display_options['relationships']['nid']['id'] = 'nid';
@@ -65,7 +65,7 @@ function comment_views_default_views() {
   /* Display: Page */
   $handler = $view->new_display('page', 'Page', 'page');
   $handler->display->display_options['defaults']['style_plugin'] = FALSE;
-  $handler->display->display_options['style_plugin'] = 'list';
+  $handler->display->display_options['style_plugin'] = 'html_list';
   $handler->display->display_options['defaults']['style_options'] = FALSE;
   $handler->display->display_options['defaults']['row_plugin'] = FALSE;
   $handler->display->display_options['row_plugin'] = 'fields';
diff --git a/modules/contact.views.inc b/modules/contact.views.inc
index 412d824..307ffbc 100644
--- a/modules/contact.views.inc
+++ b/modules/contact.views.inc
@@ -15,7 +15,7 @@ function contact_views_data_alter(&$data) {
     'field' => array(
       'title' => t('Link to contact page'),
       'help' => t('Provide a simple link to the user contact page.'),
-      'handler' => 'views_handler_field_contact_link',
+      'id' => 'contact_link',
     ),
   );
 }
diff --git a/modules/field.views.inc b/modules/field.views.inc
index fe1968b..eb8d193 100644
--- a/modules/field.views.inc
+++ b/modules/field.views.inc
@@ -234,7 +234,7 @@ function field_views_field_default_views_data($field) {
     $real_field = reset($keys);
     $data[$table][$column]['field'] = array(
       'table' => $table,
-      'handler' => 'views_handler_field_field',
+      'id' => 'field',
       'click sortable' => TRUE,
       'field_name' => $field['field_name'],
       // Provide a real field for group by.
@@ -259,18 +259,18 @@ function field_views_field_default_views_data($field) {
       case 'serial':
       case 'numeric':
       case 'float':
-        $filter = 'views_handler_filter_numeric';
-        $argument = 'views_handler_argument_numeric';
-        $sort = 'views_handler_sort';
+        $filter = 'numeric';
+        $argument = 'numeric';
+        $sort = 'standard';
         break;
       case 'text':
       case 'blob':
         // It does not make sense to sort by blob or text.
         $allow_sort = FALSE;
       default:
-        $filter = 'views_handler_filter_string';
-        $argument = 'views_handler_argument_string';
-        $sort = 'views_handler_sort';
+        $filter = 'string';
+        $argument = 'string';
+        $sort = 'standard';
         break;
     }
 
@@ -335,7 +335,7 @@ function field_views_field_default_views_data($field) {
       $data[$table][$column_real_name]['argument'] = array(
         'field' => $column_real_name,
         'table' => $table,
-        'handler' => $argument,
+        'id' => $argument,
         'additional fields' => $additional_fields,
         'field_name' => $field['field_name'],
         'empty field name' => t('- No value -'),
@@ -343,7 +343,7 @@ function field_views_field_default_views_data($field) {
       $data[$table][$column_real_name]['filter'] = array(
         'field' => $column_real_name,
         'table' => $table,
-        'handler' => $filter,
+        'id' => $filter,
         'additional fields' => $additional_fields,
         'field_name' => $field['field_name'],
         'allow empty' => TRUE,
@@ -352,7 +352,7 @@ function field_views_field_default_views_data($field) {
         $data[$table][$column_real_name]['sort'] = array(
           'field' => $column_real_name,
           'table' => $table,
-          'handler' => $sort,
+          'id' => $sort,
           'additional fields' => $additional_fields,
           'field_name' => $field['field_name'],
         );
@@ -370,12 +370,12 @@ function field_views_field_default_views_data($field) {
           'help' => t('Delta - Appears in: @bundles.', array('@bundles' => implode(', ', $bundles_names))),
         );
         $data[$table]['delta']['field'] = array(
-          'handler' => 'views_handler_field_numeric',
+          'id' => 'numeric',
         );
         $data[$table]['delta']['argument'] = array(
           'field' => 'delta',
           'table' => $table,
-          'handler' => 'views_handler_argument_numeric',
+          'id' => 'numeric',
           'additional fields' => $additional_fields,
           'empty field name' => t('- No value -'),
           'field_name' => $field['field_name'],
@@ -383,7 +383,7 @@ function field_views_field_default_views_data($field) {
         $data[$table]['delta']['filter'] = array(
           'field' => 'delta',
           'table' => $table,
-          'handler' => 'views_handler_filter_numeric',
+          'id' => 'numeric',
           'additional fields' => $additional_fields,
           'field_name' => $field['field_name'],
           'allow empty' => TRUE,
@@ -391,7 +391,7 @@ function field_views_field_default_views_data($field) {
         $data[$table]['delta']['sort'] = array(
           'field' => 'delta',
           'table' => $table,
-          'handler' => 'views_handler_sort',
+          'id' => 'standard',
           'additional fields' => $additional_fields,
           'field_name' => $field['field_name'],
         );
@@ -410,14 +410,14 @@ function list_field_views_data($field) {
   foreach ($data as $table_name => $table_data) {
     foreach ($table_data as $field_name => $field_data) {
       if (isset($field_data['filter']) && $field_name != 'delta') {
-        $data[$table_name][$field_name]['filter']['handler'] = 'views_handler_filter_field_list';
+        $data[$table_name][$field_name]['filter']['id'] = 'field_list';
       }
       if (isset($field_data['argument']) && $field_name != 'delta') {
         if ($field['type'] == 'list_text') {
-          $data[$table_name][$field_name]['argument']['handler'] = 'views_handler_argument_field_list_string';
+          $data[$table_name][$field_name]['argument']['id'] = 'field_list_string';
         }
         else {
-          $data[$table_name][$field_name]['argument']['handler'] = 'views_handler_argument_field_list';
+          $data[$table_name][$field_name]['argument']['id'] = 'field_list';
         }
       }
     }
diff --git a/modules/file.views.inc b/modules/file.views.inc
index 8556938..f130259 100644
--- a/modules/file.views.inc
+++ b/modules/file.views.inc
@@ -20,7 +20,7 @@ function file_field_views_data($field) {
   foreach ($data as $table_name => $table_data) {
     // Add the relationship only on the fid field.
     $data[$table_name][$field['field_name'] . '_fid']['relationship'] = array(
-      'handler' => 'views_handler_relationship',
+      'id' => 'standard',
       'base' => 'file_managed',
       'entity type' => 'file',
       'base field' => 'fid',
@@ -50,7 +50,7 @@ function file_field_views_data_views_data_alter(&$data, $field) {
     $data['file_managed'][$pseudo_field_name]['relationship'] = array(
       'title' => t('@entity using @field', array('@entity' => $entity, '@field' => $label)),
       'help' => t('Relate each @entity with a @field set to the file.', array('@entity' => $entity, '@field' => $label)),
-      'handler' => 'views_handler_relationship_entity_reverse',
+      'id' => 'entity_reverse',
       'field_name' => $field['field_name'],
       'field table' => _field_sql_storage_tablename($field),
       'field field' => $field['field_name'] . '_fid',
diff --git a/modules/image.views.inc b/modules/image.views.inc
index 6fc6565..43c04d6 100644
--- a/modules/image.views.inc
+++ b/modules/image.views.inc
@@ -20,7 +20,7 @@ function image_field_views_data($field) {
   foreach ($data as $table_name => $table_data) {
     // Add the relationship only on the fid field.
     $data[$table_name][$field['field_name'] . '_fid']['relationship'] = array(
-      'handler' => 'views_handler_relationship',
+      'id' => 'standard',
       'base' => 'file_managed',
       'base field' => 'fid',
       'label' => t('image from !field_name', array('!field_name' => $field['field_name'])),
@@ -49,7 +49,7 @@ function image_field_views_data_views_data_alter(&$data, $field) {
     $data['file_managed'][$pseudo_field_name]['relationship'] = array(
       'title' => t('@entity using @field', array('@entity' => $entity, '@field' => $label)),
       'help' => t('Relate each @entity with a @field set to the image.', array('@entity' => $entity, '@field' => $label)),
-      'handler' => 'views_handler_relationship_entity_reverse',
+      'id' => 'entity_reverse',
       'field_name' => $field['field_name'],
       'field table' => _field_sql_storage_tablename($field),
       'field field' => $field['field_name'] . '_fid',
diff --git a/modules/language.views.inc b/modules/language.views.inc
index d9065e8..1780191 100644
--- a/modules/language.views.inc
+++ b/modules/language.views.inc
@@ -27,16 +27,16 @@ function language_views_data() {
     'title' => t('Language code'),
     'help' => t("Language code, e.g. 'de' or 'en-US'."),
     'field' => array(
-      'handler' => 'views_handler_field',
+      'id' => 'standard',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string'
+      'id' => 'string'
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'string',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
@@ -44,16 +44,16 @@ function language_views_data() {
     'title' => t('Language name'),
     'help' => t("Language name, e.g. 'German' or 'English'."),
     'field' => array(
-      'handler' => 'views_handler_field',
+      'id' => 'standard',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string'
+      'id' => 'string'
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'string',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
@@ -61,16 +61,16 @@ function language_views_data() {
     'title' => t('Direction'),
     'help' => t('Direction of language (Left-to-Right = 0, Right-to-Left = 1).'),
     'field' => array(
-      'handler' => 'views_handler_field_numeric',
+      'id' => 'numeric',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric'
+      'id' => 'numeric'
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_numeric',
+      'id' => 'numeric',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
@@ -78,16 +78,16 @@ function language_views_data() {
     'title' => t('Weight'),
     'help' => t('Weight, used in lists of languages.'),
     'field' => array(
-      'handler' => 'views_handler_field_numeric',
+      'id' => 'numeric',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric'
+      'id' => 'numeric'
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_numeric',
+      'id' => 'numeric',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
diff --git a/modules/locale.views.inc b/modules/locale.views.inc
index 3bff7db..cdbb32b 100644
--- a/modules/locale.views.inc
+++ b/modules/locale.views.inc
@@ -28,19 +28,19 @@ function locale_views_data() {
     'title' => t('LID'),
     'help' => t('The ID of the source string.'),
     'field' => array(
-      'handler' => 'views_handler_field',
+      'id' => 'standard',
       'click sortable' => TRUE,
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_numeric',
+      'id' => 'numeric',
       'numeric' => TRUE,
       'validate type' => 'lid',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
+      'id' => 'numeric',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
@@ -50,17 +50,17 @@ function locale_views_data() {
     'title' => t('Location'),
     'help' => t('A description of the location or context of the string.'),
     'field' => array(
-      'handler' => 'views_handler_field',
+      'id' => 'standard',
       'click sortable' => TRUE,
      ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'string',
     ),
   );
 
@@ -70,14 +70,14 @@ function locale_views_data() {
     'title' => t('Group'),
     'help' => t('The group the translation is in.'),
     'field' => array(
-      'handler' => 'views_handler_field_locale_group',
+      'id' => 'locale_group',
       'click sortable' => TRUE,
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_locale_group',
+      'id' => 'locale_group',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_locale_group',
+      'id' => 'locale_group',
     ),
   );
 
@@ -87,10 +87,10 @@ function locale_views_data() {
     'title' => t('Source'),
     'help' => t('The full original string.'),
     'field' => array(
-      'handler' => 'views_handler_field',
+      'id' => 'standard',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
   );
 
@@ -100,14 +100,14 @@ function locale_views_data() {
     'title' => t('Version'),
     'help' => t('The version of Drupal core that this string is for.'),
     'field' => array(
-      'handler' => 'views_handler_field',
+      'id' => 'standard',
       'click sortable' => TRUE,
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_locale_version',
+      'id' => 'locale_version',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'string',
     ),
   );
 
@@ -116,7 +116,7 @@ function locale_views_data() {
     'field' => array(
       'title' => t('Edit link'),
       'help' => t('Provide a simple link to edit the translations.'),
-      'handler' => 'views_handler_field_locale_link_edit',
+      'id' => 'locale_link_edit',
     ),
   );
 
@@ -141,10 +141,10 @@ function locale_views_data() {
     'title' => t('Translation'),
     'help' => t('The full translation string.'),
     'field' => array(
-      'handler' => 'views_handler_field',
+      'id' => 'standard',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
   );
 
@@ -154,14 +154,14 @@ function locale_views_data() {
     'title' => t('Language'),
     'help' => t('The language this translation is in.'),
     'field' => array(
-      'handler' => 'views_handler_field_locale_language',
+      'id' => 'locale_language',
       'click sortable' => TRUE,
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_locale_language',
+      'id' => 'locale_language',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_locale_language',
+      'id' => 'locale_language',
     ),
   );
 
@@ -170,7 +170,7 @@ function locale_views_data() {
     'title' => t('Singular LID'),
     'help' => t('The ID of the parent translation.'),
     'field' => array(
-      'handler' => 'views_handler_field',
+      'id' => 'standard',
     ),
   );
 
@@ -180,16 +180,16 @@ function locale_views_data() {
     'title' => t('Plural'),
     'help' => t('Whether or not the translation is plural.'),
     'field' => array(
-      'handler' => 'views_handler_field_boolean',
+      'id' => 'boolean',
       'click sortable' => TRUE,
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_boolean_operator',
+      'id' => 'boolean',
       'label' => t('Plural'),
       'type' => 'yes-no',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
@@ -205,17 +205,17 @@ function locale_views_data_alter(&$data) {
     'title' => t('Language'),
     'help' => t('The language the content is in.'),
     'field' => array(
-      'handler' => 'views_handler_field_node_language',
+      'id' => 'node_language',
       'click sortable' => TRUE,
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_node_language',
+      'id' => 'node_language',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_node_language',
+      'id' => 'node_language',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 }
diff --git a/modules/node.views.inc b/modules/node.views.inc
index f254f9c..d27a8b0 100644
--- a/modules/node.views.inc
+++ b/modules/node.views.inc
@@ -48,23 +48,23 @@ function node_views_data() {
     'help' => t('The node ID.'), // The help that appears on the UI,
     // Information for displaying the nid
     'field' => array(
-      'handler' => 'views_handler_field_node',
+      'id' => 'node',
       'click sortable' => TRUE,
     ),
     // Information for accepting a nid as an argument
     'argument' => array(
-      'handler' => 'views_handler_argument_node_nid',
+      'id' => 'node_nid',
       'name field' => 'title', // the field to display in the summary.
       'numeric' => TRUE,
       'validate type' => 'nid',
     ),
     // Information for accepting a nid as a filter
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
+      'id' => 'numeric',
     ),
     // Information for sorting on a nid.
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
@@ -77,19 +77,19 @@ function node_views_data() {
     'field' => array(
       'field' => 'title', // the real field. This could be left out since it is the same.
       'group' => t('Content'), // The group it appears in on the UI. Could be left out.
-      'handler' => 'views_handler_field_node',
+      'id' => 'node',
       'click sortable' => TRUE,
       'link_to_node default' => TRUE,
      ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     // Information for accepting a title as a filter
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'string',
     ),
   );
 
@@ -98,14 +98,14 @@ function node_views_data() {
     'title' => t('Post date'), // The item it appears as on the UI,
     'help' => t('The date the content was posted.'), // The help that appears on the UI,
     'field' => array(
-      'handler' => 'views_handler_field_date',
+      'id' => 'date',
       'click sortable' => TRUE,
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort_date',
+      'id' => 'date'
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_date',
+      'id' => 'date',
     ),
   );
 
@@ -114,14 +114,14 @@ function node_views_data() {
     'title' => t('Updated date'), // The item it appears as on the UI,
     'help' => t('The date the content was last updated.'), // The help that appears on the UI,
     'field' => array(
-      'handler' => 'views_handler_field_date',
+      'id' => 'date',
       'click sortable' => TRUE,
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort_date',
+      'id' => 'date'
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_date',
+      'id' => 'date',
     ),
   );
 
@@ -130,17 +130,17 @@ function node_views_data() {
     'title' => t('Type'), // The item it appears as on the UI,
     'help' => t('The content type (for example, "blog entry", "forum post", "story", etc).'), // The help that appears on the UI,
     'field' => array(
-      'handler' => 'views_handler_field_node_type',
+      'id' => 'node_type',
       'click sortable' => TRUE,
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_node_type',
+      'id' => 'node_type',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_node_type',
+      'id' => 'node_type',
     ),
   );
 
@@ -149,20 +149,20 @@ function node_views_data() {
     'title' => t('Published'),
     'help' => t('Whether or not the content is published.'),
     'field' => array(
-      'handler' => 'views_handler_field_boolean',
+      'id' => 'boolean',
       'click sortable' => TRUE,
       'output formats' => array(
         'published-notpublished' => array(t('Published'), t('Not published')),
       ),
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_boolean_operator',
+      'id' => 'boolean',
       'label' => t('Published'),
       'type' => 'yes-no',
-      'use equal' => TRUE, // Use status = 1 instead of status <> 0 in WHERE statment
+      'use_equal' => TRUE, // Use status = 1 instead of status <> 0 in WHERE statment
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
@@ -172,7 +172,7 @@ function node_views_data() {
     'help' => t('Filters out unpublished content if the current user cannot view it.'),
     'filter' => array(
       'field' => 'status',
-      'handler' => 'views_handler_filter_node_status',
+      'id' => 'node_status',
       'label' => t('Published or admin'),
     ),
   );
@@ -182,19 +182,19 @@ function node_views_data() {
     'title' => t('Promoted to front page'),
     'help' => t('Whether or not the content is promoted to the front page.'),
     'field' => array(
-      'handler' => 'views_handler_field_boolean',
+      'id' => 'boolean',
       'click sortable' => TRUE,
       'output formats' => array(
         'promoted-notpromoted' => array(t('Promoted'), t('Not promoted')),
       ),
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_boolean_operator',
+      'id' => 'boolean',
       'label' => t('Promoted to front page'),
       'type' => 'yes-no',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
@@ -204,19 +204,19 @@ function node_views_data() {
     'help' => t('Whether or not the content is sticky.'), // The help that appears on the UI,
      // Information for displaying a title as a field
     'field' => array(
-      'handler' => 'views_handler_field_boolean',
+      'id' => 'boolean',
       'click sortable' => TRUE,
       'output formats' => array(
         'sticky' => array(t('Sticky'), t('Not sticky')),
       ),
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_boolean_operator',
+      'id' => 'boolean',
       'label' => t('Sticky'),
       'type' => 'yes-no',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
       'help' => t('Whether or not the content is sticky. To list sticky content first, set this to descending.'),
     ),
   );
@@ -232,7 +232,7 @@ function node_views_data() {
     'field' => array(
       'title' => t('Link'),
       'help' => t('Provide a simple link to the content.'),
-      'handler' => 'views_handler_field_node_link',
+      'id' => 'node_link',
     ),
   );
 
@@ -241,7 +241,7 @@ function node_views_data() {
     'field' => array(
       'title' => t('Edit link'),
       'help' => t('Provide a simple link to edit the content.'),
-      'handler' => 'views_handler_field_node_link_edit',
+      'id' => 'node_link_edit',
     ),
   );
 
@@ -250,7 +250,7 @@ function node_views_data() {
     'field' => array(
       'title' => t('Delete link'),
       'help' => t('Provide a simple link to delete the content.'),
-      'handler' => 'views_handler_field_node_link_delete',
+      'id' => 'node_link_delete',
     ),
   );
 
@@ -258,7 +258,7 @@ function node_views_data() {
     'field' => array(
       'title' => t('Path'),
       'help' => t('The aliased path to this content.'),
-      'handler' => 'views_handler_field_node_path',
+      'id' => 'node_path',
     ),
   );
 
@@ -270,7 +270,7 @@ function node_views_data() {
     'help' => t('Date in the form of CCYYMMDD.'),
     'argument' => array(
       'field' => 'created',
-      'handler' => 'views_handler_argument_node_created_fulldate',
+      'id' => 'node_created_fulldate',
     ),
   );
 
@@ -279,7 +279,7 @@ function node_views_data() {
     'help' => t('Date in the form of YYYYMM.'),
     'argument' => array(
       'field' => 'created',
-      'handler' => 'views_handler_argument_node_created_year_month',
+      'id' => 'node_created_year_month',
     ),
   );
 
@@ -288,7 +288,7 @@ function node_views_data() {
     'help' => t('Date in the form of YYYY.'),
     'argument' => array(
       'field' => 'created',
-      'handler' => 'views_handler_argument_node_created_year',
+      'id' => 'node_created_year',
     ),
   );
 
@@ -297,7 +297,7 @@ function node_views_data() {
     'help' => t('Date in the form of MM (01 - 12).'),
     'argument' => array(
       'field' => 'created',
-      'handler' => 'views_handler_argument_node_created_month',
+      'id' => 'node_created_month',
     ),
   );
 
@@ -306,7 +306,7 @@ function node_views_data() {
     'help' => t('Date in the form of DD (01 - 31).'),
     'argument' => array(
       'field' => 'created',
-      'handler' => 'views_handler_argument_node_created_day',
+      'id' => 'node_created_day',
     ),
   );
 
@@ -315,7 +315,7 @@ function node_views_data() {
     'help' => t('Date in the form of WW (01 - 53).'),
     'argument' => array(
       'field' => 'created',
-      'handler' => 'views_handler_argument_node_created_week',
+      'id' => 'node_created_week',
     ),
   );
 
@@ -324,7 +324,7 @@ function node_views_data() {
     'help' => t('Date in the form of CCYYMMDD.'),
     'argument' => array(
       'field' => 'changed',
-      'handler' => 'views_handler_argument_node_created_fulldate',
+      'id' => 'node_created_fulldate',
     ),
   );
 
@@ -333,7 +333,7 @@ function node_views_data() {
     'help' => t('Date in the form of YYYYMM.'),
     'argument' => array(
       'field' => 'changed',
-      'handler' => 'views_handler_argument_node_created_year_month',
+      'id' => 'node_created_year_month',
     ),
   );
 
@@ -342,7 +342,7 @@ function node_views_data() {
     'help' => t('Date in the form of YYYY.'),
     'argument' => array(
       'field' => 'changed',
-      'handler' => 'views_handler_argument_node_created_year',
+      'id' => 'node_created_year',
     ),
   );
 
@@ -351,7 +351,7 @@ function node_views_data() {
     'help' => t('Date in the form of MM (01 - 12).'),
     'argument' => array(
       'field' => 'changed',
-      'handler' => 'views_handler_argument_node_created_month',
+      'id' => 'node_created_month',
     ),
   );
 
@@ -360,7 +360,7 @@ function node_views_data() {
     'help' => t('Date in the form of DD (01 - 31).'),
     'argument' => array(
       'field' => 'changed',
-      'handler' => 'views_handler_argument_node_created_day',
+      'id' => 'node_created_day',
     ),
   );
 
@@ -369,7 +369,7 @@ function node_views_data() {
     'help' => t('Date in the form of WW (01 - 53).'),
     'argument' => array(
       'field' => 'changed',
-      'handler' => 'views_handler_argument_node_created_week',
+      'id' => 'node_created_week',
     ),
   );
 
@@ -380,19 +380,19 @@ function node_views_data() {
     'relationship' => array(
       'title' => t('Author'),
       'help' => t('Relate content to the user who created it.'),
-      'handler' => 'views_handler_relationship',
+      'id' => 'standard',
       'base' => 'users',
       'field' => 'uid',
       'label' => t('author'),
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_user_name',
+      'id' => 'user_name',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_numeric',
+      'id' => 'numeric',
     ),
     'field' => array(
-      'handler' => 'views_handler_field_user',
+      'id' => 'user',
     ),
   );
 
@@ -401,10 +401,10 @@ function node_views_data() {
     'help' => t('All nodes where a certain user has a revision'),
     'real field' => 'nid',
     'filter' => array(
-      'handler' => 'views_handler_filter_node_uid_revision',
+      'id' => 'node_uid_revision',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_node_uid_revision',
+      'id' => 'node_uid_revision',
     ),
   );
 
@@ -450,7 +450,7 @@ function node_views_data() {
     'title' => t('User'),
     'help' => t('Relate a content revision to the user who created the revision.'),
     'relationship' => array(
-      'handler' => 'views_handler_relationship',
+      'id' => 'standard',
       'base' => 'users',
       'base field' => 'uid',
       'label' => t('revision user'),
@@ -467,20 +467,20 @@ function node_views_data() {
     ),
     // Information for accepting a nid as an argument
     'argument' => array(
-      'handler' => 'views_handler_argument_node_vid',
+      'id' => 'node_vid',
       'click sortable' => TRUE,
       'numeric' => TRUE,
     ),
     // Information for accepting a nid as a filter
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
+      'id' => 'numeric',
     ),
     // Information for sorting on a nid.
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'relationship' => array(
-      'handler' => 'views_handler_relationship',
+      'id' => 'standard',
       'base' => 'node',
       'base field' => 'vid',
       'title' => t('Content'),
@@ -495,17 +495,17 @@ function node_views_data() {
      // Information for displaying a title as a field
     'field' => array(
       'field' => 'title', // the real field
-      'handler' => 'views_handler_field_node_revision',
+      'id' => 'node_revision',
       'click sortable' => TRUE,
      ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'string',
     ),
   );
 
@@ -515,10 +515,10 @@ function node_views_data() {
     'help' => t('The log message entered when the revision was created.'), // The help that appears on the UI,
      // Information for displaying a title as a field
     'field' => array(
-      'handler' => 'views_handler_field_xss',
+      'id' => 'xss',
      ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
   );
 
@@ -528,14 +528,14 @@ function node_views_data() {
     'title' => t('Updated date'), // The item it appears as on the UI,
     'help' => t('The date the node was last updated.'), // The help that appears on the UI,
     'field' => array(
-      'handler' => 'views_handler_field_date',
+      'id' => 'date',
       'click sortable' => TRUE,
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort_date',
+      'id' => 'date'
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_date',
+      'id' => 'date',
     ),
   );
 
@@ -543,7 +543,7 @@ function node_views_data() {
     'field' => array(
       'title' => t('Link'),
       'help' => t('Provide a simple link to the revision.'),
-      'handler' => 'views_handler_field_node_revision_link',
+      'id' => 'node_revision_link',
     ),
   );
 
@@ -551,7 +551,7 @@ function node_views_data() {
     'field' => array(
       'title' => t('Revert link'),
       'help' => t('Provide a simple link to revert to the revision.'),
-      'handler' => 'views_handler_field_node_revision_link_revert',
+      'id' => 'node_revision_link_revert',
     ),
   );
 
@@ -559,7 +559,7 @@ function node_views_data() {
     'field' => array(
       'title' => t('Delete link'),
       'help' => t('Provide a simple link to delete the content revision.'),
-      'handler' => 'views_handler_field_node_revision_link_delete',
+      'id' => 'node_revision_link_delete',
     ),
   );
 
@@ -583,7 +583,7 @@ function node_views_data() {
     'title' => t('Access'),
     'help' => t('Filter by access.'),
     'filter' => array(
-      'handler' => 'views_handler_filter_node_access',
+      'id' => 'node_access',
       'help' => t('Filter for content by view access. <strong>Not necessary if you are using node as your base table.</strong>'),
     ),
   );
@@ -613,62 +613,18 @@ function node_views_data() {
   $data['history']['timestamp'] = array(
     'title' => t('Has new content'),
     'field' => array(
-      'handler' => 'views_handler_field_history_user_timestamp',
+      'id' => 'node_history_user_timestamp',
       'help' => t('Show a marker if the content is new or updated.'),
     ),
     'filter' => array(
       'help' => t('Show only content that is new or updated.'),
-      'handler' => 'views_handler_filter_history_user_timestamp',
+      'id' => 'node_history_user_timestamp',
     ),
   );
   return $data;
 }
 
 /**
- * Implements hook_views_plugins().
- */
-function node_views_plugins() {
-  return array(
-    'module' => 'views', // This just tells our themes are elsewhere.
-    'row' => array(
-      'node' => array(
-        'title' => t('Content'),
-        'help' => t('Display the content with standard node view.'),
-        'handler' => 'views_plugin_row_node_view',
-        'path' => drupal_get_path('module', 'views') . '/modules/node', // not necessary for most modules
-        'base' => array('node'), // only works with 'node' as base.
-        'uses options' => TRUE,
-        'type' => 'normal',
-        'help topic' => 'style-node',
-      ),
-      'node_rss' => array(
-        'title' => t('Content'),
-        'help' => t('Display the content with standard node view.'),
-        'handler' => 'views_plugin_row_node_rss',
-        'path' => drupal_get_path('module', 'views') . '/modules/node', // not necessary for most modules
-        'theme' => 'views_view_row_rss',
-        'base' => array('node'), // only works with 'node' as base.
-        'uses options' => TRUE,
-        'type' => 'feed',
-        'help topic' => 'style-node-rss',
-      ),
-    ),
-    'argument validator' => array(
-      'node' => array(
-        'title' => t('Content'),
-        'handler' => 'views_plugin_argument_validate_node',
-      ),
-    ),
-    'argument default' => array(
-      'node' => array(
-        'title' => t('Content ID from URL'),
-        'handler' => 'views_plugin_argument_default_node'
-      ),
-    ),
-  );
-}
-
-/**
  * Implements hook_preprocess_node().
  */
 function node_row_node_view_preprocess_node(&$vars) {
@@ -751,3 +707,14 @@ function node_views_analyze($view) {
 
   return $ret;
 }
+
+/**
+ * Implements hook_views_wizard().
+ */
+function node_views_wizard() {
+  // @todo: figure this piece out.
+  if (module_exists('statistics')) {
+    $plugins['node']['available_sorts']['node_counter-totalcount:DESC'] = t('Number of hits');
+  }
+
+}
diff --git a/modules/node/views_handler_argument_dates_various.inc b/modules/node/views_handler_argument_dates_various.inc
deleted file mode 100644
index 5f4e4b2..0000000
--- a/modules/node/views_handler_argument_dates_various.inc
+++ /dev/null
@@ -1,177 +0,0 @@
-<?php
-
-/**
- * @file
- * Handlers for various date arguments.
- *
- * @ingroup views_argument_handlers
- */
-
-/**
- * Argument handler for a full date (CCYYMMDD)
- */
-class views_handler_argument_node_created_fulldate extends views_handler_argument_date {
-  /**
-   * Constructor implementation
-   */
-  function construct() {
-    parent::construct();
-    $this->format = 'F j, Y';
-    $this->arg_format = 'Ymd';
-    $this->formula = views_date_sql_format($this->arg_format, "***table***.$this->real_field");
-  }
-
-  /**
-   * Provide a link to the next level of the view
-   */
-  function summary_name($data) {
-    $created = $data->{$this->name_alias};
-    return format_date(strtotime($created . " 00:00:00 UTC"), 'custom', $this->format, 'UTC');
-  }
-
-  /**
-   * Provide a link to the next level of the view
-   */
-  function title() {
-    return format_date(strtotime($this->argument . " 00:00:00 UTC"), 'custom', $this->format, 'UTC');
-  }
-}
-
-/**
- * Argument handler for a year (CCYY)
- */
-class views_handler_argument_node_created_year extends views_handler_argument_date {
-  /**
-   * Constructor implementation
-   */
-  function construct() {
-    parent::construct();
-    $this->arg_format = 'Y';
-    $this->formula = views_date_sql_extract('YEAR', "***table***.$this->real_field");
-  }
-}
-
-/**
- * Argument handler for a year plus month (CCYYMM)
- */
-class views_handler_argument_node_created_year_month extends views_handler_argument_date {
-  /**
-   * Constructor implementation
-   */
-  function construct() {
-    parent::construct();
-    $this->format = 'F Y';
-    $this->arg_format = 'Ym';
-    $this->formula = views_date_sql_format($this->arg_format, "***table***.$this->real_field");
-  }
-
-  /**
-   * Provide a link to the next level of the view
-   */
-  function summary_name($data) {
-    $created = $data->{$this->name_alias};
-    return format_date(strtotime($created . "15" . " 00:00:00 UTC"), 'custom', $this->format, 'UTC');
-  }
-
-  /**
-   * Provide a link to the next level of the view
-   */
-  function title() {
-    return format_date(strtotime($this->argument . "15" . " 00:00:00 UTC"), 'custom', $this->format, 'UTC');
-  }
-}
-
-/**
- * Argument handler for a month (MM)
- */
-class views_handler_argument_node_created_month extends views_handler_argument_date {
-  /**
-   * Constructor implementation
-   */
-  function construct() {
-    parent::construct();
-    $this->formula = views_date_sql_extract('MONTH', "***table***.$this->real_field");
-    $this->format = 'F';
-    $this->arg_format = 'm';
-  }
-
-  /**
-   * Provide a link to the next level of the view
-   */
-  function summary_name($data) {
-    $month = str_pad($data->{$this->name_alias}, 2, '0', STR_PAD_LEFT);
-    return format_date(strtotime("2005" . $month . "15" . " 00:00:00 UTC" ), 'custom', $this->format, 'UTC');
-  }
-
-  /**
-   * Provide a link to the next level of the view
-   */
-  function title() {
-    $month = str_pad($this->argument, 2, '0', STR_PAD_LEFT);
-    return format_date(strtotime("2005" . $month . "15" . " 00:00:00 UTC"), 'custom', $this->format, 'UTC');
-  }
-
-  function summary_argument($data) {
-    // Make sure the argument contains leading zeroes.
-    return str_pad($data->{$this->base_alias}, 2, '0', STR_PAD_LEFT);
-  }
-}
-
-/**
- * Argument handler for a day (DD)
- */
-class views_handler_argument_node_created_day extends views_handler_argument_date {
-  /**
-   * Constructor implementation
-   */
-  function construct() {
-    parent::construct();
-    $this->formula = views_date_sql_extract('DAY', "***table***.$this->real_field");
-    $this->format = 'j';
-    $this->arg_format = 'd';
-  }
-
-  /**
-   * Provide a link to the next level of the view
-   */
-  function summary_name($data) {
-    $day = str_pad($data->{$this->name_alias}, 2, '0', STR_PAD_LEFT);
-    // strtotime respects server timezone, so we need to set the time fixed as utc time
-    return format_date(strtotime("2005" . "05" . $day . " 00:00:00 UTC"), 'custom', $this->format, 'UTC');
-  }
-
-  /**
-   * Provide a link to the next level of the view
-   */
-  function title() {
-    $day = str_pad($this->argument, 2, '0', STR_PAD_LEFT);
-    return format_date(strtotime("2005" . "05" . $day . " 00:00:00 UTC"), 'custom', $this->format, 'UTC');
-  }
-
-  function summary_argument($data) {
-    // Make sure the argument contains leading zeroes.
-    return str_pad($data->{$this->base_alias}, 2, '0', STR_PAD_LEFT);
-  }
-}
-
-/**
- * Argument handler for a week.
- */
-class views_handler_argument_node_created_week extends views_handler_argument_date {
-  /**
-   * Constructor implementation
-   */
-  function construct() {
-    parent::construct();
-    $this->arg_format = 'w';
-    $this->formula = views_date_sql_extract('WEEK', "***table***.$this->real_field");
-  }
-
-  /**
-   * Provide a link to the next level of the view
-   */
-  function summary_name($data) {
-    $created = $data->{$this->name_alias};
-    return t('Week @week', array('@week' => $created));
-  }
-}
diff --git a/modules/poll.views.inc b/modules/poll.views.inc
index d3fd76a..718ff28 100644
--- a/modules/poll.views.inc
+++ b/modules/poll.views.inc
@@ -30,16 +30,16 @@ function poll_views_data() {
     'title' => t('Active'),
     'help' => t('Whether the poll is open for voting.'),
     'field' => array(
-      'handler' => 'views_handler_field_boolean',
+      'id' => 'boolean',
       'click sortable' => TRUE,
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_boolean_operator',
+      'id' => 'boolean',
       'label' => t('Active'),
       'type' => 'yes-no',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
diff --git a/modules/search.views.inc b/modules/search.views.inc
index 71f8d8a..03edc4b 100644
--- a/modules/search.views.inc
+++ b/modules/search.views.inc
@@ -63,14 +63,14 @@ function search_views_data() {
     'title' => t('Score'),
     'help' => t('The score of the search item. This will not be used if the search filter is not also present.'),
     'field' => array(
-      'handler' => 'views_handler_field_search_score',
+      'id' => 'search_score',
       'click sortable' => TRUE,
       'float' => TRUE,
       'no group by' => TRUE,
     ),
     // Information for sorting on a search score.
     'sort' => array(
-      'handler' => 'views_handler_sort_search_score',
+      'id' => 'search_score',
       'no group by' => TRUE,
     ),
   );
@@ -86,10 +86,10 @@ function search_views_data() {
     'title' => t('Links from'),
     'help' => t('Other nodes that are linked from the node.'),
     'argument' => array(
-      'handler' => 'views_handler_argument_node_nid',
+      'id' => 'node_nid',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_equality',
+      'id' => 'equality',
     ),
   );
 
@@ -104,10 +104,10 @@ function search_views_data() {
     'title' => t('Links to'),
     'help' => t('Other nodes that link to the node.'),
     'argument' => array(
-      'handler' => 'views_handler_argument_node_nid',
+      'id' => 'node_nid',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_equality',
+      'id' => 'equality',
     ),
   );
 
@@ -117,86 +117,14 @@ function search_views_data() {
     'help' => t('The terms to search for.'), // The help that appears on the UI,
     // Information for searching terms using the full search syntax
     'filter' => array(
-      'handler' => 'views_handler_filter_search',
+      'id' => 'search',
       'no group by' => TRUE,
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_search',
+      'id' => 'search',
       'no group by' => TRUE,
     ),
   );
 
   return $data;
 }
-
-/**
- * Implements hook_views_plugins().
- */
-function search_views_plugins() {
-  return;
-  // DISABLED. This currently doesn't work.
-  return array(
-    'module' => 'views', // This just tells our themes are elsewhere.
-    'row' => array(
-      'search' => array(
-        'title' => t('Search'),
-        'help' => t('Display the results with standard search view.'),
-        'handler' => 'views_plugin_row_search_view',
-        'theme' => 'views_view_row_search',
-        'path' => drupal_get_path('module', 'views') . '/modules/search', // not necessary for most modules
-        'base' => array('node'), // only works with 'node' as base.
-        'type' => 'normal',
-      ),
-      'views_handler_argument_search' => array(
-        'parent' => 'views_handler_argument',
-      ),
-    ),
-  );
-}
-
-/**
- * Template helper for theme_views_view_row_search
- */
-function template_preprocess_views_view_row_search(&$vars) {
-  $vars['node'] = ''; // make sure var is defined.
-  $nid = $vars['row']->nid;
-  if (!is_numeric($nid)) {
-    return;
-  }
-
-  // @todo: Once the search row is fixed this node_load should be replace by a node_load_multiple
-  $node = node_load($nid);
-
-  if (empty($node)) {
-    return;
-  }
-
-  // Build the node body.
-  $node = node_build_content($node, FALSE, FALSE);
-  $node->body = drupal_render($node->content);
-
-  // Fetch comments for snippet
-  $node->body .= module_invoke('comment', 'nodeapi', $node, 'update index');
-
-  // Fetch terms for snippet
-  $node->body .= module_invoke('taxonomy', 'nodeapi', $node, 'update index');
-
-  $vars['url'] = url('node/' . $nid);
-  $vars['title'] = check_plain($node->label());
-
-  $info = array();
-  $info['type'] = node_type_get_name($node);
-  $info['user'] = theme('username', array('acccount' => $node));
-  $info['date'] = format_date($node->changed, 'small');
-  $extra = module_invoke_all('node_search_result', $node);
-  if (isset($extra) && is_array($extra)) {
-    $info = array_merge($info, $extra);
-  }
-  $vars['info_split'] = $info;
-  $vars['info'] = implode(' - ', $info);
-
-  $vars['node'] = $node;
-  // @todo: get score from ???
-//$vars['score'] = $item->score;
-  $vars['snippet'] = search_excerpt($vars['view']->value, $node->body);
-}
diff --git a/modules/search.views_default.inc b/modules/search.views_default.inc
index 1645f30..7567703 100644
--- a/modules/search.views_default.inc
+++ b/modules/search.views_default.inc
@@ -30,7 +30,7 @@ function search_views_default_views() {
   $handler->display->display_options['exposed_form']['type'] = 'basic';
   $handler->display->display_options['pager']['type'] = 'full';
   $handler->display->display_options['pager']['options']['items_per_page'] = 30;
-  $handler->display->display_options['style_plugin'] = 'list';
+  $handler->display->display_options['style_plugin'] = 'html_list';
   $handler->display->display_options['style_options']['type'] = 'ol';
   $handler->display->display_options['row_plugin'] = 'fields';
   /* No results behavior: Global: Text area */
@@ -77,7 +77,7 @@ function search_views_default_views() {
   $handler->display->display_options['defaults']['use_more'] = FALSE;
   $handler->display->display_options['use_more'] = TRUE;
   $handler->display->display_options['defaults']['style_plugin'] = FALSE;
-  $handler->display->display_options['style_plugin'] = 'list';
+  $handler->display->display_options['style_plugin'] = 'html_list';
   $handler->display->display_options['defaults']['style_options'] = FALSE;
   $handler->display->display_options['defaults']['row_plugin'] = FALSE;
   $handler->display->display_options['row_plugin'] = 'fields';
diff --git a/modules/statistics.views.inc b/modules/statistics.views.inc
index d6637f3..4bd0253 100644
--- a/modules/statistics.views.inc
+++ b/modules/statistics.views.inc
@@ -32,14 +32,14 @@ function statistics_views_data() {
     'help' => t('The total number of times the node has been viewed.'),
 
     'field' => array(
-      'handler' => 'views_handler_field_numeric',
+      'id' => 'numeric',
       'click sortable' => TRUE,
      ),
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
+      'id' => 'numeric',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
@@ -49,14 +49,14 @@ function statistics_views_data() {
     'help' => t('The total number of times the node has been viewed today.'),
 
     'field' => array(
-      'handler' => 'views_handler_field_numeric',
+      'id' => 'numeric',
       'click sortable' => TRUE,
      ),
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
+      'id' => 'numeric',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
@@ -66,14 +66,14 @@ function statistics_views_data() {
     'help' => t('The most recent time the node has been viewed.'),
 
     'field' => array(
-      'handler' => 'views_handler_field_date',
+      'id' => 'date',
       'click sortable' => TRUE,
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_date',
+      'id' => 'date',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
@@ -104,19 +104,19 @@ function statistics_views_data() {
     'title' => t('Aid'),
     'help' => t('Unique access event ID.'),
     'field' => array(
-      'handler' => 'views_handler_field_numeric',
+      'id' => 'numeric',
       'click sortable' => TRUE,
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_numeric',
+      'id' => 'numeric',
       'name field' => 'wid',
       'numeric' => TRUE,
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
+      'id' => 'numeric',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
@@ -126,17 +126,17 @@ function statistics_views_data() {
     'help' => t('Browser session ID of user that visited page.'),
 
     'field' => array(
-      'handler' => 'views_handler_field',
+      'id' => 'standard',
       'click sortable' => TRUE,
      ),
      'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
      ),
      'argument' => array(
-       'handler' => 'views_handler_argument_string',
+       'id' => 'string',
      ),
      'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
      ),
   );
 
@@ -146,17 +146,17 @@ function statistics_views_data() {
     'help' => t('Title of page visited.'),
 
     'field' => array(
-      'handler' => 'views_handler_field_accesslog_path',
+      'id' => 'statistics_accesslog_path',
       'click sortable' => TRUE,
      ),
      'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
      ),
      'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
      ),
      'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'standard',
      ),
   );
 
@@ -166,14 +166,14 @@ function statistics_views_data() {
     'help' => t('Internal path to page visited (relative to Drupal root.)'),
 
     'field' => array(
-      'handler' => 'views_handler_field_accesslog_path',
+      'id' => 'statistics_accesslog_path',
       'click sortable' => TRUE,
      ),
      'filter' => array(
-       'handler' => 'views_handler_filter_string',
+       'id' => 'string',
      ),
      'sort' => array(
-       'handler' => 'views_handler_sort',
+       'id' => 'standard',
      ),
      //No argument here.  Can't send forward slashes as arguments.
      //Can be worked around by node ID.
@@ -185,14 +185,14 @@ function statistics_views_data() {
     'title' => t('Referrer'),
     'help' => t('Referrer URI.'),
     'field' => array(
-      'handler' => 'views_handler_field_url',
+      'id' => 'url',
       'click sortable' => TRUE,
      ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
@@ -201,17 +201,17 @@ function statistics_views_data() {
     'title' => t('Hostname'),
     'help' => t('Hostname of user that visited the page.'),
     'field' => array(
-      'handler' => 'views_handler_field',
+      'id' => 'standard',
       'click sortable' => TRUE,
      ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'string',
     ),
   );
 
@@ -220,7 +220,7 @@ function statistics_views_data() {
     'title' => t('User'),
     'help' => t('The user who visited the site.'),
     'relationship' => array(
-      'handler' => 'views_handler_relationship',
+      'id' => 'standard',
       'base' => 'users',
       'base field' => 'uid',
      ),
@@ -231,14 +231,14 @@ function statistics_views_data() {
     'title' => t('Timer'),
     'help' => t('Time in milliseconds that the page took to load.'),
     'field' => array(
-      'handler' => 'views_handler_field_numeric',
+      'id' => 'numeric',
       'click sortable' => TRUE,
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
+      'id' => 'numeric',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
@@ -247,14 +247,14 @@ function statistics_views_data() {
     'title' => t('Timestamp'),
     'help' => t('Timestamp of when the page was visited.'),
     'field' => array(
-      'handler' => 'views_handler_field_date',
+      'id' => 'date',
       'click sortable' => TRUE,
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_date',
+      'id' => 'date',
     ),
   );
 
diff --git a/modules/statistics.views_default.inc b/modules/statistics.views_default.inc
index 1afb499..55e82af 100644
--- a/modules/statistics.views_default.inc
+++ b/modules/statistics.views_default.inc
@@ -159,7 +159,7 @@ function statistics_views_default_views() {
   /* Display: Popular (block) */
   $handler = $view->new_display('block', 'Popular (block)', 'block');
   $handler->display->display_options['defaults']['style_plugin'] = FALSE;
-  $handler->display->display_options['style_plugin'] = 'list';
+  $handler->display->display_options['style_plugin'] = 'html_list';
   $handler->display->display_options['defaults']['style_options'] = FALSE;
   $handler->display->display_options['defaults']['row_plugin'] = FALSE;
   $handler->display->display_options['row_plugin'] = 'fields';
@@ -190,7 +190,7 @@ function statistics_views_default_views() {
   $handler->display->display_options['defaults']['link_display'] = FALSE;
   $handler->display->display_options['link_display'] = 'page_1';
   $handler->display->display_options['defaults']['style_plugin'] = FALSE;
-  $handler->display->display_options['style_plugin'] = 'list';
+  $handler->display->display_options['style_plugin'] = 'html_list';
   $handler->display->display_options['defaults']['style_options'] = FALSE;
   $handler->display->display_options['defaults']['row_plugin'] = FALSE;
   $handler->display->display_options['row_plugin'] = 'fields';
diff --git a/modules/system.views.inc b/modules/system.views.inc
index 243cbc7..a431df8 100644
--- a/modules/system.views.inc
+++ b/modules/system.views.inc
@@ -35,19 +35,19 @@ function system_views_data() {
     'title' => t('File ID'),
     'help' => t('The ID of the file.'),
     'field' => array(
-      'handler' => 'views_handler_field_file',
+      'id' => 'file',
       'click sortable' => TRUE,
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_file_fid',
+      'id' => 'file_fid',
       'name field' => 'filename', // the field to display in the summary.
       'numeric' => TRUE,
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
+      'id' => 'numeric',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
@@ -56,17 +56,17 @@ function system_views_data() {
     'title' => t('Name'),
     'help' => t('The name of the file.'),
     'field' => array(
-      'handler' => 'views_handler_field_file',
+      'id' => 'file',
       'click sortable' => TRUE,
      ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'string',
     ),
   );
 
@@ -75,17 +75,17 @@ function system_views_data() {
     'title' => t('Path'),
     'help' => t('The path of the file.'),
     'field' => array(
-      'handler' => 'views_handler_field_file_uri',
+      'id' => 'file_uri',
       'click sortable' => TRUE,
      ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'string',
     ),
   );
 
@@ -94,17 +94,17 @@ function system_views_data() {
     'title' => t('Mime type'),
     'help' => t('The mime type of the file.'),
     'field' => array(
-      'handler' => 'views_handler_field_file_filemime',
+      'id' => 'file_filemime',
       'click sortable' => TRUE,
      ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'string',
     ),
   );
 
@@ -114,7 +114,7 @@ function system_views_data() {
     'help' => t('The extension of the file.'),
     'real field' => 'filename',
     'field' => array(
-      'handler' => 'views_handler_field_file_extension',
+      'id' => 'field_file_extension',
       'click sortable' => FALSE,
      ),
   );
@@ -124,14 +124,14 @@ function system_views_data() {
     'title' => t('Size'),
     'help' => t('The size of the file.'),
     'field' => array(
-      'handler' => 'views_handler_field_file_size',
+      'id' => 'field_file_size',
       'click sortable' => TRUE,
      ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
+      'id' => 'numeric',
     ),
   );
 
@@ -140,14 +140,14 @@ function system_views_data() {
     'title' => t('Status'),
     'help' => t('The status of the file.'),
     'field' => array(
-      'handler' => 'views_handler_field_file_status',
+      'id' => 'field_file_status',
       'click sortable' => TRUE,
      ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_file_status',
+      'id' => 'filter_file_status',
     ),
   );
 
@@ -156,14 +156,14 @@ function system_views_data() {
     'title' => t('Upload date'),
     'help' => t('The date the file was uploaded.'),
     'field' => array(
-      'handler' => 'views_handler_field_date',
+      'id' => 'date',
       'click sortable' => TRUE,
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort_date',
+      'id' => 'date'
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_date',
+      'id' => 'date',
     ),
   );
 
@@ -391,65 +391,65 @@ function system_views_data() {
     'title' => t('Module'),
     'help' => t('The module managing this file relationship.'),
     'field' => array(
-      'handler' => 'views_handler_field',
+      'id' => 'standard',
       'click sortable' => TRUE,
      ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'string',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
   $data['file_usage']['type'] = array(
     'title' => t('Entity type'),
     'help' => t('The type of entity that is related to the file.'),
     'field' => array(
-      'handler' => 'views_handler_field',
+      'id' => 'standard',
       'click sortable' => TRUE,
      ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'string',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
   $data['file_usage']['id'] = array(
     'title' => t('Entity ID'),
     'help' => t('The ID of the entity that is related to the file.'),
     'field' => array(
-      'handler' => 'views_handler_field_numeric',
+      'id' => 'numeric',
       'click sortable' => TRUE,
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_numeric',
+      'id' => 'numeric',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
+      'id' => 'numeric',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
   $data['file_usage']['count'] = array(
     'title' => t('Use count'),
     'help' => t('The number of times the file is used by this entity.'),
     'field' => array(
-      'handler' => 'views_handler_field_numeric',
+      'id' => 'numeric',
       'click sortable' => TRUE,
      ),
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
+      'id' => 'numeric',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
@@ -470,18 +470,18 @@ function system_views_data() {
     'title' => t('Module/Theme/Theme engine filename'),
     'help' => t('The path of the primary file for this item, relative to the Drupal root; e.g. modules/node/node.module.'),
     'field' => array(
-      'handler' => 'views_handler_field',
+      'id' => 'standard',
       'click sortable' => TRUE,
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'string',
       'name field' => 'filename', // the field to display in the summary.
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
   // - name
@@ -489,18 +489,18 @@ function system_views_data() {
     'title' => t('Module/Theme/Theme engine name'),
     'help' => t('The name of the item; e.g. node.'),
     'field' => array(
-      'handler' => 'views_handler_field',
+      'id' => 'standard',
       'click sortable' => TRUE,
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'string',
       'name field' => 'name', // the field to display in the summary.
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
   // - type
@@ -508,18 +508,18 @@ function system_views_data() {
     'title' => t('Type'),
     'help' => t('The type of the item, either module, theme, or theme_engine.'),
     'field' => array(
-      'handler' => 'views_handler_field',
+      'id' => 'standard',
       'click sortable' => TRUE,
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'string',
       'name field' => 'type', // the field to display in the summary.
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_system_type',
+      'id' => 'filter_system_type',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
   // - status
@@ -527,18 +527,18 @@ function system_views_data() {
     'title' => t('Status'),
     'help' => t('Boolean indicating whether or not this item is enabled.'),
     'field' => array(
-      'handler' => 'views_handler_field_boolean',
+      'id' => 'boolean',
       'click sortable' => TRUE,
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_numeric',
+      'id' => 'numeric',
       'name field' => 'status', // the field to display in the summary.
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_boolean_operator',
+      'id' => 'boolean',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
   // - schema version
@@ -546,18 +546,18 @@ function system_views_data() {
     'title' => t('Schema version'),
     'help' => t("The module's database schema version number. -1 if the module is not installed (its tables do not exist); 0 or the largest N of the module's hook_update_N() function that has either been run or existed when the module was first installed."),
     'field' => array(
-      'handler' => 'views_handler_field_numeric',
+      'id' => 'numeric',
       'click sortable' => TRUE,
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_numeric',
+      'id' => 'numeric',
       'name field' => 'schema_version', // the field to display in the summary.
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
+      'id' => 'numeric',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
diff --git a/modules/taxonomy.views.inc b/modules/taxonomy.views.inc
index 58d62d1..7134e94 100644
--- a/modules/taxonomy.views.inc
+++ b/modules/taxonomy.views.inc
@@ -40,11 +40,11 @@ function taxonomy_views_data() {
     'title' => t('Name'), // The item it appears as on the UI,
     'field' => array(
       'help' => t('Name of the vocabulary a term is a member of. This will be the vocabulary that whichever term the "Taxonomy: Term" field is; and can similarly cause duplicates.'),
-      'handler' => 'views_handler_field',
+      'id' => 'standard',
       'click sortable' => TRUE,
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
       'help' => t('The taxonomy vocabulary name'),
     ),
   );
@@ -52,56 +52,56 @@ function taxonomy_views_data() {
     'title' => t('Machine name'), // The item it appears as on the UI,
     'field' => array(
       'help' => t('Machine-Name of the vocabulary a term is a member of. This will be the vocabulary that whichever term the "Taxonomy: Term" field is; and can similarly cause duplicates.'),
-      'handler' => 'views_handler_field',
+      'id' => 'standard',
       'click sortable' => TRUE,
     ),
     'filter' => array(
       'help' => t('Filter the results of "Taxonomy: Term" to a particular vocabulary.'),
-      'handler' => 'views_handler_filter_vocabulary_machine_name',
+      'id' => 'vocabulary_machine_name',
     ),
     'argument' => array(
       'help' => t('Filter the results of "Taxonomy: Term" to a particular vocabulary.'),
-      'handler' => 'views_handler_argument_vocabulary_machine_name',
+      'id' => 'vocabulary_machine_name',
     ),
   );
   $data['taxonomy_vocabulary']['vid'] = array(
     'title' => t('Vocabulary ID'), // The item it appears as on the UI,
     'help' => t('The taxonomy vocabulary ID'),
     'field' => array(
-      'handler' => 'views_handler_field_numeric',
+      'id' => 'numeric',
       'click sortable' => TRUE,
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_vocabulary_vid',
+      'id' => 'vocabulary_vid',
       'name field' => 'name',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
   $data['taxonomy_vocabulary']['description'] = array(
     'title' => t('Description'), // The item it appears as on the UI,
     'help' => t('The taxonomy vocabulary description'),
     'field' => array(
-      'handler' => 'views_handler_field',
+      'id' => 'standard',
     ),
   );
   $data['taxonomy_vocabulary']['weight'] = array(
     'title' => t('Weight'),
     'help' => t('The taxonomy vocabulary weight'),
     'field' => array(
-      'handler' => 'views_handler_field_numeric',
+      'id' => 'numeric',
       'click sortable' => TRUE,
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_numeric',
+      'id' => 'numeric',
       'name field' => 'weight',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
+      'id' => 'numeric',
     ),
   );
 
@@ -146,21 +146,21 @@ function taxonomy_views_data() {
     'title' => t('Term ID'),
     'help' => t('The tid of a taxonomy term.'),
     'field' => array(
-      'handler' => 'views_handler_field_numeric',
+      'id' => 'numeric',
       'click sortable' => TRUE,
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_taxonomy',
+      'id' => 'taxonomy',
       'name field' => 'name',
       'zero is null' => TRUE,
     ),
     'filter' => array(
       'title' => t('Term'),
       'help' => t('Taxonomy term chosen from autocomplete or select widget.'),
-      'handler' => 'views_handler_filter_term_node_tid',
+      'id' => 'taxonomy_index_tid',
       'hierarchy table' => 'taxonomy_term_hierarchy',
       'numeric' => TRUE,
     ),
@@ -172,7 +172,7 @@ function taxonomy_views_data() {
     'help' => t('The tid of a taxonomy term.'),
     'real field' => 'tid',
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
+      'id' => 'numeric',
       'allow empty' => TRUE,
     ),
   );
@@ -182,7 +182,7 @@ function taxonomy_views_data() {
       'title' => t('Representative node'),
       'label'  => t('Representative node'),
       'help' => t('Obtains a single representative node for each term, according to a chosen sort criterion.'),
-      'handler' => 'views_handler_relationship_groupwise_max',
+      'id' => 'groupwise_max',
       'relationship field' => 'tid',
       'outer field' => 'taxonomy_term_data.tid',
       'argument table' => 'taxonomy_term_data',
@@ -197,18 +197,18 @@ function taxonomy_views_data() {
     'title' => t('Name'),
     'help' => t('The taxonomy term name.'),
     'field' => array(
-      'handler' => 'views_handler_field_taxonomy',
+      'id' => 'taxonomy',
       'click sortable' => TRUE,
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
       'help' => t('Taxonomy term name.'),
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'string',
       'help' => t('Taxonomy term name.'),
       'many to one' => TRUE,
       'empty field name' => t('Uncategorized'),
@@ -220,17 +220,17 @@ function taxonomy_views_data() {
     'title' => t('Weight'),
     'help' => t('The term weight field'),
     'field' => array(
-      'handler' => 'views_handler_field_numeric',
+      'id' => 'numeric',
       'click sortable' => TRUE,
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
+      'id' => 'numeric',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_numeric',
+      'id' => 'numeric',
     ),
   );
 
@@ -239,11 +239,11 @@ function taxonomy_views_data() {
     'title' => t('Term description'),
     'help' => t('The description associated with a taxonomy term.'),
     'field' => array(
-      'handler' => 'views_handler_field_markup',
+      'id' => 'markup',
       'format' => array('field' => 'format'),
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
   );
 
@@ -252,7 +252,7 @@ function taxonomy_views_data() {
     'title' => t('Vocabulary'),
     'help' => t('Filter the results of "Taxonomy: Term" to a particular vocabulary.'),
     'filter' => array(
-      'handler' => 'views_handler_filter_vocabulary_vid',
+      'id' => 'vocabulary_vid',
     ),
   );
 
@@ -261,7 +261,7 @@ function taxonomy_views_data() {
     'field' => array(
       'title' => t('Term edit link'),
       'help' => t('Provide a simple link to edit the term.'),
-      'handler' => 'views_handler_field_term_link_edit',
+      'id' => 'term_link_edit',
     ),
   );
 
@@ -292,7 +292,7 @@ function taxonomy_views_data() {
     'title' => t('Content with term'),
     'help' => t('Relate all content tagged with a term.'),
     'relationship' => array(
-      'handler' => 'views_handler_relationship',
+      'id' => 'standard',
       'base' => 'node',
       'base field' => 'nid',
       'label' => t('node'),
@@ -308,7 +308,7 @@ function taxonomy_views_data() {
     'title' => t('Has taxonomy term ID'),
     'help' => t('Display content if it has the selected taxonomy terms.'),
     'argument' => array(
-      'handler' => 'views_handler_argument_term_node_tid',
+      'id' => 'taxonomy_index_tid',
       'name table' => 'taxonomy_term_data',
       'name field' => 'name',
       'empty field name' => t('Uncategorized'),
@@ -317,7 +317,7 @@ function taxonomy_views_data() {
     ),
     'filter' => array(
       'title' => t('Has taxonomy term'),
-      'handler' => 'views_handler_filter_term_node_tid',
+      'id' => 'taxonomy_index_tid',
       'hierarchy table' => 'taxonomy_term_hierarchy',
       'numeric' => TRUE,
       'skip base' => 'taxonomy_term_data',
@@ -366,7 +366,7 @@ function taxonomy_views_data() {
     ),
     'argument' => array(
       'help' => t('The parent term of the term.'),
-      'handler' => 'views_handler_argument_taxonomy',
+      'id' => 'taxonomy',
     ),
   );
 
@@ -381,14 +381,14 @@ function taxonomy_views_data_alter(&$data) {
     'title' => t('Taxonomy terms on node'),
     'help' => t('Relate nodes to taxonomy terms, specifiying which vocabulary or vocabularies to use. This relationship will cause duplicated records if there are multiple terms.'),
     'relationship' => array(
-      'handler' => 'views_handler_relationship_node_term_data',
+      'id' => 'node_term_data',
       'label' => t('term'),
       'base' => 'taxonomy_term_data',
     ),
     'field' => array(
       'title' => t('All taxonomy terms'),
       'help' => t('Display all taxonomy terms associated with a node from specified vocabularies.'),
-      'handler' => 'views_handler_field_term_node_tid',
+      'id' => 'taxonomy_index_tid',
       'no group by' => TRUE,
     ),
   );
@@ -398,12 +398,12 @@ function taxonomy_views_data_alter(&$data) {
     'real field' => 'nid',
     'argument' => array(
       'title' => t('Has taxonomy term ID (with depth)'),
-      'handler' => 'views_handler_argument_term_node_tid_depth',
+      'id' => 'taxonomy_index_tid_depth',
       'accept depth modifier' => TRUE,
     ),
     'filter' => array(
       'title' => t('Has taxonomy terms (with depth)'),
-      'handler' => 'views_handler_filter_term_node_tid_depth',
+      'id' => 'taxonomy_index_tid_depth',
     ),
   );
 
@@ -411,7 +411,7 @@ function taxonomy_views_data_alter(&$data) {
     'title' => t('Has taxonomy term ID depth modifier'),
     'help' => t('Allows the "depth" for Taxonomy: Term ID (with depth) to be modified via an additional contextual filter value.'),
     'argument' => array(
-      'handler' => 'views_handler_argument_term_node_tid_depth_modifier',
+      'id' => 'taxonomy_index_tid_depth_modifier',
     ),
   );
 }
@@ -429,14 +429,14 @@ function taxonomy_field_views_data($field) {
   foreach ($data as $table_name => $table_data) {
     foreach ($table_data as $field_name => $field_data) {
       if (isset($field_data['filter']) && $field_name != 'delta') {
-        $data[$table_name][$field_name]['filter']['handler'] = 'views_handler_filter_term_node_tid';
+        $data[$table_name][$field_name]['filter']['id'] = 'taxonomy_index_tid';
         $data[$table_name][$field_name]['filter']['vocabulary'] = $field['settings']['allowed_values'][0]['vocabulary'];
       }
     }
 
     // Add the relationship only on the tid field.
     $data[$table_name][$field['field_name'] . '_tid']['relationship'] = array(
-      'handler' => 'views_handler_relationship',
+      'id' => 'standard',
       'base' => 'taxonomy_term_data',
       'base field' => 'tid',
       'label' => t('term from !field_name', array('!field_name' => $field['field_name'])),
@@ -466,7 +466,7 @@ function taxonomy_field_views_data_views_data_alter(&$data, $field) {
     $data['taxonomy_term_data'][$pseudo_field_name]['relationship'] = array(
       'title' => t('@entity using @field', array('@entity' => $entity, '@field' => $label)),
       'help' => t('Relate each @entity with a @field set to the term.', array('@entity' => $entity, '@field' => $label)),
-      'handler' => 'views_handler_relationship_entity_reverse',
+      'id' => 'entity_reverse',
       'field_name' => $field['field_name'],
       'field table' => _field_sql_storage_tablename($field),
       'field field' => $field['field_name'] . '_tid',
@@ -489,30 +489,6 @@ function taxonomy_field_views_data_views_data_alter(&$data, $field) {
 }
 
 /**
- * Implements hook_views_plugins().
- */
-function taxonomy_views_plugins() {
-  return array(
-    'module' => 'views', // This just tells our themes are elsewhere.
-    'argument validator' => array(
-      'taxonomy_term' => array(
-        'title' => t('Taxonomy term'),
-        'handler' => 'views_plugin_argument_validate_taxonomy_term',
-        'path' => drupal_get_path('module', 'views') . '/modules/taxonomy', // not necessary for most modules
-      ),
-    ),
-    'argument default' => array(
-      'taxonomy_tid' => array(
-        'title' => t('Taxonomy term ID from URL'),
-        'handler' => 'views_plugin_argument_default_taxonomy_tid',
-        'path' => drupal_get_path('module', 'views') . '/modules/taxonomy',
-        'parent' => 'fixed',
-      ),
-    ),
-  );
-}
-
-/**
  * Helper function to set a breadcrumb for taxonomy.
  */
 function views_taxonomy_set_breadcrumb(&$breadcrumb, &$argument) {
diff --git a/modules/translation.views.inc b/modules/translation.views.inc
index b36c7a7..7f28fa5 100644
--- a/modules/translation.views.inc
+++ b/modules/translation.views.inc
@@ -26,27 +26,27 @@ function translation_views_data_alter(&$data) {
     'title' => t('Translation set node ID'),
     'help' => t('The ID of the translation set the content belongs to.'),
     'field' => array(
-      'handler' => 'views_handler_field_node',
+      'id' => 'node',
       'click sortable' => TRUE,
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
+      'id' => 'numeric',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_node_tnid',
+      'id' => 'node_tnid',
       'name field' => 'title', // the field to display in the summary.
       'numeric' => TRUE,
       'validate type' => 'tnid',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'relationship' => array(
       'title' => t('Source translation'),
       'help' => t('The source that this content was translated from.'),
       'base' => 'node',
       'base field' => 'nid',
-      'handler' => 'views_handler_relationship',
+      'id' => 'standard',
       'label' => t('Source translation'),
     ),
   );
@@ -63,7 +63,7 @@ function translation_views_data_alter(&$data) {
       'base field' => 'tnid',
       'relationship table' => 'node',
       'relationship field' => 'nid',
-      'handler' => 'views_handler_relationship_translation',
+      'id' => 'translation',
       'label' => t('Translations'),
     ),
   );
@@ -74,7 +74,7 @@ function translation_views_data_alter(&$data) {
     'title' => t('Source translation'),
     'help' => t('Content that is either untranslated or is the original version of a translation set.'),
     'filter' => array(
-      'handler' => 'views_handler_filter_node_tnid',
+      'id' => 'node_tnid',
     ),
   );
 
@@ -84,7 +84,7 @@ function translation_views_data_alter(&$data) {
     'title' => t('Child translation'),
     'help' => t('Content that is a translation of a source translation.'),
     'filter' => array(
-      'handler' => 'views_handler_filter_node_tnid_child',
+      'id' => 'node_tnid_child',
     ),
   );
 
@@ -94,16 +94,16 @@ function translation_views_data_alter(&$data) {
     'title' => t('Translation status'),
     'help' => t('The translation status of the content - whether or not the translation needs to be updated.'),
     'field' => array(
-      'handler' => 'views_handler_field_boolean',
+      'id' => 'boolean',
       'click sortable' => TRUE,
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_boolean_operator',
+      'id' => 'boolean',
       'label' => t('Outdated'),
       'type' => 'yes-no',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
@@ -113,7 +113,7 @@ function translation_views_data_alter(&$data) {
     'title' => t('Translate link'),
     'help' => t('Provide a simple link to translate the node.'),
     'field' => array(
-      'handler' => 'views_handler_field_node_link_translate',
+      'id' => 'node_link_translate',
     ),
   );
 
diff --git a/modules/user.views.inc b/modules/user.views.inc
index b492cf4..38b2fcb 100644
--- a/modules/user.views.inc
+++ b/modules/user.views.inc
@@ -47,24 +47,24 @@ function user_views_data() {
     'title' => t('Uid'),
     'help' => t('The user ID'), // The help that appears on the UI,
     'field' => array(
-      'handler' => 'views_handler_field_user',
+      'id' => 'user',
       'click sortable' => TRUE,
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_user_uid',
+      'id' => 'user_uid',
       'name field' => 'name', // display this field in the summary
     ),
     'filter' => array(
       'title' => t('Name'),
-      'handler' => 'views_handler_filter_user_name',
+      'id' => 'user_name',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'relationship' => array(
       'title' => t('Content authored'),
       'help' => t('Relate content to the user who created it. This relationship will create one record for each content item created by the user.'),
-      'handler' => 'views_handler_relationship',
+      'id' => 'standard',
       'base' => 'node',
       'base field' => 'uid',
       'field' => 'uid',
@@ -78,7 +78,7 @@ function user_views_data() {
     'real field' => 'uid',
     'filter' => array(
       'title' => t('The user ID'),
-      'handler' => 'views_handler_filter_numeric',
+      'id' => 'numeric',
     ),
   );
 
@@ -88,7 +88,7 @@ function user_views_data() {
       'title' => t('Representative node'),
       'label'  => t('Representative node'),
       'help' => t('Obtains a single representative node for each user, according to a chosen sort criterion.'),
-      'handler' => 'views_handler_relationship_groupwise_max',
+      'id' => 'groupwise_max',
       'relationship field' => 'uid',
       'outer field' => 'users.uid',
       'argument table' => 'users',
@@ -104,7 +104,7 @@ function user_views_data() {
     'title' => t('Current'),
     'help' => t('Filter the view to the currently logged in user.'),
     'filter' => array(
-      'handler' => 'views_handler_filter_user_current',
+      'id' => 'user_current',
       'type' => 'yes-no',
     ),
   );
@@ -114,17 +114,17 @@ function user_views_data() {
     'title' => t('Name'), // The item it appears as on the UI,
     'help' => t('The user or author name.'), // The help that appears on the UI,
     'field' => array(
-      'handler' => 'views_handler_field_user_name',
+      'id' => 'user_name',
       'click sortable' => TRUE,
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'string',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
       'title' => t('Name (raw)'),
       'help' => t('The user or author name. This filter does not check if the user exists and allows partial matching. Does not utilize autocomplete.')
     ),
@@ -136,17 +136,17 @@ function user_views_data() {
     'title' => t('E-mail'), // The item it appears as on the UI,
     'help' => t('Email address for a given user. This field is normally not shown to users, so be cautious when using it.'), // The help that appears on the UI,
     'field' => array(
-      'handler' => 'views_handler_field_user_mail',
+      'id' => 'user_mail',
       'click sortable' => TRUE,
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'string',
     ),
   );
 
@@ -155,17 +155,17 @@ function user_views_data() {
     'title' => t('Language'), // The item it appears as on the UI,
     'help' => t('Language of the user'),
     'field' => array(
-      'handler' => 'views_handler_field_user_language',
+      'id' => 'user_language',
       'click sortable' => TRUE,
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_node_language',
+      'id' => 'node_language',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_node_language',
+      'id' => 'node_language',
     ),
   );
 
@@ -176,14 +176,14 @@ function user_views_data() {
     'help' => t("The user's picture, if allowed."), // The help that appears on the UI,
     // Information for displaying the uid
     'field' => array(
-      'handler' => 'views_handler_field_user_picture',
+      'id' => 'user_picture',
       'click sortable' => TRUE,
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_boolean_operator',
+      'id' => 'boolean',
       'label' => t('Has Avatar'),
       'type' => 'yes-no',
     ),
@@ -194,7 +194,7 @@ function user_views_data() {
     'field' => array(
       'title' => t('Link'),
       'help' => t('Provide a simple link to the user.'),
-      'handler' => 'views_handler_field_user_link',
+      'id' => 'user_link',
     ),
   );
 
@@ -203,14 +203,14 @@ function user_views_data() {
     'title' => t('Created date'), // The item it appears as on the UI,
     'help' => t('The date the user was created.'), // The help that appears on the UI,
     'field' => array(
-      'handler' => 'views_handler_field_date',
+      'id' => 'date',
       'click sortable' => TRUE,
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort_date',
+      'id' => 'date'
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_date',
+      'id' => 'date',
     ),
   );
 
@@ -219,7 +219,7 @@ function user_views_data() {
     'help' => t('Date in the form of CCYYMMDD.'),
     'argument' => array(
       'field' => 'created',
-      'handler' => 'views_handler_argument_node_created_fulldate',
+      'id' => 'node_created_fulldate',
     ),
   );
 
@@ -228,7 +228,7 @@ function user_views_data() {
     'help' => t('Date in the form of YYYYMM.'),
     'argument' => array(
       'field' => 'created',
-      'handler' => 'views_handler_argument_node_created_year_month',
+      'id' => 'node_created_year_month',
     ),
   );
 
@@ -238,7 +238,7 @@ function user_views_data() {
     'help' => t('Date in the form of YYYY.'),
     'argument' => array(
       'field' => 'created',
-      'handler' => 'views_handler_argument_node_created_year',
+      'id' => 'node_created_year',
     ),
   );
 
@@ -247,7 +247,7 @@ function user_views_data() {
     'help' => t('Date in the form of MM (01 - 12).'),
     'argument' => array(
       'field' => 'created',
-      'handler' => 'views_handler_argument_node_created_month',
+      'id' => 'node_created_month',
     ),
   );
 
@@ -256,7 +256,7 @@ function user_views_data() {
     'help' => t('Date in the form of DD (01 - 31).'),
     'argument' => array(
       'field' => 'created',
-      'handler' => 'views_handler_argument_node_created_day',
+      'id' => 'node_created_day',
     ),
   );
 
@@ -265,7 +265,7 @@ function user_views_data() {
     'help' => t('Date in the form of WW (01 - 53).'),
     'argument' => array(
       'field' => 'created',
-      'handler' => 'views_handler_argument_node_created_week',
+      'id' => 'node_created_week',
     ),
   );
 
@@ -274,14 +274,14 @@ function user_views_data() {
     'title' => t('Last access'), // The item it appears as on the UI,
     'help' => t("The user's last access date."), // The help that appears on the UI,
     'field' => array(
-      'handler' => 'views_handler_field_date',
+      'id' => 'date',
       'click sortable' => TRUE,
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort_date',
+      'id' => 'date'
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_date',
+      'id' => 'date',
     ),
   );
 
@@ -290,14 +290,14 @@ function user_views_data() {
     'title' => t('Last login'), // The item it appears as on the UI,
     'help' => t("The user's last login date."), // The help that appears on the UI,
     'field' => array(
-      'handler' => 'views_handler_field_date',
+      'id' => 'date',
       'click sortable' => TRUE,
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort_date',
+      'id' => 'date'
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_date',
+      'id' => 'date',
     ),
   );
 
@@ -307,19 +307,19 @@ function user_views_data() {
     'help' => t('Whether a user is active or blocked.'), // The help that appears on the UI,
      // Information for displaying a title as a field
     'field' => array(
-      'handler' => 'views_handler_field_boolean',
+      'id' => 'boolean',
       'click sortable' => TRUE,
       'output formats' => array(
         'active-blocked' => array(t('Active'), t('Blocked')),
       ),
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_boolean_operator',
+      'id' => 'boolean',
       'label' => t('Active'),
       'type' => 'yes-no',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
@@ -329,11 +329,11 @@ function user_views_data() {
     'help' => t("The user's signature."), // The help that appears on the UI,
      // Information for displaying a title as a field
     'field' => array(
-      'handler' => 'views_handler_field_markup',
+      'id' => 'markup',
       'format' => filter_fallback_format(),
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
   );
 
@@ -341,7 +341,7 @@ function user_views_data() {
     'field' => array(
       'title' => t('Edit link'),
       'help' => t('Provide a simple link to edit the user.'),
-      'handler' => 'views_handler_field_user_link_edit',
+      'id' => 'user_link_edit',
     ),
   );
 
@@ -349,7 +349,7 @@ function user_views_data() {
     'field' => array(
       'title' => t('Cancel link'),
       'help' => t('Provide a simple link to cancel the user.'),
-      'handler' => 'views_handler_field_user_link_cancel',
+      'id' => 'user_link_cancel',
     ),
   );
 
@@ -357,7 +357,7 @@ function user_views_data() {
     'title' => t('Data'),
     'help' => t('Provide serialized data of the user'),
     'field' => array(
-      'handler' => 'views_handler_field_serialized',
+      'id' => 'serialized',
     ),
   );
 
@@ -390,15 +390,15 @@ function user_views_data() {
     'title' => t('Roles'),
     'help' => t('Roles that a user belongs to.'),
     'field' => array(
-      'handler' => 'views_handler_field_user_roles',
+      'id' => 'user_roles',
       'no group by' => TRUE,
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_user_roles',
+      'id' => 'user_roles',
       'allow empty' => TRUE,
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_users_roles_rid',
+      'id' => 'users_roles_rid',
       'name table' => 'role',
       'name field' => 'name',
       'empty field name' => t('No role'),
@@ -450,11 +450,11 @@ function user_views_data() {
     'title' => t('Permission'),
     'help' => t('The user permissions.'),
     'field' => array(
-      'handler' => 'views_handler_field_user_permissions',
+      'id' => 'user_permissions',
       'no group by' => TRUE,
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_user_permissions',
+      'id' => 'user_permissions',
     ),
   );
 
@@ -485,14 +485,14 @@ function user_views_data() {
     'title' => t('Authmap ID'),
     'help' => t('The Authmap ID.'),
     'field' => array(
-      'handler' => 'views_handler_field_numeric',
+      'id' => 'numeric',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
+      'id' => 'numeric',
       'numeric' => TRUE,
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_numeric',
+      'id' => 'numeric',
       'numeric' => TRUE,
     ),
   );
@@ -500,26 +500,26 @@ function user_views_data() {
     'title' => t('Authentication name'),
     'help' => t('The unique authentication name.'),
     'field' => array(
-      'handler' => 'views_handler_field',
+      'id' => 'standard',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'numeric',
     ),
   );
   $data['authmap']['module'] = array(
     'title' => t('Authentication module'),
     'help' => t('The name of the module managing the authentication entry.'),
     'field' => array(
-      'handler' => 'views_handler_field',
+      'id' => 'standard',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'string',
     ),
   );
 
@@ -527,45 +527,6 @@ function user_views_data() {
 }
 
 /**
- * Implements hook_views_plugins().
- */
-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'),
-        'handler' => 'views_plugin_argument_default_user',
-        'path' => drupal_get_path('module', 'views') . '/modules/user', // not necessary for most modules
-      ),
-      'current_user' => array(
-        'title' => t('User ID from logged in user'),
-        'handler' => 'views_plugin_argument_default_current_user',
-        'path' => drupal_get_path('module', 'views') . '/modules/user', // not necessary for most modules
-      ),
-    ),
-    'argument validator' => array(
-      'user' => array(
-        'title' => t('User'),
-        'handler' => 'views_plugin_argument_validate_user',
-        'path' => drupal_get_path('module', 'views') . '/modules/user', // not necessary for most modules
-      ),
-    ),
-  );
-}
-
-/**
  * Allow replacement of current userid so we can cache these queries
  */
 function user_views_query_substitutions($view) {
diff --git a/modules/user/views_plugin_argument_default_current_user.inc b/modules/user/views_plugin_argument_default_current_user.inc
deleted file mode 100644
index e11c702..0000000
--- a/modules/user/views_plugin_argument_default_current_user.inc
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains the current user argument default plugin.
- */
-
-/**
- * Default argument plugin to extract the global $user
- *
- * This plugin actually has no options so it odes not need to do a great deal.
- */
-class views_plugin_argument_default_current_user extends views_plugin_argument_default {
-  function get_argument() {
-    global $user;
-    return $user->uid;
-  }
-}
diff --git a/modules/views.views.inc b/modules/views.views.inc
index 2029aa8..c8f94c2 100644
--- a/modules/views.views.inc
+++ b/modules/views.views.inc
@@ -10,26 +10,26 @@
 /**
  * Implements hook_views_data().
  */
-function views_views_data() {
-  $data['views']['table']['group'] = t('Global');
-  $data['views']['table']['join'] = array(
-    // #global is a special flag which let's a table appear all the time.
+    function views_views_data() {
+    $data['views']['table']['group'] = t('Global');
+    $data['views']['table']['join'] = array(
+      // #global is a special flag which let's a table appear all the time.
     '#global' => array(),
-  );
+    );
 
-  $data['views']['random'] = array(
+    $data['views']['random'] = array(
     'title' => t('Random'),
     'help' => t('Randomize the display order.'),
     'sort' => array(
-      'handler' => 'views_handler_sort_random',
-    ),
-  );
+      'id' => 'random',
+      ),
+    );
 
   $data['views']['null'] = array(
     'title' => t('Null'),
     'help' => t('Allow a contextual filter value to be ignored. The query will not be altered by this contextual filter value. Can be used when contextual filter values come from the URL, and a part of the URL needs to be ignored.'),
     'argument' => array(
-      'handler' => 'views_handler_argument_null',
+      'id' => 'null',
     ),
   );
 
@@ -37,7 +37,7 @@ function views_views_data() {
     'title' => t('Custom text'),
     'help' => t('Provide custom text or link.'),
     'field' => array(
-      'handler' => 'views_handler_field_custom',
+      'id' => 'custom',
     ),
   );
 
@@ -45,7 +45,7 @@ function views_views_data() {
     'title' => t('View result counter'),
     'help' => t('Displays the actual position of the view result'),
     'field' => array(
-      'handler' => 'views_handler_field_counter',
+      'id' => 'counter',
     ),
   );
 
@@ -53,7 +53,7 @@ function views_views_data() {
     'title' => t('Text area'),
     'help' => t('Provide markup text for the area.'),
     'area' => array(
-      'handler' => 'views_handler_area_text',
+      'id' => 'text',
     ),
   );
 
@@ -61,7 +61,7 @@ function views_views_data() {
     'title' => t('Unfiltered text'),
     'help' => t('Add unrestricted, custom text or markup. This is similar to the custom text field.'),
     'area' => array(
-      'handler' => 'views_handler_area_text_custom',
+      'id' => 'text_custom',
     ),
   );
 
@@ -69,7 +69,7 @@ function views_views_data() {
     'title' => t('View area'),
     'help' => t('Insert a view inside an area.'),
     'area' => array(
-      'handler' => 'views_handler_area_view',
+      'id' => 'view',
     ),
   );
 
@@ -77,7 +77,7 @@ function views_views_data() {
     'title' => t('Result summary'),
     'help' => t('Shows result summary, for example the items per page.'),
     'area' => array(
-      'handler' => 'views_handler_area_result',
+      'id' => 'result',
     ),
   );
 
@@ -86,7 +86,7 @@ function views_views_data() {
       'title' => t('Contextual Links'),
       'help' => t('Display fields in a contextual links menu.'),
       'field' => array(
-        'handler' => 'views_handler_field_contextual_links',
+        'id' => 'contextual_links',
       ),
     );
   }
@@ -95,7 +95,7 @@ function views_views_data() {
    'title' => t('Combine fields filter'),
     'help' => t('Combine two fields together and search by them.'),
     'filter' => array(
-      'handler' => 'views_handler_filter_combine',
+      'id' => 'combine',
     ),
   );
 
@@ -104,7 +104,7 @@ function views_views_data() {
       'title' => t('Math expression'),
       'help' => t('Evaluates a mathematical expression and displays it.'),
       'field' => array(
-        'handler' => 'views_handler_field_math',
+        'id' => 'math',
         'float' => TRUE,
       ),
     );
diff --git a/plugins/views_plugin_access_none.inc b/plugins/views_plugin_access_none.inc
deleted file mode 100644
index d69fe8e..0000000
--- a/plugins/views_plugin_access_none.inc
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-
-/**
- * @file
- * Definition of views_plugin_access_none.
- */
-
-/**
- * Access plugin that provides no access control at all.
- *
- * @ingroup views_access_plugins
- */
-class views_plugin_access_none extends views_plugin_access {
-  function summary_title() {
-    return t('Unrestricted');
-  }
-}
diff --git a/plugins/views_plugin_argument_validate_numeric.inc b/plugins/views_plugin_argument_validate_numeric.inc
deleted file mode 100644
index 049531b..0000000
--- a/plugins/views_plugin_argument_validate_numeric.inc
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains the numeric argument validator plugin.
- */
-
-/**
- * Validate whether an argument is numeric or not.
- *
- * @ingroup views_argument_validate_plugins
- */
-class views_plugin_argument_validate_numeric extends views_plugin_argument_validate {
-  function validate_argument($argument) {
-    return is_numeric($argument);
-  }
-}
diff --git a/plugins/views_plugin_cache_none.inc b/plugins/views_plugin_cache_none.inc
deleted file mode 100644
index 9927a9d..0000000
--- a/plugins/views_plugin_cache_none.inc
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-/**
- * @file
- * Definition of views_plugin_cache_none.
- */
-
-/**
- * Caching plugin that provides no caching at all.
- *
- * @ingroup views_cache_plugins
- */
-class views_plugin_cache_none extends views_plugin_cache {
-  function cache_start() { /* do nothing */ }
-
-  function summary_title() {
-    return t('None');
-  }
-
-  function cache_get($type) {
-    return FALSE;
-  }
-
-  function cache_set($type) { }
-}
diff --git a/plugins/views_plugin_display_embed.inc b/plugins/views_plugin_display_embed.inc
deleted file mode 100644
index 8b25cf9..0000000
--- a/plugins/views_plugin_display_embed.inc
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * @file
- * Contains the embed display plugin.
- */
-
-/**
- * The plugin that handles an embed display.
- *
- * @ingroup views_display_plugins
- */
-class views_plugin_display_embed extends views_plugin_display {
-  // This display plugin does nothing apart from exist.
-}
diff --git a/plugins/views_plugin_exposed_form_basic.inc b/plugins/views_plugin_exposed_form_basic.inc
deleted file mode 100644
index 73ae54a..0000000
--- a/plugins/views_plugin_exposed_form_basic.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-
-/**
- * @file
- * Definition of views_plugin_exposed_form_basic.
- */
-
-/**
- * Exposed form plugin that provides a basic exposed form.
- *
- * @ingroup views_exposed_form_plugins
- */
-class views_plugin_exposed_form_basic extends views_plugin_exposed_form { }
diff --git a/plugins/views_plugin_style_default.inc b/plugins/views_plugin_style_default.inc
deleted file mode 100644
index a18f6cc..0000000
--- a/plugins/views_plugin_style_default.inc
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains the default style plugin.
- */
-
-/**
- * Default style plugin to render rows one after another with no
- * decorations.
- *
- * @ingroup views_style_plugins
- */
-class views_plugin_style_default extends views_plugin_style {
-  /**
-   * Set default options
-   */
-  function options(&$options) {
-    parent::options($options);
-  }
-
-  function options_form(&$form, &$form_state) {
-    parent::options_form($form, $form_state);
-  }
-}
diff --git a/plugins/views_wizard/comment.inc b/plugins/views_wizard/comment.inc
deleted file mode 100644
index a910788..0000000
--- a/plugins/views_wizard/comment.inc
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-
-/**
- * @file
- * Views wizard for comment views.
- */
-
-// Parent plugin.
-if (module_exists('comment')) {
-  $plugin = array(
-    'name' => 'comment',
-    'base_table' => 'comment',
-    'created_column' => 'created',
-    'form_wizard_class' => array(
-      'file' => 'views_ui_comment_views_wizard.class.php',
-      'class' => 'ViewsUiCommentViewsWizard',
-    ),
-    'title' => t('Comments'),
-    'filters' => array(
-      'status' => array(
-        'value' => COMMENT_PUBLISHED,
-        'table' => 'comment',
-        'field' => 'status',
-      ),
-      'status_node' => array(
-        'value' => NODE_PUBLISHED,
-        'table' => 'node',
-        'field' => 'status',
-        'relationship' => 'nid',
-      ),
-    ),
-    'path_field' => array(
-      'id' => 'cid',
-      'table' => 'comment',
-      'field' => 'cid',
-      'exclude' => TRUE,
-      'link_to_comment' => FALSE,
-      'alter' => array(
-        'alter_text' => 1,
-        'text' => 'comment/[cid]#comment-[cid]',
-      ),
-    ),
-  );
-}
diff --git a/plugins/views_wizard/file_managed.inc b/plugins/views_wizard/file_managed.inc
deleted file mode 100644
index 049ce1b..0000000
--- a/plugins/views_wizard/file_managed.inc
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-/**
- * @file
- * Views wizard for managed file views.
- */
-
-$plugin = array(
-  'name' => 'file_managed',
-  'base_table' => 'file_managed',
-  'created_column' => 'timestamp',
-  'form_wizard_class' => array(
-    'file' => 'views_ui_file_managed_views_wizard.class.php',
-    'class' => 'ViewsUiFileManagedViewsWizard',
-  ),
-  'title' => t('Files'),
-  'filters' => array(
-  ),
-  'path_field' => array(
-    'id' => 'uri',
-    'table' => 'file_managed',
-    'field' => 'uri',
-    'exclude' => TRUE,
-    'file_download_path' => TRUE,
-  ),
-);
diff --git a/plugins/views_wizard/node.inc b/plugins/views_wizard/node.inc
deleted file mode 100644
index ccca48d..0000000
--- a/plugins/views_wizard/node.inc
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-/**
- * @file
- * Views wizard for node views.
- */
-
-$plugin = array(
-  'name' => 'node',
-  'base_table' => 'node',
-  'created_column' => 'created',
-  'available_sorts' => array(
-    'title:DESC' => t('Title')
-  ),
-  'form_wizard_class' => array(
-    'file' => 'views_ui_node_views_wizard.class.php',
-    'class' => 'ViewsUiNodeViewsWizard',
-  ),
-  'title' => t('Content'),
-  'filters' => array(
-    'status' => array(
-      'value' => NODE_PUBLISHED,
-      'table' => 'node',
-      'field' => 'status',
-    ),
-  ),
-  'path_field' => array(
-    'id' => 'nid',
-    'table' => 'node',
-    'field' => 'nid',
-    'exclude' => TRUE,
-    'link_to_node' => FALSE,
-    'alter' => array(
-      'alter_text' => 1,
-      'text' => 'node/[nid]',
-    ),
-  ),
-);
-
-if (module_exists('statistics')) {
-  $plugin['available_sorts']['node_counter-totalcount:DESC'] = t('Number of hits');
-}
diff --git a/plugins/views_wizard/node_revision.inc b/plugins/views_wizard/node_revision.inc
deleted file mode 100644
index ddf1d61..0000000
--- a/plugins/views_wizard/node_revision.inc
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-
-/**
- * @file
- * Views wizard for node revision views.
- */
-
-$plugin = array(
-  'name' => 'node_revision',
-  'base_table' => 'node_revision',
-  'created_column' => 'timestamp',
-  'form_wizard_class' => array(
-    'file' => 'views_ui_node_revision_views_wizard.class.php',
-    'class' => 'ViewsUiNodeRevisionViewsWizard',
-  ),
-  'title' => t('Content revisions'),
-  'filters' => array(
-    'status' => array(
-      'value' => '1',
-      'table' => 'node', // @todo - unclear if this should be node or node_revision
-      'field' => 'status',
-    ),
-  ),
-  'path_field' => array(
-    'id' => 'vid',
-    'table' => 'node_revision',
-    'field' => 'vid',
-    'exclude' => TRUE,
-    'alter' => array(
-      'alter_text' => 1,
-      'text' => 'node/[nid]/revisions/[vid]/view',
-    ),
-  ),
-  'path_fields_supplemental' => array(
-    array(
-      'id' => 'nid',
-      'table' => 'node',
-      'field' => 'nid',
-      'exclude' => TRUE,
-      'link_to_node' => FALSE,
-    ),
-  ),
-);
diff --git a/plugins/views_wizard/taxonomy_term.inc b/plugins/views_wizard/taxonomy_term.inc
deleted file mode 100644
index 599e354..0000000
--- a/plugins/views_wizard/taxonomy_term.inc
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-
-/**
- * @file
- * Views wizard for taxonomy term views.
- */
-
-if (module_exists('taxonomy')) {
-  $plugin = array(
-    'name' => 'taxonomy_term',
-    'base_table' => 'taxonomy_term_data',
-    'form_wizard_class' => array(
-      'file' => 'views_ui_taxonomy_term_views_wizard.class.php',
-      'class' => 'ViewsUiTaxonomyTermViewsWizard',
-    ),
-    'title' => t('Taxonomy terms'),
-    'filters' => array(
-    ),
-    'path_field' => array(
-      'id' => 'tid',
-      'table' => 'taxonomy_term_data',
-      'field' => 'tid',
-      'exclude' => TRUE,
-      'alter' => array(
-        'alter_text' => 1,
-        'text' => 'taxonomy/term/[tid]',
-      ),
-    ),
-  );
-}
diff --git a/plugins/views_wizard/users.inc b/plugins/views_wizard/users.inc
deleted file mode 100644
index 176a9e1..0000000
--- a/plugins/views_wizard/users.inc
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-/**
- * @file
- * Views wizard for user views.
- */
-
-$plugin = array(
-  'name' => 'users',
-  'base_table' => 'users',
-  'created_column' => 'created',
-  'form_wizard_class' => array(
-    'file' => 'views_ui_users_views_wizard.class.php',
-    'class' => 'ViewsUiUsersViewsWizard',
-  ),
-  'title' => t('Users'),
-  'filters' => array(
-    'status' => array(
-      'value' => '1',
-      'table' => 'users',
-      'field' => 'status',
-    ),
-  ),
-  'path_field' => array(
-    'id' => 'uid',
-    'table' => 'users',
-    'field' => 'uid',
-    'exclude' => TRUE,
-    'link_to_user' => FALSE,
-    'alter' => array(
-      'alter_text' => 1,
-      'text' => 'user/[uid]',
-    ),
-  ),
-);
diff --git a/tests/test_plugins/views_test_plugin_access_test_static.inc b/tests/test_plugins/views_test_plugin_access_test_static.inc
deleted file mode 100644
index 187d6ea..0000000
--- a/tests/test_plugins/views_test_plugin_access_test_static.inc
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-/**
- * @file
- * Definition of views_test_plugin_access_test_static.
- */
-
-/**
- * Tests a static access plugin.
- */
-class views_test_plugin_access_test_static extends views_plugin_access {
-  function option_definition() {
-    $options = parent::option_definition();
-    $options['access'] = array('default' => FALSE, 'bool' => TRUE);
-
-    return $options;
-  }
-
-  function access($account) {
-    return !empty($this->options['access']);
-  }
-
-  function get_access_callback() {
-    return array('views_test_test_static_access_callback', array(!empty($options['access'])));
-  }
-}
diff --git a/tests/test_plugins/views_test_plugin_access_test_dynamic.inc b/tests/views_test/lib/Drupal/views_test/Plugin/views/access/DynamicTest.php
similarity index 59%
rename from tests/test_plugins/views_test_plugin_access_test_dynamic.inc
rename to tests/views_test/lib/Drupal/views_test/Plugin/views/access/DynamicTest.php
index cecec2f..877d0fd 100644
--- a/tests/test_plugins/views_test_plugin_access_test_dynamic.inc
+++ b/tests/views_test/lib/Drupal/views_test/Plugin/views/access/DynamicTest.php
@@ -2,13 +2,25 @@
 
 /**
  * @file
- * Definition of views_test_plugin_access_test_dynamic.
+ * Definition of Drupal\views_test\Plugin\views\access\DynamicTest.
  */
 
+namespace Drupal\views_test\Plugin\views\access;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+use Drupal\views\Plugin\views\access\AccessPluginBase;
+
 /**
  * Tests a dynamic access plugin.
+ *
+ * @Plugin(
+ *   id = "test_dynamic",
+ *   title = @Translation("Dynamic test access plugin."),
+ *   help = @Translation("Provides a dynamic test access plugin.")
+ * )
  */
-class views_test_plugin_access_test_dynamic extends views_plugin_access {
+class DynamicTest extends AccessPluginBase {
   function option_definition() {
     $options = parent::option_definition();
     $options['access'] = array('default' => FALSE, 'bool' => TRUE);
diff --git a/tests/views_test/lib/Drupal/views_test/Plugin/views/access/StaticTest.php b/tests/views_test/lib/Drupal/views_test/Plugin/views/access/StaticTest.php
new file mode 100644
index 0000000..4c89a6d
--- /dev/null
+++ b/tests/views_test/lib/Drupal/views_test/Plugin/views/access/StaticTest.php
@@ -0,0 +1,38 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\views_test\Plugin\views\access\StaticTest.
+ */
+
+namespace Drupal\views_test\Plugin\views\access;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+use Drupal\views\Plugin\views\access\AccessPluginBase;
+
+/**
+ * Tests a static access plugin.
+ *
+ * @Plugin(
+ *   id = "test_static",
+ *   title = @Translation("Static test access plugin"),
+ *   help = @Translation("Provides a static test access plugin.")
+ * )
+ */
+class StaticTest extends AccessPluginBase {
+  function option_definition() {
+    $options = parent::option_definition();
+    $options['access'] = array('default' => FALSE, 'bool' => TRUE);
+
+    return $options;
+  }
+
+  function access($account) {
+    return !empty($this->options['access']);
+  }
+
+  function get_access_callback() {
+    return array('views_test_test_static_access_callback', array(!empty($options['access'])));
+  }
+}
diff --git a/tests/views_plugin_localization_test.inc b/tests/views_test/lib/Drupal/views_test/Plugin/views/localization/LocalizationTest.php
similarity index 60%
rename from tests/views_plugin_localization_test.inc
rename to tests/views_test/lib/Drupal/views_test/Plugin/views/localization/LocalizationTest.php
index 1987fd8..dfbf372 100644
--- a/tests/views_plugin_localization_test.inc
+++ b/tests/views_test/lib/Drupal/views_test/Plugin/views/localization/LocalizationTest.php
@@ -2,13 +2,26 @@
 
 /**
  * @file
- * Definition of views_plugin_localization_test.
+ * Definition of Drupal\views_test\Plugin\views\localization\LocalizationTest.
  */
 
+namespace Drupal\views_test\Plugin\views\localization;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+use Drupal\views\Plugin\views\localization\LocalizationPluginBase;
+
 /**
  * A stump localisation plugin which has static variables to cache the input.
+ *
+ * @Plugin(
+ *   id = "test_localization",
+ *   title = @Translation("Test."),
+ *   help = @Translation("This is a test description."),
+ *   no_uid = TRUE
+ * )
  */
-class views_plugin_localization_test extends views_plugin_localization {
+class LocalizationTest extends LocalizationPluginBase {
   /**
    * Store the strings which was translated.
    */
diff --git a/tests/templates/views-view--frontpage.tpl.php b/tests/views_test/templates/views-view--frontpage.tpl.php
similarity index 100%
rename from tests/templates/views-view--frontpage.tpl.php
rename to tests/views_test/templates/views-view--frontpage.tpl.php
diff --git a/tests/views_test.info b/tests/views_test/views_test.info
similarity index 100%
rename from tests/views_test.info
rename to tests/views_test/views_test.info
diff --git a/tests/views_test.install b/tests/views_test/views_test.install
similarity index 100%
rename from tests/views_test.install
rename to tests/views_test/views_test.install
diff --git a/tests/views_test.module b/tests/views_test/views_test.module
similarity index 90%
rename from tests/views_test.module
rename to tests/views_test/views_test.module
index f6026b8..de10d53 100644
--- a/tests/views_test.module
+++ b/tests/views_test/views_test.module
@@ -34,13 +34,6 @@ function views_test_views_data() {
   return  variable_get('views_test_views_data', array());
 }
 
-/**
- * Implements hook_views_plugins().
- */
-function views_test_views_plugins() {
-  return variable_get('views_test_views_plugins', array());
-}
-
 function views_test_test_static_access_callback($access) {
   return $access;
 }
diff --git a/tests/views_test.views_default.inc b/tests/views_test/views_test.views_default.inc
similarity index 100%
rename from tests/views_test.views_default.inc
rename to tests/views_test/views_test.views_default.inc
diff --git a/views.api.php b/views.api.php
index 72ed887..be403c8 100644
--- a/views.api.php
+++ b/views.api.php
@@ -50,7 +50,7 @@
  *   - Create the initial handler; at this time it is not yet attached to a
  *     view. It is here that you can set basic defaults if needed, but there
  *     will be no knowledge of the environment yet.
- * - handler->set_definition()
+ * - handler->setDefinition()
  *   - Set the data from hook_views_data() relevant to the handler.
  * - handler->init()
  *   - Attach the handler to a view, and usually provides the options from the
@@ -260,10 +260,10 @@
  *      'title' => t('Feed'),
  *      'help' => t('Display the view as a feed, such as an RSS feed.'),
  *      'handler' => 'views_plugin_display_feed',
- *      'uses hook menu' => TRUE,
- *      'use ajax' => FALSE,
- *      'use pager' => FALSE,
- *      'accept attachments' => FALSE,
+ *      'uses_hook_menu' => TRUE,
+ *      'use_ajax' => FALSE,
+ *      'use_pager' => FALSE,
+ *      'accept_attachments' => FALSE,
  *      'admin' => t('Feed'),
  *      'help topic' => 'display-feed',
  *     ),
@@ -372,13 +372,10 @@ function hook_views_data() {
     // other direction, use hook_views_data_alter(), or use the 'implicit' join
     // method described above.
     'relationship' => array(
-      'base' => 'node', // The name of the table to join with.
-      'base field' => 'nid', // The name of the field on the joined table.
-      // 'field' => 'nid' -- see hook_views_data_alter(); not needed here.
-      'handler' => 'views_handler_relationship',
-      'label' => t('Default label for the relationship'),
-      'title' => t('Title shown when adding the relationship'),
-      'help' => t('More information on this relationship'),
+      'base' => 'node', // The name of the table to join with
+      'field' => 'nid', // The name of the field to join with
+      'id' => 'standard',
+      'label' => t('Example node'),
     ),
   );
 
@@ -387,17 +384,17 @@ function hook_views_data() {
     'title' => t('Plain text field'),
     'help' => t('Just a plain text field.'),
     'field' => array(
-      'handler' => 'views_handler_field',
+      'id' => 'standard',
       'click sortable' => TRUE, // This is use by the table display plugin.
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_string',
+      'id' => 'string',
     ),
     'argument' => array(
-      'handler' => 'views_handler_argument_string',
+      'id' => 'string',
     ),
   );
 
@@ -406,14 +403,14 @@ function hook_views_data() {
     'title' => t('Numeric field'),
     'help' => t('Just a numeric field.'),
     'field' => array(
-      'handler' => 'views_handler_field_numeric',
+      'id' => 'numeric',
       'click sortable' => TRUE,
      ),
     'filter' => array(
-      'handler' => 'views_handler_filter_numeric',
+      'id' => 'numeric',
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
@@ -422,20 +419,20 @@ function hook_views_data() {
     'title' => t('Boolean field'),
     'help' => t('Just an on/off field.'),
     'field' => array(
-      'handler' => 'views_handler_field_boolean',
+      'id' => 'boolean',
       'click sortable' => TRUE,
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_boolean_operator',
+      'id' => 'boolean',
       // Note that you can override the field-wide label:
       'label' => t('Published'),
       // This setting is used by the boolean filter handler, as possible option.
       'type' => 'yes-no',
       // use boolean_field = 1 instead of boolean_field <> 0 in WHERE statment.
-      'use equal' => TRUE,
+      'use_equal' => TRUE,
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort',
+      'id' => 'standard',
     ),
   );
 
@@ -444,14 +441,14 @@ function hook_views_data() {
     'title' => t('Timestamp field'),
     'help' => t('Just a timestamp field.'),
     'field' => array(
-      'handler' => 'views_handler_field_date',
+      'id' => 'date',
       'click sortable' => TRUE,
     ),
     'sort' => array(
-      'handler' => 'views_handler_sort_date',
+      'id' => 'date',
     ),
     'filter' => array(
-      'handler' => 'views_handler_filter_date',
+      'id' => 'date',
     ),
   );
 
@@ -501,7 +498,7 @@ function hook_views_data_alter(&$data) {
       'base' => 'example_table', // Table we're joining to.
       'base field' => 'eid', // Field on the joined table.
       'field' => 'fid', // Real field name on the 'foo' table.
-      'handler' => 'views_handler_relationship',
+      'id' => 'standard',
       'label' => t('Default label for relationship'),
       'title' => t('Title seen when adding relationship'),
       'help' => t('More information about relationship.'),
@@ -538,7 +535,7 @@ function hook_views_data_alter(&$data) {
  *     - parent: The name of the plugin this plugin extends. Since Drupal 7 this
  *       is no longer required, but may still be useful from a code readability
  *       perspective.
- *     - no ui: Set to TRUE to denote that the plugin doesn't appear to be
+ *     - no_ui: Set to TRUE to denote that the plugin doesn't appear to be
  *       selectable in the ui, though on the api side they still exists.
  *     - uses options: Set to TRUE to denote that the plugin has an additional
  *       options form.
@@ -559,22 +556,19 @@ function hook_views_data_alter(&$data) {
  *       t().
  *     - no remove: Set to TRUE to make the display non-removable. (Basically
  *       only used for the master/default display.)
- *     - use ajax: Set to TRUE to allow AJAX loads in the display. If it's
+ *     - use_ajax: Set to TRUE to allow AJAX loads in the display. If it's
  *       disabled there will be no ajax option in the ui.
- *     - use pager: Set to TRUE to allow paging in the display.
- *     - use more: Set to TRUE to allow the 'use more' setting in the display.
- *     - accept attachments: Set to TRUE to allow attachment displays to be
+ *     - use_pager: Set to TRUE to allow paging in the display.
+ *     - use_more: Set to TRUE to allow the 'use_more' setting in the display.
+ *     - accept_attachments: Set to TRUE to allow attachment displays to be
  *       attached to this display type.
- *     - contextual links locations: An array with places where contextual links
+ *     - contextual_links_locations: An array with places where contextual links
  *       should be added. Can for example be 'page' or 'block'. If you don't
- *       specify it there will be contextual links around the rendered view. If
- *       this is not set or regions have been specified, views will display an
- *       option to 'hide contextual links'. Use an empty array if you do not want
- *       this.
- *     - uses hook menu: Set to TRUE to have the display included by
+ *       specify it there will be contextual links around the rendered view.
+ *     - uses_hook_menu: Set to TRUE to have the display included by
  *       views_menu_alter(). views_menu_alter executes then execute_hook_menu
  *       on the display object.
- *     - uses hook block: Set to TRUE to have the display included by
+ *     - uses_hook_block: Set to TRUE to have the display included by
  *       views_block_info().
  *     - theme: The name of a theme suggestion to use for the display.
  *     - js: An array with paths to js files that should be included for the
@@ -582,16 +576,16 @@ function hook_views_data_alter(&$data) {
  *       root.
  *
  *   - Used by style plugins:
- *     - uses row plugin: Set to TRUE to allow row plugins for this style.
- *     - uses row class: Set to TRUE to allow the CSS class settings for rows.
- *     - uses fields: Set to TRUE to have the style plugin accept field
+ *     - uses_row_plugin: Set to TRUE to allow row plugins for this style.
+ *     - uses_row_class: Set to TRUE to allow the CSS class settings for rows.
+ *     - uses_fields: Set to TRUE to have the style plugin accept field
  *       handlers.
  *     - uses grouping: Set to TRUE to allow the grouping settings for rows.
  *     - even empty: May have the value 'even empty' to tell Views that the style
  *       should be rendered even if there are no results.
  *
  *   - Used by row plugins:
- *     - uses fields: Set to TRUE to have the row plugin accept field handlers.
+ *     - uses_fields: Set to TRUE to have the row plugin accept field handlers.
  */
 function hook_views_plugins() {
   $plugins = array();
diff --git a/views.info b/views.info
index 6d1b1ad..94edad7 100644
--- a/views.info
+++ b/views.info
@@ -3,247 +3,7 @@ description = Create customized lists and queries from your database.
 package = Views
 core = 8.x
 php = 5.2
+dependencies[] = ctools
 
 ; Always available CSS
 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_text_custom.inc
-files[] = handlers/views_handler_area_view.inc
-files[] = handlers/views_handler_argument.inc
-files[] = handlers/views_handler_argument_date.inc
-files[] = handlers/views_handler_argument_formula.inc
-files[] = handlers/views_handler_argument_many_to_one.inc
-files[] = handlers/views_handler_argument_null.inc
-files[] = handlers/views_handler_argument_numeric.inc
-files[] = handlers/views_handler_argument_string.inc
-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
-files[] = handlers/views_handler_field_markup.inc
-files[] = handlers/views_handler_field_math.inc
-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
-files[] = handlers/views_handler_filter_boolean_operator_string.inc
-files[] = handlers/views_handler_filter_combine.inc
-files[] = handlers/views_handler_filter_date.inc
-files[] = handlers/views_handler_filter_equality.inc
-files[] = handlers/views_handler_filter_group_by_numeric.inc
-files[] = handlers/views_handler_filter_in_operator.inc
-files[] = handlers/views_handler_filter_many_to_one.inc
-files[] = handlers/views_handler_filter_numeric.inc
-files[] = handlers/views_handler_filter_string.inc
-files[] = handlers/views_handler_relationship.inc
-files[] = handlers/views_handler_relationship_groupwise_max.inc
-files[] = handlers/views_handler_sort.inc
-files[] = handlers/views_handler_sort_date.inc
-files[] = handlers/views_handler_sort_formula.inc
-files[] = handlers/views_handler_sort_group_by_numeric.inc
-files[] = handlers/views_handler_sort_menu_hierarchy.inc
-files[] = handlers/views_handler_sort_random.inc
-; Includes
-files[] = includes/handlers.inc
-files[] = includes/plugins.inc
-; Modules
-files[] = modules/aggregator/views_handler_argument_aggregator_fid.inc
-files[] = modules/aggregator/views_handler_argument_aggregator_iid.inc
-files[] = modules/aggregator/views_handler_argument_aggregator_category_cid.inc
-files[] = modules/aggregator/views_handler_field_aggregator_title_link.inc
-files[] = modules/aggregator/views_handler_field_aggregator_category.inc
-files[] = modules/aggregator/views_handler_field_aggregator_item_description.inc
-files[] = modules/aggregator/views_handler_field_aggregator_xss.inc
-files[] = modules/aggregator/views_handler_filter_aggregator_category_cid.inc
-files[] = modules/aggregator/views_plugin_row_aggregator_rss.inc
-files[] = modules/book/views_plugin_argument_default_book_root.inc
-files[] = modules/comment/views_handler_argument_comment_user_uid.inc
-files[] = modules/comment/views_handler_field_comment.inc
-files[] = modules/comment/views_handler_field_comment_depth.inc
-files[] = modules/comment/views_handler_field_comment_link.inc
-files[] = modules/comment/views_handler_field_comment_link_approve.inc
-files[] = modules/comment/views_handler_field_comment_link_delete.inc
-files[] = modules/comment/views_handler_field_comment_link_edit.inc
-files[] = modules/comment/views_handler_field_comment_link_reply.inc
-files[] = modules/comment/views_handler_field_comment_node_link.inc
-files[] = modules/comment/views_handler_field_comment_username.inc
-files[] = modules/comment/views_handler_field_ncs_last_comment_name.inc
-files[] = modules/comment/views_handler_field_ncs_last_updated.inc
-files[] = modules/comment/views_handler_field_node_comment.inc
-files[] = modules/comment/views_handler_field_node_new_comments.inc
-files[] = modules/comment/views_handler_field_last_comment_timestamp.inc
-files[] = modules/comment/views_handler_filter_comment_user_uid.inc
-files[] = modules/comment/views_handler_filter_ncs_last_updated.inc
-files[] = modules/comment/views_handler_filter_node_comment.inc
-files[] = modules/comment/views_handler_sort_comment_thread.inc
-files[] = modules/comment/views_handler_sort_ncs_last_comment_name.inc
-files[] = modules/comment/views_handler_sort_ncs_last_updated.inc
-files[] = modules/comment/views_plugin_row_comment_rss.inc
-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_argument_field_list_string.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_field_node_language.inc
-files[] = modules/locale/views_handler_filter_node_language.inc
-files[] = modules/locale/views_handler_argument_locale_group.inc
-files[] = modules/locale/views_handler_argument_locale_language.inc
-files[] = modules/locale/views_handler_field_locale_group.inc
-files[] = modules/locale/views_handler_field_locale_language.inc
-files[] = modules/locale/views_handler_field_locale_link_edit.inc
-files[] = modules/locale/views_handler_filter_locale_group.inc
-files[] = modules/locale/views_handler_filter_locale_language.inc
-files[] = modules/locale/views_handler_filter_locale_version.inc
-files[] = modules/node/views_handler_argument_dates_various.inc
-files[] = modules/node/views_handler_argument_node_language.inc
-files[] = modules/node/views_handler_argument_node_nid.inc
-files[] = modules/node/views_handler_argument_node_type.inc
-files[] = modules/node/views_handler_argument_node_vid.inc
-files[] = modules/node/views_handler_argument_node_uid_revision.inc
-files[] = modules/node/views_handler_field_history_user_timestamp.inc
-files[] = modules/node/views_handler_field_node.inc
-files[] = modules/node/views_handler_field_node_link.inc
-files[] = modules/node/views_handler_field_node_link_delete.inc
-files[] = modules/node/views_handler_field_node_link_edit.inc
-files[] = modules/node/views_handler_field_node_revision.inc
-files[] = modules/node/views_handler_field_node_revision_link.inc
-files[] = modules/node/views_handler_field_node_revision_link_delete.inc
-files[] = modules/node/views_handler_field_node_revision_link_revert.inc
-files[] = modules/node/views_handler_field_node_path.inc
-files[] = modules/node/views_handler_field_node_type.inc
-files[] = modules/node/views_handler_filter_history_user_timestamp.inc
-files[] = modules/node/views_handler_filter_node_access.inc
-files[] = modules/node/views_handler_filter_node_status.inc
-files[] = modules/node/views_handler_filter_node_type.inc
-files[] = modules/node/views_handler_filter_node_uid_revision.inc
-files[] = modules/node/views_plugin_argument_default_node.inc
-files[] = modules/node/views_plugin_argument_validate_node.inc
-files[] = modules/node/views_plugin_row_node_rss.inc
-files[] = modules/node/views_plugin_row_node_view.inc
-files[] = modules/search/views_handler_argument_search.inc
-files[] = modules/search/views_handler_field_search_score.inc
-files[] = modules/search/views_handler_filter_search.inc
-files[] = modules/search/views_handler_sort_search_score.inc
-files[] = modules/search/views_plugin_row_search_view.inc
-files[] = modules/statistics/views_handler_field_accesslog_path.inc
-files[] = modules/system/views_handler_argument_file_fid.inc
-files[] = modules/system/views_handler_field_file.inc
-files[] = modules/system/views_handler_field_file_extension.inc
-files[] = modules/system/views_handler_field_file_filemime.inc
-files[] = modules/system/views_handler_field_file_uri.inc
-files[] = modules/system/views_handler_field_file_status.inc
-files[] = modules/system/views_handler_filter_file_status.inc
-files[] = modules/taxonomy/views_handler_argument_taxonomy.inc
-files[] = modules/taxonomy/views_handler_argument_term_node_tid.inc
-files[] = modules/taxonomy/views_handler_argument_term_node_tid_depth.inc
-files[] = modules/taxonomy/views_handler_argument_term_node_tid_depth_modifier.inc
-files[] = modules/taxonomy/views_handler_argument_vocabulary_vid.inc
-files[] = modules/taxonomy/views_handler_argument_vocabulary_machine_name.inc
-files[] = modules/taxonomy/views_handler_field_taxonomy.inc
-files[] = modules/taxonomy/views_handler_field_term_node_tid.inc
-files[] = modules/taxonomy/views_handler_field_term_link_edit.inc
-files[] = modules/taxonomy/views_handler_filter_term_node_tid.inc
-files[] = modules/taxonomy/views_handler_filter_term_node_tid_depth.inc
-files[] = modules/taxonomy/views_handler_filter_vocabulary_vid.inc
-files[] = modules/taxonomy/views_handler_filter_vocabulary_machine_name.inc
-files[] = modules/taxonomy/views_handler_relationship_node_term_data.inc
-files[] = modules/taxonomy/views_plugin_argument_validate_taxonomy_term.inc
-files[] = modules/taxonomy/views_plugin_argument_default_taxonomy_tid.inc
-files[] = modules/system/views_handler_filter_system_type.inc
-files[] = modules/translation/views_handler_argument_node_tnid.inc
-files[] = modules/translation/views_handler_field_node_link_translate.inc
-files[] = modules/translation/views_handler_field_node_translation_link.inc
-files[] = modules/translation/views_handler_filter_node_tnid.inc
-files[] = modules/translation/views_handler_filter_node_tnid_child.inc
-files[] = modules/translation/views_handler_relationship_translation.inc
-files[] = modules/user/views_handler_argument_user_uid.inc
-files[] = modules/user/views_handler_argument_users_roles_rid.inc
-files[] = modules/user/views_handler_field_user.inc
-files[] = modules/user/views_handler_field_user_language.inc
-files[] = modules/user/views_handler_field_user_link.inc
-files[] = modules/user/views_handler_field_user_link_cancel.inc
-files[] = modules/user/views_handler_field_user_link_edit.inc
-files[] = modules/user/views_handler_field_user_mail.inc
-files[] = modules/user/views_handler_field_user_name.inc
-files[] = modules/user/views_handler_field_user_permissions.inc
-files[] = modules/user/views_handler_field_user_picture.inc
-files[] = modules/user/views_handler_field_user_roles.inc
-files[] = modules/user/views_handler_filter_user_current.inc
-files[] = modules/user/views_handler_filter_user_name.inc
-files[] = modules/user/views_handler_filter_user_permissions.inc
-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
-files[] = plugins/views_plugin_access_perm.inc
-files[] = plugins/views_plugin_access_role.inc
-files[] = plugins/views_plugin_argument_default.inc
-files[] = plugins/views_plugin_argument_default_php.inc
-files[] = plugins/views_plugin_argument_default_fixed.inc
-files[] = plugins/views_plugin_argument_default_raw.inc
-files[] = plugins/views_plugin_argument_validate.inc
-files[] = plugins/views_plugin_argument_validate_numeric.inc
-files[] = plugins/views_plugin_argument_validate_php.inc
-files[] = plugins/views_plugin_cache.inc
-files[] = plugins/views_plugin_cache_none.inc
-files[] = plugins/views_plugin_cache_time.inc
-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_localization_core.inc
-files[] = plugins/views_plugin_localization.inc
-files[] = plugins/views_plugin_localization_none.inc
-files[] = plugins/views_plugin_pager.inc
-files[] = plugins/views_plugin_pager_full.inc
-files[] = plugins/views_plugin_pager_mini.inc
-files[] = plugins/views_plugin_pager_none.inc
-files[] = plugins/views_plugin_pager_some.inc
-files[] = plugins/views_plugin_query.inc
-files[] = plugins/views_plugin_query_default.inc
-files[] = plugins/views_plugin_row.inc
-files[] = plugins/views_plugin_row_fields.inc
-files[] = plugins/views_plugin_row_rss_fields.inc
-files[] = plugins/views_plugin_style.inc
-files[] = plugins/views_plugin_style_default.inc
-files[] = plugins/views_plugin_style_grid.inc
-files[] = plugins/views_plugin_style_list.inc
-files[] = plugins/views_plugin_style_jump_menu.inc
-files[] = plugins/views_plugin_style_rss.inc
-files[] = plugins/views_plugin_style_summary.inc
-files[] = plugins/views_plugin_style_summary_jump_menu.inc
-files[] = plugins/views_plugin_style_summary_unformatted.inc
-files[] = plugins/views_plugin_style_table.inc
-
-; Tests
-files[] = tests/test_plugins/views_test_plugin_access_test_dynamic.inc
-files[] = tests/test_plugins/views_test_plugin_access_test_static.inc
-files[] = tests/views_plugin_localization_test.inc
-files[] = tests/views_test.views_default.inc
diff --git a/views.module b/views.module
index 3edee25..508578e 100644
--- a/views.module
+++ b/views.module
@@ -11,6 +11,8 @@
 
 use Drupal\Core\Database\Query\AlterableInterface;
 use Drupal\views\View;
+use Drupal\Component\Plugin\PluginManagerInterface;
+use Drupal\views\Plugin\Type\ViewsPluginManager;
 
 /**
  * Advertise the current views api version
@@ -20,6 +22,23 @@ function views_api_version() {
 }
 
 /**
+ * Implements hook_init().
+ *
+ *
+ */
+function views_init() {
+  $core_modules = array('aggregator', 'book', 'comment', 'contact', 'field', 'filter', 'locale', 'node', 'search', 'statistics', 'system', 'taxonomy', 'translation', 'user');
+  $path = drupal_get_path('module', 'views');
+  $loader = drupal_classloader();
+  foreach ($core_modules as $module) {
+    $function = $module . '_views_api';
+    if (function_exists($function)) {
+      $loader->registerNamespace('Views\\' . $module, DRUPAL_ROOT . '/' . $path . '/lib');
+    }
+  }
+}
+
+/**
  * Implements hook_ctools_exportable_info().
  */
 function views_ctools_exportable_info() {
@@ -427,7 +446,7 @@ function views_menu() {
  */
 function views_menu_alter(&$callbacks) {
   $our_paths = array();
-  $views = views_get_applicable_views('uses hook menu');
+  $views = views_get_applicable_views('uses_hook_menu');
   foreach ($views as $data) {
     list($view, $display_id) = $data;
     $result = $view->execute_hook_menu($display_id, $callbacks);
@@ -641,7 +660,7 @@ function views_block_info() {
     $view->init_display();
     foreach ($view->display as $display_id => $display) {
 
-      if (isset($display->handler) && !empty($display->handler->definition['uses hook block'])) {
+      if (isset($display->handler) && !empty($display->handler->definition['uses_hook_block'])) {
         $result = $display->handler->execute_hook_block_list();
         if (is_array($result)) {
           $items = array_merge($items, $result);
@@ -786,7 +805,7 @@ function views_add_block_contextual_links(&$block, $view, $display_id, $block_ty
  * defined any contextual links that are intended to be displayed in the
  * requested location; if so, it attaches them. The contextual links intended
  * for a particular location are defined by the 'contextual links' and
- * 'contextual links locations' properties in hook_views_plugins() and
+ * 'contextual_links_locations' properties in hook_views_plugins() and
  * hook_views_plugins_alter(); as a result, these hook implementations have
  * full control over where and how contextual links are rendered for each
  * display.
@@ -826,7 +845,7 @@ function views_add_block_contextual_links(&$block, $view, $display_id, $block_ty
  *   If you are rendering a view and its contextual links in another location,
  *   you can pass in a different value for this parameter. However, you will
  *   also need to use hook_views_plugins() or hook_views_plugins_alter() to
- *   declare, via the 'contextual links locations' array key, which view
+ *   declare, via the 'contextual_links_locations' array key, which view
  *   displays support having their contextual links rendered in the location
  *   you have defined.
  * @param $view
@@ -847,14 +866,24 @@ function views_add_contextual_links(&$render_element, $location, $view, $display
     // contextual links that are intended to be displayed in the requested
     // location.
     $plugin = views_fetch_plugin_data('display', $view->display[$display_id]->display_plugin);
-    // If contextual links locations are not set, provide a sane default. (To
+    // If contextual_links_locations are not set, provide a sane default. (To
     // avoid displaying any contextual links at all, a display plugin can still
-    // set 'contextual links locations' to, e.g., an empty array.)
-    $plugin += array('contextual links locations' => array('view'));
+    // set 'contextual_links_locations' to, e.g., {""}.)
+
+    if (!isset($plugin['contextual_links_locations'])) {
+      $plugin['contextual_links_locations'] = array('view');
+    }
+    elseif ($plugin['contextual_links_locations'] = array() || $plugin['contextual_links_locations'] == array('')) {
+      $plugin['contextual_links_locations'] = array();
+    }
+    else {
+      $plugin += array('contextual_links_locations' => array('view'));
+    }
+
     // On exposed_forms blocks contextual links should always be visible.
-    $plugin['contextual links locations'][] = 'special_block_-exp';
-    $has_links = !empty($plugin['contextual links']) && !empty($plugin['contextual links locations']);
-    if ($has_links && in_array($location, $plugin['contextual links locations'])) {
+    $plugin['contextual_links_locations'][] = 'special_block_-exp';
+    $has_links = !empty($plugin['contextual links']) && !empty($plugin['contextual_links_locations']);
+    if ($has_links && in_array($location, $plugin['contextual_links_locations'])) {
       foreach ($plugin['contextual links'] as $module => $link) {
         $args = array();
         $valid = TRUE;
@@ -1171,7 +1200,6 @@ function views_include_handlers($reset = FALSE) {
 
   views_include('handlers');
   views_include('cache');
-  views_include('plugins');
   views_module_include('views', $reset);
   $finished = TRUE;
 }
@@ -1196,7 +1224,7 @@ function views_include_handlers($reset = FALSE) {
  * @return views_handler
  *   An instance of a handler object. May be views_handler_broken.
  */
-function views_get_handler($table, $field, $key, $override = NULL) {
+function views_get_handler($table, $field, $key) {
   static $recursion_protection = array();
 
   $data = views_fetch_data($table, FALSE);
@@ -1227,7 +1255,7 @@ function views_get_handler($table, $field, $key, $override = NULL) {
       }
 
       $recursion_protection[$moved_table][$moved_field] = TRUE;
-      $handler = views_get_handler($moved_table, $moved_field, $key, $override);
+      $handler = views_get_handler($moved_table, $moved_field, $key);
       $recursion_protection = array();
       if ($handler) {
         // store these values so we know what we were originally called.
@@ -1241,13 +1269,10 @@ function views_get_handler($table, $field, $key, $override = NULL) {
       return $handler;
     }
 
-    // Set up a default handler:
-    if (empty($data[$field][$key]['handler'])) {
-      $data[$field][$key]['handler'] = 'views_handler_' . $key;
-    }
-
-    if ($override) {
-      $data[$field][$key]['override handler'] = $override;
+    // @fixme: temporary.
+    // Set up a default handler, if both handler and id is not specified.
+    if (empty($data[$field][$key]['handler']) && empty($data[$field][$key]['id'])) {
+      $data[$field][$key]['id'] = 'standard';
     }
 
     $handler = _views_prepare_handler($data[$field][$key], $data, $field, $key);
@@ -1261,11 +1286,11 @@ function views_get_handler($table, $field, $key, $override = NULL) {
   vpr("Missing handler: @table @field @key", array('@table' => $table, '@field' => $field, '@key' => $key));
   $broken = array(
     'title' => t('Broken handler @table.@field', array('@table' => $table, '@field' => $field)),
-    'handler' => 'views_handler_' . $key . '_broken',
+    'id' => 'broken',
     'table' => $table,
     'field' => $field,
   );
-  return _views_create_handler($broken, 'handler', $key);
+  return _views_create_handler($key, $broken);
 }
 
 /**
@@ -1282,9 +1307,9 @@ function views_fetch_data($table = NULL, $move = TRUE, $reset = FALSE) {
 /**
  * Fetch the plugin data from cache.
  */
-function views_fetch_plugin_data($type = NULL, $plugin = NULL, $reset = FALSE) {
+function views_fetch_plugin_data($type = NULL, $id = NULL, $reset = FALSE) {
   views_include('cache');
-  return _views_fetch_plugin_data($type, $plugin, $reset);
+  return _views_fetch_plugin_data($type, $id, $reset);
 }
 
 /**
@@ -1302,24 +1327,26 @@ function views_fetch_plugin_data($type = NULL, $plugin = NULL, $reset = FALSE) {
  *   A keyed array of in the form of 'base_table' => 'Description'.
  */
 function views_fetch_plugin_names($type, $key = NULL, $base = array()) {
-  $data = views_fetch_plugin_data();
-
-  $plugins[$type] = array();
+  $manager = new ViewsPluginManager($type);
+  $definitions = $manager->getDefinitions();
+  $plugins = array();
 
-  foreach ($data[$type] as $id => $plugin) {
+  foreach ($definitions as $id => $plugin) {
     // Skip plugins that don't conform to our key.
     if ($key && (empty($plugin['type']) || $plugin['type'] != $key)) {
       continue;
     }
+
     if (empty($plugin['no ui']) && (empty($base) || empty($plugin['base']) || array_intersect($base, $plugin['base']))) {
-      $plugins[$type][$id] = $plugin['title'];
+      $plugins[$id] = $plugin['title'];
     }
   }
 
-  if (!empty($plugins[$type])) {
-    asort($plugins[$type]);
-    return $plugins[$type];
+  if (!empty($plugins)) {
+    asort($plugins);
+    return $plugins;
   }
+
   // fall-through
   return array();
 }
@@ -1327,15 +1354,22 @@ function views_fetch_plugin_names($type, $key = NULL, $base = array()) {
 /**
  * Get a handler for a plugin
  *
+ * @param string $type
+ *   The plugin type like access or display.
+ * @param string $id
+ *   The name of the plugin like standard.
+ *
  * @return views_plugin
  *
  * The created plugin object.
  */
-function views_get_plugin($type, $plugin, $reset = FALSE) {
+function views_get_plugin($type, $id, $reset = FALSE) {
   views_include('handlers');
-  $definition = views_fetch_plugin_data($type, $plugin, $reset);
+
+  $manager = new ViewsPluginManager($type);
+  $definition = $manager->getDefinition($id);
   if (!empty($definition)) {
-    return _views_create_handler($definition, $type);
+    return _views_create_plugin($type, $definition);
   }
 }
 
@@ -1359,6 +1393,20 @@ function views_get_localization_plugin() {
   return $plugin;
 }
 
+/**
+ * Get enabled display extenders.
+ */
+function views_get_enabled_display_extenders() {
+  $enabled = array_filter((array) config('views.settings')->get('views_display_extenders'));
+  $options = views_fetch_plugin_names('display_extender');
+  foreach ($options as $name => $plugin) {
+    $enabled[$name] = $name;
+  }
+
+  return array_filter($enabled);
+}
+
+
 // -----------------------------------------------------------------------
 // Views database functions
 
@@ -1435,7 +1483,7 @@ function views_get_applicable_views($type) {
     foreach (array_keys($view->display) as $id) {
       $plugin = views_fetch_plugin_data('display', $view->display[$id]->display_plugin);
       if (!empty($plugin[$type])) {
-        // This view uses hook menu. Clone it so that different handlers
+        // This view uses_hook_menu. Clone it so that different handlers
         // don't trip over each other, and add it to the list.
         $v = $view->clone_view();
         if ($v->set_display($id) && $v->display_handler->get_option('enabled')) {
@@ -2388,6 +2436,58 @@ function views_process_check_options($element, &$form_state) {
 }
 
 /**
+ * Validation callback for query tags.
+ */
+function views_element_validate_tags($element, &$form_state) {
+  $values = array_map('trim', explode(',', $element['#value']));
+  foreach ($values as $value) {
+    if (preg_match("/[^a-z_]/", $value)) {
+      form_error($element, t('The query tags may only contain lower-case alphabetical characters and underscores.'));
+      return;
+    }
+  }
+}
+
+/**
+ * Prerender function to move the textarea to the top.
+ */
+function views_handler_field_custom_pre_render_move_text($form) {
+  $form['text'] = $form['alter']['text'];
+  $form['help'] = $form['alter']['help'];
+  unset($form['alter']['text']);
+  unset($form['alter']['help']);
+
+  return $form;
+}
+
+/**
+ * Helper function: Return an array of formatter options for a field type.
+ *
+ * Borrowed from field_ui.
+ */
+function _field_view_formatter_options($field_type = NULL) {
+  $options = &drupal_static(__FUNCTION__);
+
+  if (!isset($options)) {
+    $field_types = field_info_field_types();
+    $options = array();
+    foreach (field_info_formatter_types() as $name => $formatter) {
+      foreach ($formatter['field types'] as $formatter_field_type) {
+        // Check that the field type exists.
+        if (isset($field_types[$formatter_field_type])) {
+          $options[$formatter_field_type][$name] = $formatter['label'];
+        }
+      }
+    }
+  }
+
+  if ($field_type) {
+    return !empty($options[$field_type]) ? $options[$field_type] : array();
+  }
+  return $options;
+}
+
+/**
  * Trim the field down to the specified length.
  *
  * @param $alter
diff --git a/views_ui.info b/views_ui.info
index b131de9..c9eebf4 100644
--- a/views_ui.info
+++ b/views_ui.info
@@ -4,5 +4,3 @@ package = Views
 core = 8.x
 configure = admin/structure/views
 dependencies[] = views
-files[] = views_ui.module
-files[] = plugins/views_wizard/views_ui_base_views_wizard.class.php
diff --git a/views_ui.module b/views_ui.module
index 620a6c7..0f4cec6 100644
--- a/views_ui.module
+++ b/views_ui.module
@@ -6,6 +6,7 @@
  */
 
 use Drupal\views\View;
+use Drupal\views\Plugin\Type\ViewsPluginManager;
 
 /**
  * Implements hook_menu().
@@ -550,7 +551,8 @@ function views_ui_ctools_plugin_directory($module, $plugin) {
  */
 function views_ui_get_wizard($wizard_type) {
   ctools_include('plugins');
-  $wizard = ctools_get_plugins('views_ui', 'views_wizard', $wizard_type);
+  $manager = new ViewsPluginManager('wizard');
+  $wizard = $manager->getDefinition($wizard_type);
   // @todo - handle this via an alter hook instead.
   if (!$wizard) {
     // Must be a base table using the default wizard plugin.
@@ -575,8 +577,8 @@ function views_ui_get_wizard($wizard_type) {
  *   An array of arrays with information about all available views wizards.
  */
 function views_ui_get_wizards() {
-  ctools_include('plugins');
-  $wizard_plugins = ctools_get_plugins('views_ui', 'views_wizard');
+  $manager = new ViewsPluginManager('wizard');
+  $wizard_plugins = $manager->getDefinitions();
   $wizard_tables = array();
   foreach ($wizard_plugins as $name => $info) {
     $wizard_tables[$info['base_table']] = TRUE;
@@ -611,13 +613,6 @@ function views_ui_views_wizard_defaults() {
     // so they are documented.
     'title' => '',
     'base_table' => NULL,
-    // This is a callback that takes the wizard as argument and returns
-    // an instantiazed Views UI form wizard object.
-    'get_instance' => 'views_ui_get_form_wizard_instance',
-    'form_wizard_class' => array(
-      'file' => 'views_ui_base_views_wizard',
-      'class' => 'ViewsUiBaseViewsWizard',
-    ),
   );
 }
 
@@ -628,28 +623,22 @@ function views_ui_ctools_plugin_type() {
   return array(
     'views_wizard' => array(
       'child plugins' => TRUE,
-      'classes' => array(
-        'form_wizard_class',
-      ),
       'defaults' => views_ui_views_wizard_defaults(),
     ),
   );
 }
 
 function views_ui_get_form_wizard_instance($wizard) {
-  if (isset($wizard['form_wizard_class']['class'])) {
-    $class = $wizard['form_wizard_class']['class'];
-    return new $class($wizard);
-  }
-  else {
-    return new ViewsUiBaseViewsWizard($wizard);
-  }
+  $manager = new ViewsPluginManager('wizard');
+  $instance = $manager->createInstance($wizard['name']);
+  return $instance;
 }
 
 /**
  * Implements hook_views_plugins_alter().
  */
 function views_ui_views_plugins_alter(&$plugins) {
+  // @todo This currently does not work, investigate annotation alters.
   // Attach contextual links to each display plugin. The links will point to
   // paths underneath "admin/structure/views/view/{$view->name}" (i.e., paths
   // for editing and performing other contextual actions on the view).
