diff -Naur a/diff/diff.module b/diff/diff.module
--- a/diff/diff.module	2012-02-01 07:59:31.000000000 +1000
+++ b/diff/diff.module	2012-02-28 16:29:05.000000000 +1000
@@ -55,7 +55,7 @@
   $items['node/%node/revisions/view'] = array(
     'title' => 'Diff',
     'page callback' => 'diff_diffs_show',
-    'page arguments' => array(1, 4, 5),
+    'page arguments' => array(1, 4, 5, 6),
     'type' => MENU_LOCAL_TASK,
     'access callback' => 'diff_node_revision_access',
     'access arguments' => array(1),
@@ -187,6 +187,12 @@
       '#weight' => 10,
       '#default_value' => variable_get('show_preview_changes_' . $form['#node_type']->type, TRUE),
     );
+    $form['diff']['remove_markup_default'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Remove markup by default when comparing body text'),
+      '#weight' => 10,
+      '#default_value' => variable_get('remove_markup_default_'. $form['#node_type']->type, FALSE),
+    );
     $form['diff']['show_diff_inline'] = array(
       '#type' => 'checkbox',
       '#title' => t('Show diffs inline for this content type'),
@@ -212,7 +218,7 @@
   $node = node_form_submit_build_node($form, $form_state);
 
   // Create diff of old node and edited node
-  $rows = _diff_body_rows($old_node, $node);
+  $rows = _diff_body_rows($old_node, $node, variable_get('remove_markup_default_'. $node->type, FALSE));
   $cols = _diff_default_cols();
   $header = _diff_default_header();
   $changes = theme('diff_table', array('header' => $header, 'rows' => $rows, 'attributes' => array('class' => 'diff'), 'cols' => $cols));
diff -Naur a/diff/diff.pages.inc b/diff/diff.pages.inc
--- a/diff/diff.pages.inc	2012-02-01 07:59:31.000000000 +1000
+++ b/diff/diff.pages.inc	2012-02-28 16:39:33.000000000 +1000
@@ -153,8 +153,10 @@
  *   Version ID of the old revision.
  * @param $new_vid
  *   Version ID of the new revision.
+ * @param $remove_markup
+ *   Strip markup before doing the diff
  */
-function diff_diffs_show($node, $old_vid, $new_vid) {
+function diff_diffs_show($node, $old_vid, $new_vid, $remove_markup = NULL) {
 
   // Set same title as on the 'Revisions' tab for consistency
   drupal_set_title(t('Revisions for @title', array('@title' => $node->title)));
@@ -164,6 +166,11 @@
   $old_node = node_load($node->nid, $old_vid);
   $new_node = node_load($node->nid, $new_vid);
 
+  // Set default for remove markup if not set
+  if ($remove_markup == NULL) {
+    $remove_markup = variable_get('remove_markup_default_'. $node->type, FALSE);
+  }
+
   // Generate table header (date, username, logmessage).
   $old_header = t('!date by !username', array(
     '!date' => l(format_date($old_node->revision_timestamp), "node/$node->nid/revisions/$old_node->vid/view"),
@@ -220,7 +227,22 @@
       'colspan' => 2
     )
   );
-  $rows = array_merge($rows, _diff_body_rows($old_node, $new_node));
+
+  if ($remove_markup) {
+    $show_hide_markup_link= l(t('Hide/Show Markup'), 'node/'. $node->nid .'/revisions/view/'. $old_vid .'/'. $new_vid .'/0');
+  }
+  else {
+    $show_hide_markup_link = l(t('Hide/Show Markup'), 'node/'. $node->nid .'/revisions/view/'. $old_vid .'/'. $new_vid .'/1');
+  }
+  $rows[] = array(
+    array(
+      'data' => $show_hide_markup_link,
+      'class' => 'diff-prevlink',
+      'colspan' => 4,
+    )
+  );
+
+  $rows = array_merge($rows, _diff_body_rows($old_node, $new_node, $remove_markup));
   $output = theme('diff_table', array('header' => $header, 'rows' => $rows, 'attributes' => array('class' => array('diff')), 'cols' => $cols));
 
   if ($node->vid == $new_vid) {
@@ -243,8 +265,10 @@
  *   Node for comparison which will be displayed on the left side.
  * @param $new_node
  *   Node for comparison which will be displayed on the right side.
+ * @param $remove_markup
+ *   Strip markup before doing the diff
  */
-function _diff_body_rows($old_node, $new_node) {
+function _diff_body_rows($old_node, $new_node, $remove_markup = FALSE) {
   drupal_add_css(drupal_get_path('module', 'diff') . '/diff.css');
 
   module_load_include('inc', 'diff', 'includes/node');
@@ -252,7 +276,7 @@
   $rows = array();
   $any_visible_change = FALSE;
   // @todo quick workaround for PHP >= 5.3.0 date_diff() conflict.
-  $node_diffs = _diff_module_invoke_all($old_node, $new_node);
+  $node_diffs = _diff_module_invoke_all($old_node, $new_node, $remove_markup);
 
   // We start off assuming all form elements are in the correct order.
   $node_diffs['#sorted'] = TRUE;
@@ -318,14 +342,14 @@
  * @link http://drupal.org/node/639320
  * @see module_invoke_all()
  */
-function _diff_module_invoke_all($old_node, $new_node) {
+function _diff_module_invoke_all($old_node, $new_node, $remove_markup = FALSE) {
   $return = array();
   foreach (module_implements('diff') as $module) {
     if ($module == 'date') {
       continue; // Avoid function name collision with date_diff().
     }
     $function = "{$module}_diff";
-    $result = $function($old_node, $new_node);
+    $result = $function($old_node, $new_node, $remove_markup);
     if (isset($result) && is_array($result)) {
       $return = array_merge_recursive($return, $result);
     }
diff -Naur a/diff/includes/node.inc b/diff/includes/node.inc
--- a/diff/includes/node.inc	2012-02-01 07:59:31.000000000 +1000
+++ b/diff/includes/node.inc	2012-02-28 15:21:36.000000000 +1000
@@ -9,7 +9,7 @@
 /**
  * Implements hook_diff() for node.module (body and title).
  */
-function node_diff($old_node, $new_node) {
+function node_diff($old_node, $new_node, $remove_markup) {
 
   $result = array();
   $type = node_type_get_type($new_node);
@@ -36,8 +36,8 @@
           $view_new = $new_node->{$field_name}[$langcode][$delta]['value'];
           $result["{$field_name}_{$delta}"] = array(
             '#name' => $instance['label'],
-            '#old' => explode("\n", $view_old),
-            '#new' => explode("\n", $view_new),
+            '#old' => explode("\n", ($remove_markup) ? drupal_html_to_text($view_old) : $view_old),
+            '#new' => explode("\n", ($remove_markup) ? drupal_html_to_text($view_new) : $view_new),
           );
         }
         elseif (isset($new_node->{$field_name}[$langcode][$delta]['value'])) {
@@ -47,7 +47,7 @@
           $result["{$field_name}_{$delta}"] = array(
             '#name' => $instance['label'],
             '#old' => '',
-            '#new' => explode("\n", $view_new),
+            '#new' => explode("\n", ($remove_markup) ? drupal_html_to_text($view_new) : $view_new),
           );
         }
         elseif (isset($old_node->{$field_name}[$langcode][$delta]['value']) && !empty($old_node->{$field_name}[$langcode][$delta]['value'])) {
@@ -55,7 +55,7 @@
           $view_old = $old_node->{$field_name}[$langcode][$delta]['value'];
           $result["{$field_name}_{$delta}"] = array(
             '#name' => $instance['label'],
-            '#old' => explode("\n", $view_old),
+            '#old' => explode("\n", ($remove_markup) ? drupal_html_to_text($view_old) : $view_old),
             '#new' => '',
           );
         }
@@ -68,7 +68,7 @@
           $view_old = $old_node->{$field_name}[$langcode][$delta]['value'];
           $result["{$field_name}_{$delta}"] = array(
             '#name' => $instance['label'],
-            '#old' => explode("\n", $view_old),
+            '#old' => explode("\n", ($remove_markup) ? drupal_html_to_text($view_old) : $view_old),
             '#new' => '',
           );
         }
