diff --git a/bootstrap.php b/bootstrap.php
index 8985717d43a30697bbb4f67033880b6225cab6e6..354c9bd208acc4ecde10f0d75df299d53c0e4357 100644
--- a/bootstrap.php
+++ b/bootstrap.php
@@ -187,6 +187,7 @@ class Bootstrap {
         require_once INCLUDE_DIR.'class.util.php';
         require_once INCLUDE_DIR.'class.translation.php';
         require(INCLUDE_DIR.'class.signal.php');
+        require(INCLUDE_DIR.'class.model.php');
         require(INCLUDE_DIR.'class.user.php');
         require(INCLUDE_DIR.'class.auth.php');
         require(INCLUDE_DIR.'class.pagenate.php'); //Pagenate helper!
diff --git a/include/class.model.php b/include/class.model.php
new file mode 100644
index 0000000000000000000000000000000000000000..7b8af26ab93d9056f3eb46fc8807e78b1658fc58
--- /dev/null
+++ b/include/class.model.php
@@ -0,0 +1,61 @@
+<?php
+/*********************************************************************
+    class.model.php
+
+    Peter Rotich <peter@osticket.com>
+    Copyright (c)  2006-2014 osTicket
+    http://www.osticket.com
+
+    Released under the GNU General Public License WITHOUT ANY WARRANTY.
+    See LICENSE.TXT for details.
+
+    vim: expandtab sw=4 ts=4 sts=4:
+**********************************************************************/
+
+// TODO:  Make ObjectModel models base class and extend VerySimpleModel
+class ObjectModel {
+
+    const OBJECT_TYPE_TICKET = 'T';
+    const OBJECT_TYPE_THREAD = 'H';
+    const OBJECT_TYPE_USER   = 'U';
+    const OBJECT_TYPE_ORG    = 'O';
+    const OBJECT_TYPE_FAQ    = 'K';
+    const OBJECT_TYPE_FILE   = 'F';
+
+    private function objects() {
+        static $objects = false;
+        if ($objects == false) {
+            $objects = array(
+                    self::OBJECT_TYPE_TICKET  => 'Ticket',
+                    self::OBJECT_TYPE_THREAD  => 'ThreadEntry',
+                    self::OBJECT_TYPE_USER    => 'User',
+                    self::OBJECT_TYPE_ORG     => 'Organization',
+                    self::OBJECT_TYPE_FAQ     => 'FAQ',
+                    self::OBJECT_TYPE_FILE    => 'AttachmentFile',
+                    );
+        }
+
+        return $objects;
+    }
+
+    static function getType($model) {
+
+        foreach (self::objects() as $t => $c) {
+            if ($model instanceof $c)
+                return $t;
+        }
+    }
+
+    static function lookup($id, $type) {
+        $model = null;
+        if ($id
+                && ($objects=self::objects())
+                && ($class=$objects[$type])
+                && class_exists($class)
+                && is_callable(array($class, 'lookup')))
+            $model = $class::lookup($id);
+
+        return $model;
+    }
+}
+?>
diff --git a/include/class.search.php b/include/class.search.php
index 87cabbbb968c201ac8ac67ccba8a9093f4f0aa20..86ebf80654aaaefe3fb23a6d71121414b5ca5855 100644
--- a/include/class.search.php
+++ b/include/class.search.php
@@ -92,7 +92,8 @@ class SearchInterface {
                 $model->getBody()->getSearchable(), $new,
                 array(
                     'title' =>      $model->getTitle(),
-                    'ticket_id' =>  $model->getTicketId(),
+                    //TODO: send attribute of object_id
+                    'ticket_id' =>  $model->getThread()->getObjectId(),
                     'created' =>    $model->getCreateDate(),
                 )
             );
@@ -218,31 +219,15 @@ class MysqlSearchBackend extends SearchBackend {
     }
 
     function update($model, $id, $content, $new=false, $attrs=array()) {
-        switch (true) {
-        case $model instanceof ThreadEntry:
-            $type = 'H';
-            break;
-        case $model instanceof Ticket:
+
+
+        if (!($type=ObjectModel::getType($model)))
+            return;
+
+        if ($model instanceof Ticket)
             $attrs['title'] = $attrs['number'].' '.$attrs['title'];
-            $type = 'T';
-            break;
-        case $model instanceof User:
+        elseif ($model instanceof User)
             $content .= implode("\n", $attrs['emails']);
-            $type = 'U';
-            break;
-        case $model instanceof Organization:
-            $type = 'O';
-            break;
-        case $model instanceof FAQ:
-            $type = 'K';
-            break;
-        case $model instanceof AttachmentFile:
-            $type = 'F';
-            break;
-        default:
-            // Not indexed
-            return;
-        }
 
         $title = $attrs['title'] ?: '';
 
diff --git a/include/class.thread.php b/include/class.thread.php
index 81b9f49411a771cd9495a3a508e23ed31c418bd4..7b48da65d94b89c2bb6e761f8a5ccfb7af10c6e5 100644
--- a/include/class.thread.php
+++ b/include/class.thread.php
@@ -65,6 +65,15 @@ class Thread {
         return $this->ht['object_type'];
     }
 
+    function getObject() {
+
+        if (!$this->_object)
+            $this->_object = ObjectModel::lookup(
+                    $this->getObjectId(), $this->getObjectType());
+
+        return $this->_object;
+    }
+
     function getNumAttachments() {
         return $this->ht['attachments'];
     }