diff --git a/mail/e-mail-display.c b/mail/e-mail-display.c
index c0c96b5..2a401d8 100644
--- a/mail/e-mail-display.c
+++ b/mail/e-mail-display.c
@@ -292,7 +292,8 @@ mail_display_link_clicked (GtkHTML *html,
 				flags |= EM_FORMAT_HTML_HEADER_BCC;
 			else
 				flags &= ~EM_FORMAT_HTML_HEADER_BCC;
-		}
+		} else if (strcmp (uri, "##HEADERS##") == 0)
+			priv->formatter->collapse_headers = !priv->formatter->collapse_headers;
 
 		priv->formatter->header_wrap_flags = flags;
 		em_format_queue_redraw (EM_FORMAT (priv->formatter));
diff --git a/mail/em-format-html-display.c b/mail/em-format-html-display.c
index b0cb833..a4064e0 100644
--- a/mail/em-format-html-display.c
+++ b/mail/em-format-html-display.c
@@ -686,6 +686,8 @@ efhd_init (EMFormatHTMLDisplay *efhd)
 	e_mail_display_set_formatter (
 		E_MAIL_DISPLAY (web_view), EM_FORMAT_HTML (efhd));
 
+	EM_FORMAT_HTML (efhd)->collapse_headers = FALSE;
+
 	/* we want to convert url's etc */
 	EM_FORMAT_HTML (efhd)->text_html_flags |=
 		CAMEL_MIME_FILTER_TOHTML_CONVERT_URLS |
diff --git a/mail/em-format-html.c b/mail/em-format-html.c
index a5f485e..9d06a78 100644
--- a/mail/em-format-html.c
+++ b/mail/em-format-html.c
@@ -2692,6 +2692,7 @@ efh_format_headers (EMFormatHTML *efh,
 	gchar *header_sender = NULL, *header_from = NULL, *name;
 	gboolean mail_from_delegate = FALSE;
 	const gchar *hdr_charset;
+	const gchar *evolution_imagesdir =  g_filename_to_uri (EVOLUTION_IMAGESDIR, NULL, NULL);
 
 	if (!part)
 		return;
@@ -2700,6 +2701,44 @@ efh_format_headers (EMFormatHTML *efh,
 	charset = camel_content_type_param (ct, "charset");
 	charset = camel_iconv_charset_name (charset);
 
+	hdr_charset = emf->charset ? emf->charset : emf->default_charset;
+
+	header = ((CamelMimePart *)part)->headers;
+
+	/* If the header is collapsed, display just subject and sender in one row and leave */
+	if (efh->collapse_headers)
+	{
+		gchar *subject;
+		struct _camel_header_address *addrs;
+		GString *from = g_string_new ("");
+
+		while (header)
+		{
+			if (!g_ascii_strcasecmp (header->name, "From")) {
+				if (!(addrs = camel_header_address_decode (header->value, hdr_charset)))
+					return;
+				efh_format_address (efh, from, addrs, header->name);
+			} else if (!g_ascii_strcasecmp (header->name, "Subject")) {
+				gchar *buf = NULL;
+			        buf = camel_header_unfold (header->value);
+			        subject = camel_header_decode_string (buf, hdr_charset);
+			        g_free (buf);
+			}
+			header = header->next;
+		}
+
+		camel_stream_printf (stream, "<tr><td><a href=\"##HEADERS##\"><img src=\"%s/plus.png\"></a></td><td><strong>%s</strong> (From: %s)</td></tr>",
+				evolution_imagesdir,  subject, from->str);
+
+		g_free (subject);
+		g_free (header);
+		if (addrs)
+			camel_header_address_list_clear (&addrs);
+		g_string_free (from, TRUE);
+
+		return;
+	}
+
 	if (!efh->simple_headers)
 		camel_stream_printf (
 			stream, "<font color=\"#%06x\">\n"
@@ -2708,9 +2747,6 @@ efh_format_headers (EMFormatHTML *efh,
 				&efh->priv->colors[
 				EM_FORMAT_HTML_COLOR_HEADER]));
 
-	hdr_charset = emf->charset ? emf->charset : emf->default_charset;
-
-	header = ((CamelMimePart *)part)->headers;
 	while (header) {
 		if (!g_ascii_strcasecmp (header->name, "Sender")) {
 			struct _camel_header_address *addrs;
@@ -2770,9 +2806,11 @@ efh_format_headers (EMFormatHTML *efh,
 	g_free (header_from);
 
 	if (gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL)
-		camel_stream_printf (stream, "<tr><td><table width=\"100%%\" border=0 cellpadding=\"0\">\n");
+		camel_stream_printf (stream, "<tr><td valign=\"top\" width=\"20\"><a href=\"##HEADERS##\"><img src=\"%s/minus.png\"></a></td><td><table width=\"100%%\" border=0 cellpadding=\"0\">\n",
+			evolution_imagesdir);
 	else
-		camel_stream_printf (stream, "<tr><td><table border=0 cellpadding=\"0\">\n");
+		camel_stream_printf (stream, "<tr><td valign=\"top\" width=\"20\"><a href=\"##HEADERS##\"><img src=\"%s/minus.png\"></a></td><td><table border=0 cellpadding=\"0\">\n",
+			evolution_imagesdir);
 
 	/* dump selected headers */
 	if (emf->mode == EM_FORMAT_MODE_ALLHEADERS) {
diff --git a/mail/em-format-html.h b/mail/em-format-html.h
index 01d7b02..103bc87 100644
--- a/mail/em-format-html.h
+++ b/mail/em-format-html.h
@@ -204,6 +204,7 @@ struct _EMFormatHTML {
 	guint hide_headers:1; /* no headers at all */
 	guint show_icon:1; /* show an icon when the sender used Evo */
 	guint32 header_wrap_flags;
+	gboolean collapse_headers;
 
 	EMFormatHTMLState state; /* actual state of the object */
 };
