diff --git a/bootstrap.php b/bootstrap.php
index c37e3f6f04d6080f31e1c4ed15f0e4313e6bb2fd..d5e15e6802fbba4f24bf70b1ec4c6eaa1874f840 100644
--- a/bootstrap.php
+++ b/bootstrap.php
@@ -294,7 +294,6 @@ Bootstrap::init();
 
 #CURRENT EXECUTING SCRIPT.
 define('THISPAGE', Misc::currentURL());
-define('THISURI', $_SERVER['REQUEST_URI']);
 
 define('DEFAULT_MAX_FILE_UPLOADS',ini_get('max_file_uploads')?ini_get('max_file_uploads'):5);
 define('DEFAULT_PRIORITY_ID',1);
diff --git a/include/class.ticket.php b/include/class.ticket.php
index 43656a33a4f4b3f639e92f725941952134423d8e..51cbbf9908cd44b3e63de358aa91596de3b34914 100644
--- a/include/class.ticket.php
+++ b/include/class.ticket.php
@@ -1839,47 +1839,57 @@ class Ticket {
         if(!$staff || (!is_object($staff) && !($staff=Staff::lookup($staff))) || !$staff->isStaff())
             return null;
 
-        $sql='SELECT count(open.ticket_id) as open, count(answered.ticket_id) as answered '
-            .' ,count(overdue.ticket_id) as overdue, count(assigned.ticket_id) as assigned, count(closed.ticket_id) as closed '
-            .' FROM '.TICKET_TABLE.' ticket '
-            .' LEFT JOIN '.TICKET_TABLE.' open
-                ON (open.ticket_id=ticket.ticket_id
-                        AND open.status=\'open\'
-                        AND open.isanswered=0
-                        '.((!($cfg->showAssignedTickets() || $staff->showAssignedTickets()))?
-                        ' AND open.staff_id=0 ':'').') '
-            .' LEFT JOIN '.TICKET_TABLE.' answered
-                ON (answered.ticket_id=ticket.ticket_id
-                        AND answered.status=\'open\'
-                        AND answered.isanswered=1) '
-            .' LEFT JOIN '.TICKET_TABLE.' overdue
-                ON (overdue.ticket_id=ticket.ticket_id
-                        AND overdue.status=\'open\'
-                        AND overdue.isoverdue=1) '
-            .' LEFT JOIN '.TICKET_TABLE.' assigned
-                ON (assigned.ticket_id=ticket.ticket_id
-                        AND assigned.status=\'open\'
-                        AND assigned.staff_id='.db_input($staff->getId()).')'
-            .' LEFT JOIN '.TICKET_TABLE.' closed
-                ON (closed.ticket_id=ticket.ticket_id
-                        AND closed.status=\'closed\' )'
-            .' WHERE (ticket.staff_id='.db_input($staff->getId());
+        $where = array();
+        $where2 = '';
 
         if(($teams=$staff->getTeams()))
-            $sql.=' OR ticket.team_id IN('.implode(',', db_input(array_filter($teams))).')';
+            $where[] = 'ticket.team_id IN('.implode(',', db_input(array_filter($teams))).')';
 
         if(!$staff->showAssignedOnly() && ($depts=$staff->getDepts())) //Staff with limited access just see Assigned tickets.
-            $sql.=' OR ticket.dept_id IN('.implode(',', db_input($depts)).') ';
-
-        $sql.=')';
+            $where[] = 'ticket.dept_id IN('.implode(',', db_input($depts)).') ';
 
         if(!$cfg || !($cfg->showAssignedTickets() || $staff->showAssignedTickets()))
-            $sql.=' AND (ticket.staff_id=0 OR ticket.staff_id='.db_input($staff->getId()).') ';
-
-        return db_fetch_array(db_query($sql));
+            $where2 =' AND (ticket.staff_id=0 OR ticket.staff_id='.db_input($staff->getId()).') ';
+        $where = implode(' OR ', $where);
+        if ($where) $where = 'AND ( '.$where.' ) ';
+
+        $sql =  'SELECT \'open\', count( ticket.ticket_id ) AS tickets '
+                .'FROM ' . TICKET_TABLE . ' ticket '
+                .'WHERE ticket.status = \'open\' '
+                .'AND ticket.isanswered =0 '
+                . $where . $where2
+
+                .'UNION SELECT \'answered\', count( ticket.ticket_id ) AS tickets '
+                .'FROM ' . TICKET_TABLE . ' ticket '
+                .'WHERE ticket.status = \'open\' '
+                .'AND ticket.isanswered =1 '
+                . $where
+
+                .'UNION SELECT \'overdue\', count( ticket.ticket_id ) AS tickets '
+                .'FROM ' . TICKET_TABLE . ' ticket '
+                .'WHERE ticket.status = \'open\' '
+                .'AND ticket.isoverdue =1 '
+                . $where
+
+                .'UNION SELECT \'assigned\', count( ticket.ticket_id ) AS tickets '
+                .'FROM ' . TICKET_TABLE . ' ticket '
+                .'WHERE ticket.status = \'open\' '
+                .'AND ticket.staff_id = ' . db_input($staff->getId()) . ' '
+                . $where
+
+                .'UNION SELECT \'closed\', count( ticket.ticket_id ) AS tickets '
+                .'FROM ' . TICKET_TABLE . ' ticket '
+                .'WHERE ticket.status = \'closed\' '
+                . $where;
+
+        $res = db_query($sql);
+        $stats = array();
+        while($row = db_fetch_row($res)) {
+            $stats[$row[0]] = $row[1];
+        }
+        return $stats;
     }
 
-
     /* Quick client's tickets stats
        @email - valid email.
      */
diff --git a/scp/staff.inc.php b/scp/staff.inc.php
index 0c835d46a780a5acf439af2268da039a73335905..359663a4c6fccd04dc466126c759d71a89acb5a4 100644
--- a/scp/staff.inc.php
+++ b/scp/staff.inc.php
@@ -49,7 +49,8 @@ require_once(INCLUDE_DIR.'class.csrf.php');
 if(!function_exists('staffLoginPage')) { //Ajax interface can pre-declare the function to  trap expired sessions.
     function staffLoginPage($msg) {
         global $ost, $cfg;
-        $_SESSION['_staff']['auth']['dest']=THISURI;
+        $_SESSION['_staff']['auth']['dest'] =
+            '/' . ltrim($_SERVER['REQUEST_URI'], '/');
         $_SESSION['_staff']['auth']['msg']=$msg;
         require(SCP_DIR.'login.php');
         exit;