diff --git a/sites/all/modules/contrib/workbench_moderation/tests/workbench_moderation.test b/sites/all/modules/contrib/workbench_moderation/tests/workbench_moderation.test
index c7142d2..138b3e5 100644
--- a/sites/all/modules/contrib/workbench_moderation/tests/workbench_moderation.test
+++ b/sites/all/modules/contrib/workbench_moderation/tests/workbench_moderation.test
@@ -333,3 +333,64 @@ function testAliasRedirect() {
     $this->assertResponse(200);
   }
 }
+
+class WorkbenchModerationBookTestCase extends DrupalWebTestCase {
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Moderate book content',
+      'description' => 'Tests that published book nodes can be revised',
+      'group' => 'Workbench Moderation',
+    );
+  }
+
+  function setUp($modules = array()) {
+    // Enable Workbench Moderation and Book modules.
+    $modules = array_merge($modules, array('workbench_moderation', 'book'));
+    parent::setUp($modules);
+
+    $this->content_type = 'book';
+    // Enable moderation for book nodes.
+    variable_set('node_options_' . $this->content_type, array('revision', 'moderation'));
+
+    // Create and login a moderator user.
+    $this->moderator_user = $this->drupalCreateUser(array(
+      'access content',
+      'view revisions',
+      'view all unpublished content',
+      'view moderation history',
+      'view moderation messages',
+      'bypass workbench moderation',
+      "create {$this->content_type} content",
+      "edit any {$this->content_type} content",
+      'add content to books',
+      'create new books',
+    ));
+    $this->drupalLogin($this->moderator_user);
+  }
+
+  function testBookDraft() {
+    // Create a new, published book node.
+    $body_name = 'body[' . LANGUAGE_NONE . '][0]';
+    $edit = array(
+      'title' => $this->randomName(),
+      "{$body_name}[value]" => $this->randomString(128),
+      "{$body_name}[format]" => filter_default_format(),
+      'book[bid]' => 'new',
+      'workbench_moderation_state_new' => workbench_moderation_state_published(),
+    );
+    $this->drupalPost("node/add/{$this->content_type}", $edit, t('Save'));
+    $node = $this->drupalGetNodeByTitle($edit['title']);
+
+    // Create a new draft.
+    $new_title = $this->randomName(10) . '_revision1';
+    $edit = array('title' => $new_title);
+    $this->drupalPost("node/{$node->nid}/edit", $edit, t('Save'));
+
+    // Make sure we are viewing the newly-created draft. The book module and
+    // specifically book_node_presave() can interfere with Workbench Moderation.
+    $this->assertUrl("node/{$node->nid}/draft", array(), t('New draft is shown.'));
+    $this->assertText($new_title, t('Revised title is visible.'));
+  }
+
+}
diff --git a/sites/all/modules/contrib/workbench_moderation/workbench_moderation.module b/sites/all/modules/contrib/workbench_moderation/workbench_moderation.module
index c28261b..fa6e6dd 100644
--- a/sites/all/modules/contrib/workbench_moderation/workbench_moderation.module
+++ b/sites/all/modules/contrib/workbench_moderation/workbench_moderation.module
@@ -665,6 +665,7 @@ function workbench_moderation_entity_presave($entity, $entity_type) {
   if ($entity_type != 'node') {
     return;
   }
+
   // Is the content type under moderation?
   if (!workbench_moderation_node_type_moderated($entity->type)) {
     return;
@@ -687,6 +688,11 @@ function workbench_moderation_entity_presave($entity, $entity_type) {
     $entity->is_draft_revision = FALSE;
   }
 
+  // Book module forces new revision in book_node_presave() that needs to be cancelled.
+  if (isset($entity->workbench_moderation['updating_live_revision']) && !empty($entity->book['bid'])) {
+    $entity->revision = 0;
+  }
+
   // Inform drafty if this is a new revision, if it has not already been
   // marked as such.
   elseif (!isset($entity->is_draft_revision) && !$published) {
