diff -rupN drupal-5.21/modules/book/book.module drupal-5.21_new/modules/book/book.module
--- drupal-5.21/modules/book/book.module	2009-05-14 05:41:56.000000000 +1000
+++ modules/book/book.module	2009-12-21 12:16:16.011042429 +1100
@@ -23,7 +23,7 @@ function book_node_info() {
  * Implementation of hook_perm().
  */
 function book_perm() {
-    return array('outline posts in books', 'create book pages', 'create new books', 'edit book pages', 'edit own book pages', 'see printer-friendly version');
+    return array('outline posts in books', 'create book pages', 'create new books', 'edit book pages', 'edit own book pages', 'see printer-friendly version', 'view unpublished book pages');
 }
 
 /**
diff -rupN drupal-5.21/modules/forum/forum.module drupal-5.21_new/modules/forum/forum.module
--- drupal-5.21/modules/forum/forum.module	2009-07-02 06:52:11.000000000 +1000
+++ modules/forum/forum.module	2009-12-21 12:17:03.725043280 +1100
@@ -128,7 +128,7 @@ function forum_access($op, $node) {
  * Implementation of hook_perm().
  */
 function forum_perm() {
-  return array('create forum topics', 'edit own forum topics', 'administer forums');
+  return array('create forum topics', 'edit own forum topics', 'administer forums', 'view unpublished forum topics');
 }
 
 /**
diff -rupN drupal-5.21/modules/node/node.module drupal-5.21_new/modules/node/node.module
--- drupal-5.21/modules/node/node.module	2009-01-15 10:32:14.000000000 +1100
+++ modules/node/node.module	2009-12-21 12:40:11.293043948 +1100
@@ -840,6 +840,12 @@ function node_perm() {
       $perms[] = 'create '. $name .' content';
       $perms[] = 'edit own '. $name .' content';
       $perms[] = 'edit '. $name .' content';
+
+      // View unpublished nodes
+      // Allows users to view unpublished nodes
+      // For users to be able to edit unpblished nodes all they need
+      // is to have edit all permission for that content type.
+      $perms[] = 'view unpublished ' . $name . ' content';
     }
   }
 
@@ -2806,9 +2812,24 @@ function node_access($op, $node = NULL)
     return (db_result($result));
   }
 
-  // Let authors view their own nodes.
-  if ($op == 'view' && $user->uid == $node->uid && $user->uid != 0) {
-    return TRUE;
+  if ($op == 'view') {
+    // For unpublished nodes, allow access to those with permission
+    // This has to be done here so it doesn't step on other node access modules
+    if (!$node->status) {
+      if ($module == 'node_content' && user_access('view unpublished '. $node->type .' content')) {
+        return TRUE;
+      }
+      elseif ($module == 'book' && user_access('view unpublished book pages')) {
+        return TRUE;
+      }
+      elseif ($module == 'forum' && user_access('view unpublished forum topics')) {
+        return TRUE; 
+      }
+    }
+    // Let authors view their own nodes.
+    if ($user->uid == $node->uid && $user->uid != 0) {
+      return TRUE;
+    }
   }
 
   return FALSE;
