diff --git a/include/class.list.php b/include/class.list.php
index 6f322d35e88b982346f4a28d187abbcaeec27b47..326afa828fe7c96a5a005de687d755fbefde0834 100644
--- a/include/class.list.php
+++ b/include/class.list.php
@@ -649,30 +649,36 @@ class TicketStatusList extends CustomListHandler {
         return TicketStatus::objects()->count();
     }
 
-    function getAllItems($states=array()) {
-        if ($states)
-            $items = TicketStatus::objects()->filter(
-                    array('state__in' => $states))
-                    ->order_by($this->getListOrderBy());
-        else
-            $items = TicketStatus::objects()->order_by($this->getListOrderBy());
+    function getAllItems() {
+        if (!$this->_items)
+            $this->_items = TicketStatus::objects()->order_by($this->getListOrderBy());
 
-        return $items;
+        return $this->_items;
     }
 
-    function getItems($criteria) {
+    function getItems($criteria = array()) {
 
-        if (!$this->_items) {
-            $this->_items = TicketStatus::objects()->filter(
-                array('flags__hasbit' => TicketStatus::ENABLED))
-                ->order_by($this->getListOrderBy());
-            if ($criteria['limit'])
-                $this->_items->limit($criteria['limit']);
-            if ($criteria['offset'])
-                $this->_items->offset($criteria['offset']);
-        }
+        // Default to only enabled items
+        if (!isset($criteria['enabled']))
+            $criteria['enabled'] = true;
 
-        return $this->_items;
+        $filters =  array();
+        if ($criteria['enabled'])
+            $filters['mode__hasbit'] = TicketStatus::ENABLED;
+        if ($criteria['states'] && is_array($criteria['states']))
+            $filters['state__in'] = $criteria['states'];
+
+        $items = TicketStatus::objects();
+        if ($filters)
+            $items->filter($filters);
+        if ($criteria['limit'])
+            $items->limit($criteria['limit']);
+        if ($criteria['offset'])
+            $items->offset($criteria['offset']);
+
+        $items->order_by($this->getListOrderBy());
+
+        return $items;
     }
 
     function getItem($val) {
@@ -697,12 +703,12 @@ class TicketStatusList extends CustomListHandler {
         return $item;
     }
 
-    static function getAll($states=array()) {
+    static function getStatuses($criteria=array()) {
 
         $statuses = array();
         if (($list = DynamicList::lookup(
                         array('type' => 'ticket-status'))))
-            $statuses = $list->getAllItems($states);
+            $statuses = $list->getItems($criteria);
 
         return $statuses;
     }
diff --git a/include/staff/filter.inc.php b/include/staff/filter.inc.php
index e9a51705a4eb4352b73e0bd92fe91c38781ba527..3bda64e043f56e6106e758ebdcc36988a217e4ce 100644
--- a/include/staff/filter.inc.php
+++ b/include/staff/filter.inc.php
@@ -258,7 +258,7 @@ $info=Format::htmlchars(($errors && $_POST)?$_POST:$info);
                 <select name="status_id">
                     <option value="">&mdash; <?php echo __('Default'); ?> &mdash;</option>
                     <?php
-                    foreach (TicketStatusList::getAll() as $status) {
+                    foreach (TicketStatusList::getStatuses() as $status) {
                         $name = $status->getName();
                         if (!($isenabled = $status->isEnabled()))
                             $name.=' '.__('(disabled)');
diff --git a/include/staff/helptopic.inc.php b/include/staff/helptopic.inc.php
index 0742b32ae7f82b234a66f57e60cb7db50d8031ef..c4190b76c04784287027301aeb6cc094691f17d5 100644
--- a/include/staff/helptopic.inc.php
+++ b/include/staff/helptopic.inc.php
@@ -138,7 +138,7 @@ if ($info['form_id'] == Topic::FORM_USE_PARENT) echo 'selected="selected"';
                 <select name="status_id">
                     <option value="">&mdash; <?php echo __('System Default'); ?> &mdash;</option>
                     <?php
-                    foreach (TicketStatusList::getAll() as $status) {
+                    foreach (TicketStatusList::getStatuses() as $status) {
                         $name = $status->getName();
                         if (!($isenabled = $status->isEnabled()))
                             $name.=' '.__('(disabled)');
diff --git a/include/staff/settings-tickets.inc.php b/include/staff/settings-tickets.inc.php
index e2a46f46717bd6be28553143edd07e987270ef80..b8526ed0c5a03c2cab1b2ed0c82f39af25601c15 100644
--- a/include/staff/settings-tickets.inc.php
+++ b/include/staff/settings-tickets.inc.php
@@ -61,7 +61,8 @@ if(!($maxfileuploads=ini_get('max_file_uploads')))
                 <span>
                 <select name="default_ticket_status_id">
                 <?php
-                foreach (TicketStatusList::getAll(array('open')) as $status) {
+                $criteria = array('states' => array('open'));
+                foreach (TicketStatusList::getStatuses($criteria) as $status) {
                     $name = $status->getName();
                     if (!($isenabled = $status->isEnabled()))
                         $name.=' '.__('(disabled)');
diff --git a/include/staff/ticket-view.inc.php b/include/staff/ticket-view.inc.php
index c1e15703866132c3197a8413cd385fa3585b77d0..07c57c2678658728f7568bfcee663d0ed4a17d8a 100644
--- a/include/staff/ticket-view.inc.php
+++ b/include/staff/ticket-view.inc.php
@@ -623,7 +623,8 @@ $tcount+= $ticket->getNumNotes();
                         $states = array_merge($states,
                                 array('closed', 'archived'));
 
-                    foreach (TicketStatusList::getAll($states) as $s) {
+                    foreach (TicketStatusList::getStatuses(
+                                array('states' => $states)) as $s) {
                         if (!$s->isEnabled()) continue;
                         echo sprintf('<option value="%d" %s>%s</option>',
                                 $s->getId(),
@@ -713,7 +714,8 @@ $tcount+= $ticket->getNumNotes();
                         if ($thisstaff->canCloseTickets())
                             $states = array_merge($states,
                                     array('closed', 'archived'));
-                        foreach (TicketStatusList::getAll($states) as $s) {
+                        foreach (TicketStatusList::getStatuses(
+                                    array('states' => $states)) as $s) {
                             if (!$s->isEnabled()) continue;
                             $selected = $statusId == $s->getID();
                             echo sprintf('<option value="%d" %s>%s%s</option>',