diff --git a/includes/views/handlers/og_handler_filter_user_roles.inc b/includes/views/handlers/og_handler_filter_user_roles.inc
new file mode 100644
index 0000000..3c4539d
--- /dev/null
+++ b/includes/views/handlers/og_handler_filter_user_roles.inc
@@ -0,0 +1,41 @@
+<?php
+
+/**
+ * Field handler to provide a list of OG roles of a user.
+ */
+class og_handler_filter_user_roles extends views_handler_filter_many_to_one {
+
+  function init(&$view, &$options) {
+    parent::init($view, $options);
+  }
+
+  function get_value_options() {
+    $this->value_options = array();
+    // Bring in all role names
+    $results = db_select('og_role', 'r')
+      ->fields('r')
+      ->groupBy('r.name')
+      ->execute();
+    foreach ($results as $result) {
+      $this->value_options[$result->name] = $result->name;
+    }
+  }
+
+  function query() {
+    // Get a user table we can relate to.
+    foreach ($this->query->relationships as $alias => $info) {
+      if ($info['table'] == 'og_membership') {
+        $og_membership_table_alias = $alias;
+        break;
+      }
+    }
+
+    // If there is a og_membership table present. Add some conditions.
+    if (!empty($og_membership_table_alias)) {
+      $rel = $this->relationship;
+      $this->query->add_where_expression(NULL, $og_membership_table_alias . '.gid = ' . $rel . '.gid');
+      $this->query->add_where_expression(NULL, $og_membership_table_alias . '.group_type = ' . $rel . '.group_type');
+    }
+    parent::query();
+  }
+}
diff --git a/includes/views/og.views.inc b/includes/views/og.views.inc
index f876eb0..a042711 100644
--- a/includes/views/og.views.inc
+++ b/includes/views/og.views.inc
@@ -43,8 +43,6 @@ class OgMembershipViewsController extends EntityDefaultViewsController {
     $data['og_membership']['gid']['title'] = t('Group ID');
     $data['og_membership']['gid']['help'] = t('Og membership "gid" property.');
 
-
-
     $data['og_membership']['og_roles'] = array(
       'title' => t('OG user roles in group'),
       'help' => t('Show all the roles a user belongs to in a group. Requires a relationship to users to be present.'),
@@ -56,6 +54,39 @@ class OgMembershipViewsController extends EntityDefaultViewsController {
       ),
     );
 
+    $data['og_membership']['og_users_roles'] = array(
+      'title' => t('OG Roles from membership'),
+      'help' => t('The OG Roles associated with the OG membership'),
+      // Provide a possible relation ship to roles through uid
+      'relationship' => array(
+        'label' => t('OG Roles from OG membership'),
+        'base' => 'og_users_roles',
+        'base field' => 'uid',
+        // FIXME: Will not work for relations other than of user type
+        'relationship field' => 'etid',
+      ),
+    );
+
+    $data['og_role'] = array(
+      'table' => array(
+        'group' => t('OG user roles'),
+        'join' => array(
+          // Attach automatically to og_users_roles relation
+          'og_users_roles' => array(
+            'left_field' => 'rid',
+            'field' => 'rid',
+          ),
+        )
+      )
+    );
+    $data['og_role']['name'] = array(
+      'title' => t('Role Name'),
+      'help' => t('The OG role name.'),
+      'filter' => array(
+        'handler' => 'og_handler_filter_user_roles',
+      ),
+    );
+
     return $data;
   }
 }
diff --git a/og.info b/og.info
index 3869456..282ea0f 100644
--- a/og.info
+++ b/og.info
@@ -32,6 +32,7 @@ files[] = includes/views/handlers/og_handler_field_group_permissions.inc
 
 ; Views filters
 files[] = includes/views/handlers/og_handler_filter_group_audience_state.inc
+files[] = includes/views/handlers/og_handler_filter_user_roles.inc
 
 ; Views relationships
 files[] = includes/views/handlers/og_handler_relationship.inc
