diff --git a/include/class.dynamic_forms.php b/include/class.dynamic_forms.php
index 97348ff2c2e66dff5e50a4fce246925064eaf94d..a0177cd3338da149a2a055d34a8493616fa45cf7 100644
--- a/include/class.dynamic_forms.php
+++ b/include/class.dynamic_forms.php
@@ -235,6 +235,15 @@ class UserForm extends DynamicForm {
         return static::$instance;
     }
 }
+Filter::addSupportedMatches('User Data', function() {
+    $matches = array();
+    foreach (UserForm::getInstance()->getFields() as $f) {
+        if (!$f->hasData())
+            continue;
+        $matches['field.'.$f->get('id')] = $f->getLabel();
+    }
+    return $matches;
+});
 
 class TicketForm extends DynamicForm {
     static $instance;
diff --git a/include/class.organization.php b/include/class.organization.php
index 81937964e55c75302872cf1b20ac72c1915a3d4f..d024507238db5c37420b814f8ab53370003c8e90 100644
--- a/include/class.organization.php
+++ b/include/class.organization.php
@@ -193,6 +193,20 @@ class Organization extends OrganizationModel {
         $form->save();
     }
 
+    function getFilterData() {
+        $vars = array();
+        foreach ($this->getDynamicData() as $entry) {
+            if ($entry->getForm()->get('type') != 'O')
+                continue;
+            foreach ($entry->getFields() as $f)
+                $vars['field.'.$f->get('id')] = $f->toString($f->getClean());
+            // Add special `name` field
+            $f = $entry->getForm()->getField('name');
+            $vars['field.'.$f->get('id')] = $this->getName();
+        }
+        return $vars;
+    }
+
     function to_json() {
 
         $info = array(
@@ -374,5 +388,14 @@ class OrganizationForm extends DynamicForm {
     }
 
 }
+Filter::addSupportedMatches('Organization Data', function() {
+    $matches = array();
+    foreach (OrganizationForm::getInstance()->getFields() as $f) {
+        if (!$f->hasData())
+            continue;
+        $matches['field.'.$f->get('id')] = $f->getLabel();
+    }
+    return $matches;
+});
 Organization::_inspect();
 ?>
diff --git a/include/class.ticket.php b/include/class.ticket.php
index 6b0d597e10821cf53396f1ac925521520fdfcc20..8102d8de070943206c59328e391806b968074370 100644
--- a/include/class.ticket.php
+++ b/include/class.ticket.php
@@ -2208,13 +2208,26 @@ class Ticket {
         if ($vars['uid'] && ($user = User::lookup($vars['uid']))) {
             $vars['email'] = $user->getEmail();
             $vars['name'] = $user->getName();
+            // Add in user and organization data for filtering
+            $vars += $user->getFilterData();
+            if ($org = $user->getOrganization()) {
+                $vars += $org->getFilterData();
+            }
         }
         else {
             $interesting = array('name', 'email');
             $user_form = UserForm::getUserForm()->getForm($vars);
-            foreach ($user_form->getFields() as $f)
+            // Add all the user-entered info for filtering
+            foreach ($user_form->getFields() as $f) {
+                $vars['field.'.$f->get('id')] = $f->toString($f->getClean());
                 if (in_array($f->get('name'), $interesting))
-                    $vars[$f->get('name')] = $f->toString($f->getClean());
+                    $vars[$f->get('name')] = $vars['field.'.$f->get('id')];
+            }
+            // Add in organization data if one exists for this email domain
+            list($mailbox, $domain) = explode('@', $vars['email'], 2);
+            if ($org = Organization::forDomain($domain)) {
+                $vars += $org->getFilterData();
+            }
         }
 
 
diff --git a/include/class.user.php b/include/class.user.php
index b5247d66731718bfa8d56b3669d3b84c8700f093..4736a1707633611a18e7935e0422c0865b845faa 100644
--- a/include/class.user.php
+++ b/include/class.user.php
@@ -288,6 +288,22 @@ class User extends UserModel {
         return $this->_entries;
     }
 
+    function getFilterData() {
+        $vars = array();
+        foreach ($this->getDynamicData() as $entry) {
+            if ($entry->getForm()->get('type') != 'U')
+                continue;
+            foreach ($entry->getFields() as $f)
+                $vars['field.'.$f->get('id')] = $f->toString($f->getClean());
+            // Add in special `name` and `email` fields
+            foreach (array('name', 'email') as $name) {
+                if ($f = $entry->getForm()->getField($name))
+                    $vars['field.'.$f->get('id')] = $this->getName();
+            }
+        }
+        return $vars;
+    }
+
     function getForms($data=null) {
 
         if (!isset($this->_forms)) {
diff --git a/include/staff/filter.inc.php b/include/staff/filter.inc.php
index 29fcaf17cc3c66327754344fde8cfd70539a930c..a1b92945c6cc52279d8cd1219f59560b6b745b6f 100644
--- a/include/staff/filter.inc.php
+++ b/include/staff/filter.inc.php
@@ -122,7 +122,7 @@ $info=Format::htmlchars(($errors && $_POST)?$_POST:$info);
         <tr id="r<?php echo $i; ?>">
             <td colspan="2">
                 <div>
-                    <select name="rule_w<?php echo $i; ?>">
+                    <select style="max-width: 200px;" name="rule_w<?php echo $i; ?>">
                         <option value="">&mdash; Select One &dash;</option>
                         <?php
                         foreach ($matches as $group=>$ms) { ?>