diff --git a/include/ajax.tickets.php b/include/ajax.tickets.php
index bcb2d5eccd82c0e7402fdd02af881bfc2af138d6..84e939550b93de56efea6f194a7ef2a3a07e2c7c 100644
--- a/include/ajax.tickets.php
+++ b/include/ajax.tickets.php
@@ -711,24 +711,20 @@ class TicketsAjaxAPI extends AjaxController {
             case 'open':
             case 'reopen':
                 $state = 'open';
-                $info['title'] =  __('Reopen');
                 break;
             case 'resolve':
                 $state = 'resolved';
-                $info['title'] = __('Resolve');
                 break;
             case 'close':
                 if (!$thisstaff->canCloseTickets())
                     Http::response(403, 'Access denied');
                 $state = 'closed';
-                $info['title'] = __('Close');
                 break;
             case 'delete':
                 if (!$thisstaff->canDeleteTickets())
                     Http::response(403, 'Access denied');
                 $state = 'deleted';
                 $info = array(
-                        'title' => __('Delete'),
                         'warn'  => sprintf(__('Are you sure you want to DELETE %s?'),
                             __('this ticket')),
                         //TODO: remove message below once we ship data retention plug
@@ -741,8 +737,12 @@ class TicketsAjaxAPI extends AjaxController {
                         __('Unknown or invalid'), __('status'));
         }
 
+        $verb = TicketStateField::getVerb($state);
+
         $info['action'] = sprintf('#tickets/%d/status/%s', $ticket->getId(), $status);
-        $info['title'] .= sprintf(' %s #%s', __('Ticket'), $ticket->getNumber());
+        $info['title'] = sprintf('%s %s #%s',
+                $verb ?: $status,
+                __('Ticket'), $ticket->getNumber());
         $info['status_id'] = $_REQUEST['status_id'] ?: $ticket->getStatusId();
 
         return self::_setStatus($state, $info);
@@ -802,6 +802,7 @@ class TicketsAjaxAPI extends AjaxController {
         $info['errors'] = $errors;
         return self::_setStatus($state, $info);
     }
+
     function changeTicketsStatus($status, $id=0) {
         global $thisstaff, $cfg;
 
@@ -814,26 +815,14 @@ class TicketsAjaxAPI extends AjaxController {
             case 'open':
             case 'reopen':
                 $state = 'open';
-                $info = array(
-                        'title' => sprintf('%s %s',
-                            __('Reopen'), __('Tickets'))
-                        );
                 break;
             case 'resolve':
                 $state = 'resolved';
-                $info = array(
-                        'title' => sprintf('%s %s',
-                            __('Resolve'), __('Tickets'))
-                        );
                 break;
             case 'close':
                 if (!$thisstaff->canCloseTickets())
                     Http::response(403, 'Access denied');
                 $state = 'closed';
-                $info = array(
-                        'title' => sprintf('%s %s',
-                            __('Close'), __('Tickets'))
-                        );
                 break;
             case 'delete':
                 if (!$thisstaff->canDeleteTickets())
@@ -841,8 +830,6 @@ class TicketsAjaxAPI extends AjaxController {
 
                 $state = 'deleted';
                 $info = array(
-                        'title' => sprintf('%s %s',
-                            __('Delete'), __('Tickets')),
                         'warn'  => sprintf(__('Are you sure you want to DELETE %s?'),
                             _N('selected ticket', 'selected tickets', $_REQUEST['count'])),
                         //TODO: remove message below once we ship data retention plug
@@ -855,8 +842,13 @@ class TicketsAjaxAPI extends AjaxController {
                         __('Unknown or invalid'), __('status'));
         }
 
+        $info['title'] = sprintf('%s %s',
+                TicketStateField::getVerb($state),
+                 __('Tickets'));
+
         if ($_REQUEST['count'])
-            $info['title'] .= sprintf(' — %d selected', $_REQUEST['count']);
+            $info['title'] .= sprintf(' — %d %s',
+                    $_REQUEST['count'], __('selected'));
 
         $info['status_id'] = $id;
 
diff --git a/include/class.forms.php b/include/class.forms.php
index 4cc88c1a6b29fa7e6dffa4bdba982273edb00b82..c5c93866e9fa35b9404de09a3cf54dc2fe095628 100644
--- a/include/class.forms.php
+++ b/include/class.forms.php
@@ -1026,13 +1026,29 @@ FormField::addFieldTypes(/*trans*/ 'Dynamic Fields', function() {
 class TicketStateField extends ChoiceField {
 
     static $_states = array(
-            'open' => /* trans */ 'Open',
-            'resolved' => /* trans */ 'Resolved',
-            'closed' => /* trans */ 'Closed');
+            'open' => array(
+                'name' => /* trans */ 'Open',
+                'verb' => /* trans */ 'Open'
+                ),
+            'resolved' => array(
+                'name' => /* trans */ 'Resolved',
+                'verb' => /* trans */ 'Resolve'
+                ),
+            'closed' => array(
+                'name' => /* trans */ 'Closed',
+                'verb' => /* trans */ 'Close'
+                )
+            );
     // Private states
     static $_privatestates = array(
-            'archived' => /* trans */ 'Archived',
-            'deleted' => /* trans */ 'Deleted'
+            'archived' => array(
+                'name' => /* trans */ 'Archived',
+                'verb' => /* trans */ 'Archive'
+                ),
+            'deleted'  => array(
+                'name' => /* trans */ 'Deleted',
+                'verb' => /* trans */ 'Delete'
+                )
             );
 
     function hasIdValue() {
@@ -1048,7 +1064,9 @@ class TicketStateField extends ChoiceField {
 
         if (!isset($_choices)) {
             // Translate and cache the choices
-            $_choices = array_map('__', static::$_states);
+            foreach (static::$_states as $k => $v)
+                $_choices[$k] =  __($v['name']);
+
             $this->ht['default'] =  '';
         }
 
@@ -1061,10 +1079,10 @@ class TicketStateField extends ChoiceField {
             $state = key($state);
 
         if (isset(static::$_states[$state]))
-            return __(static::$_states[$state]);
+            return __(static::$_states[$state]['name']);
 
         if (isset(static::$_privatestates[$state]))
-            return __(static::$_privatestates[$state]);
+            return __(static::$_privatestates[$state]['name']);
 
         return $state;
     }
@@ -1078,6 +1096,15 @@ class TicketStateField extends ChoiceField {
             )),
         );
     }
+
+    static function getVerb($state) {
+
+        if (isset(static::$_states[$state]))
+            return __(static::$_states[$state]['verb']);
+
+        if (isset(static::$_privatestates[$state]))
+            return __(static::$_privatestates[$state]['verb']);
+    }
 }
 FormField::addFieldTypes('Dynamic Fields', function() {
     return array(
diff --git a/include/class.list.php b/include/class.list.php
index a88040d8b57fd1ce770bf4e63bdab432338d1447..31a3dd51938e8f56fd841021b7021d72a1ec3291 100644
--- a/include/class.list.php
+++ b/include/class.list.php
@@ -759,6 +759,7 @@ class TicketStatus  extends VerySimpleModel implements CustomListItem {
     var $_form;
     var $_config;
     var $_settings;
+    var $_properties;
 
     const ENABLED   = 0x0001;
     const INTERNAL  = 0x0002; // Forbid deletion or name and status change.
@@ -875,14 +876,25 @@ class TicketStatus  extends VerySimpleModel implements CustomListItem {
         return $this->get('sort');
     }
 
+    private function getProperties() {
+
+        if (!isset($this->_properties)) {
+            $this->_properties = $this->_config->get('properties');
+            if (is_string($this->_properties))
+                $this->_properties = JsonDataParser::parse($this->_properties);
+            elseif (!$this->_properties)
+                $this->_properties = array();
+        }
+
+        return $this->_properties;
+    }
+
     function getConfiguration() {
 
         if (!$this->_settings) {
-             $this->_settings = $this->_config->get('properties');
-             if (is_string($this->_settings))
-                 $this->_settings = JsonDataParser::parse($this->_settings);
-             elseif (!$this->_settings)
-                 $this->_settings = array();
+            $this->_settings = $this->getProperties();
+            if (!$this->_settings)
+                $this->_settings = array();
 
             if ($this->getConfigurationForm()) {
                 foreach ($this->getConfigurationForm()->getFields() as $f)  {
diff --git a/include/staff/templates/ticket-status.tmpl.php b/include/staff/templates/ticket-status.tmpl.php
index 96c60d1d86d54ea11d6090086936d2d99802b556..8646a05cf439b1f550b6b992fdeef8d72d4df1ee 100644
--- a/include/staff/templates/ticket-status.tmpl.php
+++ b/include/staff/templates/ticket-status.tmpl.php
@@ -37,8 +37,12 @@ $action = $info['action'] ?: ('#tickets/status/'. $state);
             </tbody>
             <?php
             }
-            if ($state)
+
+            $verb = '';
+            if ($state) {
                 $statuses = TicketStatusList::getStatuses(array('states'=>array($state)))->all();
+                $verb = TicketStateField::getVerb($state);
+            }
 
             if ($statuses) {
             ?>
@@ -95,7 +99,8 @@ $action = $info['action'] ?: ('#tickets/status/'. $state);
                 value="<?php echo __('Cancel'); ?>">
             </span>
             <span class="buttons" style="float:right">
-                <input type="submit" value="<?php echo __('Submit'); ?>">
+                <input type="submit" value="<?php
+                echo $verb ?: __('Submit'); ?>">
             </span>
          </p>
     </form>