diff --git a/include/ajax.tickets.php b/include/ajax.tickets.php
index 23c978a93e608833839f6a80fd0176a1d83124b8..708bb6dbdc88b3f6adadba7205cc60efb5da8b4c 100644
--- a/include/ajax.tickets.php
+++ b/include/ajax.tickets.php
@@ -176,15 +176,15 @@ class TicketsAjaxAPI extends AjaxController {
 
             if($req['staffId'] && !$req['status']) //Assigned TO + Closed By
                 $where.= ' OR (ticket.staff_id='.db_input($req['staffId']).
-                    ' AND status.state IN("resolved", "closed")) ';
+                    ' AND status.state IN("closed")) ';
             elseif($req['staffId']) // closed by any
-                $where.= ' OR status.state IN("resolved", "closed") ';
+                $where.= ' OR status.state IN("closed") ';
 
             $where.= ' ) ';
         } elseif($req['staffId']) { # closed-by
             $where.=' AND (ticket.staff_id='.db_input($req['staffId']).' AND
-                status.state IN("resolved", "closed")) ';
-            $criteria['state__in'] = array('resolved','closed');
+                status.state IN("closed")) ';
+            $criteria['state__in'] = array('closed');
             $criteria['staff_id'] = $req['staffId'];
         }
 
@@ -721,9 +721,6 @@ class TicketsAjaxAPI extends AjaxController {
             case 'reopen':
                 $state = 'open';
                 break;
-            case 'resolve':
-                $state = 'resolved';
-                break;
             case 'close':
                 if (!$thisstaff->canCloseTickets())
                     Http::response(403, 'Access denied');
@@ -772,7 +769,6 @@ class TicketsAjaxAPI extends AjaxController {
                         $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 %s.'),
@@ -836,9 +832,6 @@ class TicketsAjaxAPI extends AjaxController {
             case 'reopen':
                 $state = 'open';
                 break;
-            case 'resolve':
-                $state = 'resolved';
-                break;
             case 'close':
                 if (!$thisstaff->canCloseTickets())
                     Http::response(403, 'Access denied');
@@ -884,7 +877,6 @@ class TicketsAjaxAPI extends AjaxController {
                         $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 %s.'),
diff --git a/include/class.client.php b/include/class.client.php
index 7dc764d1c8cfe4b59e083abf270089d26ac781e4..bfcffeaca09f2a1251a0d3ae7fd8125cd5d08e1b 100644
--- a/include/class.client.php
+++ b/include/class.client.php
@@ -250,17 +250,13 @@ class  EndUser extends AuthenticatedUser {
         if (!($stats=$this->getTicketStats()))
             return 0;
 
-        return $stats['open']+$stats['resolved']+ $stats['closed'];
+        return $stats['open']+$stats['closed'];
     }
 
     function getNumOpenTickets() {
         return ($stats=$this->getTicketStats())?$stats['open']:0;
     }
 
-    function getNumResolvedTickets() {
-        return ($stats=$this->getTicketStats())?$stats['resolved']:0;
-    }
-
     function getNumClosedTickets() {
         return ($stats=$this->getTicketStats())?$stats['closed']:0;
     }
@@ -303,14 +299,6 @@ class  EndUser extends AuthenticatedUser {
                 . $join
                 . $where
 
-                .'UNION SELECT \'resolved\', count( ticket.ticket_id ) AS tickets '
-                .'FROM ' . TICKET_TABLE . ' ticket '
-                .'INNER JOIN '.TICKET_STATUS_TABLE. ' status
-                    ON (ticket.status_id=status.id
-                            AND status.state=\'resolved\') '
-                . $join
-                . $where
-
                 .'UNION SELECT \'closed\', count( ticket.ticket_id ) AS tickets '
                 .'FROM ' . TICKET_TABLE . ' ticket '
                 .'INNER JOIN '.TICKET_STATUS_TABLE. ' status
diff --git a/include/class.forms.php b/include/class.forms.php
index 8965f53eb1eb227494647d33a4738575204ee798..25be7f486280843331615a1bbd6db00df790fdcc 100644
--- a/include/class.forms.php
+++ b/include/class.forms.php
@@ -1217,10 +1217,6 @@ class TicketStateField extends ChoiceField {
                 'name' => /* @trans, @context "ticket state name" */ 'Open',
                 'verb' => /* @trans, @context "ticket state action" */ 'Open'
                 ),
-            'resolved' => array(
-                'name' => /* @trans, @context "ticket state name" */ 'Resolved',
-                'verb' => /* @trans, @context "ticket state action" */ 'Resolve'
-                ),
             'closed' => array(
                 'name' => /* @trans, @context "ticket state name" */ 'Closed',
                 'verb' => /* @trans, @context "ticket state action" */ 'Close'
diff --git a/include/class.ticket.php b/include/class.ticket.php
index e4ccfd0769ece4d7c5d84b6d9705a9f25b9e1f6a..d2b9a6dec7a00053bdc2d5f63d12e109f8ee28bd 100644
--- a/include/class.ticket.php
+++ b/include/class.ticket.php
@@ -142,10 +142,6 @@ class Ticket {
         return ($this->getReopenDate());
     }
 
-    function isResolved() {
-        return $this->hasState('resolved');
-    }
-
     function isClosed() {
          return $this->hasState('closed');
     }
@@ -849,7 +845,6 @@ class Ticket {
 
         $ecb = null;
         switch($status->getState()) {
-            case 'resolved':
             case 'closed':
                 $sql.=', closed=NOW(), duedate=NULL ';
                 if ($thisstaff)
@@ -2281,14 +2276,6 @@ class Ticket {
                 .'WHERE ticket.staff_id = ' . db_input($staff->getId()) . ' '
                 . $where
 
-                .'UNION SELECT \'resolved\', count( ticket.ticket_id ) AS tickets '
-                .'FROM ' . TICKET_TABLE . ' ticket '
-                .'INNER JOIN '.TICKET_STATUS_TABLE. ' status
-                    ON (ticket.status_id=status.id
-                            AND status.state=\'resolved\') '
-                .'WHERE 1 '
-                . $where
-
                 .'UNION SELECT \'closed\', count( ticket.ticket_id ) AS tickets '
                 .'FROM ' . TICKET_TABLE . ' ticket '
                 .'INNER JOIN '.TICKET_STATUS_TABLE. ' status
diff --git a/include/client/tickets.inc.php b/include/client/tickets.inc.php
index 23de9015af7d85bf9c03a5bd0eb0e81d7f3a3976..c20102e50556ceba1bb7650591dc2cbfdc33e6e8 100644
--- a/include/client/tickets.inc.php
+++ b/include/client/tickets.inc.php
@@ -68,7 +68,6 @@ $qwhere = sprintf(' WHERE ( ticket.user_id=%d OR collab.user_id=%d )',
 
 $states = array(
         'open' => 'open',
-        'resolved' => 'resolved',
         'closed' => 'closed');
 if($status && isset($states[$status])){
     $qwhere.=' AND status.state='.db_input($states[$status]);
@@ -125,21 +124,14 @@ $negorder=$order=='DESC'?'ASC':'DESC'; //Negate the sorting
     <select name="status">
         <option value="">&mdash; <?php echo __('Any Status');?> &mdash;</option>
         <option value="open"
-            <?php echo ($status=='open')?'selected="selected"':'';?>><?php echo _P('ticket-status', 'Open');?> (<?php echo $thisclient->getNumOpenTickets(); ?>)</option>
-        <?php
-        if($thisclient->getNumResolvedTickets()) {
-            ?>
-        <option value="resolved"
-            <?php echo ($status=='resolved')?'selected="selected"':'';?>><?php
-            echo __('Resolved'); ?> (<?php echo $thisclient->getNumResolvedTickets(); ?>)</option>
-        <?php
-        } ?>
-
+            <?php echo ($status=='open') ? 'selected="selected"' : '';?>>
+            <?php echo _P('ticket-status', 'Open');?> (<?php echo $thisclient->getNumOpenTickets(); ?>)</option>
         <?php
         if($thisclient->getNumClosedTickets()) {
             ?>
         <option value="closed"
-            <?php echo ($status=='closed')?'selected="selected"':'';?>><?php echo __('Closed');?> (<?php echo $thisclient->getNumClosedTickets(); ?>)</option>
+            <?php echo ($status=='closed') ? 'selected="selected"' : '';?>>
+            <?php echo __('Closed');?> (<?php echo $thisclient->getNumClosedTickets(); ?>)</option>
         <?php
         } ?>
     </select>
diff --git a/include/i18n/en_US/ticket_status.yaml b/include/i18n/en_US/ticket_status.yaml
index 836deb2a5a83c7911c389927e6df5ecb72df9546..d19b4c0d7fc8b652fb27c98962640586b36e22ab 100644
--- a/include/i18n/en_US/ticket_status.yaml
+++ b/include/i18n/en_US/ticket_status.yaml
@@ -5,7 +5,7 @@
 #  id - (int:optional) id number in the database
 #  name - (string) descriptive name of the status
 #  state - (string) Main status of a ticket
-#  (open, resolved, closed, archived, deleted)
+#  (open, closed, archived, deleted)
 #  mode - (bit) access mask (1 - enabled, 2 - internal)
 #  flags - (bit) flags that can be set on a ticket
 #  properties:
@@ -23,42 +23,31 @@
         Open tickets.
 
 - id: 2
-  name: Resolved
-  state: resolved
-  mode: 3
-  sort: 2
-  flags: 0
-  properties:
-    description: >
-        Resolved tickets are closed tickets that can be reopened by the end user. This might be useful
-        when a trigger is used to close resolved tickets with notice sent to end user.
-
-- id: 3
   name: Closed
   state: closed
   mode: 3
-  sort: 3
+  sort: 2
   flags: 0
   properties:
     description: >
-        Tickets marked as closed cannot be reopened by the end user. Tickets will still be accessible on client and staff panels.
+        Closed tickets. Tickets will still be accessible on client and staff panels.
 
-- id: 4
+- id: 3
   name: Archived
   state:  archived
   mode: 3
-  sort: 4
+  sort: 3
   flags: 0
   properties:
     description: >
         Tickets only adminstratively available but no longer accessible on
-        ticket queues.
+        ticket queues and client panel.
 
-- id: 5
+- id: 4
   name: Deleted
   state: deleted
   mode: 3
-  sort: 5
+  sort: 4
   flags: 0
   properties:
     description: >
diff --git a/include/staff/templates/status-options.tmpl.php b/include/staff/templates/status-options.tmpl.php
index a0047553c67e01a6c283317b0e030e41f2ffef68..78372ed09195a50376f55cd34696db6c43af91a6 100644
--- a/include/staff/templates/status-options.tmpl.php
+++ b/include/staff/templates/status-options.tmpl.php
@@ -3,13 +3,8 @@ global $thisstaff, $ticket;
 // Map states to actions
 $actions= array(
         'closed' => array(
-            'icon'  => 'icon-repeat',
-            'action' => 'close',
-            'href' => 'tickets.php'
-            ),
-        'resolved' => array(
             'icon'  => 'icon-ok-circle',
-            'action' => 'resolve',
+            'action' => 'close',
             'href' => 'tickets.php'
             ),
         'open' => array(
@@ -34,8 +29,7 @@ $actions= array(
     <?php
     $states = array('open');
     if ($thisstaff->canCloseTickets())
-        $states = array_merge($states,
-                array('resolved', 'closed'));
+        $states = array_merge($states, array('closed'));
 
     $statusId = $ticket ? $ticket->getStatusId() : 0;
     foreach (TicketStatusList::getStatuses(
diff --git a/include/staff/ticket-open.inc.php b/include/staff/ticket-open.inc.php
index d677070ed7588a759d75e0fb248ea1412f5e4a10..5ca5cb5436b480e319d5c2b93a522ad036735249 100644
--- a/include/staff/ticket-open.inc.php
+++ b/include/staff/ticket-open.inc.php
@@ -317,7 +317,7 @@ print $response_form->getField('attachments')->render();
                     $statusId = $info['statusId'] ?: $cfg->getDefaultTicketStatusId();
                     $states = array('open');
                     if ($thisstaff->canCloseTickets())
-                        $states = array_merge($states, array('resolved', 'closed'));
+                        $states = array_merge($states, array('closed'));
                     foreach (TicketStatusList::getStatuses(
                                 array('states' => $states)) as $s) {
                         if (!$s->isEnabled()) continue;
diff --git a/include/staff/ticket-view.inc.php b/include/staff/ticket-view.inc.php
index 1b137738fec15f6baab1e27682c3c6ca49517301..ffaaa8a120b2292720b6bdba85ce95059fa634a3 100644
--- a/include/staff/ticket-view.inc.php
+++ b/include/staff/ticket-view.inc.php
@@ -201,13 +201,6 @@ if($ticket->isOverdue())
                                         echo sprintf('<li><a href="tickets.php?a=search&status=open&uid=%s"><i class="icon-folder-open-alt icon-fixed-width"></i> %s</a></li>',
                                                 $user->getId(), sprintf(_N('%d Open Ticket', '%d Open Tickets', $open), $open));
 
-                                    if(($resolved=$user->getNumResolvedTickets()))
-                                        echo sprintf('<li><a href="tickets.php?a=search&status=resolved&uid=%d"><i
-                                                class="icon-folder-close-alt icon-fixed-width"></i> %s</a></li>',
-                                                $user->getId(), sprintf(_N('%d Resolved Ticket', '%d Resolved Tickets', $resolved), $resolved));
-
-
-
                                     if(($closed=$user->getNumClosedTickets()))
                                         echo sprintf('<li><a href="tickets.php?a=search&status=closed&uid=%d"><i
                                                 class="icon-folder-close-alt icon-fixed-width"></i> %s</a></li>',
@@ -606,7 +599,7 @@ print $response_form->getField('attachments')->render();
                     $statusId = $info['reply_status_id'] ?: $ticket->getStatusId();
                     $states = array('open');
                     if ($thisstaff->canCloseTickets())
-                        $states = array_merge($states, array('resolved', 'closed'));
+                        $states = array_merge($states, array('closed'));
 
                     foreach (TicketStatusList::getStatuses(
                                 array('states' => $states)) as $s) {
@@ -687,7 +680,7 @@ print $note_form->getField('attachments')->render();
                         $statusId = $info['note_status_id'] ?: $ticket->getStatusId();
                         $states = array('open');
                         if ($thisstaff->canCloseTickets())
-                            $states = array_merge($states, array('resolved', 'closed'));
+                            $states = array_merge($states, array('closed'));
                         foreach (TicketStatusList::getStatuses(
                                     array('states' => $states)) as $s) {
                             if (!$s->isEnabled()) continue;
diff --git a/include/staff/tickets.inc.php b/include/staff/tickets.inc.php
index a5ad1dcdda5758228392cd5c45c2652406f48bf8..3b716905e3a12150365c39da98d19458daa2e23c 100644
--- a/include/staff/tickets.inc.php
+++ b/include/staff/tickets.inc.php
@@ -35,10 +35,6 @@ switch(strtolower($_REQUEST['status'])){ //Status is overloaded
 		$results_type=__('Closed Tickets');
         $showassigned=true; //closed by.
         break;
-    case 'resolved':
-        $status='resolved';
-        $showassigned=true;
-        break;
     case 'overdue':
         $status='open';
         $showoverdue=true;
@@ -84,7 +80,6 @@ $qwhere .= ' )';
 //STATUS to states
 $states = array(
     'open' => array('open'),
-    'resolved' => array('resolved'),
     'closed' => array('closed'));
 
 if($status && isset($states[$status])) {
@@ -552,8 +547,7 @@ if ($results) {
                  <option value="">&mdash; <?php echo __('Any Status');?> &mdash;</option>
                 <?php
                 foreach (TicketStatusList::getStatuses(
-                            array('states' =>
-                                array('open', 'resolved', 'closed'))) as $s) {
+                            array('states' => array('open', 'closed'))) as $s) {
                     echo sprintf('<option data-state="%s" value="%d">%s</option>',
                             $s->getState(), $s->getId(), __($s->getName()));
                 }
diff --git a/include/upgrader/streams/core/03ff59bf-519d98cd.cleanup.sql b/include/upgrader/streams/core/03ff59bf-519d98cd.cleanup.sql
index 2f39fa0f280d2115eaf47988711ba235b9e20d1f..66bc02c564fc09a580cddd5a7f93dacacbf529ec 100644
--- a/include/upgrader/streams/core/03ff59bf-519d98cd.cleanup.sql
+++ b/include/upgrader/streams/core/03ff59bf-519d98cd.cleanup.sql
@@ -1,2 +1,7 @@
 DELETE FROM  `%TABLE_PREFIX%config`
     WHERE  `key` = 'properties' AND  `namespace` LIKE  'TS.%';
+
+DELETE FROM `%TABLE_PREFIX%ticket_status`
+    WHERE `state` = 'resolved';
+
+OPTIMIZE TABLE `%TABLE_PREFIX%ticket_status`;
diff --git a/include/upgrader/streams/core/03ff59bf-519d98cd.patch.sql b/include/upgrader/streams/core/03ff59bf-519d98cd.patch.sql
index 57e823f6d72cecc5ba2e4b3547d5a1d8b58f9b22..2e00737d85eb832e93a4cf9cf304afe152a758c4 100644
--- a/include/upgrader/streams/core/03ff59bf-519d98cd.patch.sql
+++ b/include/upgrader/streams/core/03ff59bf-519d98cd.patch.sql
@@ -7,6 +7,16 @@
  *
  */
 
+-- Move tickets in resolved state to the default closed status
+SET @statusId = (
+        SELECT id FROM  `%TABLE_PREFIX%ticket_status`
+        WHERE  `state` =  'closed' ORDER BY id ASC LIMIT 1);
+
+UPDATE  `%TABLE_PREFIX%ticket` t1
+    LEFT JOIN  `%TABLE_PREFIX%ticket_status` t2
+        ON ( t2.id = t1.status_id AND t2.state="resolved")
+    SET t1.status_id = @statusId;
+
 -- add properties field
 ALTER TABLE  `%TABLE_PREFIX%ticket_status`
     ADD  `properties` TEXT NOT NULL AFTER  `sort`,
diff --git a/scp/js/scp.js b/scp/js/scp.js
index aa446f00ac243208b7510f3f0d2d3ea6cbc39a41..d1493f59036b5e762cdf3ccfefa02e96c35e573b 100644
--- a/scp/js/scp.js
+++ b/scp/js/scp.js
@@ -372,7 +372,6 @@ var scp_prep = function() {
                 $('select#staffId').removeAttr('disabled');
                 break;
             case 'open':
-            case 'resolved':
                 $('select#staffId')
                 .attr('disabled','disabled')
                 .find('option:first')
diff --git a/scp/tickets.php b/scp/tickets.php
index 4d6e5c1a5fc7b9ebda27c6d12e94c5f3143832d3..9ff8bb455d847841b947eee3b515765b82f42e4b 100644
--- a/scp/tickets.php
+++ b/scp/tickets.php
@@ -426,13 +426,6 @@ if($thisstaff->showAssignedOnly() && $stats['closed']) {
                         ($_REQUEST['status']=='closed'));
 } else {
 
-    if ($stats['resolved'])
-        $nav->addSubMenu(array('desc' => __('Resolved').' ('.number_format($stats['resolved']).')',
-                               'title'=>__('Resolved Tickets'),
-                               'href'=>'tickets.php?status=resolved',
-                               'iconclass'=>'closedTickets'),
-                            ($_REQUEST['status']=='resolved'));
-
     $nav->addSubMenu(array('desc' => __('Closed').' ('.number_format($stats['closed']).')',
                            'title'=>__('Closed Tickets'),
                            'href'=>'tickets.php?status=closed',