diff --git a/modules/book/book.module b/modules/book/book.module
index e1451048053d4fde4d9e04d2718ada01d817207c..e70b824a2fb5c21201288c24ce2bafdb0a615186 100644
--- a/modules/book/book.module
+++ b/modules/book/book.module
@@ -294,7 +294,7 @@ function theme_book_title_link($link) {
  * the options for a form select.
  */
 function book_get_books() {
-  static $all_books;
+  $all_books = &drupal_static(__FUNCTION__);
 
   if (!isset($all_books)) {
     $all_books = array();
@@ -580,7 +580,7 @@ function book_update_bid($book_link) {
  *   immediately after it in the array.
  */
 function book_get_flat_menu($book_link) {
-  static $flat = array();
+  $flat = &drupal_static(__FUNCTION__, array());
 
   if (!isset($flat[$book_link['mlid']])) {
     // Call menu_tree_all_data() to take advantage of the menu system's caching.
@@ -1144,7 +1144,7 @@ function book_link_load($mlid) {
  *   An subtree of menu links in an array, in the order they should be rendered.
  */
 function book_menu_subtree_data($item) {
-  static $tree = array();
+  $tree = &drupal_static(__FUNCTION__, array());
 
   // Generate a cache ID (cid) specific for this $menu_name and $item.
   $cid = 'links:' . $item['menu_name'] . ':subtree-cid:' . $item['mlid'];
diff --git a/modules/book/book.test b/modules/book/book.test
index 872cbc5624d3b1b49ad35d24063509263bee5b22..8290f6f17d160c1da47ac99330dd0a68e29f8ebb 100644
--- a/modules/book/book.test
+++ b/modules/book/book.test
@@ -95,6 +95,8 @@ class BookTestCase extends DrupalWebTestCase {
    *   The nodes that should be displayed in the breadcrumb.
    */
   function checkBookNode($node, $nodes, $previous = FALSE, $up = FALSE, $next = FALSE, array $breadcrumb) {
+    // $number does not use drupal_static as it should not be reset
+    // since it uniquely identifies each call to checkBookNode().
     static $number = 0;
     $this->drupalGet('node/' . $node->nid);
 
@@ -166,6 +168,8 @@ class BookTestCase extends DrupalWebTestCase {
    * @param integer $parent Parent book reference id.
    */
   function createBookNode($book_nid, $parent = NULL) {
+    // $number does not use drupal_static as it should not be reset
+    // since it uniquely identifies each call to createBookNode().
     static $number = 0; // Used to ensure that when sorted nodes stay in same order.
 
     $edit = array();