diff --git a/workflow.module b/workflow.module
index de9becd..2f60626 100644
--- a/workflow.module
+++ b/workflow.module
@@ -117,10 +117,10 @@ function workflow_node_tab_access($node = NULL) {
     return FALSE;
   }
   $roles = array_keys($user->roles);
-  if ($node->uid == $user->uid) {
+  if (in_array($user->uid, workflow_get_authors($node))) {
     $roles = array_merge(array('author'), $roles);
   }
-  $workflow = db_fetch_object(db_query("SELECT * FROM {workflows} WHERE wid = %d", $wid));
+  $workflow = db_fetch_object(db_query("SELECT tab_roles FROM {workflows} WHERE wid = %d", $wid));
   $allowed_roles = $workflow->tab_roles ? explode(',', $workflow->tab_roles) : array();
 
   if (user_access('administer nodes') || array_intersect($roles, $allowed_roles)) {
@@ -706,7 +706,7 @@ function workflow_field_choices($node) {
   $current_sid = workflow_node_current_state($node);
 
   // If user is node author or this is a new page, give the authorship role.
-  if (($user->uid == $node->uid && $node->uid > 0) || (arg(0) == 'node' && arg(1) == 'add')) {
+  if ((in_array($user->uid, workflow_get_authors($node))) || (arg(0) == 'node' && arg(1) == 'add')) {
     $roles += array('author' => 'author');
   }
   if ($user->uid == 1) {
diff --git a/workflow_access.module b/workflow_access.module
index 6da77a8..a7b50c6 100644
--- a/workflow_access.module
+++ b/workflow_access.module
@@ -25,20 +25,32 @@ function workflow_access_node_grants($account, $op) {
  */
 function workflow_access_node_access_records($node) {
   $grants = array();
-  $sid = db_result(db_query("SELECT sid FROM {workflow_node} WHERE nid = %d", $node->nid));
+  $sid = workflow_node_current_state($node);
 
   // We have state information about this node, so get permissions for this state.
   if (is_numeric($sid)) {
-    $result = db_query('SELECT * FROM {workflow_access} WHERE sid = %d', $sid);
-    while ($grant = db_fetch_object($result)) {
-      $grants[] = array(
-        'realm'        => ($grant->rid == -1) ? 'workflow_access_owner' : 'workflow_access',
-        'gid'          => ($grant->rid == -1) ? $node->uid : $grant->rid,
-        'grant_view'   => $grant->grant_view,
-        'grant_update' => $grant->grant_update,
-        'grant_delete' => $grant->grant_delete,
-        'priority'     => 0,
-      ); 
+    $authors = workflow_get_authors($node);
+    $result = db_query('SELECT rid, grant_view, grant_update, grant_delete FROM {workflow_access} WHERE sid = %d', $sid);
+    if ($grant->rid == -1) {
+        foreach($authors as $uid) {
+           $grants[] = array(
+            'realm'        => 'workflow_access_owner',
+            'gid'          => $uid,
+            'grant_view'   => $grant->grant_view,
+            'grant_update' => $grant->grant_update,
+            'grant_delete' => $grant->grant_delete
+          );
+        }
+      }
+      else {
+        $grants[] = array(
+            'realm'        => 'workflow_access',
+            'gid'          => $grant->rid,
+            'grant_view'   => $grant->grant_view,
+            'grant_update' => $grant->grant_update,
+            'grant_delete' => $grant->grant_delete
+          );
+      }
     }
   }
 
