diff -urp drupal-7/modules/tracker/tracker.module drupal-7.new/modules/tracker/tracker.module
--- modules/tracker/tracker.module	2009-11-01 12:11:10.000000000 +0000
+++ modules/tracker/tracker.module	2009-11-05 04:20:47.211250000 +0000
@@ -187,7 +187,15 @@ function tracker_comment_update($comment
   // comment_save() calls hook_comment_publish() for all published comments
   // so we to handle all other values here.
   if ($comment['status'] != COMMENT_PUBLISHED) {
-    _tracker_remove($comment['nid'], $comment['uid'], $comment['timestamp']);
+  $node = db_query('SELECT uid FROM {node} WHERE nid = :nid', array(':nid' => $comment->nid))->fetchObject();
+  // keep subscription if the user has other comments that are published.
+    $keep_subscription = db_query_range('SELECT COUNT(*) FROM {comment} WHERE nid = :nid AND uid = :uid AND status = 0', 0, 1, array(
+      ':nid' => $comment->nid,
+      ':uid' => $comment->uid,
+    ))->fetchField();
+    if (!$keep_subscription && ($comment->uid != $node->uid)) {
+      _tracker_remove($comment->nid, $comment->uid, $comment->changed);
+    }
   }
 }
 
@@ -205,14 +213,30 @@ function tracker_comment_publish($commen
  * Implement hook_comment_unpublish().
  */
 function tracker_comment_unpublish($comment) {
-  _tracker_remove($comment->nid, $comment->uid, $comment->changed);
+  $node = db_query('SELECT uid FROM {node} WHERE nid = :nid', array(':nid' => $comment->nid))->fetchObject();
+  // keep subscription if the user has other comments that are published.
+  $keep_subscription = db_query_range('SELECT COUNT(*) FROM {comment} WHERE nid = :nid AND uid = :uid AND status = 0', 0, 1, array(
+    ':nid' => $comment->nid,
+    ':uid' => $comment->uid,
+  ))->fetchField();
+  if (!$keep_subscription && ($comment->uid != $node->uid)) {
+    _tracker_remove($comment->nid, $comment->uid, $comment->changed);
+  }
 }
 
 /**
  * Implement hook_comment_delete().
  */
 function tracker_comment_delete($comment) {
-  _tracker_remove($comment->nid, $comment->uid, $comment->changed);
+  $node = db_query('SELECT uid FROM {node} WHERE nid = :nid', array(':nid' => $comment->nid))->fetchObject();
+  // keep subscription if the user has other comments that are published.
+  $keep_subscription = db_query_range('SELECT COUNT(*) FROM {comment} WHERE nid = :nid AND uid = :uid AND status = 0', 0, 1, array(
+    ':nid' => $comment->nid,
+    ':uid' => $comment->uid,
+  ))->fetchField();
+  if (!$keep_subscription && ($comment->uid != $node->uid)) {
+    _tracker_remove($comment->nid, $comment->uid, $comment->changed);
+  }
 }
 
 /**
@@ -289,31 +313,11 @@ function _tracker_calculate_changed($nid
 function _tracker_remove($nid, $uid = NULL, $changed = NULL) {
   $node = db_query('SELECT nid, status, uid, changed FROM {node} WHERE nid = :nid', array(':nid' => $nid))->fetchObject();
 
-  // The user only keeps his or her subscription if both of the following are true:
-  // (1) The node exists.
-  // (2) The user is either the node author or has commented on the node.
-  $keep_subscription = FALSE;
-
   if ($node) {
-    // Self-authorship is one reason to keep the user's subscription.
-    $keep_subscription = ($node->uid == $uid);
-
-    // Comments are a second reason to keep the user's subscription.
-    if (!$keep_subscription) {
-      // Check if the user has commented at least once on the given nid
-      $keep_subscription = db_query_range('SELECT COUNT(*) FROM {comment} WHERE nid = :nid AND uid = :uid AND status = 0', 0, 1, array(
-        ':nid' => $nid,
-        ':uid' => $uid,
-      ))->fetchField();
-    }
-
-    // If we haven't found a reason to keep the user's subscription, delete it.
-    if (!$keep_subscription) {
-      db_delete('tracker_user')
-        ->condition('nid', $nid)
-        ->condition('uid', $uid)
-        ->execute();
-    }
+    db_delete('tracker_user')
+      ->condition('nid', $nid)
+      ->condition('uid', $uid)
+      ->execute();
 
     // Now we need to update the (possibly) changed timestamps for other users
     // and the node itself.
