diff --git a/include/class.ticket.php b/include/class.ticket.php
index a6bff31c40f5ec4cc24f2434e72828ccde2407c3..d01f438d791c6d5c104a594e65299ac2e5ce2deb 100644
--- a/include/class.ticket.php
+++ b/include/class.ticket.php
@@ -75,18 +75,25 @@ class Ticket{
        
         $sql='SELECT  ticket.*, topic.topic as helptopic, lock_id, dept_name, priority_desc '
             .' ,count(attach.attach_id) as attachments '
-            .' ,count(DISTINCT message.msg_id) as messages '
-            .' ,count(DISTINCT response.response_id) as responses '
-            .' ,count(DISTINCT note.note_id) as notes '
+            .' ,count(DISTINCT message.id) as messages '
+            .' ,count(DISTINCT response.id) as responses '
+            .' ,count(DISTINCT note.id) as notes '
             .' FROM '.TICKET_TABLE.' ticket '
             .' LEFT JOIN '.DEPT_TABLE.' dept ON (ticket.dept_id=dept.dept_id) '
-            .' LEFT JOIN '.TICKET_PRIORITY_TABLE.' pri ON (ticket.priority_id=pri.priority_id) '
-            .' LEFT JOIN '.TOPIC_TABLE.' topic ON (ticket.topic_id=topic.topic_id) '
-            .' LEFT JOIN '.TICKET_LOCK_TABLE.' tlock ON (ticket.ticket_id=tlock.ticket_id AND tlock.expire>NOW()) '
-            .' LEFT JOIN '.TICKET_ATTACHMENT_TABLE.' attach ON (ticket.ticket_id=attach.ticket_id) '
-            .' LEFT JOIN '.TICKET_MESSAGE_TABLE.' message ON (ticket.ticket_id=message.ticket_id) '
-            .' LEFT JOIN '.TICKET_RESPONSE_TABLE.' response ON (ticket.ticket_id=response.ticket_id) '
-            .' LEFT JOIN '.TICKET_NOTE_TABLE.' note ON (ticket.ticket_id=note.ticket_id ) '
+            .' LEFT JOIN '.TICKET_PRIORITY_TABLE.' pri ON ('
+                .'ticket.priority_id=pri.priority_id) '
+            .' LEFT JOIN '.TOPIC_TABLE.' topic ON ('
+                .'ticket.topic_id=topic.topic_id) '
+            .' LEFT JOIN '.TICKET_LOCK_TABLE.' tlock ON ('
+                .'ticket.ticket_id=tlock.ticket_id AND tlock.expire>NOW()) '
+            .' LEFT JOIN '.TICKET_ATTACHMENT_TABLE.' attach ON ('
+                .'ticket.ticket_id=attach.ticket_id) '
+            .' LEFT JOIN '.TICKET_THREAD_TABLE.' message ON ('
+                ."ticket.ticket_id=message.ticket_id AND message.thread_type = 'M') "
+            .' LEFT JOIN '.TICKET_THREAD_TABLE.' response ON ('
+                ."ticket.ticket_id=response.ticket_id AND response.thread_type = 'R') "
+            .' LEFT JOIN '.TICKET_THREAD_TABLE.' note ON ( '
+                ."ticket.ticket_id=note.ticket_id AND note.thread_type = 'N') "
             .' WHERE ticket.ticket_id='.db_input($id)
             .' GROUP BY ticket.ticket_id';
 
@@ -436,9 +443,10 @@ class Ticket{
     function getLastRespondent() {
 
         $sql ='SELECT  resp.staff_id '
-             .' FROM '.TICKET_RESPONSE_TABLE.' resp '
+             .' FROM '.TICKET_THREAD_TABLE.' resp '
              .' LEFT JOIN '.STAFF_TABLE. ' USING(staff_id) '
              .' WHERE  resp.ticket_id='.db_input($this->getId()).' AND resp.staff_id>0 '
+             .'   AND  resp.thread_type="R"'
              .' ORDER BY resp.created DESC LIMIT 1';
 
         if(!($res=db_query($sql)) || !db_num_rows($res))
@@ -456,8 +464,9 @@ class Ticket{
             return $this->lastmsgdate;
 
         //for old versions...XXX: still needed????
-        $sql='SELECT created FROM '.TICKET_MESSAGE_TABLE
+        $sql='SELECT created FROM '.TICKET_THREAD_TABLE
             .' WHERE ticket_id='.db_input($this->getId())
+            ."   AND thread_type = 'M'"
             .' ORDER BY created DESC LIMIT 1';
         if(($res=db_query($sql)) && db_num_rows($res))
             list($this->lastmsgdate)=db_fetch_row($res);
@@ -474,8 +483,9 @@ class Ticket{
         if($this->lastrespdate)
             return $this->lastrespdate;
 
-        $sql='SELECT created FROM '.TICKET_RESPONSE_TABLE
+        $sql='SELECT created FROM '.TICKET_THREAD_TABLE
             .' WHERE ticket_id='.db_input($this->getId())
+            .'   AND thread_type="R"'
             .' ORDER BY created DESC LIMIT 1';
         if(($res=db_query($sql)) && db_num_rows($res))
             list($this->lastrespdate)=db_fetch_row($res);
@@ -522,11 +532,12 @@ class Ticket{
             $order='DESC';
 
         $sql ='SELECT note.*, count(DISTINCT attach.attach_id) as attachments '
-            .' FROM '.TICKET_NOTE_TABLE.' note '
+            .' FROM '.TICKET_THREAD_TABLE.' note '
             .' LEFT JOIN '.TICKET_ATTACHMENT_TABLE.' attach
-                ON (note.ticket_id=attach.ticket_id AND note.note_id=attach.ref_id AND ref_type="N") '
+                ON (note.ticket_id=attach.ticket_id AND note.id=attach.ref_id AND ref_type="N") '
             .' WHERE note.ticket_id='.db_input($this->getId())
-            .' GROUP BY note.note_id '
+            .'   AND note.thread_type="N"'
+            .' GROUP BY note.id '
             .' ORDER BY note.created '.$order;
 
         $notes=array();
@@ -539,14 +550,17 @@ class Ticket{
 
     function getMessages() {
 
-        $sql='SELECT msg.msg_id, msg.created, msg.message '
-            .' ,count(DISTINCT attach.attach_id) as attachments, count( DISTINCT resp.response_id) as responses '
-            .' FROM '.TICKET_MESSAGE_TABLE.' msg '
-            .' LEFT JOIN '.TICKET_RESPONSE_TABLE. ' resp ON(resp.msg_id=msg.msg_id) '
-            .' LEFT JOIN '.TICKET_ATTACHMENT_TABLE.' attach 
-                ON (msg.ticket_id=attach.ticket_id AND msg.msg_id=attach.ref_id AND ref_type="M") '
+        $sql='SELECT msg.id, msg.created, msg.body '
+            .' ,count(DISTINCT attach.attach_id) as attachments '
+            .' ,count( DISTINCT resp.id) as responses '
+            .' FROM '.TICKET_THREAD_TABLE.' msg '
+            .' LEFT JOIN '.TICKET_THREAD_TABLE.' resp ON ('
+                .'resp.pid=msg.id AND resp.thread_type = "R") '
+            .' LEFT JOIN '.TICKET_ATTACHMENT_TABLE.' attach '
+                .'ON (msg.ticket_id=attach.ticket_id AND msg.id=attach.ref_id AND ref_type="M") '
             .' WHERE  msg.ticket_id='.db_input($this->getId())
-            .' GROUP BY msg.msg_id '
+               .' AND msg.thread_type="M"'
+            .' GROUP BY msg.id '
             .' ORDER BY msg.created ASC ';
 
         $messages=array();
@@ -560,11 +574,12 @@ class Ticket{
     function getResponses($msgId) {
 
         $sql='SELECT resp.*, count(DISTINCT attach.attach_id) as attachments '
-            .' FROM '.TICKET_RESPONSE_TABLE. ' resp '
+            .' FROM '.TICKET_THREAD_TABLE. ' resp '
             .' LEFT JOIN '.TICKET_ATTACHMENT_TABLE.' attach 
-                ON (resp.ticket_id=attach.ticket_id AND resp.response_id=attach.ref_id AND ref_type="R") '
+                ON (resp.ticket_id=attach.ticket_id AND resp.id=attach.ref_id AND ref_type="R") '
             .' WHERE  resp.ticket_id='.db_input($this->getId())
-            .' GROUP BY resp.response_id '
+            .'   AND  resp.thread_type="R"'
+            .' GROUP BY resp.id '
             .' ORDER BY resp.created';
 
         $responses=array();
@@ -1272,18 +1287,18 @@ class Ticket{
     }
 
     //Insert message from client
-    function postMessage($msg,$source='',$msgid=NULL,$headers='',$newticket=false){
+    function postMessage($msg,$source='',$emsgid=null,$headers='',$newticket=false){
         global $cfg;
        
         if(!$this->getId()) return 0;
         
         # XXX: Refuse auto-response messages? (via email) XXX: No - but kill our auto-responder.
 
-        $sql='INSERT INTO '.TICKET_MESSAGE_TABLE.' SET created=NOW() '
+        $sql='INSERT INTO '.TICKET_THREAD_TABLE.' SET created=NOW()'
+            .' ,thread_type="M" '
             .' ,ticket_id='.db_input($this->getId())
-            .' ,messageId='.db_input($msgid)
-            .' ,message='.db_input(Format::striptags($msg)) //Tags/code stripped...meaning client can not send in code..etc
-            .' ,headers='.db_input($headers) //Raw header.
+            # XXX: Put Subject header into the 'title' field
+            .' ,body='.db_input(Format::striptags($msg)) //Tags/code stripped...meaning client can not send in code..etc
             .' ,source='.db_input($source?$source:$_SERVER['REMOTE_ADDR'])
             .' ,ip_address='.db_input($_SERVER['REMOTE_ADDR']);
     
@@ -1291,6 +1306,15 @@ class Ticket{
 
         $this->setLastMsgId($msgid);
 
+        if ($emsgid !== null) {
+            $sql='INSERT INTO '.TICKET_EMAIL_INFO_TABLE
+                .' SET msg_id='.db_input($msgid)
+                .', email_mid='.db_input($emsgid)
+                .', headers='.db_input($headers);
+
+            if (!db_query($sql)) return 0;
+        }
+
         if($newticket) return $msgid; //Our work is done...
 
         $autorespond = true;
@@ -1355,10 +1379,11 @@ class Ticket{
 
         if($errors) return 0;
 
-        $sql='INSERT INTO '.TICKET_RESPONSE_TABLE.' SET created=NOW() '
+        $sql='INSERT INTO '.TICKET_THREAD_TABLE.' SET created=NOW() '
+            .' ,thread_type="R"'
             .' ,ticket_id='.db_input($this->getId())
-            .' ,msg_id='.db_input($vars['msgId'])
-            .' ,response='.db_input(Format::striptags($vars['response']))
+            .' ,pid='.db_input($vars['msgId'])
+            .' ,body='.db_input(Format::striptags($vars['response']))
             .' ,staff_id='.db_input($thisstaff->getId())
             .' ,staff_name='.db_input($thisstaff->getName())
             .' ,ip_address='.db_input($thisstaff->getIP());
@@ -1432,7 +1457,7 @@ class Ticket{
         if(!$cfg || !$cfg->logTicketActivity())
             return 0;
 
-        return $this->postNote($title,$note,false,'system');
+        return $this->postNote($title,$note,false,'System');
     }
 
     // History log -- used for statistics generation (pretty reports)
@@ -1459,12 +1484,13 @@ class Ticket{
     function postNote($title,$note,$alert=true,$poster='') {        
         global $thisstaff,$cfg;
 
-        $sql= 'INSERT INTO '.TICKET_NOTE_TABLE.' SET created=NOW() '.
+        $sql= 'INSERT INTO '.TICKET_THREAD_TABLE.' SET created=NOW() '.
+                ',thread_type="N"'.
                 ',ticket_id='.db_input($this->getId()).
                 ',title='.db_input(Format::striptags($title)).
-                ',note='.db_input(Format::striptags($note)).
+                ',body='.db_input(Format::striptags($note)).
                 ',staff_id='.db_input($thisstaff?$thisstaff->getId():0).
-                ',source='.db_input(($poster || !$thisstaff)?$poster:$thisstaff->getName());
+                ',poster='.db_input(($poster || !$thisstaff)?$poster:$thisstaff->getName());
         //echo $sql;
         if(!db_query($sql) || !($id=db_insert_id()))
             return false;
@@ -1566,9 +1592,7 @@ class Ticket{
         if(!db_query($sql) || !db_affected_rows())
             return false;
 
-        db_query('DELETE FROM '.TICKET_MESSAGE_TABLE.' WHERE ticket_id='.db_input($this->getId()));
-        db_query('DELETE FROM '.TICKET_RESPONSE_TABLE.' WHERE ticket_id='.db_input($this->getId()));
-        db_query('DELETE FROM '.TICKET_NOTE_TABLE.' WHERE ticket_id='.db_input($this->getId()));
+        db_query('DELETE FROM '.TICKET_THREAD_TABLE.' WHERE ticket_id='.db_input($this->getId()));
         $this->deleteAttachments();
         
         return true;
@@ -1684,8 +1708,9 @@ class Ticket{
             return 0;
 
         $sql='SELECT ticket.ticket_id FROM '.TICKET_TABLE. ' ticket '.
-             ' LEFT JOIN '.TICKET_MESSAGE_TABLE.' msg USING(ticket_id) '.
-             ' WHERE messageId='.db_input($mid).' AND email='.db_input($email);
+             ' LEFT JOIN '.TICKE_THREAD_TABLE.' msg USING(ticket_id) '.
+             ' INNER JOIN '.TICKET_EMAIL_INFO_TABLE.' emsg ON (msg.id = emsg.message_id) '.
+             ' WHERE email_mid='.db_input($mid).' AND email='.db_input($email);
         $id=0;
         if(($res=db_query($sql)) && db_num_rows($res))
             list($id)=db_fetch_row($res);
diff --git a/include/client/tickets.inc.php b/include/client/tickets.inc.php
index a360217167bde83dedcb4decb339677e3c5370d6..7719ec74a7ef2a58babcae7112a0d2cb05caa92e 100644
--- a/include/client/tickets.inc.php
+++ b/include/client/tickets.inc.php
@@ -59,13 +59,12 @@ if($search) {
         $queryterm=db_real_escape($_REQUEST['q'],false); //escape the term ONLY...no quotes.
         $qwhere.=' AND ( '
                 ." ticket.subject LIKE '%$queryterm%'"
-                ." OR message.message LIKE '%$queryterm%'"
-                ." OR response.response LIKE '%$queryterm%'"
+                ." OR thread.body LIKE '%$queryterm%'"
                 .' ) ';
         $deep_search=true;
         //Joins needed for search
-        $qfrom.=' LEFT JOIN '.TICKET_MESSAGE_TABLE.' message ON (ticket.ticket_id=message.ticket_id )'
-               .' LEFT JOIN '.TICKET_RESPONSE_TABLE.' response ON (ticket.ticket_id=response.ticket_id )';
+        $qfrom.=' LEFT JOIN '.TICKET_THREAD_TABLE.' thread ON ('
+               .'ticket.ticket_id=thread.ticket_id AND thread.thread_type IN ("M","R"))';
     }
 }
 
diff --git a/include/client/view.inc.php b/include/client/view.inc.php
index e720ed96bffa58c5d7321e7fe2544c7829a86678..f67e6d94bd3a4456e30b17797254dff49204b960 100644
--- a/include/client/view.inc.php
+++ b/include/client/view.inc.php
@@ -67,11 +67,11 @@ if($ticket->getThreadCount() && ($messages = $ticket->getMessages())) {
         
             <tr><th><?php echo Format::db_datetime($message['created']); ?></th></tr>
             
-            <tr><td><?php echo Format::display($message['message']); ?></td></tr>
+            <tr><td><?php echo Format::display($message['body']); ?></td></tr>
             
             <?php
             
-            if($message['attachments'] && ($links=$ticket->getAttachmentsLinks($message['msg_id'],'M'))) { ?>
+            if($message['attachments'] && ($links=$ticket->getAttachmentsLinks($message['id'],'M'))) { ?>
             
                 <tr><td class="info"><?php echo $links; ?></td></tr>
                 
@@ -81,7 +81,7 @@ if($ticket->getThreadCount() && ($messages = $ticket->getMessages())) {
             
         </table>
         <?php
-        if($message['responses'] && ($responses=$ticket->getResponses($message['msg_id']))) {
+        if($message['responses'] && ($responses=$ticket->getResponses($message['id']))) {
            foreach($responses as $resp) {
                $staff=$cfg->hideStaffName()?'staff':Format::htmlchars($resp['staff_name']);
                ?>
@@ -89,9 +89,9 @@ if($ticket->getThreadCount() && ($messages = $ticket->getMessages())) {
                 <tr>
                     <th><?php echo Format::db_datetime($resp['created']);?>&nbsp;-&nbsp;<?php echo $staff; ?></th>
                 </tr>
-                <tr><td><?php echo Format::display($resp['response']); ?></td></tr>
+                <tr><td><?php echo Format::display($resp['body']); ?></td></tr>
                 <?php
-                if($resp['attachments'] && ($links=$ticket->getAttachmentsLinks($resp['response_id'],'R'))) {?>
+                if($resp['attachments'] && ($links=$ticket->getAttachmentsLinks($resp['id'],'R'))) {?>
                  <tr><td class="info"><?php echo $links; ?></td></tr>
                 <?php
                  }?>
diff --git a/include/staff/ticket-view.inc.php b/include/staff/ticket-view.inc.php
index 33f46eadd443ccf0cda94867d0e54a924b73e30e..faac0f86ef791a8726c266a8121a980860ddc267 100644
--- a/include/staff/ticket-view.inc.php
+++ b/include/staff/ticket-view.inc.php
@@ -196,11 +196,11 @@ if($ticket->isOverdue())
             </tr>
             <tr>
                 <td colspan="2">
-                    <?php echo Format::htmlchars($note['note']); ?>
+                    <?php echo Format::htmlchars($note['body']); ?>
                 </td>
             </tr>
             <?php
-            if($note['attachments'] && ($links=$ticket->getAttachmentsLinks($note['note_id'],'N'))) {?>
+            if($note['attachments'] && ($links=$ticket->getAttachmentsLinks($note['id'],'N'))) {?>
             <tr>
                 <td class="info" colspan="2"><?php echo $links; ?></td>
             </tr>
@@ -220,9 +220,9 @@ if($ticket->isOverdue())
        foreach($messages as $message) {?>
         <table class="message" cellspacing="0" cellpadding="1" width="940" border="0">
             <tr><th><?php echo Format::db_datetime($message['created']); ?></th></tr>
-            <tr><td><?php echo Format::display($message['message']); ?></td></tr>
+            <tr><td><?php echo Format::display($message['body']); ?></td></tr>
             <?php
-            if($message['attachments'] && ($links=$ticket->getAttachmentsLinks($message['msg_id'],'M'))) {?>
+            if($message['attachments'] && ($links=$ticket->getAttachmentsLinks($message['id'],'M'))) {?>
             <tr>
                 <td class="info"><?php echo $links; ?></td>
             </tr>
@@ -231,17 +231,17 @@ if($ticket->isOverdue())
         </table>
         <?php
         /* --------- Responses ------------ */
-        if($message['responses'] && ($responses=$ticket->getResponses($message['msg_id']))) {
+        if($message['responses'] && ($responses=$ticket->getResponses($message['id']))) {
            foreach($responses as $resp) {?>
             <table class="response" cellspacing="0" cellpadding="1" width="100%" border="0">
                 <tr>
                     <th><?php echo Format::db_datetime($resp['created']); ?>&nbsp;-&nbsp;<?php echo Format::htmlchars($resp['staff_name']); ?></th>
                 </tr>
                 <tr>
-                    <td><?php echo Format::display($resp['response']); ?></td>
+                    <td><?php echo Format::display($resp['body']); ?></td>
                 </tr>
                 <?php
-                if($resp['attachments'] && ($links=$ticket->getAttachmentsLinks($resp['response_id'],'R'))) {?>
+                if($resp['attachments'] && ($links=$ticket->getAttachmentsLinks($resp['id'],'R'))) {?>
                 <tr>
                     <td class="info"><?php echo $links; ?></td>
                 </tr>
@@ -251,7 +251,7 @@ if($ticket->isOverdue())
             <?php
            }
         }
-        $msgId=$message['msg_id'];
+        $msgId=$message['id'];
        }
     } else {
         echo '<p>Error fetching ticket thread - get technical help.</p>';
diff --git a/include/staff/tickets.inc.php b/include/staff/tickets.inc.php
index 67d270c3f033e0db98e901d66b09fdcabf5247c6..bb05de08a3ef9477d7c92be63013cbdcd7b38660 100644
--- a/include/staff/tickets.inc.php
+++ b/include/staff/tickets.inc.php
@@ -108,6 +108,8 @@ if($search):
         if(is_numeric($searchTerm)){
             $qwhere.=" AND ticket.ticketID LIKE '$queryterm%'";
         }elseif(strpos($searchTerm,'@') && Validator::is_email($searchTerm)){ //pulling all tricks!
+            # XXX: What about searching for email addresses in the body of
+            #      the thread message
             $qwhere.=" AND ticket.email='$queryterm'";
         }else{//Deep search!
             //This sucks..mass scan! search anything that moves! 
@@ -117,19 +119,15 @@ if($search):
                 $qwhere.=" AND ( ticket.email LIKE '%$queryterm%'".
                             " OR ticket.name LIKE '%$queryterm%'".
                             " OR ticket.subject LIKE '%$queryterm%'".
-                            " OR note.title LIKE '%$queryterm%'".
-                            " OR MATCH(message.message)   AGAINST('$queryterm')".
-                            " OR MATCH(response.response) AGAINST('$queryterm')".
-                            " OR MATCH(note.note) AGAINST('$queryterm')".
+                            " OR thread.title LIKE '%$queryterm%'".
+                            " OR MATCH(thread.body)   AGAINST('$queryterm')".
                             ' ) ';
             }else{
                 $qwhere.=" AND ( ticket.email LIKE '%$queryterm%'".
                             " OR ticket.name LIKE '%$queryterm%'".
                             " OR ticket.subject LIKE '%$queryterm%'".
-                            " OR message.message LIKE '%$queryterm%'".
-                            " OR response.response LIKE '%$queryterm%'".
-                            " OR note.note LIKE '%$queryterm%'".
-                            " OR note.title LIKE '%$queryterm%'".
+                            " OR thread.body LIKE '%$queryterm%'".
+                            " OR thread.title LIKE '%$queryterm%'".
                             ' ) ';
             }
         }
@@ -206,9 +204,7 @@ $qfrom=' FROM '.TICKET_TABLE.' ticket '.
 
 $sjoin='';
 if($search && $deep_search) {
-    $sjoin=' LEFT JOIN '.TICKET_MESSAGE_TABLE.' message ON (ticket.ticket_id=message.ticket_id )'
-          .' LEFT JOIN '.TICKET_RESPONSE_TABLE.' response ON (ticket.ticket_id=response.ticket_id )'
-          .' LEFT JOIN '.TICKET_NOTE_TABLE.' note ON (ticket.ticket_id=note.ticket_id ) ';
+    $sjoin=' LEFT JOIN '.TICKET_THREAD_TABLE.' thread ON (ticket.ticket_id=thread.ticket_id )';
 }
 
 $qgroup=' GROUP BY ticket.ticket_id';
@@ -222,9 +218,9 @@ $pageNav->setURL('tickets.php',$qstr.'&sort='.urlencode($_REQUEST['sort']).'&ord
 
 //ADD attachment,priorities, lock and other crap
 $qselect.=' ,count(attach.attach_id) as attachments '
-         .' ,count(DISTINCT message.msg_id) as messages '
-         .' ,count(DISTINCT response.response_id) as responses '
-         .' ,count(DISTINCT note.note_id) as notes '
+         .' ,count(DISTINCT message.id) as messages '
+         .' ,count(DISTINCT response.id) as responses '
+         .' ,count(DISTINCT note.id) as notes '
          .' ,IF(ticket.reopened is NULL,IF(ticket.lastmessage is NULL,ticket.created,ticket.lastmessage),ticket.reopened) as effective_date '
          .' ,CONCAT_WS(" ", staff.firstname, staff.lastname) as staff, team.name as team '
          .' ,IF(staff.staff_id IS NULL,team.name,CONCAT_WS(" ", staff.lastname, staff.firstname)) as assigned ';
@@ -233,9 +229,12 @@ $qfrom.=' LEFT JOIN '.TICKET_PRIORITY_TABLE.' pri ON (ticket.priority_id=pri.pri
        .' LEFT JOIN '.TICKET_LOCK_TABLE.' tlock ON (ticket.ticket_id=tlock.ticket_id AND tlock.expire>NOW() 
                AND tlock.staff_id!='.db_input($thisstaff->getId()).') '
        .' LEFT JOIN '.TICKET_ATTACHMENT_TABLE.' attach ON (ticket.ticket_id=attach.ticket_id) '
-       .' LEFT JOIN '.TICKET_MESSAGE_TABLE.' message ON (ticket.ticket_id=message.ticket_id) '
-       .' LEFT JOIN '.TICKET_RESPONSE_TABLE.' response ON (ticket.ticket_id=response.ticket_id) '
-       .' LEFT JOIN '.TICKET_NOTE_TABLE.' note ON (ticket.ticket_id=note.ticket_id ) '
+       .' LEFT JOIN '.TICKET_THREAD_TABLE.' message ON ('
+            .'ticket.ticket_id=message.ticket_id AND message.thread_type="M") '
+       .' LEFT JOIN '.TICKET_THREAD_TABLE.' response ON ('
+            .'ticket.ticket_id=response.ticket_id AND response.thread_type="R") '
+       .' LEFT JOIN '.TICKET_THREAD_TABLE.' note ON ('
+            .'ticket.ticket_id=note.ticket_id AND note.thread_type="N") '
        .' LEFT JOIN '.STAFF_TABLE.' staff ON (ticket.staff_id=staff.staff_id) '
        .' LEFT JOIN '.TEAM_TABLE.' team ON (ticket.team_id=team.team_id) ';
 
diff --git a/main.inc.php b/main.inc.php
index 7b10c018a69abb54ab321a917889e48fc80c99da..b098bc175a890478dee7c40f99e7a42031ca37f9 100644
--- a/main.inc.php
+++ b/main.inc.php
@@ -135,9 +135,7 @@
     define('CANNED_ATTACHMENT_TABLE',TABLE_PREFIX.'canned_attachment');
 
     define('TICKET_TABLE',TABLE_PREFIX.'ticket');
-    define('TICKET_NOTE_TABLE',TABLE_PREFIX.'ticket_note');
-    define('TICKET_MESSAGE_TABLE',TABLE_PREFIX.'ticket_message');
-    define('TICKET_RESPONSE_TABLE',TABLE_PREFIX.'ticket_response');
+    define('TICKET_THREAD_TABLE',TABLE_PREFIX.'ticket_thread');
     define('TICKET_ATTACHMENT_TABLE',TABLE_PREFIX.'ticket_attachment');
     define('TICKET_PRIORITY_TABLE',TABLE_PREFIX.'ticket_priority');
     define('PRIORITY_TABLE',TICKET_PRIORITY_TABLE);