diff --git a/dreditor.user.js b/dreditor.user.js
index ddf90b5..f219159 100644
--- a/dreditor.user.js
+++ b/dreditor.user.js
@@ -3279,6 +3279,52 @@ Drupal.behaviors.dreditorProjectsCollapse = function (context) {
 };
 
 /**
+ * Attach mark as read to project issue tables.
+ */
+Drupal.behaviors.dreditorMarkAsRead = function (context) {
+  $('table.project-issue', context).once('dreditor-issuemarkasread', function () {
+    $('tbody tr .comment-info a, tbody tr .views-field-comment-count a', $('table.project-issue')).each(function() {
+      $link = $(this);
+      $mark = $link.clone();
+      $mark.text('**');
+      $mark.addClass('mark-as-read');
+      $mark.attr('title', 'Mark as read');
+      $mark.click(function() {
+        // Just download the issue page we want marked as read.
+        // Suggestions for a more efficient solution are welcome.
+        $.get($mark.attr('href'));
+        return false;
+      });
+      $link.after($mark);
+    });
+  });
+};
+
+
+/**
+ * Attach mark ALL as read to project issue tables.
+ */
+Drupal.behaviors.dreditorMarkAllAsRead = function (context) {
+  $('table.project-issue', context).once('dreditor-issuemarkallasread', function () {
+    $tmp = $('<a href="#" class="dreditor-mark-all-as-read">Mark ALL as read</a>');
+    $tmp.click(function () {
+      $('.mark-as-read').each(function () {
+
+          // Just download the issue page we want marked as read.
+          // Suggestions for a more efficient solution are welcome.
+          $.get(this);
+
+          // Refresh teh page to get rid of all updated / x new markup.
+          location.reload(true);
+        });
+    });
+
+    // Insert after the pager
+    $('.pager').after($tmp);
+  });
+};
+
+/**
  * Attach issue count to project issue tables and hide fixed/needs more info issues without update marker.
  */
 Drupal.behaviors.dreditorIssueCount = function (context) {
