diff --git a/plugins/fn-string/functions.c b/plugins/fn-string/functions.c
index c659409..2f941f5 100644
--- a/plugins/fn-string/functions.c
+++ b/plugins/fn-string/functions.c
@@ -949,7 +949,7 @@ gnumeric_text (GnmFuncEvalInfo *ei, GnmValue const * const *argv)
 		GOFormatNumberError err;
 
 		g_free (lfmt);
-		err = format_value_gstring (str, fmt, v, NULL, -1, conv);
+		err = format_value_gstring (str, NULL, fmt, v, -1, conv);
 		if (err) {
 			g_string_free (str, TRUE);
 			res = value_new_error_VALUE (ei->pos);
diff --git a/src/clipboard.c b/src/clipboard.c
index 184b809..1c283ac 100644
--- a/src/clipboard.c
+++ b/src/clipboard.c
@@ -1021,8 +1021,8 @@ cellregion_to_string (GnmCellRegion const *cr,
 				    VALUE_FMT (cc->val))
 					fmt = VALUE_FMT (cc->val);
 
-				format_value_gstring (line, fmt, cc->val,
-						      NULL, -1, date_conv);
+				format_value_gstring (line, NULL, fmt, cc->val,
+						      -1, date_conv);
 			}
 			if (++col <= extent.end.col)
 				g_string_append_c (line, '\t');
diff --git a/src/gnm-format.c b/src/gnm-format.c
index 1edd304..75e4163 100644
--- a/src/gnm-format.c
+++ b/src/gnm-format.c
@@ -83,7 +83,7 @@ format_value_common (PangoLayout *layout, GString *str,
 		     const GOFormatMeasure measure,
 		     const GOFontMetrics *metrics,
 		     GOFormat const *format,
-		     GnmValue const *value, GOColor *go_color,
+		     GnmValue const *value,
 		     int col_width,
 		     GODateConventions const *date_conv,
 		     gboolean unicode_minus)
@@ -143,8 +143,8 @@ format_value_common (PangoLayout *layout, GString *str,
 	err = gnm_format_value_gstring (layout, str, measure, metrics,
 					format,
 					val, type, sval,
-					go_color,
 					col_width, date_conv, unicode_minus);
+	
 	g_free (sval_free);
 
 	switch (err) {
@@ -167,7 +167,7 @@ GOFormatNumberError
 gnm_format_layout (PangoLayout *layout,
 		   GOFontMetrics *metrics,
 		   GOFormat const *format,
-		   GnmValue const *value, GOColor *go_color,
+		   GnmValue const *value,
 		   int col_width,
 		   GODateConventions const *date_conv,
 		   gboolean unicode_minus)
@@ -179,7 +179,7 @@ gnm_format_layout (PangoLayout *layout,
 				   go_format_measure_pango,
 				   metrics,
 				   format,
-				   value, go_color,
+				   value,
 				   col_width, date_conv, unicode_minus);
 
 	g_string_free (tmp_str, TRUE);
@@ -190,6 +190,7 @@ gnm_format_layout (PangoLayout *layout,
 /**
  * format_value_gstring :
  * @str : append the result here.
+ * @attrs : put the attributes here.
  * @format : #GOFormat.
  * @value : #GnmValue to convert
  * @go_color : return the #GOColor to use
@@ -198,25 +199,50 @@ gnm_format_layout (PangoLayout *layout,
  *
  **/
 GOFormatNumberError
-format_value_gstring (GString *str, GOFormat const *format,
-		      GnmValue const *value, GOColor *go_color,
+format_value_gstring (GString *str, PangoAttrList **attrs, 
+		      GOFormat const *format,
+		      GnmValue const *value,
 		      int col_width,
 		      GODateConventions const *date_conv)
 {
 	gboolean unicode_minus = FALSE;
 	GString *tmp_str = str->len ? g_string_sized_new (100) : NULL;
 	GOFormatNumberError err;
+	PangoLayout *layout = NULL;
+	PangoContext *context = NULL;
+	PangoAttrList *at = NULL;
 
-	err = format_value_common (NULL, tmp_str ? tmp_str : str,
+	if (attrs) {
+		context = gnm_pango_context_get ();
+		layout = pango_layout_new (context);
+	}
+
+	err = format_value_common (layout, tmp_str ? tmp_str : str,
 				   go_format_measure_strlen,
 				   go_font_metrics_unit,
 				   format,
-				   value, go_color,
+				   value,
 				   col_width, date_conv, unicode_minus);
 
+	if (attrs && layout) {
+		at = pango_attr_list_ref 
+			(pango_layout_get_attributes (layout));
+		g_object_unref (layout);
+		g_object_unref (context);
+	}
+
 	if (tmp_str) {
-		if (!err)
+		if (!err) {
+			gsize old_len = str->len;
 			go_string_append_gstring (str, tmp_str);
+			if (attrs && at) {
+				*attrs = pango_attr_list_new ();
+				pango_attr_list_splice 
+					(*attrs, at, old_len, 
+					 str->len - old_len);
+				pango_attr_list_unref (at);
+			}
+		}
 		g_string_free (tmp_str, TRUE);
 	}
 
@@ -224,11 +250,12 @@ format_value_gstring (GString *str, GOFormat const *format,
 }
 
 gchar *
-format_value (GOFormat const *format, GnmValue const *value, GOColor *go_color,
+format_value (GOFormat const *format,
+	      GnmValue const *value, PangoAttrList **attrs,
 	      int col_width, GODateConventions const *date_conv)
 {
 	GString *result = g_string_sized_new (20);
-	format_value_gstring (result, format, value, go_color,
+	format_value_gstring (result, attrs, format, value,
 			      col_width, date_conv);
 	return g_string_free (result, FALSE);
 }
diff --git a/src/gnm-format.h b/src/gnm-format.h
index 21dd538..e67603c 100644
--- a/src/gnm-format.h
+++ b/src/gnm-format.h
@@ -9,14 +9,15 @@
 G_BEGIN_DECLS
 
 char  *format_value	    (GOFormat const *format,
-			     GnmValue const *value, GOColor *go_color,
+			     GnmValue const *value,
+			     PangoAttrList **attrs,
 			     int col_width,
 			     GODateConventions const *date_conv);
 
 GOFormatNumberError format_value_gstring (GString *result,
+					  PangoAttrList **attrs,
 					  GOFormat const *format,
 					  GnmValue const *value,
-					  GOColor *go_color,
 					  int col_width,
 					  GODateConventions const *date_conv);
 
@@ -24,7 +25,6 @@ GOFormatNumberError gnm_format_layout    (PangoLayout *result,
 					  GOFontMetrics *metrics,
 					  GOFormat const *format,
 					  GnmValue const *value,
-					  GOColor *go_color,
 					  int col_width,
 					  GODateConventions const *date_conv,
 					  gboolean unicode_minus);
diff --git a/src/print-info.c b/src/print-info.c
index 04a7185..e8063c1 100644
--- a/src/print-info.c
+++ b/src/print-info.c
@@ -520,8 +520,8 @@ render_timestamp_with_format (GString *target, char const *number_format, HFRend
 
 	/* TODO : Check this assumption.  Is it a localized format? */
 	format = go_format_new_from_XL (number_format);
-	format_value_gstring (target, format, info->date_time,
-			      NULL, -1, info->date_conv);
+	format_value_gstring (target, NULL, format, info->date_time,
+			      -1, info->date_conv);
 	go_format_unref (format);
 }
 
diff --git a/src/rendered-value.c b/src/rendered-value.c
index d94a513..44239a8 100644
--- a/src/rendered-value.c
+++ b/src/rendered-value.c
@@ -177,7 +177,7 @@ gnm_rendered_value_new (GnmCell const *cell,
 			double zoom)
 {
 	GnmRenderedValue	*res;
-	GOColor		 fore;
+	GOColor		 fore = 0;
 	PangoLayout     *layout;
 	PangoAttrList   *attrs;
 	int              rotation;
@@ -365,7 +365,7 @@ gnm_rendered_value_new (GnmCell const *cell,
 
 		err = gnm_format_layout (layout, font->go.metrics, format,
 					 cell->value,
-					 &fore, col_width, date_conv, TRUE);
+					 col_width, date_conv, TRUE);
 
 		switch (err) {
 		case GO_FORMAT_NUMBER_DATE_ERROR:
diff --git a/src/widgets/gnm-format-sel.c b/src/widgets/gnm-format-sel.c
index 536e94e..1e6c682 100644
--- a/src/widgets/gnm-format-sel.c
+++ b/src/widgets/gnm-format-sel.c
@@ -32,7 +32,7 @@ cb_generate_preview (GOFormatSel *gfs, GOColor *c)
 		return NULL;
 	if (go_format_is_general (fmt) && VALUE_FMT (v) != NULL)
 		fmt = VALUE_FMT (v);
-	return format_value (fmt, v, c, -1, go_format_sel_get_dateconv (gfs));
+	return format_value (fmt, v, NULL, -1, go_format_sel_get_dateconv (gfs));
 }
 
 GtkWidget *
diff --git a/src/widgets/gnm-sheet-slicer-combo-view.c b/src/widgets/gnm-sheet-slicer-combo-view.c
index 3982f5e..5f859cd 100644
--- a/src/widgets/gnm-sheet-slicer-combo-view.c
+++ b/src/widgets/gnm-sheet-slicer-combo-view.c
@@ -114,7 +114,7 @@ sscombo_create_list (SheetObject *so,
 		gtk_list_store_append (model, &iter);
 		if (VALUE_IS_EMPTY(v))
 			g_string_assign (str, _("<Blank>"));
-		else if (GO_FORMAT_NUMBER_OK != format_value_gstring (str, NULL, v, NULL, -1, dconv))
+		else if (GO_FORMAT_NUMBER_OK != format_value_gstring (str, NULL, NULL, v, -1, dconv))
 			g_string_assign (str, "<ERROR>");
 		gtk_list_store_set (model, &iter, 0, TRUE, 1, str->str, -1);
 		g_string_truncate (str, 0);
diff --git a/src/widgets/gnumeric-text-view.c b/src/widgets/gnumeric-text-view.c
index 3efed3e..3396eef 100644
--- a/src/widgets/gnumeric-text-view.c
+++ b/src/widgets/gnumeric-text-view.c
@@ -421,13 +421,6 @@ GSF_CLASS (GnmTextView, gnm_text_view,
 
 /**
  * gnm_text_view_new:
- * @wbcg : #WBCGtk non-NULL
- * @with_icon : append a rollup icon to the end of the entry
- *
- * Creates a new #GnmTextView, which is an entry widget with support
- * for range selections.
- * The entry is created with default flag settings which are suitable for use
- * in many dialogs, but see #gnm_text_view_set_flags.
  *
  * Return value: a new #GnmTextView.
  **/
diff --git a/src/workbook-view.c b/src/workbook-view.c
index 089e4b6..b27bc01 100644
--- a/src/workbook-view.c
+++ b/src/workbook-view.c
@@ -529,22 +529,12 @@ wb_view_auto_expr_recalc (WorkbookView *wbv)
 		}
 
 		if (format) {
-			GOColor color;
-			PangoAttribute *attr;
-			gsize old_len = str->len;
-
-			format_value_gstring (str, format, v, &color,
+			format_value_gstring (str, &attrs, format, v,
 					      /* Note that we created a label large enough for */
 					      /* "Sumerage=-012345678901234" */
 					      25 - g_utf8_strlen (str->str, -1),
 					      workbook_date_conv (wb_view_get_workbook (wbv)));
 			go_format_unref (tmp_format);
-
-			attrs = pango_attr_list_new ();
-			attr = go_color_to_pango (color, TRUE);
-			attr->start_index = old_len;
-			attr->end_index = str->len;
-			pango_attr_list_insert (attrs, attr);
 		} else {
 			g_string_append (str, value_peek_string (v));
 			attrs = NULL;
