diff --git a/css/panelizer-ipe.css b/css/panelizer-ipe.css
new file mode 100644
index 0000000..54b7279
--- /dev/null
+++ b/css/panelizer-ipe.css
@@ -0,0 +1,14 @@
+/**
+ * @file
+ * Custom CSS for use with Panelizer and IPE.
+ */
+
+body.panels-ipe .panels-ipe-form-container .form-item-revision,
+body.panels-ipe .panels-ipe-form-container .form-item-log {
+  margin-bottom: 0;
+}
+
+body.panels-ipe .panels-ipe-form-container .form-item-revision label,
+body.panels-ipe .panels-ipe-form-container .form-item-log label {
+  color: white;
+}
diff --git a/panelizer.module b/panelizer.module
index 997c5b6..dfe8144 100644
--- a/panelizer.module
+++ b/panelizer.module
@@ -1630,6 +1630,22 @@ function panelizer_form_panels_ipe_edit_control_form_alter(&$form, &$form_state)
 
   $panelizer = $entities[$entity_id]->panelizer[$view_mode];
 
+  module_load_include('inc', 'panelizer', 'includes/common');
+  $revision_info = $handler->entity_allows_revisions($entity);
+
+  // If this entity has revisions enabled we can assume that they have
+  // permissions to add revisions via IPE.
+  if (!empty($revision_info)) {
+    $form_state['entity'] = $entity;
+    $form_state['revision info'] = $revision_info;
+    panelizer_add_revision_info_form($form, $form_state);
+    // Tweak the log message field to make it fit better.
+    if (isset($form['revision_information'])) {
+      $form['revision_information']['log']['#type'] = 'textfield';
+      $form['revision_information']['log']['#description'] = '';
+    }
+  }
+
   // If the entity already has customized panelizer data, add the revert button.
   if (!empty($panelizer->did)) {
     if ($handler->has_default_panel($bundle . '.' . $view_mode)) {
@@ -1679,6 +1695,48 @@ function panelizer_form_panels_ipe_edit_control_form_alter(&$form, &$form_state)
 }
 
 /**
+ * Implement template_preprocess_panels_ipe_toolbar().
+ *
+ * Add some extra CSS for the Panelizer additional requirements for IPE.
+ */
+function panelizer_preprocess_panels_ipe_toolbar(&$variables) {
+  // Some custom CSS to improve the UX.
+  // $variables['#attached'] = array(
+  //   'css' => array(
+  //     drupal_get_path('module', 'panelizer') . '/css/panelizer.ipe.css',
+  //   ),
+  // );
+  // dpm($variables);
+}
+
+/**
+ * Implements hook_panels_ipe_ajax_save_commands_alter().
+ *
+ * If Workbench Moderation is enabled, and this is for the form submission on a
+ * Panelized node, redirect to the latest revision upon save.
+ */
+function panelizer_panels_ipe_ajax_save_commands_alter(&$ipe, $form_state) {
+  // This requires Workbench Moderation.
+  if (module_exists('workbench_moderation')) {
+    // The form was actually saved.
+    if (!empty($form_state['submitted']) && !empty($ipe->meta_location)) {
+      // This is for a revisions-enabled Panelizer entity.
+      if (!empty($form_state['panelizer entity']) && !empty($form_state['panelizer handler']) && !empty($form_state['use revisions'])) {
+        // Extract the Panelizer details.
+        $entity = $form_state['panelizer entity'];
+        $handler = $form_state['panelizer handler'];
+        // Only support nodes.
+        if ($handler->entity_type == 'node') {
+          // Change the first AJAX command to a redirection to the latest draft
+          // for this node.
+          $ipe->commands[0] = ctools_ajax_command_redirect('node/' . $entity->nid . '/current-revision');
+        }
+      }
+    }
+  }
+}
+
+/**
  * Submit handler to save the panelizer default instead of customizing the entity.
  */
 function panels_ipe_change_to_default($form, &$form_state) {
diff --git a/plugins/entity/PanelizerEntityDefault.class.php b/plugins/entity/PanelizerEntityDefault.class.php
index fee3d08..346de9d 100644
--- a/plugins/entity/PanelizerEntityDefault.class.php
+++ b/plugins/entity/PanelizerEntityDefault.class.php
@@ -2903,8 +2903,10 @@ abstract class PanelizerEntityDefault implements PanelizerEntityInterface {
     }
 
     if (!empty($parents['panels_renderer_editor'])) {
+      $path = drupal_get_path('module', 'panelizer');
       ctools_add_js('panelizer-ipe', 'panelizer');
-      drupal_add_js(drupal_get_path('module', 'panelizer') . "/js/panelizer-ipe.js", array('group' => JS_LIBRARY));
+      drupal_add_js($path . "/js/panelizer-ipe.js", array('group' => JS_LIBRARY));
+      drupal_add_css($path . "/css/panelizer-ipe.css");
     }
 
     $info['title'] = $panelizer->display->get_title();
