diff --git a/include/ajax.search.php b/include/ajax.search.php
index d670d6cafab136e0f5ee4a9c3d517a807126c892..2d9b3cea814a70f9ffa323cba7ebbf4020c69527 100644
--- a/include/ajax.search.php
+++ b/include/ajax.search.php
@@ -227,12 +227,7 @@ class SearchAjaxAPI extends AjaxController {
             $queue = CustomQueue::create();
         }
 
-        // Update queue columns (but without save)
-        foreach ($_POST['columns'] as $colid) {
-            $col = QueueColumn::create(array("id" => $colid, "queue" => $queue));
-            $col->update($_POST);
-            $queue->addColumn($col);
-        }
+        $queue->update($_POST);
 
         $form = $queue->getForm($_POST);
         $tickets = $queue->getQuery($form);
diff --git a/include/class.queue.php b/include/class.queue.php
index 3a63724326d3e229575577825f6a85d40e171371..8bf73879a5c4999f5fb4af535922f5dcb91f584e 100644
--- a/include/class.queue.php
+++ b/include/class.queue.php
@@ -18,6 +18,7 @@ require_once INCLUDE_DIR . 'class.search.php';
 
 class CustomQueue extends SavedSearch {
     static $meta = array(
+        'select_related' => array('parent'),
         'joins' => array(
             'columns' => array(
                 'reverse' => 'QueueColumn.queue',
@@ -148,9 +149,18 @@ class CustomQueue extends SavedSearch {
         return 'tickets.php?queue='.$this->getId();
     }
 
+    function inheritCriteria() {
+        return $this->flags & self::FLAG_INHERIT_CRITERIA;
+    }
+
     function getBasicQuery($form=false) {
-        $root = $this->getRoot();
-        $query = $root::objects();
+        if ($this->parent && $this->inheritCriteria()) {
+            $query = $this->parent->getBasicQuery();
+        }
+        else {
+            $root = $this->getRoot();
+            $query = $root::objects();
+        }
         $form = $form ?: $this->loadFromState($this->getCriteria());
         return $this->mangleQuerySet($query, $form);
     }
@@ -210,6 +220,7 @@ class CustomQueue extends SavedSearch {
         $this->title = $vars['name'];
         $this->parent_id = $vars['parent_id'];
         $this->filter = $vars['filter'];
+        $this->setFlag(self::FLAG_INHERIT_CRITERIA, isset($vars['inherit']));
 
         // Update queue columns (but without save)
         if (isset($vars['columns'])) {
diff --git a/include/class.search.php b/include/class.search.php
index eea827a83db7d613a6417f27733015d6bb2fc4b7..06a728424e88ee430a659a56cf186a3dc5877c35 100644
--- a/include/class.search.php
+++ b/include/class.search.php
@@ -664,9 +664,10 @@ class SavedSearch extends VerySimpleModel {
         'ordering' => array('sort'),
     );
 
-    const FLAG_PUBLIC =     0x0001;   // Shows up in e'eryone's saved searches
-    const FLAG_QUEUE =      0x0002;   // Shows up in queue navigation
-    const FLAG_CONTAINER =  0x0004;   // Container for other queues ('Open')
+    const FLAG_PUBLIC =         0x0001; // Shows up in e'eryone's saved searches
+    const FLAG_QUEUE =          0x0002; // Shows up in queue navigation
+    const FLAG_CONTAINER =      0x0004; // Container for other queues ('Open')
+    const FLAG_INHERIT_CRITERIA = 0x0008; // Include criteria from parent
 
     var $criteria;
 
@@ -1106,15 +1107,17 @@ class SavedSearch extends VerySimpleModel {
     }
 
     protected function hasFlag($flag) {
-        return $this->get('flag') & $flag !== 0;
+        return $this->get('flags') & $flag !== 0;
     }
 
     protected function clearFlag($flag) {
-        return $this->set('flag', $this->get('flag') & ~$flag);
+        return $this->set('flags', $this->get('flag') & ~$flag);
     }
 
-    protected function setFlag($flag) {
-        return $this->set('flag', $this->get('flag') | $flag);
+    protected function setFlag($flag, $value=true) {
+        return $value
+            ? $this->flags |= $flag
+            : $this->clearFlag($flag);
     }
 
     static function create($vars=array()) {
diff --git a/include/staff/queue.inc.php b/include/staff/queue.inc.php
index bfe6b4476a7310103594bd1f0be40e13ceb72289..47df03bfb6f7288d6b5d74c847cd46eb61f3e9d6 100644
--- a/include/staff/queue.inc.php
+++ b/include/staff/queue.inc.php
@@ -56,6 +56,9 @@ else {
         <br/>
         <br/>
         <div><strong><?php echo __("Queue Search Criteria"); ?></strong></div>
+        <div><input type="checkbox" class="checkbox" name="inherit" <?php
+            if ($queue->inheritCriteria()) echo 'checked="checked"';
+            ?>/> <?php echo __('Include parent search criteria'); ?></div>
         <hr/>
         <div class="error"><?php echo $errors['criteria']; ?></div>
         <div class="advanced-search">