diff --git a/include/ajax.reports.php b/include/ajax.reports.php
index 8be261b535fca5f96371e0f480bffdf25dca46f4..783d76a66491d4580a576b553cdc5541e45c287d 100644
--- a/include/ajax.reports.php
+++ b/include/ajax.reports.php
@@ -51,17 +51,17 @@ class OverviewReportAjaxAPI extends AjaxController {
                 "sort" => '1',
                 "fields" => 'T1.dept_name',
                 "headers" => array('Department'),
-                "filter" => "1"
+                "filter" => ('T1.dept_id IN ('.implode(',', db_input($thisstaff->getDepts())).')')
             ),
             "topic" => array(
                 "table" => TOPIC_TABLE,
                 "pk" => "topic_id",
-                "sort" => '1',
+                "sort" => 'name',
                 "fields" => "CONCAT_WS(' / ',"
                     ."(SELECT P.topic FROM ".TOPIC_TABLE." P WHERE P.topic_id = T1.topic_pid),"
-                    ."T1.topic)",
+                    ."T1.topic) as name ",
                 "headers" => array('Help Topic'),
-                "filter" => "1"
+                "filter" => '1'
             ),
             "staff" => array(
                 "table" => STAFF_TABLE,
@@ -70,15 +70,18 @@ class OverviewReportAjaxAPI extends AjaxController {
                 "fields" => "CONCAT_WS(' ', T1.firstname, T1.lastname)",
                 "headers" => array('Staff Member'),
                 "filter" =>
-                    ($thisstaff->isAdmin())
-                        ? "1"
-                        : (($thisstaff->isManager())
-                            ? "T1.dept_id=".db_input($thisstaff->getDeptId())
-                            : "T1.staff_id=".db_input($thisstaff->getId()))
+                    ('T1.staff_id=S1.staff_id
+                      AND 
+                      (T1.staff_id='.db_input($thisstaff->getDeptId())
+                        .(($depts=$thisstaff->getManagedDepartments())?
+                            (' OR T1.staff_id IN('.implode(',', db_input($depts)).')'):'')
+                     .')'
+                     ) 
             )
         );
         $group = $this->get('group', 'dept');
-        $info = $groups[$group];
+        $info = isset($groups[$group])?$groups[$group]:$groups['dept'];
+
         # XXX: Die if $group not in $groups
 
         $queries=array(
@@ -88,27 +91,34 @@ class OverviewReportAjaxAPI extends AjaxController {
                 COUNT(*)-COUNT(NULLIF(A1.state, "overdue")) AS Overdue,
                 COUNT(*)-COUNT(NULLIF(A1.state, "closed")) AS Closed,
                 COUNT(*)-COUNT(NULLIF(A1.state, "reopened")) AS Reopened
-            FROM '.$info['table'].' T1 LEFT JOIN '.TICKET_TABLE.' T2 USING ('.$info['pk'].')
-                LEFT JOIN '.TICKET_EVENT_TABLE.' A1 USING (ticket_id)
-            WHERE '.$info['filter'].' AND A1.timestamp BETWEEN '.$start.' AND '.$stop.'
-            GROUP BY '.$info['fields'].'
+            FROM '.$info['table'].' T1 
+                LEFT JOIN '.TICKET_EVENT_TABLE.' A1 
+                    ON (A1.'.$info['pk'].'=T1.'.$info['pk'].'
+                         AND (A1.timestamp BETWEEN '.$start.' AND '.$stop.'))
+                LEFT JOIN '.STAFF_TABLE.' S1 ON (S1.staff_id=A1.staff_id)
+            WHERE '.$info['filter'].'
+            GROUP BY T1.'.$info['pk'].'
             ORDER BY '.$info['sort']),
 
             array(1, 'SELECT '.$info['fields'].',
                 FORMAT(AVG(DATEDIFF(T2.closed, T2.created)),1) AS ServiceTime
-            FROM '.$info['table'].' T1 LEFT JOIN '.TICKET_TABLE.' T2 USING ('.$info['pk'].')
+            FROM '.$info['table'].' T1 
+                LEFT JOIN '.TICKET_TABLE.' T2 ON (T2.'.$info['pk'].'=T1.'.$info['pk'].')
+                LEFT JOIN '.STAFF_TABLE.' S1 ON (S1.staff_id=T2.staff_id)
             WHERE '.$info['filter'].' AND T2.closed BETWEEN '.$start.' AND '.$stop.'
-            GROUP BY '.$info['fields'].'
+            GROUP BY T1.'.$info['pk'].'
             ORDER BY '.$info['sort']),
 
             array(1, 'SELECT '.$info['fields'].',
                 FORMAT(AVG(DATEDIFF(B2.created, B1.created)),1) AS ResponseTime
-            FROM '.$info['table'].' T1 LEFT JOIN '.TICKET_TABLE.' T2 USING ('.$info['pk'].')
+            FROM '.$info['table'].' T1 
+                LEFT JOIN '.TICKET_TABLE.' T2 ON (T2.'.$info['pk'].'=T1.'.$info['pk'].')
                 LEFT JOIN '.TICKET_THREAD_TABLE.' B2 ON (B2.ticket_id = T2.ticket_id
                     AND B2.thread_type="R")
                 LEFT JOIN '.TICKET_THREAD_TABLE.' B1 ON (B2.pid = B1.id)
+                LEFT JOIN '.STAFF_TABLE.' S1 ON (S1.staff_id=B2.staff_id)
             WHERE '.$info['filter'].' AND B1.created BETWEEN '.$start.' AND '.$stop.'
-            GROUP BY '.$info['fields'].'
+            GROUP BY T1.'.$info['pk'].'
             ORDER BY '.$info['sort'])
         );
         $rows = array();
@@ -135,7 +145,7 @@ class OverviewReportAjaxAPI extends AjaxController {
                     $r[] = null;
         }
         return array("columns" => array_merge($info['headers'],
-                        array('Open','Assigned','Overdue','Closed','Reopened',
+                        array('Opened','Assigned','Overdue','Closed','Reopened',
                               'Service Time','Response Time')),
                      "data" => $rows);
     }