diff --git a/include/ajax.users.php b/include/ajax.users.php
index 8d1327ddde459d547e63fc619471f6d74315c80e..d42349924e89430df12309c7159b1c7eba839fa6 100644
--- a/include/ajax.users.php
+++ b/include/ajax.users.php
@@ -84,7 +84,7 @@ class UsersAjaxAPI extends AjaxController {
             // Omit already-imported remote users
             if ($emails = array_filter($emails)) {
                 $users->union(User::objects()
-                    ->values_flat('id', 'name', 'default_email__address')                    
+                    ->values_flat('id', 'name', 'default_email__address')
                     ->filter(array(
                         'emails__address__in' => $emails
                 )));
diff --git a/include/class.dept.php b/include/class.dept.php
index 9c0b9564b55c499fba0399ac65b2f75295939171..a1a87164f924da3965f1ff77be5e31cbaf4fc4ed 100644
--- a/include/class.dept.php
+++ b/include/class.dept.php
@@ -741,8 +741,7 @@ implements TemplateVariable, Searchable {
         else
           FilterAction::setFilterFlag($filter_actions, 'dept', true);
 
-        switch ($vars['status'])
-        {
+        switch ($vars['status']) {
           case __('Active'):
             $this->setFlag(self::FLAG_ACTIVE, true);
             $this->setFlag(self::FLAG_ARCHIVED, false);
diff --git a/include/class.filter.php b/include/class.filter.php
index 0ea5c4ab4036e4ad4b8ea21e0c0b4a8fe9ecf029..d54bc8fd80a9df8dffaa1cdfc4bd6882f54bf643 100644
--- a/include/class.filter.php
+++ b/include/class.filter.php
@@ -142,6 +142,8 @@ class Filter {
     }
 
     public function setFlag($flag, $val) {
+        $vars = array();
+        $errors = array();
         if ($val)
             $this->ht['flags'] |= $flag;
         else
@@ -547,7 +549,7 @@ class Filter {
     }
 
     function validate_actions($action) {
-
+      $errors = array();
       $config = json_decode($action->ht['configuration'], true);
       if ($action->ht['type'] == 'dept') {
         $dept = Dept::lookup($config['dept_id']);
diff --git a/include/class.filter_action.php b/include/class.filter_action.php
index 081e6d251e30901b3920ec053061483cd4e9aaae..c963e355c1ab0905f49d10dcf6926718851a8c71 100644
--- a/include/class.filter_action.php
+++ b/include/class.filter_action.php
@@ -79,11 +79,12 @@ class FilterAction extends VerySimpleModel {
     }
 
     function setFilterFlag($actions, $flag, $bool) {
-        $errors = array();
         foreach ($actions as $action) {
           $filter = Filter::lookup($action->filter_id);
-          if ($flag == 'dept') $filter->setFlag(Filter::FLAG_INACTIVE_DEPT, $bool);
-          if ($flag == 'topic') $filter->setFlag(Filter::FLAG_INACTIVE_HT, $bool);
+          if ($filter) {
+            if ($flag == 'dept') $filter->setFlag(Filter::FLAG_INACTIVE_DEPT, $bool);
+            if ($flag == 'topic') $filter->setFlag(Filter::FLAG_INACTIVE_HT, $bool);
+          }
         }
     }
 
diff --git a/include/class.nav.php b/include/class.nav.php
index 448b3553942ff8e6d0f904556b45f8ec5ada6cce..02abcc028adbbe9ba3f486b149c14c99021e53a3 100644
--- a/include/class.nav.php
+++ b/include/class.nav.php
@@ -157,24 +157,6 @@ class StaffNav {
                 case 'tasks':
                     $subnav[]=array('desc'=>__('Tasks'), 'href'=>'tasks.php', 'iconclass'=>'Ticket', 'droponly'=>true);
                     break;
-                case 'tickets':
-                    $subnav[]=array('desc'=>__('Tickets'),'href'=>'tickets.php','iconclass'=>'Ticket', 'droponly'=>true);
-                    if($staff) {
-                        if(($assigned=$staff->getNumAssignedTickets()))
-                            $subnav[]=array('desc'=>__('My Tickets')." ($assigned)",
-                                            'href'=>'tickets.php?status=assigned',
-                                            'iconclass'=>'assignedTickets',
-                                            'droponly'=>true);
-
-                        if ($staff->hasPerm(Ticket::PERM_CREATE, false))
-                            $subnav[]=array('desc'=>__('New Ticket'),
-                                            'title' => __('Open a New Ticket'),
-                                            'href'=>'tickets.php?a=open',
-                                            'iconclass'=>'newTicket',
-                                            'id' => 'new-ticket',
-                                            'droponly'=>true);
-                    }
-                    break;
                 case 'dashboard':
                     $subnav[]=array('desc'=>__('Dashboard'),'href'=>'dashboard.php','iconclass'=>'logs');
                     $subnav[]=array('desc'=>__('Agent Directory'),'href'=>'directory.php','iconclass'=>'teams');
diff --git a/include/class.staff.php b/include/class.staff.php
index 05260871121adb619a70f23a6e86668061751ea7..965b7d429910614015045bf49ead08db9e616237 100644
--- a/include/class.staff.php
+++ b/include/class.staff.php
@@ -580,23 +580,6 @@ implements AuthenticatedUser, EmailContact, TemplateVariable, Searchable {
         $this->stats = array();
     }
 
-    /* returns staff's quick stats - used on nav menu...etc && warnings */
-    function getTicketsStats() {
-
-        if(!$this->stats['tickets'])
-            $this->stats['tickets'] = Ticket::getStaffStats($this);
-
-        return  $this->stats['tickets'];
-    }
-
-    function getNumAssignedTickets() {
-        return ($stats=$this->getTicketsStats())?$stats['assigned']:0;
-    }
-
-    function getNumClosedTickets() {
-        return ($stats=$this->getTicketsStats())?$stats['closed']:0;
-    }
-
     function getTasksStats() {
 
         if (!$this->stats['tasks'])
diff --git a/include/class.thread.php b/include/class.thread.php
index e9f079f2359b4468a93becb01fb99776adaf12ad..069b87c33ed7ec74584d7f1821d3e8120cba6b5c 100644
--- a/include/class.thread.php
+++ b/include/class.thread.php
@@ -134,7 +134,7 @@ implements Searchable {
         $collaborators = $this->getCollaborators();
         $active = array();
         foreach ($collaborators as $c) {
-          if ($c->isactive())
+          if ($c->isActive())
             $active[] = $c;
         }
         return $active;
@@ -360,8 +360,8 @@ implements Searchable {
         if ($type && is_array($type)) {
           $visibility = Q::all(array('type__in' => $type));
 
-          if ($type['poster']) {
-            $visibility->add(array('poster__exact' => $type['poster']));
+          if ($type['user_id']) {
+            $visibility->add(array('user_id' => $type['user_id']));
             $visibility->ored = true;
           }
 
@@ -2019,7 +2019,7 @@ class ThreadEvent extends VerySimpleModel {
         $staff = $thisstaff->getId();
       else
         $staff = $ticket->getStaffId();
-        
+
         $inst = self::create(array(
             'staff_id' => $staff,
             'team_id' => $ticket->getTeamId(),
diff --git a/include/class.ticket.php b/include/class.ticket.php
index 02b4f805bd3446ad3839e50910d8e7d6da3f62be..a6ed0915df61141e13fd89f210f7a69805cf785e 100644
--- a/include/class.ticket.php
+++ b/include/class.ticket.php
@@ -985,7 +985,9 @@ implements RestrictedAccess, Threadable, Searchable {
                 'label' => __('Due Date'),
                 'hint' => $hint,
                 'configuration' => array(
+                    'min' => Misc::gmtime(),
                     'time' => true,
+                    'gmt' => false,
                     'future' => true,
                     )
                 ));
@@ -3284,11 +3286,11 @@ implements RestrictedAccess, Threadable, Searchable {
                           // Make sure the due date is valid
                           if (Misc::user2gmtime($val) <= Misc::user2gmtime())
                               $errors['field']=__('Due date must be in the future');
-                    $dt->setTimezone(new DateTimeZone($cfg->getDbTimezone()));
-                    $val = $dt->format('Y-m-d H:i:s');
+                          else {
+                              $dt->setTimezone(new DateTimeZone($cfg->getDbTimezone()));
+                              $val = $dt->format('Y-m-d H:i:s');
+                          }
                 }
-                elseif ($fid == 'duedate' && !$val)
-                  $errors['field']=__('Invalid due date');
 
                 $changes = array();
                 $this->{$fid} = $val;
@@ -3372,46 +3374,6 @@ implements RestrictedAccess, Threadable, Searchable {
 	return ($num === 0);
     }
 
-    /* Quick staff's tickets stats */
-    function getStaffStats($staff) {
-        global $cfg;
-
-        /* Unknown or invalid staff */
-        if(!$staff || (!is_object($staff) && !($staff=Staff::lookup($staff))) || !$staff->isStaff())
-            return null;
-
-        $visibility = $staff->getTicketsVisibility();
-
-        $blocks = Ticket::objects()
-            ->filter(Q::any($visibility))
-            ->filter(array('status__state' => 'open'))
-            ->aggregate(array('count' => SqlAggregate::COUNT('ticket_id')))
-            ->values('status__state', 'isanswered', 'isoverdue','staff_id', 'team_id');
-
-        $stats = array();
-        $id = $staff->getId();
-        foreach ($blocks as $S) {
-            if ($showanswered || !$S['isanswered']) {
-                if (!($hideassigned && ($S['staff_id'] || $S['team_id'])))
-                    $stats['open'] += $S['count'];
-            }
-            else {
-                $stats['answered'] += $S['count'];
-            }
-            if ($S['isoverdue'])
-                $stats['overdue'] += $S['count'];
-            if ($S['staff_id'] == $id)
-                $stats['assigned'] += $S['count'];
-            elseif ($S['team_id']
-                    && $S['staff_id'] == 0
-                    && $teams
-                    && in_array($S['team_id'], $teams))
-                // Assigned to my team but uassigned to an agent
-                $stats['assigned'] += $S['count'];
-        }
-        return $stats;
-    }
-
     /* Quick client's tickets stats
        @email - valid email.
      */
diff --git a/include/class.topic.php b/include/class.topic.php
index ffff7049b6e70603d27228f0b65646f5cccac2ab..84a1c9d47d85892d62ef4c44976ade79c33afcee 100644
--- a/include/class.topic.php
+++ b/include/class.topic.php
@@ -477,8 +477,7 @@ implements TemplateVariable, Searchable {
         else
           FilterAction::setFilterFlag($filter_actions, 'topic', true);
 
-        switch ($vars['status'])
-        {
+        switch ($vars['status']) {
           case __('Active'):
             $this->setFlag(self::FLAG_ACTIVE, true);
             $this->setFlag(self::FLAG_ARCHIVED, false);
diff --git a/include/client/view.inc.php b/include/client/view.inc.php
index 42ef768311eb746dff3f52c229fd1dbf401cabce..bc39255ab0e02367b43f151e1e1b9a05c5c41bd7 100644
--- a/include/client/view.inc.php
+++ b/include/client/view.inc.php
@@ -145,9 +145,9 @@ echo $v;
 <br>
   <?php
     $email = $thisclient->getUserName();
-    $clientName = TicketUser::lookupByEmail($email)->getName()->name;
+    $clientId = TicketUser::lookupByEmail($email)->getId();
 
-    $ticket->getThread()->render(array('M', 'R', 'poster' => $clientName), array(
+    $ticket->getThread()->render(array('M', 'R', 'user_id' => $clientId), array(
                     'mode' => Thread::MODE_CLIENT,
                     'html-id' => 'ticketThread')
                 );
diff --git a/include/i18n/en_US/templates/email/ticket.reply.yaml b/include/i18n/en_US/templates/email/ticket.reply.yaml
index 1996f6f73075d11e72f5e8830185e0145bfed8d9..c4d9dd793a38c82f9fedd656135bfa165c67ecd1 100644
--- a/include/i18n/en_US/templates/email/ticket.reply.yaml
+++ b/include/i18n/en_US/templates/email/ticket.reply.yaml
@@ -12,7 +12,7 @@ notes: |
 subject: |
     Re: %{ticket.subject} [#%{ticket.number}]
 body: |
-    <h3><strong>Dear %{recipient.name},</strong></h3>
+    <h3><strong>Dear %{recipient.name.first},</strong></h3>
     %{response}
     <br>
     <br>
diff --git a/include/staff/tasks.inc.php b/include/staff/tasks.inc.php
index a67a6dc7968ce000998476b44bb7f23ed4b7b7ae..c8983aca53190d4b300f0894590ae3978c51d224 100644
--- a/include/staff/tasks.inc.php
+++ b/include/staff/tasks.inc.php
@@ -94,14 +94,6 @@ case 'search':
         )));
         unset($_SESSION[$queue_key]);
         break;
-    } elseif (isset($_SESSION['advsearch:tasks'])) {
-        // XXX: De-duplicate and simplify this code
-        $form = $search->getFormFromSession('advsearch:tasks');
-        $form->loadState($_SESSION['advsearch:tasks']);
-        $tasks = $search->mangleQuerySet($tasks, $form);
-        $results_type=__('Advanced Search')
-            . '<a class="action-button" href="?clear_filter"><i class="icon-ban-circle"></i> <em>' . __('clear') . '</em></a>';
-        break;
     }
     // Fall-through and show open tickets
 case 'open':
diff --git a/include/upgrader/streams/core/526c601b-cce1ba43.patch.sql b/include/upgrader/streams/core/526c601b-cce1ba43.patch.sql
index a624a52493c4f57dc74f4ee1f3bbd05397f406e1..215e5c5bec67e83fb03de679dd634e424b2cf1ec 100644
--- a/include/upgrader/streams/core/526c601b-cce1ba43.patch.sql
+++ b/include/upgrader/streams/core/526c601b-cce1ba43.patch.sql
@@ -9,7 +9,7 @@
 *
 * Finally, a flag field is added to the filter table
 */
-Help Topics
+-- Help Topics
 UPDATE `%TABLE_PREFIX%help_topic`
      SET `flags` = `flags` + 2
      WHERE `isactive` = 1;
@@ -23,8 +23,8 @@ UPDATE `%TABLE_PREFIX%department`
     WHERE `ispublic` = 1;
 
 -- Ticket Filters
-ALTER TABLE  `%TABLE_PREFIX%filter`
-    ADD  `flags` int(10) unsigned DEFAULT '0' AFTER  `isactive`;
+ALTER TABLE `%TABLE_PREFIX%filter`
+    ADD `flags` int(10) unsigned DEFAULT '0' AFTER  `isactive`;
 
  -- Finished with patch
 UPDATE `%TABLE_PREFIX%config`
diff --git a/scp/departments.php b/scp/departments.php
index 9c34f7f94af4b2857646d7d40a3ee6c3b78711df..cb07697370fdefc681839ed7a59f81da10ab2daa 100644
--- a/scp/departments.php
+++ b/scp/departments.php
@@ -102,6 +102,8 @@ if($_REQUEST['id'] && !($dept=Dept::lookup($_REQUEST['id'])))
                             foreach ($depts as $d) {
                               $d->setFlag(Dept::FLAG_ARCHIVED, false);
                               $d->setFlag(Dept::FLAG_ACTIVE, true);
+                              $filter_actions = FilterAction::objects()->filter(array('type' => 'dept', 'configuration' => '{"dept_id":'. $d->getId().'}'));
+                              FilterAction::setFilterFlag($filter_actions, 'dept', false);
                               if($d->save())
                                 $num++;
                             }
@@ -127,6 +129,8 @@ if($_REQUEST['id'] && !($dept=Dept::lookup($_REQUEST['id'])))
                             foreach ($depts as $d) {
                               $d->setFlag(Dept::FLAG_ARCHIVED, false);
                               $d->setFlag(Dept::FLAG_ACTIVE, false);
+                              $filter_actions = FilterAction::objects()->filter(array('type' => 'dept', 'configuration' => '{"dept_id":'. $d->getId().'}'));
+                              FilterAction::setFilterFlag($filter_actions, 'dept', true);
                               if($d->save()) {
                                 $num++;
                                 //set dept_id to default for topics/emails using disabled dept
@@ -154,6 +158,8 @@ if($_REQUEST['id'] && !($dept=Dept::lookup($_REQUEST['id'])))
                             foreach ($depts as $d) {
                               $d->setFlag(Dept::FLAG_ARCHIVED, true);
                               $d->setFlag(Dept::FLAG_ACTIVE, false);
+                              $filter_actions = FilterAction::objects()->filter(array('type' => 'dept', 'configuration' => '{"dept_id":'. $d->getId().'}'));
+                              FilterAction::setFilterFlag($filter_actions, 'dept', true);
                               if($d->save()) {
                                 $num++;
                                 //set dept_id to default for topics/emails using archived dept
@@ -216,7 +222,7 @@ if ($_REQUEST['a'] && $_REQUEST['a'] == 'export') {
 } elseif ($dept || ($_REQUEST['a'] && !strcasecmp($_REQUEST['a'],'add'))) {
   if ($dept && ($pid=$dept->getParent()) && !$pid->isActive())
     $warn = sprintf(__('%s is assigned a %s that is not active.'), __('Department'), __('Parent Department'));
-    
+
     $page='department.inc.php';
 }
 
diff --git a/scp/helptopics.php b/scp/helptopics.php
index 281b1c7f15391288944210d31464e4c8ceafc45b..ea1d7b8bd147812bec28021627c3399db9a71cd6 100644
--- a/scp/helptopics.php
+++ b/scp/helptopics.php
@@ -72,6 +72,8 @@ if($_POST){
                         foreach ($topics as $t) {
                           $t->setFlag(Topic::FLAG_ARCHIVED, false);
                           $t->setFlag(Topic::FLAG_ACTIVE, true);
+                          $filter_actions = FilterAction::objects()->filter(array('type' => 'topic', 'configuration' => '{"topic_id":'. $t->getId().'}'));
+                          FilterAction::setFilterFlag($filter_actions, 'topic', false);
                           if($t->save())
                             $num++;
                         }
@@ -97,6 +99,8 @@ if($_POST){
                         foreach ($topics as $t) {
                           $t->setFlag(Topic::FLAG_ARCHIVED, false);
                           $t->setFlag(Topic::FLAG_ACTIVE, false);
+                          $filter_actions = FilterAction::objects()->filter(array('type' => 'topic', 'configuration' => '{"topic_id":'. $t->getId().'}'));
+                          FilterAction::setFilterFlag($filter_actions, 'topic', true);
                           if($t->save()) {
                             $num++;
                             //remove topic_id for emails using disabled topic
@@ -124,6 +128,8 @@ if($_POST){
                         foreach ($topics as $t) {
                           $t->setFlag(Topic::FLAG_ARCHIVED, true);
                           $t->setFlag(Topic::FLAG_ACTIVE, false);
+                          $filter_actions = FilterAction::objects()->filter(array('type' => 'topic', 'configuration' => '{"topic_id":'. $t->getId().'}'));
+                          FilterAction::setFilterFlag($filter_actions, 'topic', true);
                           if($t->save()) {
                             $num++;
                             //remove topic_id for emails using disabled topic
diff --git a/scp/staff.inc.php b/scp/staff.inc.php
index a91b15a2f370bfcb5481f537a3bb3010d6657908..8acf73ceabfe35f2e2f054eb019230ebbd5821c0 100644
--- a/scp/staff.inc.php
+++ b/scp/staff.inc.php
@@ -78,7 +78,7 @@ if (!$thisstaff || !$thisstaff->getId() || !$thisstaff->isValid()) {
 //2) if not super admin..check system status and group status
 if(!$thisstaff->isAdmin()) {
     //Check for disabled staff or group!
-    if (!$thisstaff->isactive()) {
+    if (!$thisstaff->isActive()) {
         staffLoginPage(__('Access Denied. Contact Admin'));
         exit;
     }
diff --git a/scp/tasks.php b/scp/tasks.php
index a918d0ecb90ab79603466577b5f14179b918e4b3..5cd77777f3714b6ff592878ab25ca6ee35a212a1 100644
--- a/scp/tasks.php
+++ b/scp/tasks.php
@@ -197,21 +197,6 @@ if ($stats['closed']) {
                         ($_REQUEST['status']=='closed'));
 }
 
-if (isset($_SESSION['advsearch:tasks'])) {
-    // XXX: De-duplicate and simplify this code
-    $search = SavedSearch::create();
-    $form = $search->getFormFromSession('advsearch:tasks');
-    $form->loadState($_SESSION['advsearch:tasks']);
-    $tasks = Task::objects();
-    $tasks = $search->mangleQuerySet($tasks, $form);
-    $count = $tasks->count();
-    $nav->addSubMenu(array('desc' => __('Search').' ('.number_format($count).')',
-                           'title'=>__('Advanced Task Search'),
-                           'href'=>'tasks.php?status=search',
-                           'iconclass'=>'Ticket'),
-                        (!$_REQUEST['status'] || $_REQUEST['status']=='search'));
-}
-
 if ($thisstaff->hasPerm(TaskModel::PERM_CREATE, false)) {
     $nav->addSubMenu(array('desc'=>__('New Task'),
                            'title'=> __('Open a New Task'),
diff --git a/scp/tickets.php b/scp/tickets.php
index 18a7e0721dd267eb96fd17e00132ffe1a7155127..9c847b83d504f65b049ee978e8cfe17ae2b83421 100644
--- a/scp/tickets.php
+++ b/scp/tickets.php
@@ -452,9 +452,6 @@ if ($redirect) {
     Http::redirect($redirect);
 }
 
-/*... Quick stats ...*/
-$stats = $thisstaff->getTicketsStats();
-
 // Clear advanced search upon request
 if (isset($_GET['clear_filter']))
     unset($_SESSION['advsearch']);
@@ -541,7 +538,7 @@ if($ticket) {
         $inc = 'ticket-open.inc.php';
     elseif ($_REQUEST['a'] == 'export' && $queue) {
         // XXX: Check staff access?
-        $filename = sprintf('%s Tickets-%s', $queue->getName(),
+        $filename = sprintf('%s Tickets-%s.csv', $queue->getName(),
                 strftime('%Y%m%d'));
         if (!$queue->export($filename, 'csv'))
             $errors['err'] = __('Unable to export results.')
diff --git a/setup/test/tests/stubs.php b/setup/test/tests/stubs.php
index 0b7c423fa6adc0f784ad6b1d3bdf7e3129dd7054..052f97d3ac61235cbcb7123cd6e8160ab9ee5234 100644
--- a/setup/test/tests/stubs.php
+++ b/setup/test/tests/stubs.php
@@ -132,6 +132,7 @@ class SqlFunction {
     static function LENGTH() {}
     static function COALESCE() {}
     static function DATEDIFF() {}
+    static function timestampdiff() {}
 }
 
 class SqlExpression {