diff --git a/mailhandler.retrieve.inc b/mailhandler.retrieve.inc
index e756a91..b9fa454 100755
--- a/mailhandler.retrieve.inc
+++ b/mailhandler.retrieve.inc
@@ -253,6 +253,37 @@ function mailhandler_get_unread_messages($result) {
 }
 
 /**
+ * Get all headers, even those that imap_header() won't.
+ * 
+ * @param &$header
+ *   object with headers to amend
+ * @param $result
+ *   IMAP stream
+ * @param $i
+ *   Int message number
+ * @return 
+ *   not used atm
+ */
+function mailhandler_amend_header(&$header, $result, $i) {
+  $allheaderlines=imap_fetchheader($result, imap_msgno($result, $i));
+  preg_match_all('/([^: ]+): (.+?(?:\r\n\s(?:.+?))*)\r\n/m', $allheaderlines, $matches);
+  list($multilines, $fieldnames, $fieldvalues) = $matches;
+  // concat long lines
+  preg_replace('/\r\n\s+/m', '', $fieldvalues);
+  // convert dashes to underscores
+  $fieldnames = str_replace('-', '_', $fieldnames);
+  // lowercase
+  $fieldnames = array_map('strtolower', $fieldnames);
+  // extract headers
+  $allheaders = array();
+  foreach($fieldnames as $i=>$name):
+    $allheaders[$name][] = $fieldvalues[$i];
+  endforeach;
+  $header = (object)((array)$header + $allheaders);
+  return True;
+}
+
+/**
  * Retrieve individual messages from an IMAP result
  * 
  * @param $result
@@ -265,6 +296,7 @@ function mailhandler_get_unread_messages($result) {
  */
 function mailhandler_retrieve_message($result, $mailbox, $i, $encoding) {
   $header = imap_header($result, imap_msgno($result, $i));
+  mailhandler_amend_header($header, $result, $i);
   // Initialize the subject in case it's missing.
   if (!isset($header->subject)) {
     $header->subject = '';
