diff --git a/notifications.module b/notifications.module
index 64b83af..fd07543 100644
--- a/notifications.module
+++ b/notifications.module
@@ -1,4 +1,5 @@
 <?php
+// $Id: notifications.module,v 1.6.2.9.2.50.2.20 2010/05/21 11:22:22 jareyero Exp $
 
 /**
  * @file
@@ -716,7 +717,17 @@ function notifications_save_subscription(&$subscription) {
     $op = 'update';
     $result = drupal_write_record('notifications', $subscription, 'sid');
   }
-  elseif ($duplicate = notifications_get_subscriptions(array('uid' => $subscription->uid, 'type' => $subscription->type, 'event_type' => $subscription->event_type, 'module' => $subscription->module, 'send_method' => $subscription->send_method, 'send_interval' => $subscription->send_interval), $subscription->fields, TRUE)) {
+  elseif ($duplicate = notifications_get_subscriptions(array('uid' => $subscription->uid, 'type' => $subscription->type, 'event_type' => $subscription->event_type, 'module' => $subscription->module, 'send_interval' => $subscription->send_interval), $subscription->fields, TRUE)) {
+    if (!is_array($subscription->send_method)) {
+      $duplicate = notifications_get_subscriptions(array('uid' => $subscription->uid, 'type' => $subscription->type, 'event_type' => $subscription->event_type, 'module' => $subscription->module, 'send_method' => $subscription->send_method, 'send_interval' => $subscription->send_interval), $subscription->fields, TRUE);
+      if( !$duplicate ) {
+        $result = drupal_write_record('notifications', $subscription);
+        if ($result != FALSE) {
+          _notifications_save_subscription_fields($subscription);
+        }
+        return $result;
+      }
+    }
     // We've found duplicates, resolve conflict updating first, deleting the rest
     // It is possible that we had a disabled one, this updating will fix it
     $update = array_shift($duplicate);
@@ -734,32 +745,47 @@ function notifications_save_subscription(&$subscription) {
     return notifications_save_subscription($subscription);  
   }
   else {
-    $op = 'insert';    
-    $result = drupal_write_record('notifications', $subscription);
-  }
-  
-  // If the operation has worked so far, update fields and inform other modules
-  if ($result !== FALSE) {
-    if ($op == 'update') {
-      db_query("DELETE FROM {notifications_fields} WHERE sid = %d", $subscription->sid);
-    }    
-    // There may be subscriptions with no fields, some people are coding such plug-ins.
-    if (!empty($subscription->fields)) {
-      foreach ($subscription->fields as $name => $value) {
-        if (is_array($value)) {
-          db_query("INSERT INTO {notifications_fields} (sid, field, value, intval) VALUES(%d, '%s', '%s', %d)", $subscription->sid, $value['type'], $value['value'], (int)$value['value']);
-        }
-        else { 
-          db_query("INSERT INTO {notifications_fields} (sid, field, value, intval) VALUES(%d, '%s', '%s', %d)", $subscription->sid, $name, $value, (int)$value);
+    $op = 'insert';
+    if (is_array($subscription->send_method)) {
+      foreach (array_filter($subscription->send_method) as $send_method_key=>$send_method_value) {
+        $write_subscription = clone($subscription);
+        $write_subscription->send_method = $send_method_key;
+        // TODO: Should the last written result be the only value returned? Plural?
+        $result = drupal_write_record('notifications', $write_subscription);
+        if ($result != FALSE) {
+          _notifications_save_subscription_fields($write_subscription);
         }
       }
+    } else {
+      $result = drupal_write_record('notifications', $subscription);
+      if ($result != FALSE) {
+        _notifications_save_subscription_fields($subscription);
+      }
     }
-    notifications_module_invoke($op, $subscription);
   }
 
   return $result;
 }
 
+function _notifications_save_subscription_fields(&$subscription) {
+  // If the operation has worked so far, update fields and inform other modules
+  if ($op == 'update') {
+    db_query("DELETE FROM {notifications_fields} WHERE sid = %d", $subscription->sid);
+  }    
+  // There may be subscriptions with no fields, some people are coding such plug-ins.
+  if (!empty($subscription->fields)) {
+    foreach ($subscription->fields as $name => $value) {
+      if (is_array($value)) {
+        db_query("INSERT INTO {notifications_fields} (sid, field, value, intval) VALUES(%d, '%s', '%s', %d)", $subscription->sid, $value['type'], $value['value'], (int)$value['value']);
+      }
+      else { 
+        db_query("INSERT INTO {notifications_fields} (sid, field, value, intval) VALUES(%d, '%s', '%s', %d)", $subscription->sid, $name, $value, (int)$value);
+      }
+    }
+  }
+  notifications_module_invoke($op, $subscription);
+}
+
 /**
  * Get an individual subscription.
  *
