diff --git a/contrib/subscriptions_og/subscriptions_og.info b/contrib/subscriptions_og/subscriptions_og.info
new file mode 100644
index 0000000..e90b3ad
--- /dev/null
+++ b/contrib/subscriptions_og/subscriptions_og.info
@@ -0,0 +1,10 @@
+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
+version = 7.x-1.x-beta
\ No newline at end of file
diff --git a/contrib/subscriptions_og/subscriptions_og.module b/contrib/subscriptions_og/subscriptions_og.module
new file mode 100644
index 0000000..ce05d45
--- /dev/null
+++ b/contrib/subscriptions_og/subscriptions_og.module
@@ -0,0 +1,220 @@
+<?php
+
+/**
+ * @file
+ * Allow users to subscribe to content posted to an organic group.
+ */
+
+/**
+ * Implementation of 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.'),
+ 		),
+ 	);
+}
+
+
+/**
+ * Implementation of 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;
+}
+
+/**
+ * Implementation of 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)),
+			'params' => array('module' => 'node', 'field' => 'group_audience', 'value' => $group->gid),
+			'link' => 'node/' . $node->nid,
+		);
+	}
+	
+	return $options;
+}
+
+
+/**
+ * Form function defining 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;
+}
+
+/**
+ * Callable function to compare the lexicographical order of two OG groups. Use
+ * together with usort to sort an array of groups.
+ *
+ * @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().
+ *
+ * Remove our queue items.
+ *
+ * @ingroup hooks
+ */
+function subscriptions_og_disable() {
+	db_delete('subscriptions_queue')
+	->condition('module', 'node')
+	->condition('field', 'group_audience')
+	->execute();
+}
