diff --git a/panelizer.info b/panelizer.info
index 7a868fa..33dca00 100644
--- a/panelizer.info
+++ b/panelizer.info
@@ -23,6 +23,7 @@ files[] = plugins/views/panelizer_plugin_row_panelizer_node_view.inc
 files[] = tests/panelizer.helper.test
 files[] = tests/panelizer.admin_settings.test
 files[] = tests/panelizer.node.test
+files[] = tests/panelizer.node_revisions.test
 
 ; Used by the testing system.
 test_dependencies[] = views
diff --git a/tests/panelizer.node.test b/tests/panelizer.node.test
index 9d83f6c..97953ed 100644
--- a/tests/panelizer.node.test
+++ b/tests/panelizer.node.test
@@ -1,7 +1,7 @@
 <?php
 /**
  * @file
- * Test the admin functionality for Panelizer.
+ * Test the node functionality for Panelizer.
  */
 
 /**
@@ -30,6 +30,7 @@ class PanelizerNodeTest extends PanelizerTestHelper {
     $perms = array(
       'create page content',
       'administer content types',
+      'administer nodes',
       'bypass node access',
       'administer panelizer',
     );
@@ -37,6 +38,14 @@ class PanelizerNodeTest extends PanelizerTestHelper {
     $this->drupalLogin($web_user);
   }
 
+  /* How to enable a Page Manager Page */
+  function simpleEnablePage($page_name) {
+    $page = page_manager_get_page_cache($page_name);
+    $function = ctools_plugin_get_function($page->subtask, "enable callback");
+    $function($page, FALSE);
+    menu_rebuild();
+  }
+
   /**
    * Verify that the "Basic page" content type can be panelized.
    */
@@ -82,4 +91,93 @@ class PanelizerNodeTest extends PanelizerTestHelper {
     $this->assertEqual(count($elements), 1, 'The node is panelized.');
   }
 
+  /**
+   * Verify that multiple displays work.
+   */
+  function testPageMultipleDisplays() {
+    // Panelize "Basic page" content type.
+
+    // ensure node_view panel page is enabled for full page override to work
+    $this->simpleEnablePage('node_view');
+
+    $edit = array();
+    $edit['panelizer[status]'] = TRUE;
+    // Enable the 'Full page override' view mode, which is managed by Page
+    // Manager.
+    $edit['panelizer[view modes][page_manager][status]'] = TRUE;
+    // Provide a default display.
+    $edit['panelizer[view modes][page_manager][default]'] = TRUE;
+    // Allow a specific display to be selected per node.
+    $edit['panelizer[view modes][page_manager][choice]'] = TRUE;
+    $this->drupalPost('admin/structure/types/manage/page', $edit, t('Save content type'));
+
+    // Verify the admin UI works.
+    $this->drupalGet('admin/structure/types/manage/page/panelizer/page_manager');
+    $this->assertResponse(200);
+    // Confirm the default display was added.
+    $this->assertText('node:page:default');
+
+
+    // Clone the display.
+    $this->drupalGet('admin/structure/types/manage/page/panelizer/page_manager/node:page:default/clone');
+    $this->assertResponse(200);
+
+
+    $this->assertText(t('Name'));
+
+    $this->assertFieldById('edit-title', "Clone of Default", "Administrative Title");
+
+
+    // HACK: manually set the machine name here as machine-name.js takes care of this and it's functionality should not be tested here
+
+    $this->drupalPost(NULL, array('name' => 'clone_of_default'), t('Save'));
+    // Confirm the status message.
+    $this->assertText(t('!item has been created.', array('!item' => 'node:page:clone_of_default')));
+    // Verity the tabs are present on the form.
+    $this->assertLink('Settings');
+    $this->assertLink('Context');
+    $this->assertLink('Access');
+    $this->assertLink('Layout');
+    $this->assertLink('Content');
+    $this->assertLink('Export');
+
+    // Confirm the options show up on the node form.
+    $this->drupalGet('node/add/page');
+    $this->assertField('panelizer[page_manager][name]');
+
+    // Create a node with cloned display mode.
+    $edit = array();
+    $langcode = LANGUAGE_NONE;
+    $edit["title"] = $this->randomName(8);
+    $edit["body[$langcode][0][value]"] = $this->randomName(16);
+    $edit["panelizer[page_manager][name]"] = "node:page:clone_of_default";
+
+    $this->drupalPost('node/add/page', $edit, t('Save'));
+
+    // Check that the post has been panelized.
+    $node = $this->drupalGetNodeByTitle($edit["title"]);
+    $this->assertLink('Customize display', 0, 'The customize display link appears on the page');
+    $this->assertLinkByHref('node/' . $node->nid . '/panelizer', 0, 'A link to customize the node appears on the page');
+
+    // Check that the view mode can be panelized.
+    $this->drupalGet('node/' . $node->nid . '/panelizer');
+
+    $this->assertLink(t('Full page override'), 0, 'The panelize link for the "Full page override" view mode appears on the page');
+    $this->assertLinkByHref('node/' . $node->nid . '/panelizer/page_manager', 0, 'A link to panelize the "Full page override" view mode appears on the page');
+
+    $this->assertNoLink(t('reset'), 0, 'The current display cannot be reset, it is default');
+    $this->assertText(t('Clone of Default'), 0, 'The current selected display is "Clone of Default"');
+    // Verify that the view mode is not currently panelized.
+    $this->drupalGet('node/' . $node->nid . '/panelizer/page_manager');
+
+    // Panelize this view mode.
+    $this->drupalPost(NULL, array(), t('Save'));
+
+    // Check that the view mode has been panelized.
+    $this->drupalGet('node/' . $node->nid . '/panelizer');
+
+    $this->assertLink(t('reset'), 0, 'The current panelizer state can be reset');
+    $this->assertText(t('Custom'), 0, 'The current panelizer state of this node is "Custom"');
+  }
+
 }
diff --git a/tests/panelizer.node_revisions.test b/tests/panelizer.node_revisions.test
new file mode 100644
index 0000000..b2cd939
--- /dev/null
+++ b/tests/panelizer.node_revisions.test
@@ -0,0 +1,211 @@
+<?php
+/**
+ * @file
+ * Test the node revisions functionality for Panelizer.
+ */
+
+/**
+ * Verifies Panelizer configuration options for node revisions.
+ */
+class PanelizerNodeRevisionTest extends PanelizerTestHelper {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'Panelizer node revision tests',
+      'description' => 'Test panelizer customization in node revisions.',
+      'group' => 'Panelizer',
+      'dependencies' => array('ctools', 'panels'),
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  function setUp(array $modules = array()) {
+    parent::setUp();
+
+    $perms = array(
+      'create page content',
+      'administer content types',
+      'administer nodes',
+      'bypass node access',
+      'use page manager',
+      'administer panelizer',
+    );
+    $web_user = $this->drupalCreateUser($perms);
+    $this->drupalLogin($web_user);
+  }
+
+  /**
+   * Tests different displays for different node revisions
+   */
+  function testPageAlterDisplayOnNewRevision() {
+    // Panelize "Basic page" content type and the 'default' display.
+    $edit = array();
+    $edit['panelizer[status]'] = TRUE;
+    $edit['panelizer[view modes][default][status]'] = TRUE;
+    $edit['panelizer[view modes][default][default]'] = TRUE;
+    $edit['panelizer[view modes][default][choice]'] = TRUE;
+    $this->drupalPost('admin/structure/types/manage/page', $edit, t('Save content type'));
+
+
+    // Clone the default display.
+    $this->drupalGet('admin/structure/types/manage/page/panelizer/default/node:page:default:default/clone');
+    $this->assertResponse(200);
+
+    $this->assertText(t('Name'));
+
+    $this->assertFieldById('edit-title', "Clone of Default", "Administrative Title");
+
+
+    // HACK: manually set the machine name here as machine-name.js takes care of this and it's functionality should not be tested here
+
+    $this->drupalPost(NULL, array('name' => 'clone_of_default'), t('Save'));
+    // Confirm the status message.
+    $this->assertText(t('!item has been created.', array('!item' => 'node:page:clone_of_default:default')));
+
+    // Set a custom css class to identify this cloned display
+    $edit = array();
+    $clone_css_class = 'panelizer-test-page-node-revisions-clone';
+    $edit['css_class'] = $clone_css_class;
+    $this->drupalPost('admin/structure/types/manage/page/panelizer/default/node:page:clone_of_default:default/settings', $edit, t('Save'));
+    $this->assertResponse(200);
+    $this->assertText(t('The settings have been updated.'));
+
+
+    // Assert panel choice for new pages
+    $this->drupalGet('node/add/page');
+    $this->assertField('panelizer[default][name]', 'Display can be chosen on new page form');
+
+    // Create a node with default panelizer display.
+    $edit = array();
+    $langcode = LANGUAGE_NONE;
+    $edit["title"] = $this->randomName(8);
+    $edit["body[$langcode][0][value]"] = $this->randomName(16);
+    $this->drupalPost('node/add/page', $edit, t('Save'));
+
+    // Check that the post can be panelized.
+    $node = $this->drupalGetNodeByTitle($edit["title"]);
+    $this->assertLink('Customize display', 0, 'The customize display link appears on the page');
+    $this->assertLinkByHref('node/' . $node->nid . '/panelizer', 0, 'A link to customize the node appears on the page');
+
+    // Assert panel choice for existing pages
+    $this->drupalGet('node/' . $node->nid . '/edit');
+    $this->assertField('panelizer[default][name]', 'Display can be chosen on edit page form');
+
+
+    // Create a new revision with a different display
+    $langcode = LANGUAGE_NONE;
+    $edit["revision"] = 1;
+    $edit["log"] = "Changed panelizer display in a revision";
+    $edit["panelizer[default][name]"] = 'node:page:clone_of_default:default';
+    $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
+    $this->assertResponse(200);
+    $this->assertLink(t('Revisions'), 0, 'The node has multiple revisions');
+
+    // Check that the new revision is rendered using the cloned display
+    $elements = $this->xpath('//div[contains(@class,:class)]', array(':class' => $clone_css_class));
+    $this->assertEqual(count($elements), 1, 'The node is using the cloned display.');
+
+
+    // Check that the old revision is still using the default display
+    $this->drupalGet('node/' . $node->nid . '/revisions');
+    $this->assertResponse(200);
+
+    $revisions = node_revision_list($node);
+
+    $oldest_revision = array_pop($revisions);
+
+    $this->assertNotNull($oldest_revision->vid);
+
+    $this->drupalGet('node/' . $node->nid . '/revisions/' . $oldest_revision->vid . '/view');
+    $this->assertResponse(200);
+
+    $elements = $this->xpath('//div[contains(@class,:class)]', array(':class' => $clone_css_class));
+    $this->assertEqual(count($elements), 0, 'The node revision is not using the cloned display.');
+    $elements = $this->xpath('//div[contains(@class,:class)]', array(':class' => 'panelizer-view-mode'));
+    $this->assertEqual(count($elements), 1, 'The node is using the default display.');
+
+    // Clone the cloned display.
+    $this->drupalGet('admin/structure/types/manage/page/panelizer/default/node:page:clone_of_default:default/clone');
+    $this->assertResponse(200);
+
+    $this->assertText(t('Name'));
+
+    $this->assertFieldById('edit-title', "Clone of Clone of Default", "Administrative Title");
+
+
+    // HACK: manually set the machine name here as machine-name.js takes care of this and it's functionality should not be tested here
+
+    $this->drupalPost(NULL, array('name' => 'clone_of_clone_of_default'), t('Save'));
+    // Confirm the status message.
+    $this->assertText(t('!item has been created.', array('!item' => 'node:page:clone_of_clone_of_default:default')));
+
+    // Set a custom css class to identify this cloned display
+    $edit = array();
+    $clone_of_clone_css_class = 'panelizer-test-page-node-revisions-cloned-clone';
+    $edit['css_class'] = $clone_of_clone_css_class;
+    $this->drupalPost('admin/structure/types/manage/page/panelizer/default/node:page:clone_of_clone_of_default:default/settings', $edit, t('Save'));
+    $this->assertResponse(200);
+    $this->assertText(t('The settings have been updated.'));
+
+
+    // Create a new revision with another different display
+    $langcode = LANGUAGE_NONE;
+    $edit = array();
+    $edit['title'] = $node->title;
+    $edit["body[$langcode][0][value]"] = $node->body[$langcode][0]["value"];
+    $edit["revision"] = 1;
+    $edit["log"] = "Changed panelizer display in another revision";
+    $edit["panelizer[default][name]"] = 'node:page:clone_of_clone_of_default:default';
+    $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
+    $this->assertResponse(200);
+
+
+    // Check that the new revision is rendered using the cloned display
+    $elements = $this->xpath('//div[contains(@class,:class)]', array(':class' => $clone_of_clone_css_class));
+    $this->assertEqual(count($elements), 1, 'The node is using the cloned display.');
+
+
+    // Check that the oldest revision is still using the default display
+    $this->drupalGet('node/' . $node->nid . '/revisions');
+    $this->assertResponse(200);
+
+    $revisions = node_revision_list($node);
+
+    $this->assertEqual(count($revisions), 3, "The node has one published and two former revisions");
+
+    $oldest_revision = array_pop($revisions);
+
+    $this->assertNotNull($oldest_revision->vid);
+
+    $this->drupalGet('node/' . $node->nid . '/revisions/' . $oldest_revision->vid . '/view');
+    $this->assertResponse(200);
+
+    $elements = $this->xpath('//div[contains(@class,:class)]', array(':class' => $clone_of_clone_css_class));
+    $this->assertEqual(count($elements), 0, 'The node revision is NOT using the clone of cloned display.');
+    $elements = $this->xpath('//div[contains(@class,:class)]', array(':class' => $clone_css_class));
+    $this->assertEqual(count($elements), 0, 'The node revision is NOT using the cloned display.');
+    $elements = $this->xpath('//div[contains(@class,:class)]', array(':class' => 'panelizer-view-mode'));
+    $this->assertEqual(count($elements), 1, 'The node revision is using the default display.');
+
+    // Check that the previous revision is still using the original cloned display
+
+    $previous_revision = array_pop($revisions);
+
+    $this->assertNotNull($previous_revision->vid);
+
+    $this->drupalGet('node/' . $node->nid . '/revisions/' . $previous_revision->vid . '/view');
+    $this->assertResponse(200);
+
+    $elements = $this->xpath('//div[contains(@class,:class)]', array(':class' => $clone_of_clone_css_class));
+    $this->assertEqual(count($elements), 0, 'The node revision is NOT using the clone of cloned display.');
+    $elements = $this->xpath('//div[contains(@class,:class)]', array(':class' => $clone_css_class));
+    $this->assertEqual(count($elements), 1, 'The node revision is using the default display.');
+  }
+
+
+}
