diff --git a/og.module b/og.module
index 43dd2d5..8db3097 100644
--- a/og.module
+++ b/og.module
@@ -2640,6 +2640,12 @@ function og_role_grant($group_type, $gid, $uid, $rid) {
     drupal_write_record('og_users_roles', $role);
     og_invalidate_cache();
     module_invoke_all('og_role_grant', $group_type, $gid, $uid, $rid);
+
+    if (module_exists('rules')) {
+      $membership = og_get_membership($group_type, $gid, 'user', $uid);
+      $account = entity_metadata_wrapper('user', $uid);
+      rules_invoke_event('og_role_grant', $membership, $account);
+    }
   }
 }
 
@@ -2661,6 +2667,12 @@ function og_role_revoke($group_type, $gid, $uid, $rid) {
       ->condition('gid', $gid)
       ->execute();
     module_invoke_all('og_role_revoke', $group_type, $gid, $uid, $rid);
+
+    if (module_exists('rules')) {
+      $membership = og_get_membership($group_type, $gid, 'user', $uid);
+      $account = entity_metadata_wrapper('user', $uid);
+      rules_invoke_event('og_role_revoke', $membership, $account);
+    }
   }
 }
 
diff --git a/og.rules.inc b/og.rules.inc
index ccfa6e3..83799fd 100644
--- a/og.rules.inc
+++ b/og.rules.inc
@@ -27,6 +27,7 @@ function og_rules_event_info() {
     ),
     'group' => t('OG membership'),
   );
+  
   return array(
     'og_user_insert' => $defaults + array(
       'label' => t('User has become a group member'),
@@ -42,6 +43,12 @@ function og_rules_event_info() {
       'label' => t('User has been removed from group'),
       'help' => t("A user has been removed from group and is no longer a group member."),
    ),
+    'og_role_grant' => $defaults + array(
+      'label' => t('User has been granted a'),
+    ),
+    'og_grant_revoke' => $defaults + array(
+      'label' => t('User has been revoked a role'),
+    ),
  );
 }
 
