diff -rupN diff.install diff.install
--- diff.install	1970-01-01 01:00:00.000000000 +0100
+++ diff.install	2009-04-11 14:03:32.000000000 +0200
@@ -0,0 +1,12 @@
+<?php
+// $Id$
+
+/**
+ * Implementation of hook_uninstall().
+ */
+function diff_uninstall() {
+  // Delete all module variables and then clear the variables cache.
+  db_query("DELETE FROM {variable} WHERE name LIKE 'show\_preview\_changes\_%'");
+  db_query("DELETE FROM {variable} WHERE name LIKE 'enable\_revisions\_page\_%'");
+  cache_clear_all('variables', 'cache');
+}
diff -rupN diff.module diff.module
--- diff.module	2008-08-31 22:32:18.000000000 +0200
+++ diff.module	2009-04-14 12:52:58.000000000 +0200
@@ -17,7 +17,7 @@ define('REVISION_LIST_SIZE', 50);
 function diff_help($path, $arg) {
   switch ($path) {
     case 'admin/help#diff':
-      $output = '<p>'. t('The diff module overwrites the normal revisions view. The revisions table is enhanced with a possibility to view the difference between two node revisions. Users with the %view_revisions permission will also be able to view the changes between any two selected revisions. You may disable this for individual content types on the content type configuration page. This module also provides a nifty %preview_changes button while editing a post.', array('%preview_changes' => t('Preview changes'), '%view_revisions' => t('view revisions'))) .'</p>';
+      $output = '<p>'. t('The diff module overwrites the normal revisions view. The revisions table is enhanced with a possibility to view the difference between two node revisions. Users with the %view_revisions permission will also be able to view the changes between any two selected revisions. You may disable this for individual content types on the content type configuration page. This module also provides a nifty %preview_changes button while editing a post.', array('%preview_changes' => t('View changes'), '%view_revisions' => t('view revisions'))) .'</p>';
       return $output;
   }
 }
@@ -32,7 +32,7 @@ function diff_menu() {
     'page callback' => 'diff_diffs_show',
     'page arguments' => array(1, 4, 5),
     'type' => MENU_CALLBACK,
-    'access callback' => '_node_revision_access',
+    'access callback' => 'diff_node_revision_access',
     'access arguments' => array(1),
   );
   $items['node/%node/revisions/view/latest'] = array(
@@ -40,7 +40,7 @@ function diff_menu() {
     'page callback' => 'diff_latest',
     'page arguments' => array(1),
     'type' => MENU_CALLBACK,
-    'access callback' => '_node_revision_access',
+    'access callback' => 'diff_node_revision_access',
     'access arguments' => array(1),
   );
   return $items;
@@ -61,7 +61,20 @@ function diff_menu_alter(&$callbacks) {
   // Overwrite the default 'Revisions' page
   $callbacks['node/%node/revisions']['page callback'] = 'diff_diffs_overview';
   $callbacks['node/%node/revisions']['module'] = 'diff';
+  $callbacks['node/%node/revisions']['access callback'] = 'diff_node_revision_access';
   unset($callbacks['node/%node/revisions']['file']);
+
+  $callbacks['node/%node/revisions/%/view']['access callback'] = 'diff_node_revision_access';
+  $callbacks['node/%node/revisions/%/revert']['access callback'] = 'diff_node_revision_access';
+  $callbacks['node/%node/revisions/%/delete']['access callback'] = 'diff_node_revision_access';
+}
+  
+/**
+ * Access callback for the node revisions page.
+ */
+function diff_node_revision_access($node) {
+  $may_revision_this_type = variable_get('enable_revisions_page_'. $node->type, TRUE) || user_access('administer nodes');
+  return $may_revision_this_type && _node_revision_access($node);
 }
 
 /**
@@ -460,11 +473,11 @@ function _diff_get_previous_vid(&$node_r
  */
 function diff_form_alter(&$form, $form_state, $form_id) {
   if (isset($form['type']['#value']) && $form['type']['#value'] .'_node_form' == $form_id) {
-    // Add a 'Preview changes' button on the node edit form.
+    // Add a 'View changes' button on the node edit form.
     if (variable_get('show_preview_changes_'. $form['type']['#value'], TRUE) && $form['nid']['#value'] > 0) {
       $form['buttons']['preview_changes'] = array(
         '#type' => 'submit',
-        '#value' => t('Preview changes'),
+        '#value' => t('View changes'),
         '#weight' => 12,
         '#submit' => array('diff_node_form_build_preview_changes')
       );
@@ -472,19 +485,27 @@ function diff_form_alter(&$form, $form_s
   }
   elseif ($form_id == 'node_type_form' && isset($form['identity']['type'])) {
     // Node type edit form.
-    // Add checkbox to activate 'Preview changes' button per node type.
+    // Add checkbox to activate 'View changes' button per node type.
     $form['workflow']['show_preview_changes'] = array(
       '#type' => 'checkbox',
-      '#title' => t('Show %preview_changes button on node edit form', array('%preview_changes' => t('Preview changes'))),
-      '#prefix' => '<strong>'. t('Preview changes') .'</strong>',
+      '#title' => t('Show %preview_changes button on node edit form', array('%preview_changes' => t('View changes'))),
+      '#prefix' => '<strong>'. t('View changes') .'</strong>',
       '#weight' => 10,
       '#default_value' => variable_get('show_preview_changes_'. $form['#node_type']->type, TRUE),
     );
+    // Add checkbox to enable 'Revisions' page per node type.
+    $form['workflow']['enable_revisions_page'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Enable the %revisions page for this content type', array('%revisions' => t('Revisions'))),
+      '#prefix' => '<strong>'. t('Enable revisions page') .'</strong>',
+      '#weight' => 11,
+      '#default_value' => variable_get('enable_revisions_page_'. $form['#node_type']->type, TRUE),
+    );
   }
 }
 
 /**
- * Callback if 'Preview changes' is pressed.
+ * Callback if 'View changes' is pressed.
  */
 function diff_node_form_build_preview_changes($form, &$form_state) {
   $node = node_form_submit_build_node($form, $form_state);
diff -rpN -U 1 translations/de.po translations/de.po
--- translations/de.po	2008-09-03 21:04:50.000000000 +0200
+++ translations/de.po	2009-04-12 18:45:02.000000000 +0200
@@ -39,3 +39,3 @@ msgstr "Das Diff Modul überschreibt die
 #: diff.module:20;467;478;479
-msgid "Preview changes"
+msgid "View changes"
 msgstr "Änderungsvorschau"
diff -rpN -U 1 translations/diff.pot translations/diff.pot
--- translations/diff.pot	2008-09-03 21:02:43.000000000 +0200
+++ translations/diff.pot	2009-04-12 18:45:31.000000000 +0200
@@ -36,3 +36,3 @@ msgstr ""
 #: diff.module:20;467;478;479
-msgid "Preview changes"
+msgid "View changes"
 msgstr ""
diff -rpN -U 1 translations/ja.po translations/ja.po
--- translations/ja.po	2008-04-02 11:47:28.000000000 +0200
+++ translations/ja.po	2009-04-12 18:45:46.000000000 +0200
@@ -35,3 +35,3 @@ msgstr "Diff モジュールは通常の
 #: modules/diff/diff.module:20;433;444;445
-msgid "Preview changes"
+msgid "View changes"
 msgstr "変更をプレビュー"
diff -rpN -U 1 translations/ru.po translations/ru.po
--- translations/ru.po	2008-02-24 20:10:58.000000000 +0100
+++ translations/ru.po	2009-04-12 18:46:00.000000000 +0200
@@ -91,3 +91,3 @@ msgstr "Нет видимых измен
 #: diff.module:422;481
-msgid "Preview changes"
+msgid "View changes"
 msgstr "Предпросмотр изменений"
