diff --git a/modules/og_notifications/og_notifications.module b/modules/og_notifications/og_notifications.module
index ab7612d..4b6f33e 100644
--- a/modules/og_notifications/og_notifications.module
+++ b/modules/og_notifications/og_notifications.module
@@ -308,6 +308,19 @@ function og_notifications_message_alter(&$message, $info) {
     unset($text['subject']);
     $message->body = array_merge($message->body,$text);
   }
+
+  // On a group, inject a list-id mail header to allow users to easily filter
+  // the mail in their MUA.
+  if (!empty($message->notifications['events'][0]->objects['node']->og_groups)) {
+    // If a List-Id header is not yet set, just set ours. Otherwise, be nice
+    // and append ours to the end of the existing header.
+    if (empty($message->params['mail']['headers']['List-Id'])) {
+      $message->params['mail']['headers']['List-Id'] = og_notifications_listid($message->notifications['events'][0]->objects['node']->og_groups);
+    }
+    else {
+      $message->params['mail']['headers']['List-Id'] .= ','. og_notifications_listid($message->notifications['events'][0]->objects['node']->og_groups);
+    }
+  }
 }
 
 /**
@@ -569,6 +582,33 @@ function _og_notification_check_message($message) {
   return $sid > 0 ? $sid : 0;
 }
 
+/**
+ * Implements hook_token_list() for OG Notifications specific tokens.
+ */
+function og_notifications_token_list($type = 'all') {
+  if ($type == 'node' || $type == 'all') {
+    $tokens['node']['og-notifications-listid'] = t('List-Id style representation of the top group');
+    return $tokens;
+  }
+}
+
+/**
+ * Implements hook_token_values() for OG Notifications specific tokens.
+ */
+function og_notifications_token_values($type, $object = NULL) {
+  $values = array();
+
+  if ($type == 'node') {
+    // Set a default
+    $values['og-notifications-listid'] = '';
+
+    if (!empty($object->og_groups) && is_array($object->og_groups)) {
+      $values['og-notifications-listid'] = og_notifications_listid(array_filter($object->og_groups));
+    }
+  }
+  return $values;
+}
+
 // Used by Views field/filter.
 // TODO: Use constants instead of integers.
 function og_notifications_autosubscribe_map() {
@@ -577,4 +617,62 @@ function og_notifications_autosubscribe_map() {
     0 => t('Disabled'),
     1 => t('Enabled'),
   );
-}
\ No newline at end of file
+}
+
+/**
+ * Create list-id id identifier for one or more group nodes.
+ *
+ * This wrapper function massages a group nid (or array thereof) into a
+ * mailing list List-Id type identifier. The string returned is:
+ * - node.42.example.com
+ * - default-group.example.com
+ * and for multiple group nodes:
+ * - group-1.example.com,other-group.example.com,node.7.example.com
+ *
+ * @see _og_notifications_listid()
+ *
+ * @param $gids
+ *   A group node nid or an array of group node nids.
+ * @return String
+ *   A comma delimited string of group name representations.
+ */
+
+function og_notifications_listid($gids) {
+  // Early return if dealing with a single group nid.
+  if (!is_array($gids)) {
+    return _og_notifications_listid($gids);
+  }
+
+  // For multiple group nids, create a list of identifiers.
+  $groups = array();
+  foreach ($gids as $gid) {
+    $groups[] = _og_notifications_listid($gid);
+  }
+
+  // Return a comma delimited list of group identifiers.
+  return implode(',', $groups);
+}
+
+/**
+ * Create a List-Id style unique identifier from group node nid.
+ *
+ * The created identifier uses a group node path alias when present and
+ * uses the node nid otherwise.
+ *
+ * @see og_notifications_listid()
+ *
+ * @param $gid
+ *   A group node nid.
+ * @return String
+ *   A string that uniquely respresents the group node.
+ */
+function _og_notifications_listid($gid) {
+  // Create a full aliased group URL to then pick apart and use.
+  $parts = parse_url(url('node/'. $gid, array('absolute' => TRUE)));
+
+  // Remove leading slash and all non-ascii and non-slash characters.
+  $group = preg_replace('/^\/|[^a-z0-9\/-]/', '', $parts['path']);
+
+  // Change slash to period and append site FQDN.
+  return strtr($group, array('/' => '.')) .'.'. $parts['host'];
+}
