diff --git a/panelizer.module b/panelizer.module
index d8a69fb..58016a9 100644
--- a/panelizer.module
+++ b/panelizer.module
@@ -1066,6 +1066,13 @@ function panelizer_panels_cache_clear($argument, $cache) {
  * Save all changes made to a display using the Page Manager page cache.
  */
 function panelizer_panels_cache_save($argument, $cache) {
+  // If this is set, they clicked a button that saves a different panelizer
+  // than was being edited, such as saving to default rather than customizing
+  // an entity.
+  if (isset($cache->display->swap_cache_key)) {
+    $argument = $cache->display->swap_cache_key;
+  }
+
   list($entity_type, $key) = explode(':', $argument, 2);
   $type = $entity_type;
   if ($entity_type == 'default') {
@@ -1078,6 +1085,7 @@ function panelizer_panels_cache_save($argument, $cache) {
     return;
   }
 
+
   if (!empty($get_default)) {
     $panelizer = $handler->get_default_panelizer_object($bundle, $name);
     $panelizer->display = $cache->display;
@@ -1309,3 +1317,121 @@ function panelizer_set_status_action_submit($form, $form_state) {
 
   return $retval;
 }
+
+/**
+ * Implements hook_form_alter().
+ *
+ * Alter the IPE save control form to handle extra Panelizer functionality.
+ */
+function panelizer_form_panels_ipe_edit_control_form_alter(&$form, &$form_state) {
+  if (empty($form_state['renderer'])) {
+    return;
+  }
+
+  $renderer = $form_state['renderer'];
+
+  $cache_key = $renderer->display->cache_key;
+  list($module, $type, $key) = explode(':', $cache_key, 3);
+  if ($module != 'panelizer') {
+    return;
+  }
+
+  if ($type == 'default') {
+    return;
+  }
+
+  // Load the $plugin information
+  $handler = panelizer_entity_plugin_get_handler($type);
+  if (!$handler) {
+    return;
+  }
+
+  // Get the entity that's being edited.
+  list($entity_id, $view_mode) = explode(':', $key);
+  $entities = entity_load($handler->entity_type, array($entity_id));
+  if (empty($entities[$entity_id])) {
+    return;
+  }
+
+  $entity = $entities[$entity_id];
+  list($entity_id, $revision_id, $bundle) = entity_extract_ids($handler->entity_type, $entity);
+  $entity_info = entity_get_info($handler->entity_type);
+
+  if (empty($entity->panelizer[$view_mode])) {
+    return;
+  }
+
+  $panelizer = $entities[$entity_id]->panelizer[$view_mode];
+
+  // If the entity already has customized panelizer data, add the revert button.
+  if (!empty($panelizer->did)) {
+    if ($handler->has_default_panel($bundle)) {
+      $form['buttons']['revert_default'] = array(
+        '#type' => 'submit',
+        '#value' => t('Revert to @bundle_name default', array('@bundle_name' => $entity_info['bundles'][$bundle]['label'])),
+        '#submit' => array('panels_ipe_revert_to_default'),
+      );
+      $form_state['panelizer entity'] = $entity;
+      $form_state['panelizer bundle'] = $bundle;
+      $form_state['panelizer handler'] = $handler;
+      $form_state['panelizer view_mode'] = $view_mode;
+    }
+    return;
+  }
+
+  // Change the default button to say "Save as custom".
+  $form['buttons']['submit']['#value'] = t('Save as custom');
+
+  // Add another button to save as the default instead:
+  $form['buttons']['save_default'] = array(
+    '#type' => 'submit',
+    '#value' => t('Save as @bundle_name default', array('@bundle_name' => $entity_info['bundles'][$bundle]['label'])),
+    '#submit' => array('panels_ipe_change_to_default', 'panels_edit_display_form_submit'),
+    '#save-display' => TRUE,
+    '#weight' => -1,
+    // precalculate the cache key so we don't have to unwind a bunch of stuff
+    // in the submit handler.
+    '#cache_key' => 'default:' . $handler->entity_type . ':' . $bundle . '.' . $panelizer->view_mode . ':' . $panelizer->name,
+    '#attributes' => array('class' => array('panels-ipe-save')),
+  );
+}
+
+/**
+ * Submit handler to save the panelizer default instead of customizing the entity.
+ */
+function panels_ipe_change_to_default($form, &$form_state) {
+  // Change the cache key so that it saves to the default instead of the
+  // entity. This works because we're actually editing the original display
+  // anyway, and everything else keys off the cache key.
+  $form_state['display']->swap_cache_key = $form_state['triggering_element']['#cache_key'];
+}
+
+/**
+ * Submit handler to revert to the default panelizer.
+ */
+function panels_ipe_revert_to_default($form, &$form_state) {
+  // Reduce code complexity due to indirection.
+  $handler = $form_state['panelizer handler'];
+  $entity = $form_state['panelizer entity'];
+  $bundle = $form_state['panelizer bundle'];
+  $view_mode = $form_state['panelizer view_mode'];
+  $renderer = $form_state['renderer'];
+
+  $handler->delete_entity_panelizer($entity, $view_mode);
+
+  $name = implode(':', array($handler->entity_type, $bundle, 'default'));
+  if ($view_mode != 'page_manager') {
+    $name .= ':' . $view_mode;
+  }
+  $cache_key = $form_state['display']->cache_key;
+
+  // Now load the original default display and force a rerender.
+  $panelizer = $handler->get_default_panelizer_object($bundle . '.' . $view_mode, $name);
+
+  $renderer->display = $display = $panelizer->display;
+  $display->cache_key = $cache_key;
+
+  $display->context = $handler->get_contexts($panelizer, $entity);
+
+  $renderer->commands[] = ajax_command_replace("#panels-ipe-display-{$renderer->clean_key}", panels_render_display($display, $renderer));
+}
