diff --git a/include/ajax.tickets.php b/include/ajax.tickets.php
index 9c13bd5e4affb8cb17d6e5e7c42cc428509f1d4f..bcb2d5eccd82c0e7402fdd02af881bfc2af138d6 100644
--- a/include/ajax.tickets.php
+++ b/include/ajax.tickets.php
@@ -723,13 +723,6 @@ class TicketsAjaxAPI extends AjaxController {
                 $state = 'closed';
                 $info['title'] = __('Close');
                 break;
-            case 'archive':
-                if (!$thisstaff->canCloseTickets())
-                    Http::response(403, 'Access denied');
-
-                $state = 'archived';
-                $info['title'] = __('Archive');
-                break;
             case 'delete':
                 if (!$thisstaff->canDeleteTickets())
                     Http::response(403, 'Access denied');
@@ -744,7 +737,8 @@ class TicketsAjaxAPI extends AjaxController {
                                 including any associated attachments.')));
                 break;
             default:
-                Http::response(404, 'Unknown status/action');
+                $info['warn'] = sprintf('%s %s',
+                        __('Unknown or invalid'), __('status'));
         }
 
         $info['action'] = sprintf('#tickets/%d/status/%s', $ticket->getId(), $status);
@@ -764,6 +758,7 @@ class TicketsAjaxAPI extends AjaxController {
                 || !$ticket->checkStaffAccess($thisstaff))
             Http::response(404, 'Unknown ticket #');
 
+        $errors = $info = array();
         if (!($status= TicketStatus::lookup($_REQUEST['status_id'])))
             $errors['status_id'] = sprintf('%s %s',
                     __('Unknown or invalid'), __('status'));
@@ -784,13 +779,15 @@ class TicketsAjaxAPI extends AjaxController {
                                     permission to %s.'),
                                 __('resolve/close tickets'));
                     break;
-                case 'archived':
                 case 'deleted':
                     if (!$thisstaff->canDeleteTickets())
                         $errors['err'] = sprintf(__('You do not have
                                     permission to %s.'),
                                 __('archive/delete tickets'));
                     break;
+                default:
+                    $errors['err'] = sprintf('%s %s',
+                            __('Unknown or invalid'), __('status'));
             }
         }
 
@@ -838,16 +835,6 @@ class TicketsAjaxAPI extends AjaxController {
                             __('Close'), __('Tickets'))
                         );
                 break;
-            case 'archive':
-                if (!$thisstaff->canCloseTickets())
-                    Http::response(403, 'Access denied');
-
-                $state = 'archived';
-                $info = array(
-                        'title' => sprintf('%s %s',
-                            __('Archive'), __('Tickets')),
-                        );
-                break;
             case 'delete':
                 if (!$thisstaff->canDeleteTickets())
                     Http::response(403, 'Access denied');
@@ -864,7 +851,8 @@ class TicketsAjaxAPI extends AjaxController {
                                 including any associated attachments.')));
                 break;
             default:
-                Http::response(404, 'Unknown status/action');
+                $info['warn'] = sprintf('%s %s',
+                        __('Unknown or invalid'), __('status'));
         }
 
         if ($_REQUEST['count'])
@@ -878,7 +866,7 @@ class TicketsAjaxAPI extends AjaxController {
     function setTicketsStatus($state) {
         global $thisstaff, $ost;
 
-        $errors = array();
+        $errors = $info = array();
         if (!$thisstaff || !$thisstaff->canManageTickets())
             $errors['err']=__('You do not have permission to mass manage tickets. Contact admin for such access');
         elseif (!$_REQUEST['tids'] || !count($_REQUEST['tids']))
@@ -904,13 +892,15 @@ class TicketsAjaxAPI extends AjaxController {
                                     permission to %s.'),
                                 __('resolve/close tickets'));
                     break;
-                case 'archived':
                 case 'deleted':
                     if (!$thisstaff->canDeleteTickets())
                         $errors['err'] = sprintf(__('You do not have
                                     permission to %s.'),
                                 __('archive/delete tickets'));
                     break;
+                default:
+                    $errors['err'] = sprintf('%s %s',
+                            __('Unknown or invalid'), __('status'));
             }
         }
 
diff --git a/include/class.list.php b/include/class.list.php
index 03ac2a2d1fde3fb20b2ee7e55548da1614bd5ae3..d1eae41603555072de0559069d384a39e4615a4f 100644
--- a/include/class.list.php
+++ b/include/class.list.php
@@ -667,6 +667,8 @@ class TicketStatusList extends CustomListHandler {
             $filters['mode__hasbit'] = TicketStatus::ENABLED;
         if ($criteria['states'] && is_array($criteria['states']))
             $filters['state__in'] = $criteria['states'];
+        else
+            $filters['state__isnull'] = false;
 
         $items = TicketStatus::objects();
         if ($filters)
@@ -692,6 +694,7 @@ class TicketStatusList extends CustomListHandler {
     function addItem($vars, &$errors) {
 
         $item = TicketStatus::create(array(
+            'mode' => 1,
             'flags' => 0,
             'sort'  => $vars['sort'],
             'name' => $vars['value'],
@@ -819,7 +822,7 @@ class TicketStatus  extends VerySimpleModel implements CustomListItem {
     }
 
     function isEnableable() {
-        return $this->hasProperties();
+        return ($this->getState());
     }
 
     function isDisableable() {
diff --git a/include/class.ticket.php b/include/class.ticket.php
index 328fe98987713954ebc003d4264fba82366ef2e0..26f3312dbb40eab39f7753ff19c544b84fd43cc4 100644
--- a/include/class.ticket.php
+++ b/include/class.ticket.php
@@ -845,6 +845,7 @@ class Ticket {
 
         $ecb = null;
         switch($status->getState()) {
+            case 'resolved':
             case 'closed':
                 $sql.=', closed=NOW(), duedate=NULL ';
                 if ($thisstaff)
@@ -866,6 +867,9 @@ class Ticket {
                     };
                 }
                 break;
+            default:
+                return false;
+
         }
 
         $sql.=' WHERE ticket_id='.db_input($this->getId());
diff --git a/include/staff/templates/status-options.tmpl.php b/include/staff/templates/status-options.tmpl.php
index 5b383e31d46a4ecf97b91e46ff7fd9990deb2035..5d056a659e62de3f91448db78b3c54970a01d513 100644
--- a/include/staff/templates/status-options.tmpl.php
+++ b/include/staff/templates/status-options.tmpl.php
@@ -1,15 +1,5 @@
 <?php
 $actions= array(
-        'delete' => array(
-            'action'  => __('Delete'),
-            'icon'  => 'icon-trash',
-            'states' => array('deleted'),
-            ),
-        'archive' => array(
-            'action'  => __('Archive'),
-            'icon' => 'icon-archive',
-            'states' => array('archived')
-            ),
         'close' => array(
             'action' => __('Close'),
             'icon'  => 'icon-repeat',
diff --git a/include/staff/ticket-view.inc.php b/include/staff/ticket-view.inc.php
index cd0099386886315d69f03eff4c5ef922cf19effe..04e064c6b44fb60c16f275db4f35fad1f239240c 100644
--- a/include/staff/ticket-view.inc.php
+++ b/include/staff/ticket-view.inc.php
@@ -104,14 +104,10 @@ if($ticket->isOverdue())
                 <?php
                  }
                  if($thisstaff->canDeleteTickets()) {
-                     if (!$ticket->isArchived()) { ?>
+                     ?>
                     <li><a class="ticket-action" href="#tickets/<?php
-                    echo $ticket->getId(); ?>/status/archive"><i class="icon-archive"></i> <?php
-                    echo __('Archive Ticket'); ?></a></li>
-                    <?php
-                     } ?>
-                    <li><a class="ticket-action" href="#tickets/<?php
-                    echo $ticket->getId(); ?>/status/delete"><i class="icon-trash"></i> <?php
+                    echo $ticket->getId(); ?>/status/delete"
+                    data-href="tickets.php"><i class="icon-trash"></i> <?php
                     echo __('Delete Ticket'); ?></a></li>
                 <?php
                  }
@@ -632,17 +628,19 @@ $tcount+= $ticket->getNumNotes();
                     $statusId = $info['reply_status_id'] ?: $ticket->getStatusId();
                     $states = array('open', 'resolved');
                     if ($thisstaff->canCloseTickets())
-                        $states = array_merge($states,
-                                array('closed', 'archived'));
+                        $states = array_merge($states, array('closed'));
 
                     foreach (TicketStatusList::getStatuses(
                                 array('states' => $states)) as $s) {
                         if (!$s->isEnabled()) continue;
-                        echo sprintf('<option value="%d" %s>%s</option>',
+                        $selected = ($statusId == $s->getId());
+                        echo sprintf('<option value="%d" %s>%s%s</option>',
                                 $s->getId(),
-                                ($statusId == $s->getId())
+                                $selected
                                  ? 'selected="selected"' : '',
-                                $s->getName()
+                                $s->getName(),
+                                $selected
+                                ? (' ('.__('current').')') : ''
                                 );
                     }
                     ?>
@@ -724,17 +722,16 @@ $tcount+= $ticket->getNumNotes();
                         $statusId = $info['note_status_id'] ?: $ticket->getStatusId();
                         $states = array('open', 'resolved');
                         if ($thisstaff->canCloseTickets())
-                            $states = array_merge($states,
-                                    array('closed', 'archived'));
+                            $states = array_merge($states, array('closed'));
                         foreach (TicketStatusList::getStatuses(
                                     array('states' => $states)) as $s) {
                             if (!$s->isEnabled()) continue;
-                            $selected = $statusId == $s->getID();
+                            $selected = $statusId == $s->getId();
                             echo sprintf('<option value="%d" %s>%s%s</option>',
                                     $s->getId(),
                                     $selected ? 'selected="selected"' : '',
                                     $s->getName(),
-                                    $selected ? ' '.__('(current)') : ''
+                                    $selected ? (' ('.__('current').')') : ''
                                     );
                         }
                         ?>
diff --git a/include/staff/tickets.inc.php b/include/staff/tickets.inc.php
index dd739c2c0c2cb0b1d16845528024e84d028f8c91..cd95f6fe880343daed46a7e09a0ac93bd835aba0 100644
--- a/include/staff/tickets.inc.php
+++ b/include/staff/tickets.inc.php
@@ -335,6 +335,9 @@ if ($results) {
                 title="Reload"><i class="icon-refresh"></i></a></h2>
         </td>
         <td width="80%" class="right_align">
+            <a id="tickets-delete" class="action-button tickets-action"
+                href="#tickets/status/delete"><i
+            class="icon-trash"></i> <?php echo __('Delete'); ?></a>
             <?php
             if ($res && $results && $thisstaff->canManageTickets()) {
                 echo TicketStatus::options();