diff --git revisioning.module revisioning.module
index 0e32fcc..53c7ef5 100755
--- revisioning.module
+++ revisioning.module
@@ -52,7 +52,14 @@ function revisioning_help($path, $arg) {
  * revisions already exist in node.module.
  */
 function revisioning_perm() {
-  return array("access 'Pending' tab", 'edit revisions', 'publish revisions', 'unpublish current revision', 'view revisions of own content');
+  $perms = array("access 'Pending' tab", 'edit revisions', 'publish revisions', 'unpublish current revision');
+  // Implement per-nodetype permissions same way as in node module.
+  foreach (node_get_types() as $type) {
+    $name = check_plain($type->type);
+    $perms[] = 'view revisions of own '. $name .' content';
+    $perms[] = 'view revisions of any '. $name .' content';
+  }
+  return $perms;
 }
 
 /**
@@ -345,15 +352,24 @@ function _revision_tasks_menu_access_callback($op, $node) {
       return !is_numeric(arg(3)) && module_grants_node_access('view', $node);
 
     case 'view revisions':
+      // 'View' access on node is prerequisite for all "view revisions" permissions
+      if (!module_grants_node_access('view', $node)) {
+        return FALSE;
+      }
+      $name = check_plain($node->type);
+      // Check 'view revisions of any $nodetype content' permission.
+      if (user_access('view revisions of any '. $name .' content')) {
+        return TRUE;
+      }
+      // Check 'view revisions of own $nodetype content' permission, meaning
+      // 'view all revisions of $nodetype content I created the first draft of'.
       global $user;
-      // Implement 'view revisions of own content' permission, meaning
-      // 'view all revisions of content I created the first draft of'.
-      if ($node->uid == $user->uid && user_access('view revisions of own content')) {
+      if ($node->uid == $user->uid && user_access('view revisions of own '. $name .' content')) {
         return TRUE;
       }
       // Fall back to global 'view revisions' permission.
       break;
-
+      
     case 'edit current':
       return !is_numeric(arg(3)) && module_grants_node_access('update', $node);
 
