diff --git a/contrib/subscriptions_og/subscriptions_og.info b/contrib/subscriptions_og/subscriptions_og.info
new file mode 100644
index 0000000..78c7c21
--- /dev/null
+++ b/contrib/subscriptions_og/subscriptions_og.info
@@ -0,0 +1,9 @@
+name = Organic Groups Subscriptions
+description = Allows users to subscribe to all content (nodes) posted to an organic group.
+package = Organic groups
+
+dependencies[] = subscriptions
+dependencies[] = subscriptions_content
+dependencies[] = og
+
+core = 7.x
diff --git a/contrib/subscriptions_og/subscriptions_og.module b/contrib/subscriptions_og/subscriptions_og.module
new file mode 100644
index 0000000..3ccf972
--- /dev/null
+++ b/contrib/subscriptions_og/subscriptions_og.module
@@ -0,0 +1,228 @@
+<?php
+
+/**
+ * @file
+ * Allow users to subscribe to content posted to an organic group.
+ */
+
+/**
+ * Implements hook_permission().
+ */
+function subscriptions_og_permission() {
+  return array(
+    'og subscribe' => array(
+      'title' => t('Subscribe to notifications for Organic Groups'),
+      'description' => t('Allows users to receive alerts when new content is posted to an Organic group.'),
+    ),
+  );
+}
+
+
+/**
+ * Implements hook_subscriptions().
+ */
+function subscriptions_og_subscriptions($op, $arg0 = NULL, $arg1 = NULL, $arg2 = NULL) {
+  static $stypes = array('og' => array('node', 'group_audience'));
+  $function = '_subscriptions_og_' . $op;
+  if (function_exists($function)) {
+    return $function($arg0, $arg1, $arg2);
+  }
+
+
+  // Queue: Define parameters used by Subscriptions to query which
+  // subscriptions should be sent. We search for subscriptions where the value
+  // is equal to the GID of any group that the newly saved $node is posted to.
+  if ($op == "queue") {
+    if ($arg0['module'] == 'node') {
+      $node = $arg0['node'];
+
+      $params['node']['group_audience'] = array(
+        'join' => array('table' => 'field_data_group_audience', 'alias' => 'ga', 'on' => 's.value = ga.group_audience_gid'),
+        'where' => array(array('ga.entity_id', $node->nid, '=')),
+        'groupby' => 'ga.entity_id'
+      );
+      if ($arg0['type'] == 'comment') {
+        $params['node']['group_audience']['where'][] = array('s.send_comments', 1, '=');
+      }
+      elseif ($arg0['type'] == 'node' && $arg0['action'] == 'update') {
+        $params['node']['group_audience']['where'][] = array('s.send_updates', 1, '=');
+      }
+
+      return $params;
+    }
+  }
+
+  elseif ($op == "fields") {
+    // $arg0 is module.
+    if ($arg0 == 'node' || $arg0 == 'comment') {
+      return array(
+        'group_audience' => array(
+          'data_function' => 'subscriptions_content_data',
+          'subs_mod' => 'subscriptions_taxonomy',
+          'subs_type' => t('group'),
+          'mailkey' => 'node-type-',
+        ),
+      );
+    }
+  }
+
+  elseif ($op == 'token_types') {
+    if (strpos($arg0, 'content_og') === 0) {
+      return array('node', 'comment');
+    }
+  }
+}
+
+/**
+ * Implements _hook_types(), subhook of hook_subscriptions().
+ *
+ * This is called by subscriptions_types() in subscriptions.module.
+ *
+ * @return array
+ *   Returns information about types for Subscriptions module interface.
+ *
+ * @ingroup form
+ * @ingroup hooks
+ *
+ * @see subscriptions_types()
+ */
+function _subscriptions_og_types() {
+  $types['og'] = array(
+    'title' => 'Groups',
+    'access' => 'og subscribe',
+    'permission' => array(
+      'title' => t('Subscribe to notifications for Organic Groups'),
+    ),
+    'page' => 'subscriptions_og_page',
+    'fields' => array('node', 'group_audience'),
+    'weight' => -10,
+  );
+  return $types;
+}
+
+/**
+ * Implements hook_node_options(), subhook of hook_subscriptions().
+ *
+ * This is called by subscriptions_ui_node_form() in subscriptions_ui.module.
+ *
+ * @param object $account
+ * @param object $node
+ *
+ * @return array
+ *
+ * @ingroup form
+ * @ingroup hooks
+ * @see subscriptions_ui_node_form()
+ */
+function _subscriptions_og_node_options($account, $node) {
+  $options = array();
+  $group = og_get_group('node', $node->nid);
+  if ($group) {
+    $options['group_audience'][] = array(
+      'name' => t('To content posted in %name', array('%name' => $group->label)),
+      'link' => 'node/' . $node->nid,
+      'params' => array(
+        'module' => 'node',
+        'field' => 'group_audience',
+        'value' => $group->gid
+      ),
+    );
+  }
+
+  return $options;
+}
+
+
+/**
+ * Defines a user's overview of which groups she is subscribed to.
+ *
+ * @param array $form
+ * @param int $uid
+ *     The user's UID
+ */
+function subscriptions_og_page(array $form, $uid) {
+  // Load all active subscriptions for this user, and allow
+  $query = db_select('subscriptions', 's', array('fetch' => PDO::FETCH_ASSOC));
+  $og_alias = $query->join('og', 'og', 's.value = og.gid');
+  $result = $query
+    ->fields('s', array('value', 'send_interval', 'author_uid', 'send_comments', 'send_updates'))
+    ->fields($og_alias, array('label'))
+    ->condition('s.module', 'node')
+    ->condition('s.field', 'group_audience')
+    ->condition('s.recipient_uid', $uid)
+    ->orderBy('s.author_uid')
+    ->execute();
+  foreach ($result as $s) {
+    $subscriptions[$s['value']][$s['author_uid']] = $s;
+  }
+
+  $form[0] = array(
+    '#theme' => 'subscriptions_form_table',
+  );
+  $defaults = array();
+  $groups = og_load_multiple(FALSE);
+  usort($groups, '_subscriptions_og_compare_groups');
+
+  foreach ($groups as $group) {
+    // Add the active subscriptions.
+    $group_name = check_plain($group->label);
+
+    if (!isset($subscriptions[$group->gid][-1])) {
+      // author-less item is missing -- add it here.
+      $subscriptions[$group->gid][-1] = array(
+        'send_interval' => _subscriptions_get_setting('send_interval', $uid),
+        'send_comments' => _subscriptions_get_setting('send_comments', $uid),
+        'send_updates' => _subscriptions_get_setting('send_updates', $uid),
+        'author_uid' => FALSE,
+      );
+    }
+    foreach ($subscriptions[$group->gid] as $author_uid => $subscription) {
+      subscriptions_form_helper($form[0], $defaults, $author_uid, $group->gid, $group_name, $subscription);
+    }
+  }
+
+  if (isset($form[0]['checkboxes'])) {
+    $form[0]['defaults'] = array(
+      '#type' => 'value',
+      '#value' => $defaults,
+    );
+    subscriptions_form_column_filter($form[0], $uid);
+  }
+  else {
+    $form = array(
+      array('#markup' => t('There are no available groups to subscribe to.'))
+    );
+  }
+
+  return $form;
+}
+
+/**
+ * Helper function so sort organic groups.
+ *
+ * Intended for use with usort() and similar functions.
+ *
+ * @param OgGroup $first
+ * @param OgGroup $second
+ *
+ * @return int
+ * < 0 if $first comes before $second, > 0 if $second comes before $first, and
+ * 0 if they are equal in sorting order.
+ */
+function _subscriptions_og_compare_groups(OgGroup $first, OgGroup $second) {
+  return strcmp($first->label, $second->label);
+}
+
+/**
+ * Implements hook_disable().
+ *
+ * Removes our queue items.
+ *
+ * @ingroup hooks
+ */
+function subscriptions_og_disable() {
+  db_delete('subscriptions_queue')
+  ->condition('module', 'node')
+  ->condition('field', 'group_audience')
+  ->execute();
+}
