diff --git a/diff.install b/diff.install
index 3d1ac83..53c2799 100644
--- a/diff.install
+++ b/diff.install
@@ -131,3 +131,11 @@ function diff_update_7305() {
 function diff_update_7306() {
   variable_set('diff_additional_options_node', array('title' => 'title'));
 }
+
+/**
+ * Grants access to the Diff "View Changes" button permission to all users.
+ */
+function diff_update_7307() {
+  user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array('diff view changes'));
+  user_role_grant_permissions(DRUPAL_AUTHENTICATED_RID, array('diff view changes'));
+}
diff --git a/diff.module b/diff.module
index 1c8569c..83ec886 100644
--- a/diff.module
+++ b/diff.module
@@ -207,6 +207,18 @@ function diff_node_revision_access($node, $op = 'view') {
 }
 
 /**
+ * Implements hook_permission().
+ */
+function diff_permission() {
+  return array(
+    'diff view changes' => array(
+      'title' => t('Access %view button', array('%view' => t('View changes'))),
+      'description' => t('Controls access to the %view button when editing content.', array('%view' => t('View changes'))),
+    ),
+  );
+}
+
+/**
  * Implements hook_hook_info().
  */
 function diff_hook_info() {
@@ -329,7 +341,9 @@ function diff_node_view_alter(&$build) {
 function diff_form_node_form_alter(&$form, $form_state) {
   // Add a 'View changes' button on the node edit form.
   $node = $form['#node'];
-  if (!empty($node->nid) && diff_node_revision_access($node, 'view')) {
+  if (variable_get('diff_show_preview_changes_node_' . $node->type, TRUE)
+      && user_access('diff view changes')
+      && !empty($node->nid)) {
     $form['actions']['preview_changes'] = array(
       '#type' => 'submit',
       '#value' => t('View changes'),
@@ -356,6 +370,7 @@ function diff_form_node_type_form_alter(&$form, $form_state) {
       '#title' => t('Show <em>View changes</em> button on node edit form'),
       '#weight' => 10,
       '#default_value' => variable_get('diff_show_preview_changes_node_' . $type->type, TRUE),
+      '#description' => t('You can refine access using the "Access <em>View changes</em> button" permission.'),
     );
     $form['diff']['diff_enable_revisions_page_node'] = array(
       '#type' => 'checkbox',
diff --git a/readme.txt b/readme.txt
index 390ebd8..f516466 100644
--- a/readme.txt
+++ b/readme.txt
@@ -58,6 +58,9 @@ e.g. http://www.example.com/admin/structure/types/manage/page
   
     i) "Show View changes button on node edit form" adds a new "Preview" like
         submit button to node editing pages. This shows a diff preview.
+        
+        This can be conditionally restricted per role using the user permission
+        "Access View changes button".
   
     ii) "Enable the Revisions page for this content type" adds the revisioning
          tab to content. This allows users to compare between various revisions
