diff --git a/fieldable_panels_panes.info b/fieldable_panels_panes.info
index b7f0e2c..0d9ed24 100644
--- a/fieldable_panels_panes.info
+++ b/fieldable_panels_panes.info
@@ -16,6 +16,7 @@ files[] = plugins/views/fieldable_panels_panes_handler_argument_bundle.inc
 files[] = plugins/views/fieldable_panels_panes_handler_field_bundle.inc
 files[] = plugins/views/fieldable_panels_panes_handler_field_delete_entity.inc
 files[] = plugins/views/fieldable_panels_panes_handler_field_edit_entity.inc
+files[] = plugins/views/fieldable_panels_panes_handler_field_clone_entity.inc
 files[] = plugins/views/fieldable_panels_panes_handler_field_view_entity.inc
 files[] = plugins/views/fieldable_panels_panes_handler_filter_bundle.inc
 
diff --git a/fieldable_panels_panes.module b/fieldable_panels_panes.module
index e96881a..6055e91 100644
--- a/fieldable_panels_panes.module
+++ b/fieldable_panels_panes.module
@@ -251,6 +251,16 @@ function fieldable_panels_panes_menu() {
     'weight' => -9,
   ) + $base;
 
+  $items['admin/structure/fieldable-panels-panes/view/%fieldable_panels_panes/clone'] = array(
+    'title' => 'Clone',
+    'type' => MENU_LOCAL_TASK,
+    'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE,
+    'page callback' => 'fieldable_panels_panes_entity_clone_page',
+    'page arguments' => array(4),
+    'access callback' => 'fieldable_panels_panes_access',
+    'access arguments' => array('clone', 4),
+  ) + $base;
+
   // Access control
   $items['admin/structure/fieldable-panels-panes/view/%fieldable_panels_panes/access'] = array(
     'title' => 'Access control',
@@ -419,6 +429,10 @@ function fieldable_panels_panes_permission() {
       'title' => t('Administer fieldable panels panes'),
       'description' => t('Allows users complete control over fieldable panel pane entities. This permission overrides any other permission.'),
     ),
+    'clone fieldable panels panes' => array(
+      'title' => t('Clone Fieldable Panels Panes'),
+      'description' => t('Allows the cloning of all FPPs.'),
+    ),
   );
 
   $entity_info = entity_get_info('fieldable_panels_pane');
@@ -1179,6 +1193,12 @@ function fieldable_panels_panes_entity_edit_form_submit($form, &$form_state) {
   if (!empty($form_state['add submit'])) {
     drupal_set_message(t('The entity has been saved.'));
   }
+
+  // If this was a clone operation, redirect to the Edit form of the newly
+  // created FPP.
+  if (isset($form_state['cloned']) && $form_state['cloned'] === TRUE) {
+    $form_state['redirect'] = 'admin/structure/fieldable-panels-panes/view/' . $form_state['entity']->fpid . '/edit';
+  }
 }
 
 /**
diff --git a/includes/PanelsPaneController.class.php b/includes/PanelsPaneController.class.php
index 6f3b5ad..f548412 100644
--- a/includes/PanelsPaneController.class.php
+++ b/includes/PanelsPaneController.class.php
@@ -70,6 +70,10 @@ class PanelsPaneController extends DrupalDefaultEntityController {
       return TRUE;
     }
 
+    if ($op == 'clone') {
+      return user_access('clone fieldable panels panes');
+    }
+
     $bundle = is_string($entity) ? $entity : $entity->bundle;
 
     if ($op == 'create') {
diff --git a/includes/admin.inc b/includes/admin.inc
index fa62511..366e5fb 100644
--- a/includes/admin.inc
+++ b/includes/admin.inc
@@ -190,3 +190,69 @@ function fieldable_panels_panes_entity_make_current_page($entity) {
   drupal_set_message(t('The revision has been made current.'));
   drupal_goto("admin/structure/fieldable-panels-panes/view/$entity->fpid");
 }
+
+/**
+ * Callback for the FPP clone page.
+ */
+function fieldable_panels_panes_entity_clone_page($fieldable_panels_pane) {
+  $bundle = $fieldable_panels_pane->bundle;
+
+  // Get the schema in order to learn about the FPP properties.
+  module_load_include('install', 'fieldable_panels_panes', 'fieldable_panels_panes');
+  $schema = fieldable_panels_panes_schema();
+  drupal_alter('schema', $schema);
+  $properties = array_keys($schema['fieldable_panels_panes']['fields']);
+
+  // We don't need to clone these properties so we can unset them.
+  $unset = array('fpid', 'vid', 'view_access', 'edit_access', 'created', 'changed', 'uuid');
+  $unset = array_flip($unset);
+  $properties = array_filter($properties, function($property) use($unset) {
+    return !isset($unset[$property]);
+  });
+
+  // Get the field information for the current bundle to see what fields there are.
+  $fields = field_info_instances('fieldable_panels_pane', $bundle);
+  $fields = array_keys($fields);
+
+  // Clone the FPP so we don't accidentally change something we shouldn't.
+  $fpp = clone $fieldable_panels_pane;
+
+  // Loop through all the properties of the FPP and remove all the ones we
+  // blacklisted above.
+  $fpp_props = array_keys((array) $fpp);
+  foreach ($fpp_props as $property) {
+    if (array_search($property, $properties) === FALSE && array_search($property, $fields) === FALSE) {
+      unset($fpp->{$property});
+    }
+  }
+
+  // Add some basic properties for new/cloned FPPs.
+  $fpp->vid = "";
+  $fpp->current_vid = "";
+  $fpp->is_new = true;
+
+  // Some default titles.
+  $page_title = '';
+  if ($fpp->admin_title !== "") {
+    $title = t('Clone of @title', array('@title' => $fpp->admin_title));
+    $fpp->admin_title = $title;
+    $page_title = $title;
+  }
+  elseif ($fpp->title !== "") {
+    $title = t('Clone of @title', array('@title' => $fpp->title));
+    $fpp->title = $title;
+    $page_title = $title;
+  }
+  drupal_set_title($page_title);
+
+  // Prepare the form_state.
+  $form_state = array(
+    'entity' => $fpp,
+    'add submit' => TRUE,
+    'cloned' => true,
+  );
+
+  // Build and return the edit form.
+  $form = drupal_build_form('fieldable_panels_panes_entity_edit_form', $form_state);
+  return $form;
+}
diff --git a/plugins/views/fieldable_panels_panes.views.inc b/plugins/views/fieldable_panels_panes.views.inc
index 7c28b3a..97fd1e2 100644
--- a/plugins/views/fieldable_panels_panes.views.inc
+++ b/plugins/views/fieldable_panels_panes.views.inc
@@ -228,6 +228,13 @@ function fieldable_panels_panes_views_data() {
         'handler' => 'fieldable_panels_panes_handler_field_delete_entity',
       ),
     ),
+    'clone_entity' => array(
+      'field' => array(
+        'title' => t('Administrative clone link'),
+        'help' => t('Provide a simple link for administrators to clone the content.'),
+        'handler' => 'fieldable_panels_panes_handler_field_clone_entity',
+      ),
+    ),
   );
 
   $data['fieldable_panels_panes_revision'] = array(
diff --git a/plugins/views/fieldable_panels_panes_handler_field_clone_entity.inc b/plugins/views/fieldable_panels_panes_handler_field_clone_entity.inc
new file mode 100644
index 0000000..b4e8be1
--- /dev/null
+++ b/plugins/views/fieldable_panels_panes_handler_field_clone_entity.inc
@@ -0,0 +1,27 @@
+<?php
+/**
+ * @file
+ * Provide views handlers for fieldable panel panes
+ */
+
+/**
+ * Field handler to present a link to clone the fieldable panels pane.
+ */
+class fieldable_panels_panes_handler_field_clone_entity extends fieldable_panels_panes_handler_field_view_entity {
+  /**
+   * Renders the link.
+   */
+  function render_link($entity, $values) {
+    if (fieldable_panels_panes_access('clone', $entity)) {
+      $this->options['alter']['make_link'] = TRUE;
+      $this->options['alter']['path'] = "admin/structure/fieldable-panels-panes/view/$entity->fpid/clone";
+      $this->options['alter']['query'] = drupal_get_destination();
+
+      $text = !empty($this->options['text']) ? $this->options['text'] : t('clone');
+      return $text;
+    }
+    else {
+      $this->options['alter']['path'] = '';
+    }
+  }
+}
