diff --git a/revisioning.module b/revisioning.module
index ece5589..9c2c959 100644
--- a/revisioning.module
+++ b/revisioning.module
@@ -703,40 +703,27 @@ 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.
+ * Implements hook_node_access_records_alter
+ * 
+ * If node is not the current node it clears the grants array
+ * and rebuilds it using the current node.
  */
-function revisioning_node_access_records($node) {
-
+function revisioning_node_access_records_alter(&$grants, $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;
+    $grants = array();
+    foreach (module_implements('node_access_records') 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)) {
+          $grants = array_merge_recursive($grants, $result);
+        } elseif (isset($result)) {
+          $grants[] = $result;
+        }
       }
     }
   }
-  return array();
-}
-
-/**
- * Implements hook_module_implements_alter().
- *
- * Ensures that revisioning_node_access_records() runs before other modules.
- */
-function revisioning_module_implements_alter(&$implementations, $hook) {
-  if ($hook == 'node_access_records') {
-    $group = array('revisioning' => $implementations['revisioning']);
-    unset($implementations['revisioning']);
-    $implementations = $group + $implementations;
-  }
 }
 
 /**
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'])) {
