diff --git a/include/ajax.tickets.php b/include/ajax.tickets.php
index 7d0ee9eb7f5e9c28aa7aa54dea466228946046db..16d0d9ec037629feb59e89646ad6d4cc53fd75c3 100644
--- a/include/ajax.tickets.php
+++ b/include/ajax.tickets.php
@@ -748,9 +748,14 @@ class TicketsAjaxAPI extends AjaxController {
         $verb = TicketStateField::getVerb($state);
 
         $info['action'] = sprintf('#tickets/%d/status/%s', $ticket->getId(), $status);
-        $info['title'] = sprintf('%s %s #%s',
-                $verb ?: $status,
-                __('Ticket'), $ticket->getNumber());
+
+        $info['title'] = sprintf(__(
+                    /* 1$ will be a verb, like 'open', 2$ will be the ticket number */
+                    '%1$s Ticket #%2$s'),
+                $verb ?: $state,
+                $ticket->getNumber()
+                );
+
         $info['status_id'] = $_REQUEST['status_id'] ?: $id ?: $ticket->getStatusId();
 
         return self::_setStatus($state, $info);
@@ -770,28 +775,28 @@ class TicketsAjaxAPI extends AjaxController {
         if (!($status= TicketStatus::lookup($_REQUEST['status_id'])))
             $errors['status_id'] = sprintf('%s %s',
                     __('Unknown or invalid'), __('status'));
-        elseif (!$errors) {
+        elseif ($status->getId() == $ticket->getStatusId())
+            $errors['err'] = sprintf(__('Ticket already set to %s status'),
+                    __($status->getName()));
+        else {
             // Make sure the agent has permission to set the status
             switch(mb_strtolower($status->getState())) {
                 case 'open':
                     if (!$thisstaff->canCloseTickets()
                             && !$thisstaff->canCreateTickets())
-                        $errors['err'] = sprintf(__('You do not have
-                                    permission to %s.'),
-                                __('reopen tickets'));
+                        $errors['err'] = sprintf(__('You do not have permission %s.'),
+                                __('to reopen tickets'));
                     break;
                 case 'resolved':
                 case 'closed':
                     if (!$thisstaff->canCloseTickets())
-                        $errors['err'] = sprintf(__('You do not have
-                                    permission to %s.'),
-                                __('resolve/close tickets'));
+                        $errors['err'] = sprintf(__('You do not have permission %s.'),
+                                __('to resolve/close tickets'));
                     break;
                 case 'deleted':
                     if (!$thisstaff->canDeleteTickets())
-                        $errors['err'] = sprintf(__('You do not have
-                                    permission to %s.'),
-                                __('archive/delete tickets'));
+                        $errors['err'] = sprintf(__('You do not have permission %s.'),
+                                __('to archive/delete tickets'));
                     break;
                 default:
                     $errors['err'] = sprintf('%s %s',
@@ -799,14 +804,28 @@ class TicketsAjaxAPI extends AjaxController {
             }
         }
 
-        if ($ticket->setStatus($status, $_REQUEST['comments'])) {
+        if (!$errors && $ticket->setStatus($status, $_REQUEST['comments'])) {
             $_SESSION['::sysmsgs']['msg'] = sprintf(
                     __('Successfully updated status to %s'),
                     $status->getName());
             Http::response(201, 'Successfully processed');
+        } elseif (!$errors['err']) {
+            $errors['err'] =  __('Error updating ticket status');
         }
 
-        $errors['err'] = __('Error updating ticket status');
+
+        $state = $status ? $status->getState() : $state;
+        $verb = TicketStateField::getVerb($state);
+
+        $info['action'] = sprintf('#tickets/%d/status/%s', $ticket->getId(), $state);
+        $info['title'] = sprintf(__(
+                    /* 1$ will be a verb, like 'open', 2$ will be the ticket number */
+                    '%1$s Ticket #%2$s'),
+                $verb ?: $state,
+                $ticket->getNumber()
+                );
+        $info['status_id'] = $_REQUEST['status_id'] ?: 0;
+        $info['comments'] = Format::htmlchars($_REQUEST['comments']);
         $info['errors'] = $errors;
         return self::_setStatus($state, $info);
     }
@@ -868,7 +887,10 @@ class TicketsAjaxAPI extends AjaxController {
 
         $errors = $info = array();
         if (!$thisstaff || !$thisstaff->canManageTickets())
-            $errors['err']=__('You do not have permission to mass manage tickets. Contact admin for such access');
+            $errors['err'] = sprintf('%s %s',
+                    sprintf(__('You do not have permission %s.'),
+                        __('to mass manage tickets')),
+                    __('Contact admin for such access'));
         elseif (!$_REQUEST['tids'] || !count($_REQUEST['tids']))
             $errors['err']=sprintf(__('You must select at least %s.'),
                     __('one ticket'));
@@ -881,21 +903,18 @@ class TicketsAjaxAPI extends AjaxController {
                 case 'open':
                     if (!$thisstaff->canCloseTickets()
                             && !$thisstaff->canCreateTickets())
-                        $errors['err'] = sprintf(__('You do not have
-                                    permission to %s.'),
+                        $errors['err'] = sprintf(__('You do not have permission to %s.'),
                                 __('reopen tickets'));
                     break;
                 case 'resolved':
                 case 'closed':
                     if (!$thisstaff->canCloseTickets())
-                        $errors['err'] = sprintf(__('You do not have
-                                    permission to %s.'),
+                        $errors['err'] = sprintf(__('You do not have permission to %s.'),
                                 __('resolve/close tickets'));
                     break;
                 case 'deleted':
                     if (!$thisstaff->canDeleteTickets())
-                        $errors['err'] = sprintf(__('You do not have
-                                    permission to %s.'),
+                        $errors['err'] = sprintf(__('You do not have permission to %s.'),
                                 __('archive/delete tickets'));
                     break;
                 default:
diff --git a/scp/tickets.php b/scp/tickets.php
index cd7d5ebfbae570cd656ba4932abfa7fe613e38d2..07df162d032d88d7900e7aa8485238d2f08f9749 100644
--- a/scp/tickets.php
+++ b/scp/tickets.php
@@ -330,7 +330,10 @@ if($_POST && !$errors):
             case 'open':
                 $ticket=null;
                 if(!$thisstaff || !$thisstaff->canCreateTickets()) {
-                     $errors['err']=__('You do not have permission to create tickets. Contact admin for such access');
+                     $errors['err'] = sprintf('%s %s',
+                             sprintf(__('You do not have permission %s.'),
+                                 __('to create tickets')),
+                             __('Contact admin for such access'));
                 } else {
                     $vars = $_POST;
                     $vars['uid'] = $user? $user->getId() : 0;