#puts "building message #{doc[:message_id]} (#{source}##{doc[:source_info]})"
     raise "invalid source #{doc[:source_id]}" unless source
 
+    fake_header = {
+      "date" => Time.at(doc[:date].to_i),
+      "subject" => unwrap_subj(doc[:subject]),
+      "from" => doc[:from],
+      "to" => doc[:to],
+      "message-id" => doc[:message_id],
+      "references" => doc[:refs],
+    }
+
     m = 
       if source.broken?
         nil
         begin
           Message.new :source => source, :source_info => doc[:source_info].to_i, 
                       :labels => doc[:label].split(" ").map { |s| s.intern },
-                      :snippet => doc[:snippet]
+                      :snippet => doc[:snippet], :header => fake_header
         rescue MessageFormatError => e
           raise IndexError.new(source, "error building message #{doc[:message_id]} at #{source}/#{doc[:source_info]}: #{e.message}")
         rescue SourceError => e
       end
 
     unless m
-      fake_header = {
-        "date" => Time.at(doc[:date].to_i),
-        "subject" => unwrap_subj(doc[:subject]),
-        "from" => doc[:from],
-        "to" => doc[:to],
-        "message-id" => doc[:message_id],
-        "references" => doc[:refs],
-      }
-
       m = Message.new :labels => doc[:label].split(" ").map { |s| s.intern },
                       :snippet => doc[:snippet], :header => fake_header, 
                       :body => <<EOS