diff --git a/includes/workbench_moderation_handler_filter_user_can_moderate.inc b/includes/workbench_moderation_handler_filter_user_can_moderate.inc
index 0c10661..6b398c3 100644
--- a/includes/workbench_moderation_handler_filter_user_can_moderate.inc
+++ b/includes/workbench_moderation_handler_filter_user_can_moderate.inc
@@ -3,17 +3,47 @@
 /**
  * @file
  * Filter based on moderation privlieges.
+ * 
+ * This filter will only show content that the user has access to based on
+ * content transition (not state alone) and user role permissions
  */
 class workbench_moderation_handler_filter_user_can_moderate extends views_handler_filter {
+
   function options_form(&$form, &$form_state) {
     parent::options_form($form, $form_state);
-    drupal_set_message(t("This filter isn't even possible right now since workbench moderation permissions are incomplete--there's no way to figure out what transitions a user may make for a particular type of content."), 'error');
   }
 
   function query() {
-    // add table, add node table, add where statments like "(n.type = 'blog' AND moderation.state IN ('review', 'approve')) OR (n.type = 'article' AND moderation.state IN ('review'))"
-    // $this->ensure_my_table();
-    // $node_alias = $this->query->ensure_table('node');
-    // $this->query->add_where();
+
+    $this->ensure_my_table();
+    
+    $db_from_state = "$this->table_alias.from_state";
+    $db_to_state = "$this->table_alias.state";
+
+    // get transitions
+    $transitions = workbench_moderation_transitions();
+
+    $expression = '';
+    foreach ($transitions as $trans) {
+      
+      // can the current user moderate this content transition?
+      if (user_access('moderate content from ' . $trans->from_name . ' to ' . $trans->to_name)) {
+        $from_state = $trans->from_name;
+        $to_state = $trans->to_name;
+      }
+
+      // write clause
+      $expression .= "($db_from_state = '$from_state') AND ($db_to_state = '$to_state') OR ";
+      
+      // it's possible that the state doesn't change after ab edit, account for that.
+      $expression .= "($db_from_state = '$from_state') AND ($db_to_state = '$from_state') OR ";
+    }
+
+    // get rid of the last OR
+    $clause = trim($expression, " OR ");
+    
+    // add our clause to the query object
+    $this->query->add_where_expression($this->options['group'], $clause, array());
   }
-}
+
+}
\ No newline at end of file
