diff --git a/www/sites/all/modules/contrib/workflow/workflow.install b/www/sites/all/modules/contrib/workflow/workflow.install
index f344905..6406ad2 100644
--- a/www/sites/all/modules/contrib/workflow/workflow.install
+++ b/www/sites/all/modules/contrib/workflow/workflow.install
@@ -70,6 +70,7 @@ function workflow_schema() {
       'sid'       => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0, 'disp-width' => '10'),
       'scheduled' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0, 'disp-width' => '10'),
       'comment'   => array('type' => 'text', 'size' => 'big', 'not null' => FALSE)),
+      'uid'     => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0, 'disp-width' => '10'),
     'indexes' => array(
       'nid' => array('nid')),
   );
@@ -421,4 +422,10 @@ function workflow_update_6101() {
     db_change_field($ret, 'workflow_transitions', 'tid', 'tid', array('type' => 'serial', 'not null' => TRUE), array('primary key' => array('tid')));
   }
   return $ret;
-}
\ No newline at end of file
+}
+
+function workflow_update_6102() {
+  $ret = array();
+  db_add_field($ret, 'workflow_scheduled_transition', 'uid', array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0));
+  return $ret;
+}
diff --git a/www/sites/all/modules/contrib/workflow/workflow.module b/www/sites/all/modules/contrib/workflow/workflow.module
index 262e20b..4cbd014 100644
--- a/www/sites/all/modules/contrib/workflow/workflow.module
+++ b/www/sites/all/modules/contrib/workflow/workflow.module
@@ -312,7 +312,7 @@ function workflow_transition($node, $sid) {
 
         // Clear previous entries and insert.
         db_query("DELETE FROM {workflow_scheduled_transition} WHERE nid = %d", $node->nid);
-        db_query("INSERT INTO {workflow_scheduled_transition} VALUES (%d, %d, %d, %d, '%s')", $node->nid, $old_sid, $sid, $scheduled, $comment);
+        db_query("INSERT INTO {workflow_scheduled_transition} VALUES (%d, %d, %d, %d, '%s', %d)", $node->nid, $old_sid, $sid, $scheduled, $comment, $GLOBALS['user']->uid);
 
         // Get name of state.
         $state_name = workflow_get_state_name($sid);
@@ -1427,6 +1427,7 @@ function workflow_get_roles() {
  * Implementation of hook_cron().
  */
 function workflow_cron() {
+  global $user;
   $clear_cache = FALSE;
 
   // If the time now is greater than the time to execute a
@@ -1439,9 +1440,18 @@ function workflow_cron() {
     // Make sure transition is still valid; i.e., the node is
     // still in the state it was when the transition was scheduled.
     if ($node->_workflow == $row->old_sid) {
+      // Switch to the user that scheduled the transition.
+      $original_user = $user;
+      session_save_session(FALSE);
+      $user = user_load($row->uid);
+
       // Do transition.
       workflow_execute_transition($node, $row->sid, $row->comment, TRUE);
 
+      // Then switch back to the user running cron.
+      $user = $original_user;
+      session_save_session(TRUE);
+
       watchdog('content', '%type: scheduled transition of %title.', array('%type' => t($node->type), '%title' => $node->title), WATCHDOG_NOTICE, l(t('view'), 'node/'. $node->nid));
       $clear_cache = TRUE;
     }
@@ -1644,4 +1654,4 @@ function workflow_user($op, &$edit, &$account, $category = NULL) {
       db_query("UPDATE {workflow_node_history} SET uid = 0 WHERE uid = %d", $account->uid);
     break;
   }
-}
\ No newline at end of file
+}
