Index: mail/em-filter-i18n.h
===================================================================
--- mail/em-filter-i18n.h	(revision 35468)
+++ mail/em-filter-i18n.h	(working copy)
@@ -49,7 +49,6 @@
 char *s = N_("Move to Folder");
 char *s = N_("Pipe to Program");
 char *s = N_("Play Sound");
-/* Translators: "Read" as in "has been read" (em-filter-i18n.h) */
 char *s = N_("Read");
 char *s = N_("Recipients");
 char *s = N_("Regex Match");
Index: widgets/table/e-cell-tree.c
===================================================================
--- widgets/table/e-cell-tree.c	(revision 35468)
+++ widgets/table/e-cell-tree.c	(working copy)
@@ -251,7 +251,6 @@
 	ETreePath node;
 	GdkRectangle rect, *clip_rect = NULL;
 	GtkWidget *canvas = GTK_WIDGET (tree_view->canvas);
-	GdkGC *fg_gc = canvas->style->fg_gc[GTK_STATE_ACTIVE];
 	GdkColor *foreground;
 	gboolean selected;
 
@@ -292,7 +291,6 @@
 		rect.height = y2 - y1;
 
 		gdk_gc_set_clip_rectangle (tree_view->gc, &rect);
-		gdk_gc_set_clip_rectangle (fg_gc, &rect);
 		clip_rect = &rect;
 
 		if (selected) {
@@ -385,7 +383,6 @@
 
 	if (clip_rect) {
 		gdk_gc_set_clip_rectangle (tree_view->gc, NULL);
-		gdk_gc_set_clip_rectangle (fg_gc, NULL);
 	}
 }
 
Index: widgets/table/e-table-item.c
===================================================================
--- widgets/table/e-table-item.c	(revision 35468)
+++ widgets/table/e-table-item.c	(working copy)
@@ -47,6 +47,7 @@
 #include "e-cell.h"
 #include "e-table-item.h"
 #include "e-table-subset.h"
+#include "e-tree.h"
 
 /* workaround for avoiding API breakage */
 #define eti_get_type e_table_item_get_type
@@ -301,9 +302,9 @@
 
 	if (selected){
 		if (GTK_WIDGET_HAS_FOCUS (canvas))
-			foreground = &canvas->style->fg [GTK_STATE_SELECTED];
+			foreground = &canvas->style->text [GTK_STATE_SELECTED];
 		else
-			foreground = &canvas->style->fg [GTK_STATE_ACTIVE];
+			foreground = &canvas->style->text [GTK_STATE_ACTIVE];
 	} else {
 		foreground = &canvas->style->text [GTK_STATE_NORMAL];
 	}
@@ -1830,10 +1831,7 @@
 	ArtPoint eti_base, eti_base_item, lower_right;
 	GtkWidget *canvas = GTK_WIDGET(item->canvas);
 	int height_extra = eti->horizontal_draw_grid ? 1 : 0;
-	cairo_t *cr;
 
-	cr = gdk_cairo_create (drawable);
-
 	/*
 	 * Find out our real position after grouping
 	 */
@@ -1872,7 +1870,7 @@
 	 * Nothing to paint
 	 */
 	if (first_col == -1)
-		goto exit;
+		return;
 
 	/*
 	 * Compute row span.
@@ -1881,7 +1879,7 @@
 		first_row = (y          - floor (eti_base.y) - height_extra) / (eti_row_height (eti, -1) + height_extra);
 		last_row  = (y + height - floor (eti_base.y)               ) / (eti_row_height (eti, -1) + height_extra) + 1;
 		if (first_row > last_row)
-			goto exit;
+			return;
 		y_offset = floor (eti_base.y) - y + height_extra + first_row * (eti_row_height (eti, -1) + height_extra);
 		if (first_row < 0)
 			first_row = 0;
@@ -1912,11 +1910,11 @@
 		last_row = row;
 
 		if (first_row == -1)
-			goto exit;
+			return;
 	}
 
 	if (first_row == -1)
-		goto exit;
+		return;
 
 	/*
 	 * Draw cells
@@ -1957,8 +1955,8 @@
 			ECellFlags flags;
 			gboolean free_background;
 			GdkColor *background;
-			int x1, x2, y1, y2;
-			cairo_pattern_t *pat;
+			const char *detail = NULL;
+			GtkWidget *widget = NULL;
 
 			switch (eti->cursor_mode) {
 			case E_CURSOR_SIMPLE:
@@ -1973,55 +1971,19 @@
 				break;
 			}
 
-			x1 = xd;
-			y1 = yd+1;
-			x2 = x1 + ecol->width;
-			y2 = yd+height;
+			if (eti->alternating_row_colors) {
+				detail = row % 2 ? "cell_even_ruled" : "cell_odd_ruled";
+			}
+			else {
+				detail = row % 2 ? "cell_even" : "cell_odd";
+			}
 
-			background = eti_get_cell_background_color (eti, row, col, col_selected, &free_background);
+			widget = gtk_widget_get_parent (canvas);
+			if (!E_IS_TREE(widget))
+				widget = canvas;
+			gtk_paint_flat_box (widget->style, drawable, selected ? GTK_STATE_SELECTED : GTK_STATE_NORMAL,
+			                    GTK_SHADOW_NONE, NULL, widget, detail, xd, yd, ecol->width, height);
 
-			cairo_save (cr);
-			pat = cairo_pattern_create_linear (0, y1, 0, y2);
-			cairo_pattern_add_color_stop_rgba (pat, 0.0, background->red/65535.0 , 
-								     background->green/65535.0, 
-								     background->blue/65535.0, selected ? 0.8: 1.0);
-			if (selected)
-				cairo_pattern_add_color_stop_rgba (pat, 0.5, background->red/65535.0 , 
-									     background->green/65535.0, 
-									     background->blue/65535.0, 0.9);
-
-			cairo_pattern_add_color_stop_rgba (pat, 1, background->red/65535.0 , 
-								   background->green/65535.0, 
-								   background->blue/65535.0, selected ? 0.8 : 1.0);
-			cairo_rectangle (cr, x1, y1, ecol->width, height-1);
-			cairo_set_source (cr, pat);
-			cairo_fill_preserve (cr);
-			cairo_pattern_destroy (pat);
-			cairo_set_line_width (cr, 0);
-			cairo_stroke (cr);
-			cairo_restore (cr);
-
-			cairo_save (cr);
-			cairo_set_line_width (cr, 1.0);
-			cairo_set_source_rgba (cr, background->red/65535.0 , 
-						   background->green/65535.0, 
-						   background->blue/65535.0, 1);
-			cairo_move_to (cr, x1, y1);
-			cairo_line_to (cr, x2, y1);
-			cairo_stroke (cr);
-
-			cairo_set_line_width (cr, 1.0);
-			cairo_set_source_rgba (cr, background->red/65535.0 , 
-						  background->green/65535.0, 
-						  background->blue/65535.0, 1);
-			cairo_move_to (cr, x1, y2);
-			cairo_line_to (cr, x2, y2);
-			cairo_stroke (cr);
-			cairo_restore (cr); 
-			
-			if (free_background)
-				gdk_color_free (background);
-
 			flags = col_selected ? E_CELL_SELECTED : 0;
 			flags |= GTK_WIDGET_HAS_FOCUS(canvas) ? E_CELL_FOCUSED : 0;
 			flags |= cursor ? E_CELL_CURSOR : 0;
@@ -2040,7 +2002,6 @@
 				flags |= E_CELL_JUSTIFY_FILL;
 				break;
 			}
-
 			e_cell_draw (ecell_view, drawable, ecol->col_idx, col, row, flags,
 				     xd, yd, xd + ecol->width, yd + height);
 
@@ -2107,9 +2068,6 @@
 		gdk_draw_rectangle (drawable, eti->focus_gc, FALSE,
 				    f_x1, f_y1, f_x2 - f_x1 - 1, f_y2 - f_y1);
 	}
-
-exit:
-	cairo_destroy (cr);
 }
 
 static double
Index: widgets/table/e-tree.c
===================================================================
--- widgets/table/e-tree.c	(revision 35468)
+++ widgets/table/e-tree.c	(working copy)
@@ -29,6 +29,7 @@
 
 #include <gdk/gdkkeysyms.h>
 #include <gtk/gtk.h>
+#include <gtk/gtkprivate.h>
 #include <libgnomecanvas/gnome-canvas-rect-ellipse.h>
 
 #include "a11y/e-table/gal-a11y-e-tree.h"
@@ -3373,6 +3374,20 @@
 					     10,
 					     G_PARAM_READABLE));
 
+	gtk_widget_class_install_style_property (widget_class,
+						 g_param_spec_boxed ("even-row-color",
+								     _("Even Row Color"),
+								     _("Color to use for even rows"),
+								     GDK_TYPE_COLOR,
+								     GTK_PARAM_READABLE));
+
+	gtk_widget_class_install_style_property (widget_class,
+						 g_param_spec_boxed ("odd-row-color",
+								     _("Odd Row Color"),
+								     _("Color to use for odd rows"),
+								     GDK_TYPE_COLOR,
+								     GTK_PARAM_READABLE));
+
 	gal_a11y_e_tree_init ();
 }
 
Index: widgets/table/e-cell-text.c
===================================================================
--- widgets/table/e-cell-text.c	(revision 35468)
+++ widgets/table/e-cell-text.c	(working copy)
@@ -742,9 +742,9 @@
 
 	if (selected) {
 		if (GTK_WIDGET_HAS_FOCUS (canvas))
-			foreground = &canvas->style->fg [GTK_STATE_SELECTED];
+			foreground = &canvas->style->text [GTK_STATE_SELECTED];
 		else
-			foreground = &canvas->style->fg [GTK_STATE_ACTIVE];
+			foreground = &canvas->style->text [GTK_STATE_ACTIVE];
 	} else {
 		foreground = &canvas->style->text [GTK_STATE_NORMAL];
 
