diff --git a/include/class.search.php b/include/class.search.php
index 55fc7cf89a580fd15b2876c29f347ac0ddf58b46..7bac3d1fb03bae4d4644dbc9dbce6ed88bcbdaaf 100644
--- a/include/class.search.php
+++ b/include/class.search.php
@@ -62,6 +62,7 @@ class SearchInterface {
     }
 
     function find($query, $criteria, $model=false, $sort=array()) {
+        $query = Format::searchable($query);
         return $this->backend->find($query, $criteria, $model, $sort);
     }
 
@@ -107,6 +108,7 @@ class SearchInterface {
                 $new,
                 array(
                     'title'=>       Format::searchable($model->getSubject()),
+                    'number'=>      $model->getNumber(),
                     'status'=>      $model->getStatus(),
                     'topic_id'=>    $model->getTopicId(),
                     'priority_id'=> $model->getPriorityId(),
@@ -196,7 +198,7 @@ class SearchInterface {
         // Users, organizations
         Signal::connect('model.created', array($this, 'createModel'));
         Signal::connect('model.updated', array($this, 'updateModel'));
-        Signal::connect('model.deleted', array($this, 'deleteModel'));
+        #Signal::connect('model.deleted', array($this, 'deleteModel'));
     }
 }
 
@@ -221,6 +223,7 @@ class MysqlSearchBackend extends SearchBackend {
             $type = 'H';
             break;
         case $model instanceof Ticket:
+            $attrs['title'] = $attrs['number'].' '.$attrs['title'];
             $type = 'T';
             break;
         case $model instanceof User:
@@ -263,16 +266,22 @@ class MysqlSearchBackend extends SearchBackend {
         $search = 'MATCH (search.title, search.content) AGAINST ('
             .db_input($query)
             .$mode.')';
-        $tables = array("(
-            SELECT object_type, object_id, $search AS `relevance`
-            FROM `ost__search` `search`
-            WHERE $search
-        ) `search`");
+        $tables = array();
+        $P = TABLE_PREFIX;
+        $sort = '';
+
+        if ($query) {
+            $tables[] = "(
+                SELECT object_type, object_id, $search AS `relevance`
+                FROM `{$P}_search` `search`
+                WHERE $search
+            ) `search`";
+            $sort = 'ORDER BY `search`.`relevance`';
+        }
 
         switch ($model) {
         case false:
         case 'Ticket':
-            $P = TABLE_PREFIX;
             $tables[] = "(select ticket_id as ticket_id from {$P}ticket
             ) B1 ON (B1.ticket_id = search.object_id and search.object_type = 'T')";
             $tables[] = "(select A2.id as thread_id, A1.ticket_id from {$P}ticket A1
@@ -298,6 +307,7 @@ class MysqlSearchBackend extends SearchBackend {
                     case 'user_id':
                     case 'isanswered':
                     case 'isoverdue':
+                    case 'number':
                         $where[] = sprintf('A1.%s = %s', $name, db_input($value));
                         break;
                     case 'created__gte':
@@ -341,13 +351,14 @@ class MysqlSearchBackend extends SearchBackend {
 
             $where[] = '(' . implode(' OR ', $access) . ')';
 
+            // TODO: Consider sorting preferences
+
             $sql = 'SELECT DISTINCT '
                 . $key
                 . ' FROM '
                 . implode(' LEFT JOIN ', $tables)
                 . ' WHERE ' . implode(' AND ', $where)
-                // TODO: Consider sorting preferences
-                . ' ORDER BY `relevance` DESC'
+                . $sort
                 . ' LIMIT 500';
         }