diff --git a/core/modules/book/src/Form/BookAdminEditForm.php b/core/modules/book/src/Form/BookAdminEditForm.php
index fb1e3e8..2cf7a18 100644
--- a/core/modules/book/src/Form/BookAdminEditForm.php
+++ b/core/modules/book/src/Form/BookAdminEditForm.php
@@ -97,31 +97,33 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
     // Save elements in the same order as defined in post rather than the form.
     // This ensures parents are updated before their children, preventing orphans.
     $user_input = $form_state->getUserInput();
-    $order = array_flip(array_keys($user_input['table']));
-    $form['table'] = array_merge($order, $form['table']);
-
-    foreach (Element::children($form['table']) as $key) {
-      if ($form['table'][$key]['#item']) {
-        $row = $form['table'][$key];
-        $values = $form_state->getValue(array('table', $key));
-
-        // Update menu item if moved.
-        if ($row['pid']['#default_value'] != $values['pid'] || $row['weight']['#default_value'] != $values['weight']) {
-          $link = $this->bookManager->loadBookLink($values['nid'], FALSE);
-          $link['weight'] = $values['weight'];
-          $link['pid'] = $values['pid'];
-          $this->bookManager->saveBookLink($link, FALSE);
-        }
-
-        // Update the title if changed.
-        if ($row['title']['#default_value'] != $values['title']) {
-          $node = $this->nodeStorage->load($values['nid']);
-          $node->revision_log = $this->t('Title changed from %original to %current.', array('%original' => $node->label(), '%current' => $values['title']));
-          $node->title = $values['title'];
-          $node->book['link_title'] = $values['title'];
-          $node->setNewRevision();
-          $node->save();
-          $this->logger('content')->notice('book: updated %title.', array('%title' => $node->label(), 'link' => $node->link($this->t('View'))));
+    if (isset($user_input['table'])) {
+      $order = array_flip(array_keys($user_input['table']));
+      $form['table'] = array_merge($order, $form['table']);
+
+      foreach (Element::children($form['table']) as $key) {
+        if ($form['table'][$key]['#item']) {
+          $row = $form['table'][$key];
+          $values = $form_state->getValue(array('table', $key));
+
+          // Update menu item if moved.
+          if ($row['pid']['#default_value'] != $values['pid'] || $row['weight']['#default_value'] != $values['weight']) {
+            $link = $this->bookManager->loadBookLink($values['nid'], FALSE);
+            $link['weight'] = $values['weight'];
+            $link['pid'] = $values['pid'];
+            $this->bookManager->saveBookLink($link, FALSE);
+          }
+
+          // Update the title if changed.
+          if ($row['title']['#default_value'] != $values['title']) {
+            $node = $this->nodeStorage->load($values['nid']);
+            $node->revision_log = $this->t('Title changed from %original to %current.', array('%original' => $node->label(), '%current' => $values['title']));
+            $node->title = $values['title'];
+            $node->book['link_title'] = $values['title'];
+            $node->setNewRevision();
+            $node->save();
+            $this->logger('content')->notice('book: updated %title.', array('%title' => $node->label(), 'link' => $node->link($this->t('View'))));
+          }
         }
       }
     }
diff --git a/core/modules/book/src/Tests/BookTest.php b/core/modules/book/src/Tests/BookTest.php
index d4cf57f..bc66042 100644
--- a/core/modules/book/src/Tests/BookTest.php
+++ b/core/modules/book/src/Tests/BookTest.php
@@ -95,6 +95,17 @@ function createBook() {
     return $nodes;
   }
 
+  function testEmptyBook() {
+      // Create new book.
+    $nodes = $this->createBook();
+    $book = $this->book;
+
+    $this->drupalLogin($this->book_author);
+    $this->drupalGet('admin/structure/book/' . $book->id());
+    $this->clickLink(t('Save book pages'));
+    $this->assertText(t('Updated book %book.', array('%book' => $book->getTitle())));
+  }
+
   /**
    * Tests book functionality through node interfaces.
    */
