diff -u -r1.15.2.4 book_access.module
--- book_access.module	21 Nov 2009 19:39:12 -0000	1.15.2.4
+++ book_access.module	23 Nov 2009 01:33:28 -0000
@@ -360,20 +360,21 @@
 
   $row = new stdClass();
 
-  foreach ($form_state['values']['access'] as $nid => $access) {
-    $row->nid = $nid;
+  // Remove previous book access entries, keep table clean
+  db_query("DELETE FROM {book_access}");
 
-    foreach ($access['view'] as $rid => $checked) {
-      $row->rid = $rid;
-      $row->grant_view = (bool) $checked;
-      $row->grant_update = ($access['update'][$rid] > 0);
-      $row->grant_delete = ($access['delete'][$rid] > 0);
-
-      $bool = db_result(
-        db_query("SELECT 1 FROM {book_access} WHERE nid = %d AND rid = %d")
-      );
+  if (isset($form_state['values']['access'])) {
+    foreach ($form_state['values']['access'] as $nid => $access) {
+      $row->nid = $nid;
+
+      foreach ($access['view'] as $rid => $checked) {
+        $row->rid = $rid;
+        $row->grant_view = (bool) $checked;
+        $row->grant_update = ($access['update'][$rid] > 0);
+        $row->grant_delete = ($access['delete'][$rid] > 0);
 
-      drupal_write_record('book_access', $row, $bool ? array('nid', 'rid') : NULL);
+        drupal_write_record('book_access', $row);
+      }
     }
   }
 

