diff --git a/include/class.mailer.php b/include/class.mailer.php
index adb0fd0d1188a30ed64e09226fd1c919b90c7662..44e7565b6438631dfe79be65b3f5d5a941745a08 100644
--- a/include/class.mailer.php
+++ b/include/class.mailer.php
@@ -124,9 +124,9 @@ class Mailer {
         }
 
         if ($options) {
-            if (isset($options['replyto']))
+            if (isset($options['replyto']) && $options['replyto'])
                 $headers += array('In-Reply-To' => $options['replyto']);
-            if (isset($options['references'])) {
+            if (isset($options['references']) && $options['references']) {
                 if (is_array($options['references']))
                     $headers += array('References' =>
                         implode(' ', $options['references']));
diff --git a/include/class.mailparse.php b/include/class.mailparse.php
index 22f2bf9e296d25fac3c36e687b711d3c3b6287cc..fbe8da41f91ef2dc7216ceb9c6bffacfa596a28f 100644
--- a/include/class.mailparse.php
+++ b/include/class.mailparse.php
@@ -86,7 +86,7 @@ class Mail_Parse {
             if (substr($headers[$i], 0, 1) == " ") {
                 # Continuation from previous header (runon to next line)
                 $j=$i-1; while (!isset($headers[$j]) && $j>0) $j--;
-                $headers[$j] .= "\n".ltrim($headers[$i]);
+                $headers[$j] .= " ".ltrim($headers[$i]);
                 unset($headers[$i]);
             } elseif (strlen($headers[$i]) == 0) {
                 unset($headers[$i]);
diff --git a/include/class.thread.php b/include/class.thread.php
index a1a79e3916ccdea3a16c51adc9ed4b1afdd92a77..e0edf1408a1e3933978a8cc0caff21380c70ea1f 100644
--- a/include/class.thread.php
+++ b/include/class.thread.php
@@ -334,6 +334,25 @@ Class ThreadEntry {
         return $this->ht['email_mid'];
     }
 
+    function getEmailHeaders() {
+        require_once(INCLUDE_DIR.'class.mailparse.php');
+
+        $sql = 'SELECT headers FROM '.TICKET_EMAIL_INFO_TABLE
+            .' WHERE message_id='.$this->getId();
+        $headers = db_result(db_query($sql));
+        return Mail_Parse::splitHeaders($headers);
+    }
+
+    function getEmailReferences() {
+        if (!isset($this->_references)) {
+            $this->_references = $this->getEmailMessageId();
+            $headers = self::getEmailHeaders();
+            if (isset($headers['References']))
+                $this->_references .= " ".$headers['References'];
+        }
+        return $this->_references;
+    }
+
     function getTicket() {
 
         if(!$this->ticket && $this->getTicketId())
diff --git a/include/class.ticket.php b/include/class.ticket.php
index c3eb29d8db0708ab626b225a3d75318a6f33fe72..7f0c73109f2d1451203cf870c9028fc04367116f 100644
--- a/include/class.ticket.php
+++ b/include/class.ticket.php
@@ -737,7 +737,9 @@ class Ticket {
         if(!$dept || !($email=$dept->getAutoRespEmail()))
             $email =$cfg->getDefaultEmail();
 
-        $options = array('references'=>$message->getEmailMessageId());
+        $options = array(
+            'replyto'=>$message->getEmailMessageId(),
+            'references'=>$message->getEmailReferences());
 
         //Send auto response - if enabled.
         if($autorespond && $email && $cfg->autoRespONNewTicket()
@@ -886,7 +888,9 @@ class Ticket {
 
             if (!$message)
                 $message = $this->getLastMessage();
-            $options = array('references' => $message->getEmailMessageId());
+            $options = array(
+                'replyto'=>$message->getEmailMessageId(),
+                'references'=>$message->getEmailReferences());
             $email->sendAutoReply($this->getEmail(), $msg['subj'], $msg['body'],
                 null, $options);
         }
@@ -945,7 +949,9 @@ class Ticket {
 
             //Send the alerts.
             $sentlist=array();
-            $options = array('references' => $note->getEmailMessageId());
+            $options = array(
+                'replyto'=>$note->getEmailMessageId(),
+                'references'=>$note->getEmailReferences());
             foreach( $recipients as $k=>$staff) {
                 if(!is_object($staff) || !$staff->isAvailable() || in_array($staff->getEmail(), $sentlist)) continue;
                 $alert = str_replace('%{recipient}', $staff->getFirstName(), $msg['body']);
@@ -1196,7 +1202,9 @@ class Ticket {
                 $recipients[]= $manager;
 
             $sentlist=array();
-            $options = array('references' => $note->getEmailMessageId());
+            $options = array(
+                'replyto'=>$note->getEmailMessageId(),
+                'references'=>$note->getEmailReferences());
             foreach( $recipients as $k=>$staff) {
                 if(!is_object($staff) || !$staff->isAvailable() || in_array($staff->getEmail(), $sentlist)) continue;
                 $alert = str_replace('%{recipient}', $staff->getFirstName(), $msg['body']);
@@ -1346,7 +1354,9 @@ class Ticket {
                 $recipients[]=$manager;
 
             $sentlist=array(); //I know it sucks...but..it works.
-            $options = array('references'=>$message->getEmailMessageId());
+            $options = array(
+                'replyto'=>$message->getEmailMessageId(),
+                'references'=>$message->getEmailReferences());
             foreach( $recipients as $k=>$staff) {
                 if(!$staff || !$staff->getEmail() || !$staff->isAvailable() || in_array($staff->getEmail(), $sentlist)) continue;
                 $alert = str_replace('%{recipient}', $staff->getFirstName(), $msg['body']);
@@ -1404,7 +1414,9 @@ class Ticket {
                 $msg['body'] ="\n$tag\n\n".$msg['body'];
 
             $attachments =($cfg->emailAttachments() && $files)?$response->getAttachments():array();
-            $options = array('references' => $response->getEmailMessageId());
+            $options = array(
+                'replyto'=>$response->getEmailMessageId(),
+                'references'=>$response->getEmailReferences());
             $email->sendAutoReply($this->getEmail(), $msg['subj'], $msg['body'], $attachments,
                 $options);
         }
@@ -1461,7 +1473,9 @@ class Ticket {
 
             //Set attachments if emailing.
             $attachments = $cfg->emailAttachments()?$response->getAttachments():array();
-            $options = array('references' => $response->getEmailMessageId());
+            $options = array(
+                'replyto' => $response->getEmailMessageId(),
+                'references' => $response->getEmailReferences());
             //TODO: setup  5 param (options... e.g mid trackable on replies)
             $email->send($this->getEmail(), $msg['subj'], $msg['body'], $attachments,
                 $options);
@@ -1573,7 +1587,9 @@ class Ticket {
                 $recipients[]=$dept->getManager();
 
             $attachments = $note->getAttachments();
-            $options = array('references' => $note->getEmailMessageId());
+            $options = array(
+                'replyto'=>$note->getEmailMessageId(),
+                'references'=>$note->getEmailReferences());
             $sentlist=array();
             foreach( $recipients as $k=>$staff) {
                 if(!is_object($staff)