--- sites/all/modules/subscriptions/subscriptions.module	2009-07-20 17:22:21.000000000 -0400
+++ sites/all/modules/subscriptions/subscriptions.module.new	2009-07-26 16:25:02.000000000 -0400
@@ -243,7 +243,7 @@ function subscriptions_user($type, $edit
 
     case 'delete':
       db_query("DELETE FROM {subscriptions_user} WHERE uid = %d", $account->uid);
-      db_query("DELETE FROM {subscriptions} WHERE recipient_uid = %d", $account->uid);
+      subscriptions_delete_subscription(array('recipient_uid' => $account->uid));
       break;
   }
 }
@@ -373,13 +373,40 @@ function subscriptions_get_full_subscrip
  * Create a subscription.
  */
 function subscriptions_write_subscription($module, $field, $value, $author_uid, $recipient_uid, $send_interval = 1, $send_updates = 0, $send_comments = 0) {
+  $record = array('module' => $module, 'field' => $field, 'value' => $value, 'author_uid' => $author_uid, 'recipient_uid' => $recipient_uid, 'send_interval' => $send_interval, 'send_updates' => $send_updates, 'send_comments' => $send_comments);
+  module_invoke_all('subscriptions_write', 'update', $record);
   db_query("UPDATE {subscriptions} SET send_interval = %d, send_updates = %d, send_comments = %d WHERE module = '%s' AND field ='%s' AND value='%s' AND recipient_uid = %d AND author_uid = %d", $send_interval, $send_updates, $send_comments, $module, $field, $value, $recipient_uid, $author_uid);
   if (!db_affected_rows()) {
+    module_invoke_all('subscriptions_write', 'insert', $record);
     @db_query("INSERT INTO {subscriptions} (module, field, value, author_uid, recipient_uid, send_interval, send_updates, send_comments)  VALUES ('%s', '%s', '%s', %d, %d, %d, %d, %d)", $module, $field, $value, $author_uid, $recipient_uid, $send_interval, $send_updates, $send_comments);
   }
 }
 
 /**
+ * Delete a subscription.
+ */
+function subscriptions_delete_subscription($condition = array()) {
+  $empty_record = array(
+    'module' => "module = '%s'", 
+    'field' => "field = '%s'", 
+    'value' => "value = '%s'", 
+    'author_uid' => 'author_uid = %d', 
+    'recipient_uid' => 'recipient_uid = %d',
+    'send_interval' => 'send_interval = %d', 
+    'send_updates' => 'send_updates = %d', 
+    'send_comments' => 'send_comments = %d',
+  );
+  $condition = array_intersect_key($condition, $empty_record);
+  $fields = array_intersect_key($empty_record, $condition);
+  $where = implode(' AND ', $fields);
+  if ($where) {
+    $where = ' WHERE '. $where;
+  }
+  module_invoke_all('subscriptions_write', 'delete', $condition);
+  db_query("DELETE FROM {subscriptions} $where", $condition);
+}
+
+/**
  * Provide the form definition for deleting subscriptions via
  * s/del/... (aka subscriptions/rem/...) link.
  *
@@ -412,7 +439,8 @@ function subscriptions_delete_form(&$for
  * Delete Subscription form submit handler.
  */
 function subscriptions_delete_form_submit($form, &$form_state) {
-  db_query("DELETE FROM {subscriptions} WHERE module = '%s' AND field = '%s' AND value = '%s' AND author_uid = %d AND recipient_uid = %d", $form_state['values']['data']);
+  $record = array('module' => $form_state['values']['data'][0], 'field' => $form_state['values']['data'][1], 'value' => $form_state['values']['data'][2], 'author_uid' => $form_state['values']['data'][3], 'recipient_uid' => $form_state['values']['data'][4]);
+  subscriptions_delete_subscription($record);
   drupal_set_message(t('Your subscription was deactivated.'));
   $form_state['redirect'] = '<front>';
 }
