diff --git a/include/class.search.php b/include/class.search.php
index 7f39725668c970e8fd57e69ac7f2afd381a7c625..2e05d9445ed1e5195cd96dd04469986579d55e39 100755
--- a/include/class.search.php
+++ b/include/class.search.php
@@ -900,7 +900,7 @@ class SavedQueue extends CustomQueue {
        $counts = array();
         $query = Ticket::objects();
         // Apply tickets visibility for the agent
-        $query = $agent->applyVisibility($query);
+        $query = $agent->applyVisibility($query, true);
         // Aggregate constraints
         foreach ($queues as $queue) {
             $Q = $queue->getBasicQuery();
diff --git a/include/class.staff.php b/include/class.staff.php
index 2b0471a4cabca3f7c254482ce1f0fcd878e1b0c9..4083bf9e79f2e5012cb59767b7fa1e0cd5672feb 100644
--- a/include/class.staff.php
+++ b/include/class.staff.php
@@ -584,7 +584,7 @@ implements AuthenticatedUser, EmailContact, TemplateVariable, Searchable {
         return $this->_teams;
     }
 
-    function getTicketsVisibility() {
+    function getTicketsVisibility($exclude_archived=false) {
 
         // -- Open and assigned to me
         $assigned = Q::any(array(
@@ -607,15 +607,26 @@ implements AuthenticatedUser, EmailContact, TemplateVariable, Searchable {
 
         // -- Routed to a department of mine
         if (($depts=$this->getDepts()) && count($depts)) {
-            $visibility->add(array('dept_id__in' => $depts));
-            $visibility->add(array('thread__referrals__dept__id__in' => $depts));
+            $in_dept = Q::any(array(
+                'dept_id__in' => $depts,
+                'thread__referrals__dept__id__in' => $depts,
+            ));
+
+            if ($exclude_archived) {
+                $in_dept = Q::all(array(
+                    'status__state__in' => ['open', 'closed'],
+                    $in_dept,
+                ));
+            }
+
+            $visibility->add($in_dept);
         }
 
         return $visibility;
     }
 
-    function applyVisibility($query) {
-        return $query->filter($this->getTicketsVisibility());
+    function applyVisibility($query, $exclude_archived=false) {
+        return $query->filter($this->getTicketsVisibility($exclude_archived));
     }
 
     /* stats */
diff --git a/include/staff/templates/queue-tickets.tmpl.php b/include/staff/templates/queue-tickets.tmpl.php
index d6e6307c1d8c3a0ab4f5f9e820a397c7ead872e5..49a8eb2461becec6470e55dc755cc42ee42aae31 100644
--- a/include/staff/templates/queue-tickets.tmpl.php
+++ b/include/staff/templates/queue-tickets.tmpl.php
@@ -6,7 +6,11 @@
 
 // Impose visibility constraints
 // ------------------------------------------------------------
-if (!$queue->ignoreVisibilityConstraints($thisstaff))
+//filter if limited visibility or if unlimited visibility and in a queue
+$ignoreVisibility = $queue->ignoreVisibilityConstraints($thisstaff);
+if (!$ignoreVisibility || //limited visibility
+   ($ignoreVisibility && ($queue->isAQueue() || $queue->isASubQueue())) //unlimited visibility + not a search
+)
     $tickets->filter($thisstaff->getTicketsVisibility());
 
 // Make sure the cdata materialized view is available