diff --git a/workbench_moderation.module b/workbench_moderation.module
index 5a2ff16..efaeb6e 100644
--- a/workbench_moderation.module
+++ b/workbench_moderation.module
@@ -1771,7 +1771,9 @@ function workbench_moderation_store($node) {
   }
 
   // Save the node.
+  workbench_moderation_impersonate_user($live_revision->uid);
   node_save($live_revision);
+  workbench_moderation_revert_user();
 }
 
 /**
@@ -2464,3 +2466,63 @@ function workbench_moderation_node_export_node_import_alter(&$node, $original_no
   }
   $node->revision = 1;
 }
+
+
+/**
+ * Impersonates another user. http://drupal.org/node/287292#comment-3162350
+ *
+ * Each time this function is called, the active user is saved and $new_user
+ * becomes the active user. Multiple calls to this function can be nested,
+ * and session saving will be disabled until all impersonation attempts have
+ * been reverted using workbench_moderation_revert_user().
+ *
+ * @param $new_user
+ *   User to impersonate, either a UID or a user object.
+ *
+ * @return
+ *   Current user object.
+ *
+ * @see workbench_moderation_revert_user()
+ */
+function workbench_moderation_impersonate_user($new_user = NULL) {
+  global $user;
+  $user_original = &drupal_static(__FUNCTION__);
+
+  if (!isset($new_user)) {
+    if (isset($user_original) && !empty($user_original)) {
+      // Restore the previous user from the stack.
+      $user = array_pop($user_original);
+
+      // Re-enable session saving if we are no longer impersonating a user.
+      if (empty($user_original)) {
+        drupal_save_session(TRUE);
+      }
+    }
+  }
+  else {
+    // Push the original user onto the stack and prevent session saving.
+    $user_original[] = $user;
+    drupal_save_session(FALSE);
+
+    if (is_numeric($new_user)) {
+      $user = user_load($new_user);
+    }
+    else {
+      $user = is_object($new_user) ? $new_user : (object) $new_user;
+    }
+  }
+
+  return $user;
+}
+
+/**
+ * Reverts to the previous user after impersonating.
+ *
+ * @return
+ *   Current user.
+ *
+ * @see workbench_moderation_impersonate_user()
+ */
+function workbench_moderation_revert_user() {
+  return workbench_moderation_impersonate_user();
+}
