diff --git a/addressbook/gui/widgets/eab-contact-formatter.c b/addressbook/gui/widgets/eab-contact-formatter.c
index 60beefa..71f7275 100644
--- a/addressbook/gui/widgets/eab-contact-formatter.c
+++ b/addressbook/gui/widgets/eab-contact-formatter.c
@@ -747,7 +747,7 @@ render_normal (EABContactFormatter *formatter,
                GString *buffer)
 {
 	g_string_append (buffer, HTML_HEADER);
-	g_string_append (buffer, "<body bgcolor=\"white\">");
+	g_string_append (buffer,"<body class=\"-e-web-view-background-color -e-web-view-text-color\">");
 
 	if (contact != NULL) {
 		if (e_contact_get (contact, E_CONTACT_IS_LIST))
@@ -769,7 +769,7 @@ render_compact (EABContactFormatter *formatter,
 	EContactPhoto *photo;
 
 	g_string_append (buffer, HTML_HEADER);
-	g_string_append (buffer, "<body>\n");
+	g_string_append (buffer,"<body class=\"-e-web-view-background-color -e-web-view-text-color\">");
 
 	if (contact == NULL) {
 		g_string_append (buffer, "</body></html>");
diff --git a/calendar/gui/e-cal-component-preview.c b/calendar/gui/e-cal-component-preview.c
index ffaba3f..c96e064 100644
--- a/calendar/gui/e-cal-component-preview.c
+++ b/calendar/gui/e-cal-component-preview.c
@@ -205,8 +205,6 @@ cal_component_preview_write_html (ECalComponentPreview *preview,
 	icalproperty_status status;
 	const gchar *location;
 	gint *priority_value;
-	GtkStyle *style;
-	GtkStateType state;
 
 	client = preview->priv->client;
 	comp = preview->priv->comp;
@@ -216,14 +214,8 @@ cal_component_preview_write_html (ECalComponentPreview *preview,
 	/* write document header */
 	e_cal_component_get_summary (comp, &text);
 
-	style = gtk_widget_get_style (GTK_WIDGET (preview));
-	state = gtk_widget_get_state (GTK_WIDGET (preview));
-
 	g_string_append (buffer, HTML_HEADER);
-	g_string_append_printf (
-		buffer, "<body bgcolor=\"#%06x\" text=\"#%06x\">",
-		e_color_to_value (&style->base[state]),
-		e_color_to_value (&style->text[state]));
+	g_string_append (buffer, "<body class=\"-e-web-view-background-color -e-web-view-text-color\">");
 
 	if (text.value)
 		g_string_append_printf (buffer, "<h2>%s</h2>", text.value);
diff --git a/data/webview.css b/data/webview.css
index f28ed3d..9d381a8 100644
--- a/data/webview.css
+++ b/data/webview.css
@@ -14,7 +14,6 @@ body {
 
 th {
   text-align: left;
-  font-weight: normal;
   vertical-align: top;
 }
 
@@ -50,7 +49,6 @@ img.navigable {
 
 .part-container {
   height: 100%;
-  background: #FFF;
   margin-top: 2px;
   margin-bottom: 3px;
   border-width: 1px;
diff --git a/e-util/e-web-view.c b/e-util/e-web-view.c
index 4257152..38d88dd 100644
--- a/e-util/e-web-view.c
+++ b/e-util/e-web-view.c
@@ -564,6 +564,59 @@ web_view_navigation_policy_decision_requested_cb (EWebView *web_view,
 }
 
 static void
+style_updated_cb (EWebView *web_view)
+{
+	GdkRGBA color;
+	gchar *color_value;
+	gchar *style;
+	GtkStateFlags state_flags;
+	GtkStyleContext *style_context;
+	GtkWidgetPath *widget_path;
+
+	state_flags = gtk_widget_get_state_flags (GTK_WIDGET (web_view));
+	style_context = gtk_style_context_new ();
+	widget_path = gtk_widget_path_new ();
+	gtk_widget_path_append_type (widget_path, GTK_TYPE_WINDOW);
+	gtk_style_context_set_path (style_context, widget_path);
+	gtk_style_context_add_class (style_context, GTK_STYLE_CLASS_ENTRY);
+
+	gtk_style_context_get_background_color (
+		style_context,
+		state_flags | GTK_STATE_FLAG_FOCUSED,
+		&color);
+	color_value = g_strdup_printf ("#%06x", e_rgba_to_value (&color));
+	style = g_strconcat ("background-color: ", color_value, " ;", NULL);
+
+	e_web_view_add_css_rule_into_style_sheet (
+		web_view,
+		"-e-web-view-css-sheet",
+		".-e-web-view-background-color",
+		style);
+
+	g_free (color_value);
+	g_free (style);
+
+	gtk_style_context_get_color (
+		style_context,
+		state_flags | GTK_STATE_FLAG_FOCUSED,
+		&color);
+	color_value = g_strdup_printf ("#%06x", e_rgba_to_value (&color));
+	style = g_strconcat ("color: ", color_value, " ;", NULL);
+
+	e_web_view_add_css_rule_into_style_sheet (
+		web_view,
+		"-e-web-view-css-sheet",
+		".-e-web-view-text-color",
+		style);
+
+	gtk_widget_path_free (widget_path);
+	g_object_unref (style_context);
+
+	g_free (color_value);
+	g_free (style);
+}
+
+static void
 web_view_load_status_changed_cb (WebKitWebView *webkit_web_view,
                                  GParamSpec *pspec,
                                  gpointer user_data)
@@ -575,14 +628,17 @@ web_view_load_status_changed_cb (WebKitWebView *webkit_web_view,
 
 	status = webkit_web_view_get_load_status (webkit_web_view);
 
-	if (status == WEBKIT_LOAD_FINISHED) {
-		web_view_update_document_highlights (web_view);
+	if (status != WEBKIT_LOAD_FINISHED)
+       		return;
 
-		/* Workaround webkit bug:
-		 * https://bugs.webkit.org/show_bug.cgi?id=89553 */
-		e_web_view_zoom_in (web_view);
-		e_web_view_zoom_out (web_view);
-	}
+	style_updated_cb (web_view);
+
+	web_view_update_document_highlights (web_view);
+
+	/* Workaround webkit bug:
+	 * https://bugs.webkit.org/show_bug.cgi?id=89553 */
+	e_web_view_zoom_in (web_view);
+	e_web_view_zoom_out (web_view);
 }
 
 static void
@@ -1579,6 +1635,14 @@ e_web_view_init (EWebView *web_view)
 		web_view, "notify::load-status",
 		G_CALLBACK (web_view_load_status_changed_cb), NULL);
 
+	g_signal_connect (
+		web_view, "style-updated",
+		G_CALLBACK (style_updated_cb), NULL);
+
+	g_signal_connect (
+		web_view, "state-flags-changed",
+		G_CALLBACK (style_updated_cb), NULL);
+
 	ui_manager = gtk_ui_manager_new ();
 	web_view->priv->ui_manager = ui_manager;
 
@@ -1725,6 +1789,8 @@ e_web_view_init (EWebView *web_view)
 	id = "org.gnome.evolution.webview";
 	e_plugin_ui_register_manager (ui_manager, id, web_view);
 	e_plugin_ui_enable_manager (ui_manager, id);
+
+	e_web_view_clear (E_WEB_VIEW (web_view));
 }
 
 GtkWidget *
@@ -1736,21 +1802,15 @@ e_web_view_new (void)
 void
 e_web_view_clear (EWebView *web_view)
 {
-	GtkStyle *style;
-	gchar *html;
-
 	g_return_if_fail (E_IS_WEB_VIEW (web_view));
 
-	style = gtk_widget_get_style (GTK_WIDGET (web_view));
-
-	html = g_strdup_printf (
-		"<html><head></head><body bgcolor=\"#%06x\"></body></html>",
-		e_color_to_value (&style->base[GTK_STATE_NORMAL]));
-
 	webkit_web_view_load_html_string (
-		WEBKIT_WEB_VIEW (web_view), html, NULL);
-
-	g_free (html);
+		WEBKIT_WEB_VIEW (web_view),
+		"<html> \
+		 <head></head> \
+		 <body class=\"-e-web-view-background-color -e-web-view-text-color\"></body> \
+		 </html>",
+		 NULL);
 }
 
 void
@@ -3234,3 +3294,154 @@ e_web_view_install_request_handler (EWebView *web_view,
 	g_object_unref (feature);
 }
 
+static void
+create_and_add_css_style_sheet (WebKitDOMDocument *document,
+                                const gchar *style_sheet_id)
+{
+	WebKitDOMElement *style_element;
+
+	style_element = webkit_dom_document_get_element_by_id (document, style_sheet_id);
+
+	if (!style_element) {
+		/* Create new <style> element */
+		style_element = webkit_dom_document_create_element (document, "style", NULL);
+		webkit_dom_html_element_set_id (
+			WEBKIT_DOM_HTML_ELEMENT (style_element),
+			style_sheet_id);
+		webkit_dom_html_style_element_set_media (
+			WEBKIT_DOM_HTML_STYLE_ELEMENT (style_element),
+			"screen");
+		webkit_dom_node_append_child (
+			WEBKIT_DOM_NODE (style_element),
+			/* WebKit hack - we have to insert empty TextNode into style element */
+			WEBKIT_DOM_NODE (webkit_dom_document_create_text_node (document, "")),
+			NULL);
+
+		webkit_dom_node_append_child (
+			WEBKIT_DOM_NODE (webkit_dom_document_get_head (document)),
+			WEBKIT_DOM_NODE (style_element),
+			NULL);
+	}
+}
+
+static void
+add_css_rule_into_style_sheet (WebKitDOMDocument *document,
+                               const gchar *style_sheet_id,
+                               const gchar *selector,
+                               const gchar *style)
+{
+	WebKitDOMElement *style_element;
+	WebKitDOMStyleSheet *sheet;
+	WebKitDOMCSSRuleList *rules_list;
+	gint length, ii;
+
+	style_element = webkit_dom_document_get_element_by_id (document, style_sheet_id);
+
+	if (!style_element) {
+		create_and_add_css_style_sheet (document, style_sheet_id);
+		style_element = webkit_dom_document_get_element_by_id (document, style_sheet_id);
+	}
+
+	/* Get sheet that is associated with style element */
+	sheet = webkit_dom_html_style_element_get_sheet (WEBKIT_DOM_HTML_STYLE_ELEMENT (style_element));
+
+	rules_list = webkit_dom_css_style_sheet_get_css_rules (WEBKIT_DOM_CSS_STYLE_SHEET (sheet));
+	length = webkit_dom_css_rule_list_get_length (rules_list);
+
+	/* Check if rule exists */
+	for (ii = 0; ii < length; ii++) {
+		WebKitDOMCSSRule *rule;
+		const gchar *rule_text;
+
+		rule = webkit_dom_css_rule_list_item (rules_list, ii);
+
+		if (!WEBKIT_DOM_IS_CSS_RULE (rule))
+			continue;
+
+		rule_text = webkit_dom_css_rule_get_css_text (rule);
+
+		if (g_strstr_len (rule_text, -1, selector)) {
+			/* If exists remove it */
+			webkit_dom_css_style_sheet_remove_rule (
+				WEBKIT_DOM_CSS_STYLE_SHEET (sheet),
+				ii, NULL);
+		}
+	}
+
+	/* Insert the rule at the end, so it will override previously inserted */
+	webkit_dom_css_style_sheet_add_rule (
+		WEBKIT_DOM_CSS_STYLE_SHEET (sheet),
+		selector,
+		style,
+		webkit_dom_css_rule_list_get_length (
+			webkit_dom_css_style_sheet_get_css_rules (
+				WEBKIT_DOM_CSS_STYLE_SHEET (sheet))), /* Index */
+		NULL);
+}
+
+static void
+add_css_rule_into_style_sheet_recursive	(WebKitDOMDocument *document,
+                                         const gchar *style_sheet_id,
+                                         const gchar *selector,
+                                         const gchar *style)
+{
+	WebKitDOMNodeList *frames;
+	gint ii, length;
+
+	/* Add rule to document */
+	add_css_rule_into_style_sheet (
+		document,
+		style_sheet_id,
+		selector,
+		style);
+
+	frames = webkit_dom_document_query_selector_all (document, "iframe", NULL);
+	length = webkit_dom_node_list_get_length (frames);
+
+	/* Add rules to every sub document */
+	for (ii = 0; ii < length; ii++) {
+		WebKitDOMDocument *iframe_document;
+		WebKitDOMNode *node;
+
+		node = webkit_dom_node_list_item (frames, ii);
+		iframe_document = webkit_dom_html_iframe_element_get_content_document (
+			WEBKIT_DOM_HTML_IFRAME_ELEMENT (node));
+
+		add_css_rule_into_style_sheet_recursive (
+			iframe_document,
+			style_sheet_id,
+			selector,
+			style);
+	}
+}
+
+/**
+ * e_web_view_add_css_rule_into_style_sheet:
+ * @web_view: an #EWebView
+ * @style_sheet_id: CSS style sheet's id
+ * @selector: CSS selector
+ * @style: style for given selector
+ *
+ * Insert new CSS rule (defined with @selector and @style) into CSS style sheet
+ * with given @style_sheet_id. If style sheet doesn't exists, it's created.
+ *
+ * The rule is inserted to every DOM document that is in page. That means also into
+ * DOM documents inside iframe elements.
+ **/
+void
+e_web_view_add_css_rule_into_style_sheet (EWebView *view,
+                                          const gchar *style_sheet_id,
+                                          const gchar *selector,
+                                          const gchar *style)
+{
+	g_return_if_fail (E_IS_WEB_VIEW (view));
+	g_return_if_fail (style_sheet_id && *style_sheet_id);
+	g_return_if_fail (selector && *selector);
+	g_return_if_fail (style && *style);
+
+	add_css_rule_into_style_sheet_recursive (
+		webkit_web_view_get_dom_document (WEBKIT_WEB_VIEW (view)),
+		style_sheet_id,
+		selector,
+		style);
+}
diff --git a/e-util/e-web-view.h b/e-util/e-web-view.h
index 2f99b7a..51826a7 100644
--- a/e-util/e-web-view.h
+++ b/e-util/e-web-view.h
@@ -195,11 +195,14 @@ void		e_web_view_request		(EWebView *web_view,
 GInputStream *	e_web_view_request_finish	(EWebView *web_view,
 						 GAsyncResult *result,
 						 GError **error);
-
 void		e_web_view_install_request_handler
 						(EWebView *web_view,
 						 GType handler_type);
-
+void		e_web_view_add_css_rule_into_style_sheet
+						(EWebView *view,
+						 const gchar *style_sheet_id,
+						 const gchar *selector,
+						 const gchar *style);
 G_END_DECLS
 
 #endif /* E_WEB_VIEW_H */
diff --git a/em-format/e-mail-formatter-error.c b/em-format/e-mail-formatter-error.c
index 8669c11..f349283 100644
--- a/em-format/e-mail-formatter-error.c
+++ b/em-format/e-mail-formatter-error.c
@@ -59,24 +59,14 @@ emfe_error_format (EMailFormatterExtension *extension,
 	dw = camel_medium_get_content (CAMEL_MEDIUM (mime_part));
 
 	html = g_strdup_printf (
-		"<div class=\"part-container\" style=\""
-		"border-color: #%06x;"
-		"background-color: #%06x; color: #%06x;\">"
+		"<div class=\"part-container -e-mail-formatter-frame-color "
+	        "-e-mail-formatter-body-color -e-web-view-text-color\">"
 		"<div class=\"part-container-inner-margin pre\">\n"
 		"<table border=\"0\" cellspacing=\"10\" "
 		"cellpadding=\"0\" width=\"100%%\">\n"
 		"<tr valign=\"top\"><td width=50>"
 		"<img src=\"gtk-stock://%s/?size=%d\" /></td>\n"
 		"<td style=\"color: red;\">",
-		e_rgba_to_value (
-			e_mail_formatter_get_color (
-				formatter, E_MAIL_FORMATTER_COLOR_FRAME)),
-		e_rgba_to_value (
-			e_mail_formatter_get_color (
-				formatter, E_MAIL_FORMATTER_COLOR_BODY)),
-		e_rgba_to_value (
-			e_mail_formatter_get_color (
-				formatter, E_MAIL_FORMATTER_COLOR_TEXT)),
 		GTK_STOCK_DIALOG_ERROR, GTK_ICON_SIZE_DIALOG);
 
 	camel_stream_write_string (stream, html, cancellable, NULL);
diff --git a/em-format/e-mail-formatter-headers.c b/em-format/e-mail-formatter-headers.c
index e9f8870..3117bec 100644
--- a/em-format/e-mail-formatter-headers.c
+++ b/em-format/e-mail-formatter-headers.c
@@ -490,9 +490,6 @@ emfe_headers_format (EMailFormatterExtension *extension,
 {
 	CamelMimePart *mime_part;
 	GString *buffer;
-	const GdkRGBA white = { 1.0, 1.0, 1.0, 1.0 };
-	const GdkRGBA *body_rgba = &white;
-	const GdkRGBA *header_rgba;
 	const gchar *direction;
 	gboolean is_collapsable;
 	gboolean is_collapsed;
@@ -524,22 +521,15 @@ emfe_headers_format (EMailFormatterExtension *extension,
 
 	buffer = g_string_new ("");
 
-	if (context->mode != E_MAIL_FORMATTER_MODE_PRINTING)
-		body_rgba = e_mail_formatter_get_color (
-			formatter, E_MAIL_FORMATTER_COLOR_BODY);
-
-	header_rgba = e_mail_formatter_get_color (
-		formatter, E_MAIL_FORMATTER_COLOR_HEADER);
-
 	g_string_append_printf (
 		buffer,
-		"<div class=\"headers\" style=\"background: #%06x;\" id=\"%s\">"
-		"<table border=\"0\" width=\"100%%\" "
-		"style=\"color: #%06x; direction: %s\">"
+		"%s id=\"%s\"><table class=\"-e-mail-formatter-header-color\" border=\"0\" width=\"100%%\" "
+		"style=\"direction: %s\">"
 		"<tr>",
-		e_rgba_to_value (body_rgba),
+		(context->mode != E_MAIL_FORMATTER_MODE_PRINTING) ?
+			"<div class=\"headers -e-mail-formatter-body-color\"" :
+			"<div class=\"headers\" style=\"background-color: #ffffff;\"",
 		e_mail_part_get_id (part),
-		e_rgba_to_value (header_rgba),
 		direction);
 
 	if (is_collapsable)
diff --git a/em-format/e-mail-formatter-message-rfc822.c b/em-format/e-mail-formatter-message-rfc822.c
index 0477e61..6b9f4ee 100644
--- a/em-format/e-mail-formatter-message-rfc822.c
+++ b/em-format/e-mail-formatter-message-rfc822.c
@@ -221,18 +221,12 @@ emfe_message_rfc822_format (EMailFormatterExtension *extension,
 			NULL);
 
 		str = g_strdup_printf (
-			"<div class=\"part-container\" style=\"border-color: #%06x; "
-			"background-color: #%06x;\">\n"
+			"<div class=\"part-container -e-mail-formatter-frame-color "
+			"-e-mail-formatter-body-color\">\n"
 			"<iframe width=\"100%%\" height=\"10\""
 			" id=\"%s.iframe\" "
 			" frameborder=\"0\" src=\"%s\" name=\"%s\"></iframe>"
 			"</div>",
-			e_rgba_to_value (
-				e_mail_formatter_get_color (
-					formatter, E_MAIL_FORMATTER_COLOR_FRAME)),
-			e_rgba_to_value (
-				e_mail_formatter_get_color (
-					formatter, E_MAIL_FORMATTER_COLOR_BODY)),
 			part_id, uri, part_id);
 
 		camel_stream_write_string (stream, str, cancellable, NULL);
diff --git a/em-format/e-mail-formatter-source.c b/em-format/e-mail-formatter-source.c
index 944f9a4..12eaa4a 100644
--- a/em-format/e-mail-formatter-source.c
+++ b/em-format/e-mail-formatter-source.c
@@ -70,31 +70,16 @@ emfe_source_format (EMailFormatterExtension *extension,
 	buffer = g_string_new ("");
 
 	if (CAMEL_IS_MIME_MESSAGE (mime_part)) {
-		g_string_append_printf (
+		g_string_append (
 			buffer,
-			"<div class=\"part-container\" "
-			"style=\"border: 0; background: #%06x; color: #%06x;\" >",
-			e_rgba_to_value (
-				e_mail_formatter_get_color (
-					formatter, E_MAIL_FORMATTER_COLOR_BODY)),
-			e_rgba_to_value (
-				e_mail_formatter_get_color (
-					formatter, E_MAIL_FORMATTER_COLOR_TEXT)));
+			"<div class=\"part-container -e-mail-formatter-body-color "
+			"-e-web-view-text-color\" style=\"border: 0;\" >");
 	} else {
-		g_string_append_printf (
+		g_string_append (
 			buffer,
-			"<div class=\"part-container\" "
-			"style=\"border-color: #%06x; background: #%06x; color: #%06x;\">"
-			"<div class=\"part-container-inner-margin pre\">\n",
-			e_rgba_to_value (
-				e_mail_formatter_get_color (
-					formatter, E_MAIL_FORMATTER_COLOR_FRAME)),
-			e_rgba_to_value (
-				e_mail_formatter_get_color (
-					formatter, E_MAIL_FORMATTER_COLOR_BODY)),
-			e_rgba_to_value (
-				e_mail_formatter_get_color (
-					formatter, E_MAIL_FORMATTER_COLOR_TEXT)));
+			"<div class=\"part-container -e-mail-formatter-body-color "
+			" -e-web-view-text-color -e-mail-formatter-frame-color\">"
+			"<div class=\"part-container-inner-margin pre\">\n");
 	}
 
 	camel_stream_write_string (
diff --git a/em-format/e-mail-formatter-text-enriched.c b/em-format/e-mail-formatter-text-enriched.c
index 6c3b033..168522e 100644
--- a/em-format/e-mail-formatter-text-enriched.c
+++ b/em-format/e-mail-formatter-text-enriched.c
@@ -73,17 +73,11 @@ emfe_text_enriched_format (EMailFormatterExtension *extension,
 
 	buffer = g_string_new ("");
 
-	g_string_append_printf (
+	g_string_append (
 		buffer,
-		"<div class=\"part-container\" style=\"border-color: #%06x; "
-		"background-color: #%06x; color: #%06x;\">"
-		"<div class=\"part-container-inner-margin\">\n",
-		e_rgba_to_value (
-			e_mail_formatter_get_color (formatter, E_MAIL_FORMATTER_COLOR_FRAME)),
-		e_rgba_to_value (
-			e_mail_formatter_get_color (formatter, E_MAIL_FORMATTER_COLOR_CONTENT)),
-		e_rgba_to_value (
-			e_mail_formatter_get_color (formatter, E_MAIL_FORMATTER_COLOR_TEXT)));
+		"<div class=\"part-container -e-mail-formatter-frame-color "
+	        "-e-web-view-background-color -e-web-view-text-color\">"
+		"<div class=\"part-container-inner-margin\">\n");
 
 	camel_stream_write_string (stream, buffer->str, cancellable, NULL);
 	g_string_free (buffer, TRUE);
diff --git a/em-format/e-mail-formatter-text-html.c b/em-format/e-mail-formatter-text-html.c
index 0a58111..8ff7564 100644
--- a/em-format/e-mail-formatter-text-html.c
+++ b/em-format/e-mail-formatter-text-html.c
@@ -328,15 +328,15 @@ emfe_text_html_format (EMailFormatterExtension *extension,
 			"<iframe width=\"100%%\" height=\"10\" "
 			" frameborder=\"0\" src=\"%s\" "
 			" id=\"%s.iframe\" name=\"%s\" "
-			" style=\"border: 1px solid #%06x; background-color: #ffffff;\">"
+			" class=\"-e-mail-formatter-frame-color "
+			" -e-web-view-background-color "
+			" -e-web-view-text-color\" "
+			" style=\"border: 1px solid;\">"
 			"</iframe>"
 			"</div>",
 			uri,
 			e_mail_part_get_id (part),
-			e_mail_part_get_id (part),
-			e_rgba_to_value (
-				e_mail_formatter_get_color (
-					formatter, E_MAIL_FORMATTER_COLOR_FRAME)));
+			e_mail_part_get_id (part));
 
 		camel_stream_write_string (stream, str, cancellable, NULL);
 
diff --git a/em-format/e-mail-formatter-text-plain.c b/em-format/e-mail-formatter-text-plain.c
index 638f011..9d8c766 100644
--- a/em-format/e-mail-formatter-text-plain.c
+++ b/em-format/e-mail-formatter-text-plain.c
@@ -70,10 +70,11 @@ emfe_text_plain_format (EMailFormatterExtension *extension,
 		CamelDataWrapper *dw;
 
 		if (context->mode == E_MAIL_FORMATTER_MODE_RAW) {
-			gchar *header;
-			header = e_mail_formatter_get_html_header (formatter);
-			camel_stream_write_string (stream, header, cancellable, NULL);
-			g_free (header);
+			camel_stream_write_string (
+				stream,
+				e_mail_formatter_get_sub_html_header (formatter),
+				cancellable,
+				NULL);
 
 			/* No need for body margins within <iframe> */
 			camel_stream_write_string (
@@ -107,16 +108,10 @@ emfe_text_plain_format (EMailFormatterExtension *extension,
 			CAMEL_STREAM_FILTER (filtered_stream), html_filter);
 		g_object_unref (html_filter);
 
-		content = g_strdup_printf (
-			"<div class=\"part-container pre\" style=\""
-			"border: none; padding: 8px; margin: 0; "
-			"background-color: #%06x; color: #%06x;\">\n",
-			e_rgba_to_value (
-				e_mail_formatter_get_color (
-					formatter, E_MAIL_FORMATTER_COLOR_CONTENT)),
-			e_rgba_to_value (
-				e_mail_formatter_get_color (
-					formatter, E_MAIL_FORMATTER_COLOR_TEXT)));
+		content = g_strdup (
+			"<div class=\"part-container pre "
+			"-e-mail-formatter-content-color -e-web-view-text-color\" "
+			"style=\"border: none; padding: 8px; margin: 0;\">");
 
 		camel_stream_write_string (stream, content, cancellable, NULL);
 		e_mail_formatter_format_text (formatter, part, filtered_stream, cancellable);
@@ -166,18 +161,14 @@ emfe_text_plain_format (EMailFormatterExtension *extension,
 			"<iframe width=\"100%%\" height=\"10\""
 			" id=\"%s.iframe\" name=\"%s\" "
 			" frameborder=\"0\" src=\"%s\" "
-			" style=\"border: 1px solid #%06x; background-color: #%06x;\">"
+			" class=\"-e-mail-formatter-frame-color "
+			"-e-web-view-background-color -e-web-view-text-color\" "
+			" style=\"border: 1px solid;\">"
 			"</iframe>"
 			"</div>",
 			e_mail_part_get_id (part),
 			e_mail_part_get_id (part),
-			uri,
-			e_rgba_to_value (
-				e_mail_formatter_get_color (
-					formatter, E_MAIL_FORMATTER_COLOR_FRAME)),
-			e_rgba_to_value (
-				e_mail_formatter_get_color (
-					formatter, E_MAIL_FORMATTER_COLOR_CONTENT)));
+			uri);
 
 		camel_stream_write_string (stream, str, cancellable, NULL);
 
diff --git a/em-format/e-mail-formatter.c b/em-format/e-mail-formatter.c
index f3f0967..e69ee80 100644
--- a/em-format/e-mail-formatter.c
+++ b/em-format/e-mail-formatter.c
@@ -1105,10 +1105,27 @@ e_mail_formatter_format_text (EMailFormatter *formatter,
 	g_object_unref (mime_part);
 }
 
+const gchar *
+e_mail_formatter_get_sub_html_header (EMailFormatter *formatter)
+{
+	return  "<!DOCTYPE HTML>\n"
+		"<html>\n"
+		"<head>\n"
+		"<meta name=\"generator\" content=\"Evolution Mail\"/>\n"
+		"<title>Evolution Mail Display</title>\n"
+		"<link type=\"text/css\" rel=\"stylesheet\" "
+		"      href=\"" STYLESHEET_URI "\"/>\n"
+		"<style type=\"text/css\">\n"
+		"  table th { font-weight: bold; }\n"
+		"</style>\n"
+		"</head>"
+		"<body class=\"-e-web-view-background-color -e-web-view-text-color\">";
+}
+
 gchar *
 e_mail_formatter_get_html_header (EMailFormatter *formatter)
 {
-	return g_strdup_printf (
+	return g_strdup (
 		"<!DOCTYPE HTML>\n"
 		"<html>\n"
 		"<head>\n"
@@ -1117,19 +1134,11 @@ e_mail_formatter_get_html_header (EMailFormatter *formatter)
 		"<link type=\"text/css\" rel=\"stylesheet\" "
 		"      href=\"" STYLESHEET_URI "\"/>\n"
 		"<style type=\"text/css\">\n"
-		"  table th { color: #%06x; font-weight: bold; }\n"
+		"  table th { font-weight: bold; }\n"
 		"</style>\n"
 		"</head>"
-		"<body bgcolor=\"#%06x\" text=\"#%06x\">",
-		e_rgba_to_value (
-			e_mail_formatter_get_color (
-				formatter, E_MAIL_FORMATTER_COLOR_HEADER)),
-		e_rgba_to_value (
-			e_mail_formatter_get_color (
-				formatter, E_MAIL_FORMATTER_COLOR_BODY)),
-		e_rgba_to_value (
-			e_mail_formatter_get_color (
-				formatter, E_MAIL_FORMATTER_COLOR_TEXT)));
+		"<body class=\"-e-mail-formatter-body-color "
+		"      -e-web-view-background-color -e-web-view-text-color\">");
 }
 
 EMailExtensionRegistry *
diff --git a/em-format/e-mail-formatter.h b/em-format/e-mail-formatter.h
index 9405789..5c9d6ff 100644
--- a/em-format/e-mail-formatter.h
+++ b/em-format/e-mail-formatter.h
@@ -125,6 +125,8 @@ void		e_mail_formatter_format_text	(EMailFormatter *formatter,
 						 EMailPart *part,
 						 CamelStream *stream,
 						 GCancellable *cancellable);
+const gchar *	e_mail_formatter_get_sub_html_header
+						(EMailFormatter *formatter);
 gchar *		e_mail_formatter_get_html_header
 						(EMailFormatter *formatter);
 EMailExtensionRegistry *
diff --git a/mail/e-mail-display.c b/mail/e-mail-display.c
index 9343ac0..8f9aa16 100644
--- a/mail/e-mail-display.c
+++ b/mail/e-mail-display.c
@@ -832,6 +832,59 @@ toggle_address_visibility (WebKitDOMElement *button,
 }
 
 static void
+add_color_css_rule_for_web_view (EWebView *view,
+				 const char *color_name,
+				 const char *color_value)
+{
+	gchar *selector;
+	gchar *style;
+
+	selector = g_strconcat (".-e-mail-formatter-", color_name, NULL);
+
+	if (g_strstr_len (color_name, -1, "header"))
+		style = g_strconcat ("color: ", color_value, " !important;", NULL);
+	else if (g_strstr_len (color_name, -1, "frame"))
+		style = g_strconcat ("border-color: ", color_value, " !important;", NULL);
+	else
+		style = g_strconcat ("background-color: ", color_value, " !important;", NULL);
+
+	e_web_view_add_css_rule_into_style_sheet (
+		view,
+		"-e-mail-formatter-style-sheet",
+		selector,
+		style);
+
+	g_free (style);
+	g_free (selector);
+}
+
+static void
+initialize_web_view_colors (EMailDisplay *display)
+{
+	EMailFormatter *formatter;
+	const gchar *color_names [] = { "body-color", "citation-color",
+					"frame-color", "header-color", NULL };
+	gint ii;
+
+	formatter = e_mail_display_get_formatter (display);
+
+	for (ii = 0; color_names[ii]; ii++) {
+		GdkRGBA *color;
+		gchar *color_value;
+
+		g_object_get (formatter, color_names[ii], &color, NULL);
+		color_value = g_strdup_printf ("#%06x", e_rgba_to_value (color));
+
+		add_color_css_rule_for_web_view (
+			E_WEB_VIEW (display),
+			color_names[ii],
+			color_value);
+
+		g_free (color_value);
+	}
+}
+
+static void
 setup_dom_bindings (GObject *object,
                     GParamSpec *pspec,
                     gpointer user_data)
@@ -943,6 +996,8 @@ mail_parts_bind_dom (GObject *object,
 
 	while (!g_queue_is_empty (&queue))
 		g_object_unref (g_queue_pop_head (&queue));
+
+	initialize_web_view_colors (display);
 }
 
 static void
@@ -1535,6 +1590,29 @@ e_mail_display_init (EMailDisplay *display)
 	}
 }
 
+static void
+e_mail_display_update_colors (EMailDisplay *display,
+                              GParamSpec *param_spec,
+                              EMailFormatter *formatter)
+{
+	GdkRGBA *color;
+	gchar *color_value;
+
+	g_return_if_fail (E_IS_MAIL_DISPLAY (display));
+	g_return_if_fail (E_IS_MAIL_FORMATTER (formatter));
+
+	g_object_get (formatter, param_spec->name, &color, NULL);
+
+	color_value = g_strdup_printf ("#%06x", e_rgba_to_value (color));
+
+	add_color_css_rule_for_web_view (
+		E_WEB_VIEW (display),
+		param_spec->name,
+		color_value);
+
+	g_free (color_value);
+}
+
 GtkWidget *
 e_mail_display_new (void)
 {
@@ -1592,18 +1670,14 @@ e_mail_display_set_mode (EMailDisplay *display,
 			G_CALLBACK (e_mail_display_reload), display,
 		"swapped-object-signal::notify::animate-images",
 			G_CALLBACK (e_mail_display_reload), display,
-		"swapped-object-signal::notify::text-color",
-			G_CALLBACK (e_mail_display_reload), display,
 		"swapped-object-signal::notify::body-color",
-			G_CALLBACK (e_mail_display_reload), display,
+			G_CALLBACK (e_mail_display_update_colors), display,
 		"swapped-object-signal::notify::citation-color",
-			G_CALLBACK (e_mail_display_reload), display,
-		"swapped-object-signal::notify::content-color",
-			G_CALLBACK (e_mail_display_reload), display,
+			G_CALLBACK (e_mail_display_update_colors), display,
 		"swapped-object-signal::notify::frame-color",
-			G_CALLBACK (e_mail_display_reload), display,
+			G_CALLBACK (e_mail_display_update_colors), display,
 		"swapped-object-signal::notify::header-color",
-			G_CALLBACK (e_mail_display_reload), display,
+			G_CALLBACK (e_mail_display_update_colors), display,
 		"swapped-object-signal::need-redraw",
 			G_CALLBACK (e_mail_display_reload), display,
 		NULL);
diff --git a/modules/text-highlight/e-mail-formatter-text-highlight.c b/modules/text-highlight/e-mail-formatter-text-highlight.c
index de1d89b..b387408 100644
--- a/modules/text-highlight/e-mail-formatter-text-highlight.c
+++ b/modules/text-highlight/e-mail-formatter-text-highlight.c
@@ -333,19 +333,14 @@ emfe_text_highlight_format (EMailFormatterExtension *extension,
 			"<div class=\"part-container-nostyle\" >"
 			"<iframe width=\"100%%\" height=\"10\""
 			" id=\"%s\" name=\"%s\" "
+			" class=\"-e-mail-formatter-frame-color -e-web-view-background-color\" "
 			" frameborder=\"0\" src=\"%s\" "
-			" style=\"border: 1px solid #%06x; background-color: #%06x;\">"
+			" style=\"border: 1px solid;\">"
 			"</iframe>"
 			"</div>",
 			e_mail_part_get_id (part),
 			e_mail_part_get_id (part),
-			uri,
-			e_rgba_to_value (
-				e_mail_formatter_get_color (
-					formatter, E_MAIL_FORMATTER_COLOR_FRAME)),
-			e_rgba_to_value (
-				e_mail_formatter_get_color (
-					formatter, E_MAIL_FORMATTER_COLOR_CONTENT)));
+			uri);
 
 		camel_stream_write_string (stream, str, cancellable, NULL);
 
