diff --git a/core/modules/node/src/NodeForm.php b/core/modules/node/src/NodeForm.php
index 7f9ef84..34aebdc 100644
--- a/core/modules/node/src/NodeForm.php
+++ b/core/modules/node/src/NodeForm.php
@@ -346,6 +346,11 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
    *   The current state of the form.
    */
   public function preview(array $form, FormStateInterface $form_state) {
+    // Save the destination for later.
+    if ($destination = $this->getRequest()->query->get('destination')) {
+      $this->getRequest()->query->remove('destination');
+      $this->entity->preview_destination = $destination;
+    }
     $store = $this->tempStoreFactory->get('node_preview');
     $this->entity->in_preview = TRUE;
     $store->set($this->entity->uuid(), $form_state);
@@ -424,7 +429,10 @@ public function save(array $form, FormStateInterface $form_state) {
     if ($node->id()) {
       $form_state->setValue('nid', $node->id());
       $form_state->set('nid', $node->id());
-      if ($node->access('view')) {
+      if (!empty($this->entity->preview_destination)) {
+        $this->getRequest()->query->set('destination', $this->entity->preview_destination);
+      }
+      elseif ($node->access('view')) {
         $form_state->setRedirect(
           'entity.node.canonical',
           array('node' => $node->id())
diff --git a/core/modules/node/src/Tests/PagePreviewTest.php b/core/modules/node/src/Tests/PagePreviewTest.php
index 5fc64d3..9926d3c 100644
--- a/core/modules/node/src/Tests/PagePreviewTest.php
+++ b/core/modules/node/src/Tests/PagePreviewTest.php
@@ -32,11 +32,16 @@ class PagePreviewTest extends NodeTestBase {
    */
   protected $field_name;
 
+  /**
+   * The user account used in this test.
+   */
+  protected $webUser;
+
   protected function setUp() {
     parent::setUp();
 
-    $web_user = $this->drupalCreateUser(array('edit own page content', 'create page content'));
-    $this->drupalLogin($web_user);
+    $this->webUser = $this->drupalCreateUser(array('edit own page content', 'create page content'));
+    $this->drupalLogin($this->webUser);
 
     // Add a vocabulary so we can test different view modes.
     $vocabulary = entity_create('taxonomy_vocabulary', array(
@@ -194,6 +199,15 @@ function testPagePreview() {
     $this->assertLink($newterm1);
     $this->assertLink($newterm2);
     $this->assertNoLink($newterm3);
+
+    // Check that destination is remembered when clicking on preview. When
+    // going back to the edit form and clicking save, we should go back to
+    // the original, if set.
+    $this->drupalPostForm('node/' . $node->id() . '/edit', array(), t('Preview'), array('query' => array('destination' => 'user')));
+    $this->assertEqual($this->getUrl(), \Drupal::url('entity.node.preview', array('node_preview' => $node->uuid(), 'view_mode_id' => 'default'), array('absolute' => TRUE)));
+    $this->clickLink(t('Back to content editing'));
+    $this->drupalPostForm(NULL, array(), t('Save'));
+    $this->assertEqual($this->getUrl(), \Drupal::url('entity.user.canonical', array('user' => $this->webUser->id()), array('absolute' => TRUE)));
   }
 
   /**
