diff --git a/include/class.dept.php b/include/class.dept.php
index a1a87164f924da3965f1ff77be5e31cbaf4fc4ed..4eb0b8e2229d906bbce2031f6690c8d54af23778 100644
--- a/include/class.dept.php
+++ b/include/class.dept.php
@@ -107,7 +107,7 @@ implements TemplateVariable, Searchable {
             'name' => new TextboxField(array(
                 'label' => __('Name'),
             )),
-            'manager' => new AgentSelectionField(array(
+            'manager' => new DepartmentManagerSelectionField(array(
                 'label' => __('Manager'),
             )),
         );
diff --git a/include/class.search.php b/include/class.search.php
index d305ab16fee05a17d2de4c0c808d9f37230582f1..f1d1510de882d8c47169f0af106f01c79dfdf98c 100644
--- a/include/class.search.php
+++ b/include/class.search.php
@@ -723,7 +723,33 @@ class AdvancedSearchForm extends SimpleForm {
 
 // Advanced search special fields
 
-class HelpTopicChoiceField extends ChoiceField {
+class AdvancedSearchSelectionField extends ChoiceField {
+
+    function getSearchQ($method, $value, $name=false) {
+
+
+        switch ($method) {
+            case 'includes':
+            case '!includes':
+                $Q = new Q();
+                if (count($value) > 1)
+                    $Q->add(array("{$name}__in" => array_keys($value)));
+                else
+                    $Q->add(array($name => key($value)));
+
+                if ($method == '!includes')
+                    $Q->negate();
+                return $Q;
+                break;
+            default:
+                return parent::getSearchQ($method, $value, $name);
+        }
+
+    }
+
+}
+
+class HelpTopicChoiceField extends AdvancedSearchSelectionField {
     function hasIdValue() {
         return true;
     }
@@ -734,7 +760,7 @@ class HelpTopicChoiceField extends ChoiceField {
 }
 
 require_once INCLUDE_DIR . 'class.dept.php';
-class DepartmentChoiceField extends ChoiceField {
+class DepartmentChoiceField extends AdvancedSearchSelectionField {
     var $_choices = null;
 
     function getChoices($verbose=false) {
@@ -764,6 +790,7 @@ class DepartmentChoiceField extends ChoiceField {
     }
 }
 
+
 class AssigneeChoiceField extends ChoiceField {
     function getChoices($verbose=false) {
         global $thisstaff;
@@ -902,7 +929,7 @@ trait ZeroMeansUnset {
     }
 }
 
-class AgentSelectionField extends ChoiceField {
+class AgentSelectionField extends AdvancedSearchSelectionField {
     use ZeroMeansUnset;
 
     function getChoices($verbose=false) {
@@ -940,6 +967,17 @@ class AgentSelectionField extends ChoiceField {
     }
 }
 
+class DepartmentManagerSelectionField extends AgentSelectionField {
+
+    function getChoices($verbose=false) {
+        return Staff::getStaffMembers();
+    }
+
+    function getSearchQ($method, $value, $name=false) {
+        return parent::getSearchQ($method, $value, 'dept__manager_id');
+    }
+}
+
 class TeamSelectionField extends ChoiceField {
     use ZeroMeansUnset;
 
@@ -953,7 +991,7 @@ class TeamSelectionField extends ChoiceField {
     }
 }
 
-class TicketStateChoiceField extends ChoiceField {
+class TicketStateChoiceField extends AdvancedSearchSelectionField {
     function getChoices($verbose=false) {
         return array(
             'open' => __('Open'),