diff --git css/views-admin.css css/views-admin.css
index 6c5c5ec..bfe7b61 100644
--- css/views-admin.css
+++ css/views-admin.css
@@ -661,6 +661,7 @@ html.js .views-hidden {
   max-width: 95%;
 }
 
+.clone-display,
 .remove-display {
   float: right;
   margin: 0;
@@ -670,7 +671,9 @@ html.js .views-hidden {
 }
 
 .views-display .remove-display form,
-.remove-display input {
+.remove-display input,
+.views-display .clone-display form,
+.clone-display input {
   margin: 0 !important;
 }
 
diff --git includes/admin.inc includes/admin.inc
index 5849a65..92b4e30 100644
--- includes/admin.inc
+++ includes/admin.inc
@@ -1127,11 +1127,12 @@ function template_preprocess_views_ui_edit_tab(&$vars) {
 
   $vars['remove'] = '';
   if (empty($plugin['no remove'])) {
-    if (!empty($_POST['form_id']) && $_POST['form_id'] == 'views_ui_remove_display_form') {
+    if (!empty($_POST['form_id']) && in_array($_POST['form_id'], array('views_ui_remove_display_form', 'views_ui_clone_display_form'))) {
       unset($_POST['form_id']);
     }
     $form_state = array('view' => &$view, 'display_id' => $display->id, 'ajax' => FALSE);
     $vars['remove'] = drupal_build_form('views_ui_remove_display_form', $form_state);
+    $vars['clone'] = drupal_build_form('views_ui_clone_display_form', $form_state);
   }
 
   // basic fields
@@ -1830,6 +1831,86 @@ function views_ui_add_display_form_submit($form, &$form_state) {
 }
 
 /**
+ * AJAX callback to add a display.
+ */
+function views_ui_clone_display($js, $view, $id) {
+  views_include('ajax');
+  $form_state = array(
+    'view' => &$view,
+    'ajax' => $js,
+    'display_id' => $id,
+  );
+
+  $output = views_ajax_form_wrapper('views_ui_clone_display_form', $form_state);
+
+  if ($js) {
+    // If we don't have an output object, it was submitted. Set up the submission.
+    if (empty($output)) {
+      $id = $form_state['id'];
+
+      // Make sure the new display is active
+      if (!$view->set_display('default')) {
+        views_ajax_render(t('Unable to initialize default display'));
+      }
+
+      // Render the new display
+      list($title, $body) = views_ui_display_tab($view, $view->display[$id]);
+
+      // Instruct the javascript on the browser to render the new tab.
+      $output = new stdClass;
+      $output->tab = array('#views-tab-' . $id => array('title' => $title, 'body' => $body));
+    }
+    // Render the command object. This automatically exits.
+    views_ajax_render($output);
+  }
+
+  // But the non-js variant will return output if it didn't redirect us.
+  return $output;
+}
+
+/**
+ * From to clone a display from a view.
+ */
+function views_ui_clone_display_form(&$form_state) {
+  $view = &$form_state['view'];
+  $display_id = $form_state['display_id'];
+
+  $form['clone_display'] = array(
+    '#type' => 'submit',
+    '#value' => t('Clone display'),
+    '#submit' => array('views_ui_clone_display_form_submit'),
+  );
+
+  $form['#id'] = 'views-clone-display-form';
+  $form['#action'] = url("admin/build/views/nojs/clone-display/$view->name/$display_id");
+  $form['#attributes'] = array('class' => 'views-ajax-form');
+
+  return $form;
+}
+
+/**
+ * Submit handler to add a clone to a display from a view.
+ */
+function views_ui_clone_display_form_submit($form, &$form_state) {
+  // Create the new display
+  $id = $form_state['display_id'];
+  $display = $form_state['view']->display[$id];
+
+  $new_id = $form_state['view']->add_display($display->display_plugin);
+  $form_state['id'] = $new_id;
+
+  // Replace the new display by a copy of the old
+  $form_state['view']->display[$new_id] = drupal_clone($display);
+  $form_state['view']->display[$new_id]->id = $new_id;
+
+  // Store in cache
+  views_ui_cache_set($form_state['view']);
+
+  // Send it back
+  $form_state['redirect'] = array('admin/build/views/edit/' . $form_state['view']->name, NULL, 'views-tab-' . $new_id);
+}
+
+/**
  * Form to remove a display from a view.
  */
 function views_ui_remove_display_form(&$form_state) {
diff --git tests/views_view.test tests/views_view.test
new file mode 100644
index 0000000..2fb5605
--- /dev/null
+++ tests/views_view.test
@@ -0,0 +1,56 @@
+<?php
+// $Id$
+module_load_include('inc', 'views', 'tests/views_query');
+
+class viewsViewTest extends ViewsSqlTest {
+  public static function getInfo() {
+    return array(
+    'name' => 'Views view object test',
+    'description' => 'Tests the methods of the view object',
+    'group' => 'Views',
+    );
+  }
+
+  // Test the display_id of new displays.
+  public function test_add_display() {
+    $view = $this->view_add_display();
+    // This view has
+    // - one page display
+    // - two block displays.
+    $this->assertEqual($view->add_display('page'), 'page_2');
+    $this->assertEqual($view->add_display('block'), 'block_3');
+  }
+
+  public function view_add_display() {
+    $view = new view;
+    $view->name = 'add_display';
+    $view->description = '';
+    $view->tag = '';
+    $view->view_php = '';
+    $view->base_table = 'node';
+    $view->is_cacheable = FALSE;
+    $view->api_version = '3.0-alpha1';
+    $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
+
+    /* Display: Defaults */
+    $handler = $view->new_display('default', 'Defaults', 'default');
+    $handler->display->display_options['access']['type'] = 'none';
+    $handler->display->display_options['cache']['type'] = 'none';
+    $handler->display->display_options['exposed_form']['type'] = 'basic';
+    $handler->display->display_options['pager']['type'] = 'full';
+    $handler->display->display_options['style_plugin'] = 'default';
+    $handler->display->display_options['row_plugin'] = 'fields';
+
+    /* Display: Page */
+    $handler = $view->new_display('page', 'Page', 'page_1');
+
+    /* Display: Block */
+    $handler = $view->new_display('block', 'Block', 'block_1');
+
+    /* Display: Block */
+    $handler = $view->new_display('block', 'Block', 'block_2');
+
+
+    return $view;
+  }
+}
diff --git theme/views-ui-edit-tab.tpl.php theme/views-ui-edit-tab.tpl.php
index 61b9017..ee0f873 100644
--- theme/views-ui-edit-tab.tpl.php
+++ theme/views-ui-edit-tab.tpl.php
@@ -10,6 +10,9 @@
   <?php if ($remove): ?>
     <div class="remove-display"><?php print $remove ?></div>
   <?php endif; ?>
+  <?php if ($clone): ?>
+    <div class="clone-display"><?php print $clone ?></div>
+  <?php endif; ?>
   <div class="top">
     <div class="inside">
       <?php print $display_help_icon; ?>
diff --git views_ui.module views_ui.module
index 7a38a7e..b27f428 100644
--- views_ui.module
+++ views_ui.module
@@ -133,6 +133,10 @@ function views_ui_menu() {
     'page callback' => 'views_ui_add_display',
     'page arguments' => array(3, 5),
   );
+    $items['admin/build/views/%views_ui_js/clone-display/%views_ui_cache'] = $callback + array(
+    'page callback' => 'views_ui_clone_display',
+    'page arguments' => array(3, 5, 6),
+  );
   // Live preview
   $items['admin/build/views/%views_ui_js/preview/%views_ui_cache'] = $callback + array(
     'page callback' => 'views_ui_preview',
