diff -urp guestbook/guestbook.install guestbook_NEW/guestbook.install
--- guestbook/guestbook.install	2009-01-07 23:29:04.000000000 -0600
+++ guestbook_NEW/guestbook.install	2009-08-10 09:56:31.000000000 -0500
@@ -17,11 +17,13 @@ function guestbook_schema() {
       'commentauthor' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
       'comment' => array('type' => 'text', 'not null' => TRUE),
       'created' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
+      'published' => array('type' => 'int', 'size' => 'tiny', 'initial' => '1', 'not null' => TRUE, 'unsigned' => TRUE, 'default' => 0),
     ),
     'indexes' => array(
       'recipient' => array('recipient'),
       'commentauthor' => array('commentauthor'),
       'created' => array('created'),
+	  'published' => array('published'),
     ),
     'primary key' => array('id'),
   );
@@ -70,5 +72,3 @@ function guestbook_update_6200() {
   }
   return $ret;
 }
-
-
diff -urp guestbook/guestbook.module guestbook_NEW/guestbook.module
--- guestbook/guestbook.module	2009-08-10 07:58:15.000000000 -0500
+++ guestbook_NEW/guestbook.module	2009-08-10 09:42:01.000000000 -0500
@@ -325,6 +325,7 @@ function guestbook_page($account, $op = 
 
   // Delete or comment an entry
   $comment_entry = $sql_where = '';
+  $sql_where_published =_guestbook_access('moderate', $account->uid) ? "" : " AND g.published = 1 ";
   if (_guestbook_access('moderate', $account->uid) && is_numeric($op_id)) {
     switch ($op) {
       case 'edit':
@@ -332,6 +333,9 @@ function guestbook_page($account, $op = 
 
       case 'delete':
         return guestbook_delete_entry_confirm_page($account->uid, $op_id);
+      
+      case 'publish':
+        return guestbook_publish_entry_confirm_page($account->uid, $op_id);
 
       case 'comment':
         $comment_entry = $op_id;
@@ -347,6 +351,7 @@ function guestbook_page($account, $op = 
     LEFT JOIN {users} u1 ON g.author = u1.uid 
     LEFT JOIN {users} u2 ON g.commentauthor = u2.uid 
     WHERE g.recipient = %d $sql_where
+    $sql_where_published
     ORDER BY g.created DESC";
   if (!empty($comment_entry)) {
     // Fetch only guestbook entry for administrative comment.
@@ -550,7 +555,7 @@ function guestbook_form_entry_form_submi
   $entry = db_fetch_array(db_query("SELECT * FROM {guestbook} WHERE id = %d", $entryid));
   module_invoke_all('guestbook', 'insert', $entry);
 
-  drupal_set_message(t('Your message has been added.'));
+  drupal_set_message(t('Your message has been submitted and will appear after it is approved.'));
 }
 
 /**
@@ -718,6 +723,37 @@ function guestbook_delete_entry_confirm_
   }
 }
 
+function guestbook_publish_entry_confirm_page($uid, $entry_id) {
+  return drupal_get_form('guestbook_publish_entry_confirm', $uid, $entry_id);
+}
+
+function guestbook_publish_entry_confirm($form_state, $uid, $entry_id) {
+  $entry = db_fetch_array(db_query(
+      "SELECT g.*, u1.name, u1.data, u1.picture, u2.name as commentby
+    FROM {guestbook} g
+    LEFT JOIN {users} u1 ON g.author = u1.uid
+    LEFT JOIN {users} u2 ON g.commentauthor = u2.uid
+    WHERE g.id = %d", $entry_id));
+
+  $form             = array();
+  $form['entry_id'] = array('#type' => 'value', '#value' => $entry_id);
+  $form['uid']      = array('#type' => 'value', '#value' => $uid);
+  $form['#redirect'] = !empty($_GET['destination']) ? $_GET['destination'] : guestbook_path($uid);
+  return confirm_form(
+    $form,
+    t('Are you sure you want to publish this guestbook entry?'),
+    !empty($_GET['destination']) ? $_GET['destination'] : referer_uri(),
+    theme('guestbook_entry', $uid, $entry, NULL, NULL, TRUE),
+    t('Publish'), t('Cancel')
+  );
+}
+
+function guestbook_publish_entry_confirm_submit($form, &$form_state) {
+  if (_guestbook_access('moderate', $form_state['values']['uid']) && $form_state['values']['confirm']) {
+    db_query("UPDATE {guestbook} set published = 1 WHERE id = %d", $form_state['values']['entry_id']);
+  }
+}
+
 /**
  * Render a guestbook.
  */
@@ -767,6 +803,11 @@ function theme_guestbook_entry($uid, $en
     $output .= '<a name="comment-entry"></a>';
   }
 
+  // Published status
+  if ($entry['published'] == 0) {
+    $output .= "<b class=\"warning\">*** UNPUBLISHED ENTRY ***</b><br />";
+  }
+
   // Author.
   if ($entry['author'] == 0) {
     $output .= "<b>". check_plain($entry['anonname']) ."</b>";
@@ -814,6 +855,13 @@ function theme_guestbook_entry($uid, $en
           'href' => guestbook_path($uid) .'/edit/'. $entry['id'],
           'query' => 'destination='. url($_GET['q']) . $pager,
         );
+        if ($entry['published'] == 0) {
+          $links['publish'] = array(
+            'title' => t('Publish entry'),
+            'href' => guestbook_path($uid) .'/publish/'. $entry['id'],
+            'query' => 'destination='. url($_GET['q']) . $pager,
+          );
+        }
       }
       $links['comment'] = array(
         'title' => $entry['comment'] == '' ? t('Add comment') : t('Edit comment'),
