diff --git a/subscriptions.admin.inc b/subscriptions.admin.inc
index d915f00..aecd833 100644
--- a/subscriptions.admin.inc
+++ b/subscriptions.admin.inc
@@ -920,6 +920,9 @@ function subscriptions_add_form(array $form, array &$form_state, $stype, $sid, $
  */
 function subscriptions_add_form_submit(array $form, array &$form_state) {
   if ($a = module_invoke_all('subscriptions', 'stype', $form_state['values']['stype'], $form_state['values']['sid'], (isset($form_state['values']['author_uid']) ? $form_state['values']['author_uid'] : -1))) {
+    // Allow other modules to alter the data.
+    drupal_alter('subscriptions_stype', $a);
+
     list($module, $field, $value, $author_uid) = $a;
     $uid = $form_state['values']['uid'];
     subscriptions_write_subscription($module, $field, $value, $author_uid, $uid, $form_state['values']['send_interval'], $form_state['values']['updates'], $form_state['values']['comments']);
@@ -956,6 +959,9 @@ function subscriptions_del_form(array $form, array &$form_state, $stype, $sid, $
   global $user;
 
   if ($a = module_invoke_all('subscriptions', 'stype', $stype, $sid, (isset($author_uid) ? $author_uid : -1))) {
+    // Allow other modules to alter the data.
+    drupal_alter('subscriptions_stype', $a);
+
     list($module, $field, $value, $author_uid) = $a;
     return subscriptions_delete_form($form, $form_state, $module, $field, $value, $author_uid, $user->uid);
   }
diff --git a/subscriptions.module b/subscriptions.module
index a84cd69..7114e6c 100644
--- a/subscriptions.module
+++ b/subscriptions.module
@@ -365,6 +365,9 @@ function subscriptions_queue(array $event) {
 
   foreach (module_implements('subscriptions') as $subs_module) {
     $subs_module_query = module_invoke($subs_module, 'subscriptions', 'queue', $event);
+    // Allow other modules to alter the data.
+    drupal_alter('subscriptions_queue_list', $subs_module_query);
+
     if (!isset($subs_module_query)) {
       continue;
     }
@@ -611,6 +614,9 @@ function subscriptions_types($field = NULL, $type = NULL) {
 
   if (!isset($types)) {
     $types = module_invoke_all('subscriptions', 'types');
+    // Allow other modules to alter the data.
+    drupal_alter('subscriptions_types', $types);
+
     foreach ($types as $stype => $data) {
       if (!_subscriptions_validate_hook_result($stype, $data)) {
         continue;
diff --git a/subscriptions_mail.cron.inc b/subscriptions_mail.cron.inc
index f37a01c..8ee676d 100644
--- a/subscriptions_mail.cron.inc
+++ b/subscriptions_mail.cron.inc
@@ -66,6 +66,9 @@ function _subscriptions_mail_cron() {
         if (!isset($loaded_objects[$user->uid][$load_function][$load_args]) && $load_function($queue_item)) {
           $object = $queue_item['object'];
           $access = module_invoke_all('subscriptions', 'access', $load_function, $load_args, $object);
+          // Allow other modules to alter the data.
+          drupal_alter('subscriptions_access', $access);
+
           // One FALSE vote is enough to deny. Also, we need a non-empty array.
           $allow = !empty($access) && array_search(FALSE, $access) === FALSE;
           $loaded_objects[$user->uid][$load_function][$load_args] = $allow ? $object : FALSE;
