diff --git a/expire/expire.admin.inc b/expire/expire.admin.inc
index 588041e..2c69b7d 100644
--- a/expire/expire.admin.inc
+++ b/expire/expire.admin.inc
@@ -41,6 +41,12 @@ function expire_admin_settings_form() {
     '#default_value' => variable_get('expire_flush_cck_references', EXPIRE_FLUSH_CCK_REFERENCES),
     '#description'   => t('When expiring a node: expire its node references and nodes containing it in their own ndoe references.'),
   );
+  $form['expire']['expire_flush_og_references'] = array(
+    '#type'          => 'checkbox',
+    '#title'         => t('Expire nodes related by OG'),
+    '#default_value' => variable_get('expire_flush_og_references', EXPIRE_FLUSH_OG_REFERENCES),
+    '#description'   => t('When expiring a node: expire nodes in the same organic group(s), including group containers.'),
+  );
 
   $form['format'] = array(
     '#type'          => 'fieldset',
diff --git a/expire/expire.module b/expire/expire.module
index 586816b..73cfe42 100644
--- a/expire/expire.module
+++ b/expire/expire.module
@@ -9,6 +9,7 @@
 define('EXPIRE_FLUSH_NODE_TERMS', TRUE);
 define('EXPIRE_FLUSH_MENU_ITEMS', 1);
 define('EXPIRE_FLUSH_CCK_REFERENCES', TRUE);
+define('EXPIRE_FLUSH_OG_REFERENCES', TRUE);
 define('EXPIRE_FLUSH_FRONT', TRUE);
 define('EXPIRE_INCLUDE_BASE_URL', TRUE);
 
@@ -284,6 +285,27 @@ function expire_node(&$node) {
     }
   }
 
+  // Get nodes related by OG and flush - does *not* check for use of og_subgroups
+  if (variable_get('expire_flush_og_references', EXPIRE_FLUSH_OG_REFERENCES) && module_exists('og')) {
+    if(og_is_group_type($node->type)) {
+      // Node is a group container, expire all children
+      expire_og_get_children($node->nid, $paths); 
+    }
+    if(count($node->og_groups) > 0) {
+      // Node is a group child, expire children of all parent groups
+      foreach ($node->og_groups AS $nid) {
+        if (is_numeric($nid)) {
+          // Expire the parent
+          $paths['og' . $nid] = 'node/' . $nid;
+          // Expire the parent's children
+          expire_og_get_children($nid, $paths);
+        }
+      }
+    }
+  }
+
+
   // Flush array of paths
   if (!empty($paths)) {
     $flushed = expire_cache_derivative($paths, $node);
@@ -376,6 +398,21 @@ function expire_get_menu_structure($menu, $found, $needle, $first, &$found_globa
 }
 
 /**
+ * Add any children of the given OG container nid
+ * to the $paths array
+ * @param $group_nid
+ *  The nid of the OG parent (container)
+ * @param array $paths
+ *  The array of paths to be expired
+ */
+function expire_og_get_children($group_nid, &$paths) {
+  $nids = og_group_child_nids($group_nid);
+  foreach ($nids AS $nid) {
+    $paths['og' . $nid] = 'node/' . $nid;
+  }
+}
+
+/**
  * Return taxonomy terms given a nid.
  *
  * Needed because of a weird bug with CCK & node_load()
