diff --git a/revisioning.module b/revisioning.module
index ece5589..392ff28 100644
--- a/revisioning.module
+++ b/revisioning.module
@@ -705,37 +705,47 @@ function revisioning_node_insert($node) {
 /**
  * Implements hook_node_access_records().
  *
- * Replaces all node properties and fields to those of the current node,
- * so node access modules implementing this hook do not use values
- * from revisions that are still in moderation.
+ * Calls hook_node_access_records on all implementations identified
+ * in revisioning_module_implements_alter as requiring the current revision
+ * instead of the latest.  Revisioning alters the behavior of the
+ * Node API so that the current and latest revisions are not always the same.
+ * Node access modules that are not aware of this are expecting the node
+ * being passed to hook_node_access_records to be the current.
  */
 function revisioning_node_access_records($node) {
-
-  if (!revisioning_revision_is_current($node)) {
-    // For the sake of _revisioning_form_submit().
-    drupal_static('revisioning_saved_node', clone $node);
-
-    $current_node = node_load($node->nid, NULL, TRUE);
-    foreach (get_object_vars($node) as $k => $value) {
-      unset($node->$k);
-      if (isset($current_node->$k)) {
-        $node->$k = $current_node->$k;
+  $node_access_records_modules = &drupal_static('revisioning_node_access_records_modules', array());
+  $current_node = node_load($node->nid, NULL, TRUE);
+  $return = array();
+  foreach ($node_access_records_modules as $module) {
+    $function = $module . '_node_access_records';
+    if (function_exists($function)) {
+      $result = call_user_func_array($function, array($current_node));
+      if (isset($result) && is_array($result)) {
+        $return = array_merge_recursive($return, $result);
+      } elseif (isset($result)) {
+        $return[] = $result;
       }
     }
   }
-  return array();
+  return $return;
 }
 
 /**
  * Implements hook_module_implements_alter().
  *
- * Ensures that revisioning_node_access_records() runs before other modules.
+ * Remove implementations of hook_node_access_records from the implementations
+ * array.  Stores them in a drupal static variable to be invoked in
+ * revisioning_node_access_records using the current revision instead of the latest.
  */
 function revisioning_module_implements_alter(&$implementations, $hook) {
   if ($hook == 'node_access_records') {
-    $group = array('revisioning' => $implementations['revisioning']);
-    unset($implementations['revisioning']);
-    $implementations = $group + $implementations;
+    $node_access_records_modules = &drupal_static('revisioning_node_access_records_modules', array());
+    foreach (array_keys($implementations) as $module) {
+      if ($module != 'revisioning') {
+        $node_access_records_modules[] = $module;
+        unset($implementations[$module]);
+      }
+    }
   }
 }
 
diff --git a/revisioning.pages.inc b/revisioning.pages.inc
index 218d7cf..cc92630 100644
--- a/revisioning.pages.inc
+++ b/revisioning.pages.inc
@@ -288,10 +288,7 @@ function revisioning_revert_confirm_pre_submit($form, &$form_state) {
  * node_save().
  */
 function revisioning_revert_confirm_post_submit($form, &$form_state) {
-  $node = drupal_static('revisioning_saved_node');
-  if (!isset($node)) {
-    $node = $form['#node_revision'];
-  }
+  $node = $form['#node_revision'];
   // _revisioning_publish_node($node->nid); [#611988]
   module_invoke_all('revisionapi', 'post revert', $node);
 }
@@ -345,11 +342,6 @@ function _revisioning_set_info_message() {
  * that's not the one we've saved.
  */
 function _revisioning_form_submit($form, &$form_state) {
-  // The node may have been altered in revisioning_node_access_records().
-  // Make sure we're using the revision that was just submitted.
-  if ($node = drupal_static('revisioning_saved_node')) {
-   $form_state['node'] = $node;
-  }
   // Don't redirect when creating new node, when not moderated or user doesn't
   // have access to the revision.
   if (isset($form_state['node']->nid) && !empty($form_state['node']->revision_moderation) && _revisioning_access_node_revision('view revisions', $form_state['node'])) {