diff -u revision_moderation.azol/revision_moderation.module revision_moderation.wip/revision_moderation.module
--- revision_moderation.azol/revision_moderation.module	2011-01-05 13:56:29.000000000 -0800
+++ revision_moderation.wip/revision_moderation.module	2011-01-05 13:51:20.000000000 -0800
@@ -7,7 +7,7 @@
  */
 
 // Actions module support.
-include_once drupal_get_path('module', 'revision_moderation') .'/revision_moderation_actions.inc';
+include_once drupal_get_path('module', 'revision_moderation') . '/revision_moderation_actions.inc';
 
 /**
  * Implementation of hook_menu().
@@ -137,16 +137,16 @@
   // turned on.
   // And not editing a chose revision
   if ($node->nid && $node->revision_moderation == 1 && arg(2) != 'revisions' && (!user_access('administer nodes') || !variable_get('revision_moderation_exempt', 1))) {
-    if (isset($node->original_node)) {
+    if (isset($node->original)) {
       // Update node table's vid to the original value.
 
       db_update('node')
       ->fields(array(
-        'vid' => $node->original_node->vid,
-        'title' => $node->original_node->title,
-        'status' => $node->original_node->status,
+        'vid' => $node->original->vid,
+        'title' => $node->original->title,
+        'status' => $node->original->status,
         ))
-      ->condition('nid',$node->nid,'=')
+      ->condition('nid', $node->nid, '=')
       ->execute();
       // If node doesn't exist in revision_moderation table, add it.
       $in_db = db_query('SELECT revision_moderation FROM {revision_moderation} WHERE nid = :nid', array(':nid' => $node->nid))->fetchField();
@@ -158,24 +158,33 @@
           ))
         ->execute();
       }
+      
+      // evil evil hack
+      drupal_write_record('node', $node->original, 'nid');
+      field_attach_update('node', $node->original);
 
       drupal_set_message(t('Your changes have been submitted for moderation.'));
     }
   }
   elseif ($node->nid && $node->revision_moderation == 1 && end($args) == 'edit') {
-    if (isset($node->original_node)) {
+    if (isset($node->original)) {
       // Exempt admin users publish their version immediately
-      if(!user_access('administer nodes') || !variable_get('revision_moderation_exempt', 1)) {
+      if (!user_access('administer nodes') || !variable_get('revision_moderation_exempt', 1)) {
         // Update node table's vid to the original value.
 
         db_update('node')
         ->fields(array(
-          'vid' => $node->original_node->vid,
-          'title' => $node->original_node->title,
-          'status' => $node->original_node->status,
+          'vid' => $node->original->vid,
+          'title' => $node->original->title,
+          'status' => $node->original->status,
           ))
-        ->condition('nid',$node->nid,'=')
+        ->condition('nid', $node->nid, '=')
         ->execute();
+      
+        // evil evil hack
+        drupal_write_record('node', $node->original, 'nid');
+        field_attach_update('node', $node->original);
+
         drupal_set_message(t('Your changes have been submitted for moderation.'));
       }
     }
@@ -244,7 +253,7 @@
   elseif ($node->revision_moderation == 1) {
     // Notify admin if a node has pending revisions.
     if ($access_update && arg(2) != 'revisions' && revision_moderation_get_node_pending_revisions($node->nid)) {
-      drupal_set_message(t('This post has one or more pending revisions: <a href="@list">view list of revisions</a>.', array('@list' => url("node/$node->nid/revisions"))));
+      drupal_set_message(t('<a href="@url">@title</a> has one or more pending revisions: <a href="@list">view list of revisions</a>.', array('@url' => url("node/$node->nid"), '@title' => check_plain($node->title), '@list' => url("node/$node->nid/revisions"))));
     }
   }
 }
@@ -258,7 +267,7 @@
   // Only do this logic for non-admin users on nodes with revision moderation
   // turned on.
   // And not editing a chose revision
-  if ($node->nid && $node->revision_moderation == 1 && arg(2) != 'revisions' && (!user_access('administer nodes') || !variable_get('revision_moderation_exempt', 1))) {
+  if (isset($node->nid) && isset($node->revision_moderation) && $node->revision_moderation == 1 && arg(2) != 'revisions' && (!user_access('administer nodes') || !variable_get('revision_moderation_exempt', 1))) {
     // If user has a pending revision for this node, load the latest version of
     // it instead.
     if ($revisions = revision_moderation_get_node_pending_revisions($node->nid)) {
@@ -272,15 +281,15 @@
     }
 
   }
-  elseif ($node->nid && $node->revision_moderation == 1 && end($args) == 'edit') {
+  elseif (isset($node->nid) && isset($node->revision_moderation) && $node->revision_moderation == 1 && end($args) == 'edit') {
     $revision_author = user_load($node->revision_uid);
     $current_vid = db_query('SELECT vid FROM {node} WHERE nid = :nid', array(':nid' => $node->nid))->fetchField();
-    if($node->vid > $current_vid) {
+    if ($node->vid > $current_vid) {
       drupal_set_message(t('You are currently editing a pending update of this post created on @date by !author.', array('@date' => format_date($node->revision_timestamp, 'small'), '!author' => theme('username', $revision_author))));
     }
-    if($node->vid == $current_vid) {
-      if(revision_moderation_get_node_pending_revisions($node->nid)) {
-        if(variable_get('revision_moderation_exempt', 1)) {
+    if ($node->vid == $current_vid) {
+      if (revision_moderation_get_node_pending_revisions($node->nid)) {
+        if (variable_get('revision_moderation_exempt', 1)) {
           drupal_set_message(t('You are currently editing the current published version of this post, created on @date by !author. Note that there are other pending revisions, and that pressing save will publish this version of the post instead.', array('@date' => format_date($node->revision_timestamp, 'small'), '!author' => theme('username', $revision_author))));
         }
         else {
@@ -294,26 +303,6 @@
 }
 
 /**
- * Implementation of hook_node_presave().
- */
-function revision_moderation_node_presave($node) {
-  $args = arg();
-
-  // Only do this logic for non-admin users on nodes with revision moderation
-  // turned on.
-  // And not editing a chose revision
-  if ($node->nid && $node->revision_moderation == 1 && arg(2) != 'revisions' && (!user_access('administer nodes') || !variable_get('revision_moderation_exempt', 1))) {
-    $current_vid = db_query('SELECT vid FROM {node} WHERE nid = :nid', array(':nid' => $node->nid))->fetchField();
-    $node->original_node = node_load($node->nid, $current_vid);
-  }
-  elseif ($node->nid && $node->revision_moderation == 1 && end($args) == 'edit') {
-    $current_vid = db_query('SELECT vid FROM {node} WHERE nid = :nid', array(':nid' => $node->nid))->fetchField();
-    $node->original_node = node_load($node->nid, $current_vid);
-  }
-
-}
-
-/**
  * Implementation of hook_block_info().
  */
 function revision_moderation_block_info() {
@@ -338,7 +327,7 @@
           $list[] = l($node->title, "node/$node->nid/revisions/$node->vid/view");
         }
         $output .= theme('item_list', array('list' => $list));
-        $output .= '<p>'. l(t('View all pending revisions'), 'admin/content/node/revisions') .'</p>';
+        $output .= '<p>' . l(t('View all pending revisions'), 'admin/content/node/revisions') . '</p>';
       }
       else {
         $output .= t('No pending revisions found.');
@@ -392,7 +381,7 @@
     return theme('table', array('header' => $header, 'rows' => $rows));
   }
   else {
-    return '<p>'. t('No pending revisions found.') .'</p>';
+    return '<p>' . t('No pending revisions found.') . '</p>';
   }
 }
 
@@ -437,7 +426,7 @@
   // Get username for the revision rather than the original node.
   $revision_author = user_load($node->revision_uid);
   drupal_set_message(t('You are currently editing a revision of this post created on @date by !author.', array('@date' => format_date($node->revision_timestamp, 'small'), '!author' => theme('username', $revision_author))));
-  return drupal_get_form($node->type .'_node_form', $node);
+  return drupal_get_form($node->type . '_node_form', $node);
 }
 
 /**
@@ -452,7 +441,7 @@
   $form['revision'] = array('#type' => 'value', '#value' => $node->vid);
   $form['type'] = array('#type' => 'value', '#value' => $node->type);
 
-  return confirm_form($form, t('Are you sure you want to publish this revision for %title?', array('%title' => $node->title)), 'node/'. $node->nid .'/revisions/'. $node->vid, t('Publishing this revision will make it public for all users.'), t('Publish'), t('Cancel'));
+  return confirm_form($form, t('Are you sure you want to publish this revision for %title?', array('%title' => $node->title)), 'node/' . $node->nid . '/revisions/' . $node->vid, t('Publishing this revision will make it public for all users.'), t('Publish'), t('Cancel'));
 }
 
 /**
@@ -470,11 +459,11 @@
     'vid' => $vid,
     'title' => $title,
   ))
-  ->condition('nid',$nid,'=')
+  ->condition('nid', $nid, '=')
   ->execute();
   // Clear the cache so an anonymous poster can see the changes
   cache_clear_all();
-  drupal_set_message('The selected revision has been published.');
+  drupal_set_message(t('The selected revision has been published.'));
   watchdog('content', '@type: published %title revision %revision', array('@type' => t($type), '%title' => $title, '%revision' => $vid), WATCHDOG_NOTICE, l(t('view'), "node/$nid/revisions/$vid/view"));
-  $form_state['redirect'] = 'node/'. $nid;
+  $form_state['redirect'] = 'node/' . $nid;
 }
Common subdirectories: revision_moderation.azol/tests and revision_moderation.wip/tests
Common subdirectories: revision_moderation.azol/views and revision_moderation.wip/views
