diff --git a/diff_views.diff.js b/diff_views.diff.js
new file mode 100644
index 0000000..d9803b2
--- /dev/null
+++ b/diff_views.diff.js
@@ -0,0 +1,62 @@
+/**
+ * @file
+ * Port of diff module's diff.js to work with our markup.
+ */
+
+(function ($) {
+
+Drupal.behaviors.diffViewsDiffRevisions = {
+  attach: function (context, settings) {
+    var $rows = $('.views-form tbody tr', context);
+    function updateDiffRadios() {
+      var newTd = false;
+      var oldTd = false;
+      if (!$rows.length) {
+        return true;
+      }
+      $rows.removeClass('selected').each(function() {
+        var $row = $(this);
+        $row.removeClass('selected');
+        var $inputs = $row.find('input[type="radio"]');
+        var $oldRadio = $inputs.filter('[name="diff_views_radio[old]"]').eq(0);
+        var $newRadio = $inputs.filter('[name="diff_views_radio[new]"]').eq(0);
+        if (!$oldRadio.length || !$newRadio.length) {
+          return true;
+        }
+        if ($oldRadio.attr('checked')) {
+          oldTd = true;
+          $row.addClass('selected');
+          $oldRadio.css('visibility', 'visible');
+          $newRadio.css('visibility', 'hidden');
+        } else if ($newRadio.attr('checked')) {
+          newTd = true;
+          $row.addClass('selected');
+          $oldRadio.css('visibility', 'hidden');
+          $newRadio.css('visibility', 'visible');
+        } else {
+          if (Drupal.settings.diffRevisionRadios == 'linear') {
+            if (newTd && oldTd) {
+              $oldRadio.css('visibility', 'visible');
+              $newRadio.css('visibility', 'hidden');
+            } else if (newTd) {
+              $newRadio.css('visibility', 'visible');
+              $oldRadio.css('visibility', 'visible');
+            } else {
+              $newRadio.css('visibility', 'visible');
+              $oldRadio.css('visibility', 'hidden');
+            }
+          } else {
+            $newRadio.css('visibility', 'visible');
+            $oldRadio.css('visibility', 'visible');
+          }
+        }
+      });
+      return true;
+    }
+
+    $rows.find('input[name="diff_views_radio[new]"], input[name="diff_views_radio[old]"]').click(updateDiffRadios);
+    updateDiffRadios();
+  }
+};
+
+})(jQuery);
diff --git a/diff_views.module b/diff_views.module
index d489146..34316c8 100644
--- a/diff_views.module
+++ b/diff_views.module
@@ -53,6 +53,10 @@ function diff_views_form_alter(&$form, &$form_state, $form_id) {
     '#submit' => array('diff_views_form_submit'),
   );
 
+  $form['#attached']['js'] = array(
+    drupal_get_path('module', 'diff_views') . '/diff_views.diff.js',
+  );
+
 }
 
 /**
