diff --git a/include/class.mailfetch.php b/include/class.mailfetch.php
index 0b739e7c82eeb4a9a1668a096effcbc8ade8616e..237d1d9f78b79621edb6a46134c765a20e9b28ca 100644
--- a/include/class.mailfetch.php
+++ b/include/class.mailfetch.php
@@ -515,15 +515,23 @@ class MailFetcher {
         return false;
     }
 
-    function getOriginalMessage($mid) {
-        if (!($body = $this->getPart($mid, 'message/rfc822')))
-            return null;
+    function getOriginalMessageHeaders($mid) {
+        if (!($body = $this->getPart($mid, 'message/rfc822'))) {
+            // Handle rfc1892 style bounces
+            if (!($body = $this->getPart($mid, 'text/rfc822-headers'))) {
+                return null;
+            }
+            else {
+                // Add a junk body for the parser
+                $body .= "\n\nIgnored";
+            }
+        }
 
         $msg = new Mail_Parse($body);
         if (!$msg->decode())
             return null;
 
-        return $msg->struct;
+        return $msg->struct->headers;
     }
 
     function getPriority($mid) {
@@ -619,9 +627,9 @@ class MailFetcher {
 
         if ($this->isBounceNotice($mid)) {
             // Fetch the original References and assign to 'references'
-            if ($msg = $this->getOriginalMessage($mid)) {
-                $vars['references'] = $msg->headers['references'];
-                unset($vars['in-reply-to']);
+            if ($headers = $this->getOriginalMessageHeaders($mid)) {
+                $vars['references'] = $headers['references'];
+                $vars['in-reply-to'] = @$headers['in-reply-to'] ?: null;
             }
             // Fetch deliver status report
             $vars['message'] = $this->getDeliveryStatusMessage($mid);
diff --git a/include/class.mailparse.php b/include/class.mailparse.php
index 378c68c1959e2a5c6ff4d442a9b8282c43c7aee3..5b1a0271037fe473f760db7535e9c2f2277220de 100644
--- a/include/class.mailparse.php
+++ b/include/class.mailparse.php
@@ -268,11 +268,17 @@ class Mail_Parse {
         return false;
     }
 
-    function getOriginalMessage() {
+    function getOriginalMessageHeaders() {
         foreach ($this->struct->parts as $p) {
             $ctype = $p->ctype_primary.'/'.$p->ctype_secondary;
             if (strtolower($ctype) === 'message/rfc822')
-                return $p->parts[0];
+                return $p->parts[0]->headers;
+            // Handle rfc1892 style bounces
+            if (strtolower($ctype) === 'text/rfc822-headers') {
+                $T = new Mail_mimeDecode($p->body . "\n\nIgnored");
+                if ($struct = $T->decode())
+                    return $struct->headers;
+            }
         }
         return null;
     }
@@ -604,8 +610,10 @@ class EmailDataParser {
 
         if ($parser->isBounceNotice()) {
             // Fetch the original References and assign to 'references'
-            if ($msg = $parser->getOriginalMessage())
-                $data['references'] = $msg->headers['references'];
+            if ($headers = $parser->getOriginalMessageHeaders()) {
+                $data['references'] = $headers['references'];
+                $data['in-reply-to'] = @$headers['in-reply-to'] ?: null;
+            }
             // Fetch deliver status report
             $data['message'] = $parser->getDeliveryStatusMessage();
             $data['thread-type'] = 'N';