diff --git a/modules/commons/commons_documents/commons_documents.install b/modules/commons/commons_documents/commons_documents.install
index 63b7865cd013d219f95581024e2cf18e7537acb0..abb810d226950cea7db698b51807bb1613c8bc17 100644
--- a/modules/commons/commons_documents/commons_documents.install
+++ b/modules/commons/commons_documents/commons_documents.install
@@ -1,6 +1,19 @@
 <?php
 
 /**
+ * Set default document roles upon enable
+ */
+function commons_documents_enable() {
+  features_revert(array('commons_documents' => array('og_features_permission', 'field_instance', 'field_base', 'variable', 'views_view', 'node')));
+
+  $groups = og_get_all_group();
+
+  foreach ($groups as $gid) {
+    commons_groups_features_permission_rebuild('commons_documents', $gid);
+  }
+}
+
+/**
  * Disable summary on Document nodes.
  */
 function commons_documents_update_7000() {
@@ -87,3 +100,21 @@ function commons_documents_update_7007() {
   features_revert($revert);
   return array();
 }
+
+/**
+ * Reset document og permissions automatically, they were not set before now.
+ */
+function commons_documents_update_7008() {
+  $revert = array(
+    'commons_documents' => array('og_features_permission'),
+  );
+  features_revert($revert);
+
+  $groups = og_get_all_group();
+
+  foreach ($groups AS $gid) {
+    commons_groups_features_permission_rebuild('commons_documents', $gid);
+  }
+
+  return array();
+}
diff --git a/modules/commons/commons_events/commons_events.install b/modules/commons/commons_events/commons_events.install
index fc0f37f911d1bb9a4d87c960fec008f6ee048971..6288392540ef55334d8b1052f88ab0c23dd149ea 100644
--- a/modules/commons/commons_events/commons_events.install
+++ b/modules/commons/commons_events/commons_events.install
@@ -1,6 +1,22 @@
 <?php
 
 /**
+ * Set default events roles upon enable
+ */
+function commons_events_enable() {
+  $revert = array(
+    'commons_events' => array('og_features_permission'),
+  );
+  features_revert($revert);
+
+  $groups = og_get_all_group();
+
+  foreach ($groups AS $gid) {
+    commons_groups_features_permission_rebuild('commons_events', $gid);
+  }
+}
+
+/**
  * Implements hook_install().
  * Creates a default datetime format for events.
  */
diff --git a/modules/commons/commons_groups/commons_groups.module b/modules/commons/commons_groups/commons_groups.module
index 133307f5db4df5bd5e319c13042a1ee30752c68a..1a17ebb1f1882c2ef5f39a1933384992bce132bb 100644
--- a/modules/commons/commons_groups/commons_groups.module
+++ b/modules/commons/commons_groups/commons_groups.module
@@ -1161,3 +1161,58 @@ function commons_groups_views_pre_render(&$view) {
     $view->display_handler->handlers['empty']['area']->options['content'] = t('Nobody has posted yet.');
   }
 }
+
+/**
+ * Special Commons implementation of hook_features_rebuild().
+ *
+ * By default, reverting og permissions only occurs on the default rid, which is
+ * 0. All groups already created will not see the new permissions.
+ *
+ * As an alternative, this function iterates through all of the groups and sets
+ * default permissions and update the permissions map.
+ *
+ * @param string $module
+ *   The modules whose default user permissions should be rebuild.
+ */
+function commons_groups_features_permission_rebuild($module, $gid) {
+  module_load_include('features.inc', 'og', '/includes/og_features_role');
+
+  if ($defaults = features_get_default('og_features_permission', $module)) {
+    $grant = array();
+    $revoke = array();
+
+    foreach ($defaults as $key => $details) {
+      list($group_type, $bundle, $perm) = explode(':', $key);
+
+      // Make sure the role exists for this entity.
+      foreach ($details['roles'] as $role) {
+        $bundle_role = _og_features_role_exists($role, $group_type, $bundle);
+        if (empty($bundle_role)) {
+          og_role_save(og_role_create($role, $group_type, $gid, $bundle));
+        }
+      }
+
+      $roles = og_roles($group_type, $bundle, $gid);
+      foreach ($roles as $rid => $rolename) {
+        if (in_array($rolename, $details['roles'])) {
+          $grant[$rid][] = $perm;
+        }
+        else {
+          $revoke[$rid][] = $perm;
+        }
+      }
+    }
+
+    if (!empty($grant)) {
+      foreach ($grant as $rid => $permissions) {
+        og_role_grant_permissions($rid, $permissions);
+      }
+    }
+
+    if (!empty($revoke)) {
+      foreach ($revoke as $rid => $permissions) {
+        og_role_revoke_permissions($rid, $permissions);
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/modules/commons/commons_polls/commons_polls.install b/modules/commons/commons_polls/commons_polls.install
index 661fbeff54f4b4d8f3a69a178593dbdcb10ce34c..fd0a877e4c3b5e6bf371f1c027c63c275d37b4a3 100644
--- a/modules/commons/commons_polls/commons_polls.install
+++ b/modules/commons/commons_polls/commons_polls.install
@@ -1,6 +1,22 @@
 <?php
 
 /**
+ * Set default polls roles upon enable
+ */
+function commons_polls_enable() {
+  $revert = array(
+    'commons_polls' => array('og_features_permission'),
+  );
+  features_revert($revert);
+
+  $groups = og_get_all_group();
+
+  foreach ($groups AS $gid) {
+    commons_groups_features_permission_rebuild('commons_polls', $gid);
+  }
+}
+
+/**
  * Disable summary on Poll nodes.
  */
 function commons_polls_update_7000() {
diff --git a/modules/commons/commons_posts/commons_posts.install b/modules/commons/commons_posts/commons_posts.install
index b39a48ce5270bc53cd73363cd19fd398fec3bd03..24d5251213a924b93a60cd74988bda21908230c8 100644
--- a/modules/commons/commons_posts/commons_posts.install
+++ b/modules/commons/commons_posts/commons_posts.install
@@ -1,6 +1,22 @@
 <?php
 
 /**
+ * Set default posts roles upon enable
+ */
+function commons_posts_enable() {
+  $revert = array(
+    'commons_posts' => array('og_features_permission'),
+  );
+  features_revert($revert);
+
+  $groups = og_get_all_group();
+
+  foreach ($groups AS $gid) {
+    commons_groups_features_permission_rebuild('commons_posts', $gid);
+  }
+}
+
+/**
  * Disable summary on Posts nodes.
  */
 function commons_posts_update_7000() {
diff --git a/modules/commons/commons_q_a/commons_q_a.install b/modules/commons/commons_q_a/commons_q_a.install
index aa6ec721d2c672be38acec08f09c5bf0dffd5d77..d653f903907eb1e6321b5ac4217faa60c6b32cc2 100644
--- a/modules/commons/commons_q_a/commons_q_a.install
+++ b/modules/commons/commons_q_a/commons_q_a.install
@@ -1,6 +1,22 @@
 <?php
 
 /**
+ * Set default Q/A roles upon enable
+ */
+function commons_q_a_enable() {
+  $revert = array(
+    'commons_q_a' => array('og_features_permission'),
+  );
+  features_revert($revert);
+
+  $groups = og_get_all_group();
+
+  foreach ($groups AS $gid) {
+    commons_groups_features_permission_rebuild('commons_q_a', $gid);
+  }
+}
+
+/**
  * Update the Rate module settings for changes to the Up/Down widget.
  */
 function commons_q_a_update_3100() {
diff --git a/modules/commons/commons_wikis/commons_wikis.install b/modules/commons/commons_wikis/commons_wikis.install
index b35cade5136054311fbb65e29ae6bc34b1b8c9ab..846da5d186085cf76d450756b93edfebcaae1ad4 100644
--- a/modules/commons/commons_wikis/commons_wikis.install
+++ b/modules/commons/commons_wikis/commons_wikis.install
@@ -1,6 +1,22 @@
 <?php
 
 /**
+ * Set default wikis roles upon enable
+ */
+function commons_wikis_enable() {
+  $revert = array(
+    'commons_wikis' => array('og_features_permission'),
+  );
+  features_revert($revert);
+
+  $groups = og_get_all_group();
+
+  foreach ($groups AS $gid) {
+    commons_groups_features_permission_rebuild('commons_wikis', $gid);
+  }
+}
+
+/**
  * Disable summary on Wiki nodes.
  */
 function commons_wikis_update_7000() {
