diff --git a/includes/admin.inc b/includes/admin.inc
index f80c430..f42d0d4 100644
--- a/includes/admin.inc
+++ b/includes/admin.inc
@@ -4794,6 +4794,21 @@ function views_ui_admin_settings_advanced() {
     '#dependency' => array('edit-views-devel-output' => array(1)),
   );
 
+  $options = views_fetch_plugin_names('display_extender');
+  if (!empty($options)) {
+    $form['extenders'] = array(
+      '#type' => 'fieldset',
+    );
+    ;
+    $form['extenders']['views_display_extenders'] = array(
+      '#title' => t('Display extenders'),
+      '#default_value' => variable_get('views_display_extenders', array()),
+      '#options' => $options,
+      '#type' => 'checkboxes',
+      '#description' => t('Select extensions of the views interface.')
+    );
+  }
+
   return system_settings_form($form);
 }
 
diff --git a/includes/plugins.inc b/includes/plugins.inc
index 87cb38b..0418d99 100644
--- a/includes/plugins.inc
+++ b/includes/plugins.inc
@@ -81,6 +81,15 @@ function views_views_plugins() {
         'help topic' => 'display-feed',
       ),
     ),
+    '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',
+        'no ui' => TRUE,
+      ),
+    ),
     'style' => array(
       // Default settings for all style plugins.
       'default' => array(
diff --git a/plugins/views_plugin_display.inc b/plugins/views_plugin_display.inc
index f2722fb..3b28721 100644
--- a/plugins/views_plugin_display.inc
+++ b/plugins/views_plugin_display.inc
@@ -33,6 +33,11 @@ class views_plugin_display extends views_plugin {
 
   var $handlers = array();
 
+  /**
+   * Stores all availible display extenders.
+   */
+  var $extender = array();
+
   function init(&$view, &$display, $options = NULL) {
     $this->view = &$view;
     $this->display = &$display;
@@ -45,7 +50,6 @@ class views_plugin_display extends views_plugin {
     if ($this->is_default_display() && isset($options['defaults'])) {
       unset($options['defaults']);
     }
-
     $this->unpack_options($this->options, $options);
 
     // Translate changed settings:
@@ -132,6 +136,16 @@ class views_plugin_display extends views_plugin {
     }
   }
 
+  function construct() {
+    // Load extenders as soon as possible
+    $this->extender = array();
+    foreach (array_filter(variable_get('views_display_extenders', array())) as $extender) {
+      $data = views_fetch_plugin_data('display_extender', $extender);
+      $this->extender[$extender] = new $data['handler']($view, $this);
+    }
+    parent::construct();
+  }
+
   function destroy() {
     parent::destroy();
 
@@ -146,6 +160,10 @@ class views_plugin_display extends views_plugin {
     if (isset($this->default_display)) {
       unset($this->default_display);
     }
+
+    foreach ($this->extender as $extender) {
+      $extender->destroy();
+    }
   }
 
   /**
@@ -319,6 +337,10 @@ class views_plugin_display extends views_plugin {
       unset($sections['items_per_page']);
     }
 
+    foreach ($this->extender as $extender) {
+      $extender->defaultable_sections($sections, $section);
+    }
+
     if ($section) {
       if (!empty($sections[$section])) {
         return $sections[$section];
@@ -557,6 +579,11 @@ class views_plugin_display extends views_plugin {
     if ($this->is_default_display()) {
       unset($options['defaults']);
     }
+
+    foreach ($this->extender as $extender) {
+      $extender->option_definition($options);
+    }
+
     return $options;
   }
 
@@ -1167,6 +1194,10 @@ class views_plugin_display extends views_plugin {
       'value' => t('Information'),
       'desc' => t('Get information on how to theme this display'),
     );
+
+    foreach ($this->extender as $extender) {
+      $extender->options_summary($categories, $options);
+    }
   }
 
   /**
@@ -1826,6 +1857,9 @@ class views_plugin_display extends views_plugin {
         break;
     }
 
+    foreach ($this->extender as $extender) {
+      $extender->options_form($form, $form_state);
+    }
   }
 
   /**
@@ -1919,6 +1953,10 @@ class views_plugin_display extends views_plugin {
         }
         break;
     }
+
+    foreach ($this->extender as $extender) {
+      $extender->options_validate($form, $form_state);
+    }
   }
 
   /**
@@ -2108,6 +2146,10 @@ class views_plugin_display extends views_plugin {
         }
         break;
     }
+
+    foreach ($this->extender as $extender) {
+      $extender->options_submit($form, $form_state);
+    }
   }
 
   /**
@@ -2150,7 +2192,11 @@ class views_plugin_display extends views_plugin {
   /**
    * Inject anything into the query that the display handler needs.
    */
-  function query() {  }
+  function query() {
+    foreach ($this->extender as $extender) {
+      $extender->query();
+    }
+  }
 
   /**
    * Not all display plugins will support filtering
@@ -2273,6 +2319,10 @@ class views_plugin_display extends views_plugin {
       $exposed_form = $this->get_plugin('exposed_form');
       $exposed_form->pre_execute();
     }
+
+    foreach ($this->extender as $extender) {
+      $extender->pre_execute();
+    }
   }
 
   /**
diff --git a/plugins/views_plugin_display_extender.inc b/plugins/views_plugin_display_extender.inc
new file mode 100644
index 0000000..250cd83
--- /dev/null
+++ b/plugins/views_plugin_display_extender.inc
@@ -0,0 +1,54 @@
+<?php
+/**
+ * @todo
+ */
+class views_plugin_display_extender extends views_plugin {
+  function __construct(&$view, &$display) {
+    $this->view = $view;
+    $this->display = $display;
+  }
+
+
+  /**
+   * Provide a form to edit options for this plugin.
+   */
+  function options_definition(&$options) { }
+
+  /**
+   * Provide a form to edit options for this plugin.
+   */
+  function options_form(&$form, &$form_state) { }
+
+  /**
+   * Validate the options form.
+   */
+  function options_validate(&$form, &$form_state) { }
+
+  /**
+   * Handle any special handling on the validate form.
+   */
+  function options_submit(&$form, &$form_state) { }
+
+  /**
+   * Set up any variables on the view prior to execution.
+   */
+  function pre_execute() { }
+
+  /**
+   * Inject anything into the query that the display_extender handler needs.
+   */
+  function query() { }
+
+  /**
+   * Provide the default summary for options in the views UI.
+   *
+   * This output is returned as an array.
+   */
+  function options_summary(&$categories, &$options) { }
+
+  /**
+   * Static member function to list which sections are defaultable
+   * and what items each section contains.
+   */
+  function defaultable_sections(&$sections, $section = NULL) { }
+}
\ No newline at end of file
diff --git a/views.info b/views.info
index 6380a0b..e1d948e 100644
--- a/views.info
+++ b/views.info
@@ -203,6 +203,7 @@ 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_extender.inc
 files[] = plugins/views_plugin_display_feed.inc
 files[] = plugins/views_plugin_exposed_form_basic.inc
 files[] = plugins/views_plugin_exposed_form.inc
