diff -rupN original/src/backend/sql/gnc-account-sql.c update/src/backend/sql/gnc-account-sql.c
--- original/src/backend/sql/gnc-account-sql.c	2009-12-02 00:46:28.000000000 +0000
+++ update/src/backend/sql/gnc-account-sql.c	2010-01-25 13:56:04.000000000 +0000
@@ -59,6 +59,7 @@ static void set_parent_guid( gpointer pO
 #define ACCOUNT_MAX_TYPE_LEN 2048
 #define ACCOUNT_MAX_CODE_LEN 2048
 #define ACCOUNT_MAX_DESCRIPTION_LEN 2048
+#define ACCOUNT_MAX_COLOR_LEN 20
 
 static const GncSqlColumnTableEntry col_table[] =
 {
@@ -73,6 +74,7 @@ static const GncSqlColumnTableEntry col_
 		(QofAccessFunc)get_parent, set_parent },
     { "code",           CT_STRING,       ACCOUNT_MAX_CODE_LEN,        0,                 "code" },
     { "description",    CT_STRING,       ACCOUNT_MAX_DESCRIPTION_LEN, 0,                 "description" },
+    { "account_color",    CT_STRING,       ACCOUNT_MAX_COLOR_LEN, 0,                 "account-color" },
 	{ "hidden",         CT_BOOLEAN,      0,                           0,                 "hidden" },
 	{ "placeholder",    CT_BOOLEAN,      0,                           0,                 "placeholder" },
     { NULL }
diff -rupN original/src/backend/xml/gnc-account-xml-v2.c update/src/backend/xml/gnc-account-xml-v2.c
--- original/src/backend/xml/gnc-account-xml-v2.c	2009-12-02 00:46:31.000000000 +0000
+++ update/src/backend/xml/gnc-account-xml-v2.c	2010-01-25 14:02:21.000000000 +0000
@@ -59,6 +59,7 @@ const gchar *account_version_string = "2
 #define act_non_standard_scu_string "act:non-standard-scu"
 #define act_code_string "act:code"
 #define act_description_string "act:description"
+#define act_color_string "act:color"
 #define act_slots_string "act:slots"
 #define act_parent_string "act:parent"
 #define act_lots_string "act:lots"
@@ -133,7 +134,13 @@ gnc_account_dom_tree_create(Account *act
     {
         xmlAddChild(ret, text_to_dom_tree(act_description_string, str));
     }
-       
+
+    str = xaccAccountGetColor(act);
+    if (str && strlen(str) > 0)
+    {
+        xmlAddChild(ret, text_to_dom_tree(act_color_string, str));
+    }       
+
     kf = xaccAccountGetSlots(act);
     if(kf)
     {
@@ -396,6 +403,16 @@ account_description_handler(xmlNodePtr n
     return set_string(node, pdata->account, xaccAccountSetDescription);
 }
 
+
+static gboolean
+account_color_handler(xmlNodePtr node, gpointer act_pdata)
+{
+    struct account_pdata *pdata = act_pdata;
+
+    return set_string(node, pdata->account, xaccAccountSetColor);
+}
+
+
 static gboolean
 account_lots_handler(xmlNodePtr node, gpointer act_pdata)
 {
@@ -435,6 +452,7 @@ static struct dom_tree_handler account_h
     { act_non_standard_scu_string, account_non_standard_scu_handler, 0, 0 },
     { act_code_string, account_code_handler, 0, 0 },
     { act_description_string, account_description_handler, 0, 0},
+    { act_color_string, account_color_handler, 0, 0},
     { act_slots_string, account_slots_handler, 0, 0 },
     { act_parent_string, account_parent_handler, 0, 0 },
     { act_lots_string, account_lots_handler, 0, 0 },
diff -rupN original/src/engine/Account.c update/src/engine/Account.c
--- original/src/engine/Account.c	2009-12-02 00:47:14.000000000 +0000
+++ update/src/engine/Account.c	2010-01-25 14:21:10.000000000 +0000
@@ -58,6 +58,7 @@ enum {
   PROP_FULL_NAME,
   PROP_CODE,
   PROP_DESCRIPTION,
+  PROP_COLOR,
   PROP_NOTES,
   PROP_TYPE,
 
@@ -107,6 +108,12 @@ typedef struct AccountPrivate
      */
     char *description;
 
+    /* The account color is the a color string assigned by the user. 
+     * It is intended to highlight specific accounts based on users 
+     * wishes.
+     */
+    char *accountcolor;
+
     /* The type field is the account type, picked from the enumerated
      * list that includes ACCT_TYPE_BANK, ACCT_TYPE_STOCK,
      * ACCT_TYPE_CREDIT, ACCT_TYPE_INCOME, etc.  Its intended use is to
@@ -232,6 +239,7 @@ gnc_account_init(Account* acc)
     priv->accountName = CACHE_INSERT("");
     priv->accountCode = CACHE_INSERT("");
     priv->description = CACHE_INSERT("");
+    priv->accountcolor = CACHE_INSERT("");
 
     priv->type = ACCT_TYPE_NONE;
 
@@ -294,6 +302,9 @@ gnc_account_get_property (GObject       
 	case PROP_DESCRIPTION:
 	    g_value_set_string(value, priv->description);
 	    break;
+	case PROP_COLOR:
+	    g_value_set_string(value, priv->accountcolor);
+	    break;
 	case PROP_NOTES:
 	    g_value_set_string(value, xaccAccountGetNotes(account));
 	    break;
@@ -390,6 +401,9 @@ gnc_account_set_property (GObject       
 	case PROP_DESCRIPTION:
 	    xaccAccountSetDescription(account, g_value_get_string(value));
 	    break;
+	case PROP_COLOR:
+	    xaccAccountSetColor(account, g_value_get_string(value));
+	    break;
 	case PROP_NOTES:
 	    xaccAccountSetNotes(account, g_value_get_string(value));
 	    break;
@@ -521,6 +535,17 @@ gnc_account_class_init (AccountClass *kl
 
     g_object_class_install_property
 	(gobject_class,
+	 PROP_COLOR,
+	 g_param_spec_string ("account-color",
+			      "Account Color",
+			      "The account color is a color string assigned "
+			      "by the user. It is intended to highlight the "
+			      "account based on the users wishes.",
+			      NULL,
+			      G_PARAM_READWRITE));
+
+    g_object_class_install_property
+	(gobject_class,
 	 PROP_NOTES,
 	 g_param_spec_string ("notes",
 			      "Account Notes",
@@ -923,6 +948,7 @@ xaccCloneAccountCommon(const Account *fr
     priv->accountName = CACHE_INSERT(from_priv->accountName);
     priv->accountCode = CACHE_INSERT(from_priv->accountCode);
     priv->description = CACHE_INSERT(from_priv->description);
+    priv->accountcolor = CACHE_INSERT(from_priv->accountcolor);
 
     kvp_frame_delete(ret->inst.kvp_data);
     ret->inst.kvp_data = kvp_frame_copy(from->inst.kvp_data);
@@ -1052,6 +1078,7 @@ xaccFreeAccount (Account *acc)
   CACHE_REPLACE(priv->accountName, NULL);
   CACHE_REPLACE(priv->accountCode, NULL);
   CACHE_REPLACE(priv->description, NULL);
+  CACHE_REPLACE(priv->accountcolor, NULL);
 
   /* zero out values, just in case stray 
    * pointers are pointing here. */
@@ -1276,6 +1303,12 @@ xaccAccountEqual(const Account *aa, cons
     return FALSE;
   }
 
+  if (safe_strcmp(priv_aa->accountcolor, priv_ab->accountcolor) != 0)
+  {
+    PWARN ("account colors differ: %s vs %s", priv_aa->accountcolor, priv_ab->accountcolor);
+    return FALSE;
+  }
+
   if (!gnc_commodity_equal(priv_aa->commodity, priv_ab->commodity))
   {
     PWARN ("commodities differ");
@@ -2076,6 +2109,25 @@ xaccAccountSetDescription (Account *acc,
     xaccAccountCommitEdit(acc);
 }
 
+void
+xaccAccountSetColor (Account *acc, const char *str) 
+{
+    AccountPrivate *priv;
+
+    /* errors */
+    g_return_if_fail(GNC_IS_ACCOUNT(acc));
+
+    /* optimizations */
+    priv = GET_PRIVATE(acc);
+    if (str == priv->accountcolor)
+	return;
+
+    xaccAccountBeginEdit(acc);
+    CACHE_REPLACE(priv->accountcolor, str ? str : "");
+    mark_account (acc);
+    xaccAccountCommitEdit(acc);
+}
+
 static void
 qofAccountSetParent (Account *acc, QofInstance *parent) 
 {
@@ -2829,6 +2881,13 @@ xaccAccountGetDescription (const Account
 }
 
 const char * 
+xaccAccountGetColor (const Account *acc)
+{
+    g_return_val_if_fail(GNC_IS_ACCOUNT(acc), NULL);
+    return GET_PRIVATE(acc)->accountcolor;
+}
+
+const char * 
 xaccAccountGetNotes (const Account *acc) 
 {
     g_return_val_if_fail(GNC_IS_ACCOUNT(acc), NULL);
@@ -4395,6 +4454,8 @@ gnc_account_merge_children (Account *par
 	continue;
       if (0 != null_strcmp(priv_a->description, priv_b->description))
 	continue;
+      if (0 != null_strcmp(priv_a->accountcolor, priv_b->accountcolor))
+	continue;
       if (!gnc_commodity_equiv(priv_a->commodity, priv_b->commodity))
 	continue;
       if (0 != null_strcmp(xaccAccountGetNotes(acc_a),
@@ -4637,6 +4698,9 @@ gboolean xaccAccountRegister (void)
     { ACCOUNT_DESCRIPTION_, QOF_TYPE_STRING, 
       (QofAccessFunc) xaccAccountGetDescription,
       (QofSetterFunc) xaccAccountSetDescription },
+    { ACCOUNT_COLOR_, QOF_TYPE_STRING, 
+      (QofAccessFunc) xaccAccountGetColor,
+      (QofSetterFunc) xaccAccountSetColor },
     { ACCOUNT_NOTES_, QOF_TYPE_STRING, 
       (QofAccessFunc) xaccAccountGetNotes,
       (QofSetterFunc) xaccAccountSetNotes },
diff -rupN original/src/engine/Account.h update/src/engine/Account.h
--- original/src/engine/Account.h	2009-12-02 00:47:14.000000000 +0000
+++ update/src/engine/Account.h	2010-01-25 14:08:12.000000000 +0000
@@ -263,6 +263,8 @@ void xaccAccountSetName (Account *accoun
 void xaccAccountSetCode (Account *account, const char *code);
 /** Set the account's description */
 void xaccAccountSetDescription (Account *account, const char *desc);
+/** Set the account's Color */
+void xaccAccountSetColor (Account *account, const char *col);
 /** Set the account's notes */
 void xaccAccountSetNotes (Account *account, const char *notes);
 /** Set the last num field of an Account */
@@ -354,6 +356,8 @@ const char * xaccAccountGetName (const A
 const char * xaccAccountGetCode (const Account *account);
 /** Get the account's description */
 const char * xaccAccountGetDescription (const Account *account);
+/** Get the account's color */
+const char * xaccAccountGetColor (const Account *account);
 /** Get the account's notes */
 const char * xaccAccountGetNotes (const Account *account);
 /** Get the last num field of an Account */
@@ -1408,10 +1412,11 @@ const char * dxaccAccountGetQuoteTZ (con
 /** @name Account parameter names 
  @{
 */
-#define ACCOUNT_KVP			"kvp"
+#define ACCOUNT_KVP		"kvp"
 #define ACCOUNT_NAME_		"name"
 #define ACCOUNT_CODE_		"code"
 #define ACCOUNT_DESCRIPTION_	"desc"
+#define ACCOUNT_COLOR_		"col"
 #define ACCOUNT_NOTES_		"notes"
 #define ACCOUNT_BALANCE_	"balance"
 #define ACCOUNT_CLEARED_	"cleared"
@@ -1420,7 +1425,7 @@ const char * dxaccAccountGetQuoteTZ (con
 #define ACCOUNT_FUTURE_MINIMUM_ "future-minimum"
 #define ACCOUNT_TAX_RELATED	"tax-related-p"
 #define ACCOUNT_TYPE_		"account-type"
-#define ACCOUNT_SCU			"smallest-commodity-unit"
+#define ACCOUNT_SCU		"smallest-commodity-unit"
 #define ACCOUNT_NSCU		"non-standard-scu"
 #define ACCOUNT_PARENT		"parent-account"
 
diff -rupN original/src/gnome/glade/account.glade update/src/gnome/glade/account.glade
--- original/src/gnome/glade/account.glade	2009-12-02 00:47:09.000000000 +0000
+++ update/src/gnome/glade/account.glade	2010-01-27 14:05:59.000000000 +0000
@@ -165,7 +165,7 @@
 		  <child>
 		    <widget class="GtkTable" id="table3">
 		      <property name="visible">True</property>
-		      <property name="n_rows">8</property>
+		      <property name="n_rows">9</property>
 		      <property name="n_columns">2</property>
 		      <property name="homogeneous">False</property>
 		      <property name="row_spacing">6</property>
@@ -335,6 +335,81 @@
 			</packing>
 		      </child>
 
+
+                      <child>
+                        <widget class="GtkLabel" id="label6">
+                          <property name="visible">True</property>
+                          <property name="xalign">0</property>
+                          <property name="label" translatable="yes">Account _Color:</property>
+                          <property name="use_underline">True</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+                          <property name="mnemonic_widget">color_entry_button</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+                        </widget>
+                        <packing>
+                          <property name="top_attach">5</property>
+                          <property name="bottom_attach">6</property>
+                          <property name="x_options">GTK_FILL</property>
+                          <property name="y_options"></property>
+                        </packing>
+                      </child>
+  
+
+                      <child>
+                        <widget class="GtkHBox" id="color_hbox">
+                          <property name="visible">True</property>
+                          <property name="spacing">3</property>
+                          <child>
+                            <widget class="GtkColorButton" id="color_entry_button">
+                              <property name="visible">True</property>
+                              <property name="can_focus">True</property>
+                              <property name="receives_default">True</property>
+                              <property name="color">#ededececebeb</property>
+                            </widget>
+                            <packing>
+                              <property name="position">0</property>
+                            </packing>
+                          </child>
+                          <child>
+                            <widget class="GtkButton" id="color_default_button">
+                              <property name="label" translatable="yes">Default</property>
+                              <property name="visible">True</property>
+                              <property name="can_focus">True</property>
+                              <property name="receives_default">True</property>
+                            </widget>
+                            <packing>
+                              <property name="expand">False</property>
+                              <property name="position">1</property>
+                            </packing>
+                          </child>
+                        </widget>
+                        <packing>
+                          <property name="left_attach">1</property>
+                          <property name="right_attach">2</property>
+                          <property name="top_attach">5</property>
+                          <property name="bottom_attach">6</property>
+                          <property name="x_options">GTK_FILL</property>
+                          <property name="y_options">GTK_FILL</property>
+                        </packing>
+                      </child>
+
+
+
+
+
+
+
+
 		      <child>
 			<widget class="GtkLabel" id="label">
 			  <property name="visible">True</property>
@@ -357,8 +432,8 @@
 			<packing>
 			  <property name="left_attach">0</property>
 			  <property name="right_attach">1</property>
-			  <property name="top_attach">5</property>
-			  <property name="bottom_attach">6</property>
+			  <property name="top_attach">6</property>
+			  <property name="bottom_attach">7</property>
 			  <property name="x_options">fill</property>
 			  <property name="y_options">fill</property>
 			</packing>
@@ -381,8 +456,8 @@
 			<packing>
 			  <property name="left_attach">0</property>
 			  <property name="right_attach">1</property>
-			  <property name="top_attach">6</property>
-			  <property name="bottom_attach">7</property>
+			  <property name="top_attach">7</property>
+			  <property name="bottom_attach">8</property>
 			  <property name="x_options">fill</property>
 			  <property name="y_options"></property>
 			</packing>
@@ -404,8 +479,8 @@
 			<packing>
 			  <property name="left_attach">0</property>
 			  <property name="right_attach">1</property>
-			  <property name="top_attach">7</property>
-			  <property name="bottom_attach">8</property>
+			  <property name="top_attach">8</property>
+			  <property name="bottom_attach">9</property>
 			  <property name="x_options">fill</property>
 			  <property name="y_options"></property>
 			</packing>
@@ -427,8 +502,8 @@
 			<packing>
 			  <property name="left_attach">1</property>
 			  <property name="right_attach">2</property>
-			  <property name="top_attach">6</property>
-			  <property name="bottom_attach">7</property>
+			  <property name="top_attach">7</property>
+			  <property name="bottom_attach">8</property>
 			  <property name="x_options">fill</property>
 			  <property name="y_options"></property>
 			</packing>
@@ -529,8 +604,8 @@
 			<packing>
 			  <property name="left_attach">1</property>
 			  <property name="right_attach">2</property>
-			  <property name="top_attach">5</property>
-			  <property name="bottom_attach">6</property>
+			  <property name="top_attach">6</property>
+			  <property name="bottom_attach">7</property>
 			  <property name="x_options">fill</property>
 			  <property name="y_options">fill</property>
 			</packing>
diff -rupN original/src/gnome/gnc-plugin-page-register.c update/src/gnome/gnc-plugin-page-register.c
--- original/src/gnome/gnc-plugin-page-register.c	2009-12-02 00:47:10.000000000 +0000
+++ update/src/gnome/gnc-plugin-page-register.c	2010-01-25 15:12:11.000000000 +0000
@@ -97,6 +97,7 @@ static void gnc_plugin_page_register_upd
 static gboolean gnc_plugin_page_register_finish_pending (GncPluginPage *page);
 
 static gchar *gnc_plugin_page_register_get_tab_name (GncPluginPage *plugin_page);
+static gchar *gnc_plugin_page_register_get_tab_color (GncPluginPage *plugin_page);
 static gchar *gnc_plugin_page_register_get_long_name (GncPluginPage *plugin_page);
 
 static void gnc_plugin_page_register_summarybar_position_changed(GConfEntry *entry, gpointer user_data);
@@ -441,6 +442,7 @@ gnc_plugin_page_register_new_common (GNC
 	const GList *item;
 	GList *book_list;
 	gchar *label;
+	gchar *labelcolor;
 	QofQuery *q;
 
 	/* Is there an existing page? */
@@ -465,6 +467,10 @@ gnc_plugin_page_register_new_common (GNC
 	gnc_plugin_page_set_page_name(plugin_page, label);
 	g_free(label);
 
+	labelcolor = gnc_plugin_page_register_get_tab_color(plugin_page);
+	gnc_plugin_page_set_page_color(plugin_page, labelcolor);
+	g_free(labelcolor);
+
 	label = gnc_plugin_page_register_get_long_name(plugin_page);
         gnc_plugin_page_set_page_long_name(plugin_page, label);
         g_free(label);
@@ -1185,6 +1191,50 @@ gnc_plugin_page_register_get_tab_name (G
 }
 
 static gchar *
+gnc_plugin_page_register_get_tab_color (GncPluginPage *plugin_page)
+{
+	GncPluginPageRegisterPrivate *priv;
+	GNCLedgerDisplayType ledger_type;
+  	GNCLedgerDisplay *ld;
+	SplitRegister *reg;
+	Account *leader;
+
+	g_return_val_if_fail (GNC_IS_PLUGIN_PAGE_REGISTER (plugin_page), _("unknown"));
+
+	priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE(plugin_page);
+	ld = priv->ledger;
+	reg = gnc_ledger_display_get_split_register (ld);
+	ledger_type = gnc_ledger_display_type (ld);
+	leader = gnc_ledger_display_leader (ld);
+
+	switch (ledger_type) {
+	 case LD_SINGLE:
+	  return g_strdup(xaccAccountGetColor (leader));
+
+	 case LD_SUBACCOUNT:
+	  return g_strdup_printf("%s+", xaccAccountGetColor (leader));
+
+	 case LD_GL:
+	  switch (reg->type) {
+	   case GENERAL_LEDGER:
+	   case INCOME_LEDGER:
+	    return g_strdup("Not Set");
+	   case PORTFOLIO_LEDGER:
+	    return g_strdup("Not Set");
+	   case SEARCH_LEDGER:
+	    return g_strdup("Not Set");
+	   default:
+	    break;
+	  }
+
+	 default:
+	  break;
+	}
+
+	return g_strdup("Not Set");
+}
+
+static gchar *
 gnc_plugin_page_register_get_long_name (GncPluginPage *plugin_page)
 {
 	GncPluginPageRegisterPrivate *priv;
@@ -2988,7 +3038,7 @@ gnc_plugin_page_register_event_handler (
   QofBook *book;
   GncPluginPage *visible_page;
   GtkWidget *window;
-  gchar *label;
+  gchar *label, *color;
 
   g_return_if_fail(page);	/* Required */
   if (!GNC_IS_TRANS(entity) && !GNC_IS_ACCOUNT(entity))
@@ -3003,6 +3053,8 @@ gnc_plugin_page_register_event_handler (
     if (GNC_IS_MAIN_WINDOW(window)) {
       label = gnc_plugin_page_register_get_tab_name(GNC_PLUGIN_PAGE(page));
       main_window_update_page_name(GNC_PLUGIN_PAGE(page), label);
+      color = gnc_plugin_page_register_get_tab_color(GNC_PLUGIN_PAGE(page));
+      main_window_update_page_color(GNC_PLUGIN_PAGE(page), color);
       g_free(label);
     }
     LEAVE("tab name updated");
diff -rupN original/src/gnome-utils/dialog-account.c update/src/gnome-utils/dialog-account.c
--- original/src/gnome-utils/dialog-account.c	2009-12-02 00:47:07.000000000 +0000
+++ update/src/gnome-utils/dialog-account.c	2010-01-26 12:00:03.000000000 +0000
@@ -53,6 +53,7 @@
 #define DIALOG_NEW_ACCOUNT_CM_CLASS "dialog-new-account"
 #define DIALOG_EDIT_ACCOUNT_CM_CLASS "dialog-edit-account"
 #define GCONF_SECTION "dialogs/account"
+#define DEFAULT_COLOR "#ededececebeb"
 
 enum account_cols {
   ACCOUNT_COL_FULLNAME = 0,
@@ -88,6 +89,8 @@ typedef struct _AccountWindow
 
   GtkWidget * name_entry;
   GtkWidget * description_entry;
+  GtkWidget * color_entry_button;
+  GtkWidget * color_default_button;
   GtkWidget * code_entry;
   GtkTextBuffer * notes_text_buffer;
 
@@ -191,6 +194,7 @@ gnc_account_to_ui(AccountWindow *aw)
   Account *account;
   gnc_commodity * commodity;
   const char *string;
+  GdkColor color;
   gboolean flag, nonstd_scu;
   gint index;
 
@@ -209,6 +213,11 @@ gnc_account_to_ui(AccountWindow *aw)
   if (string == NULL) string = "";
   gtk_entry_set_text(GTK_ENTRY(aw->description_entry), string);
 
+  string = xaccAccountGetColor (account);
+  if (gdk_color_parse(string, &color)) {
+    gtk_color_button_set_color(GTK_COLOR_BUTTON(aw->color_entry_button), &color);
+  }
+
   commodity = xaccAccountGetCommodity (account);
   gnc_general_select_set_selected (GNC_GENERAL_SELECT (aw->commodity_edit),
                                     commodity);
@@ -308,6 +317,7 @@ gnc_ui_to_account(AccountWindow *aw)
   Account *parent_account;
   const char *old_string;
   const char *string;
+  GdkColor color;
   gboolean flag;
   gnc_numeric balance;
   gboolean use_equity, nonstd;
@@ -344,6 +354,12 @@ gnc_ui_to_account(AccountWindow *aw)
   if (safe_strcmp (string, old_string) != 0)
     xaccAccountSetDescription (account, string);
 
+  gtk_color_button_get_color(GTK_COLOR_BUTTON(aw->color_entry_button), &color );
+  string = gdk_color_to_string(&color);
+  old_string = xaccAccountGetColor (account);
+  if (safe_strcmp (string, old_string) != 0)
+    xaccAccountSetColor (account, string);
+
   commodity = (gnc_commodity *)
     gnc_general_select_get_selected (GNC_GENERAL_SELECT (aw->commodity_edit));
   if (commodity &&
@@ -1103,6 +1119,17 @@ gnc_account_name_changed_cb(GtkWidget *w
 }
 
 static void
+gnc_account_color_default_cb(GtkWidget *widget, gpointer data)
+{
+  GdkColor color;
+  AccountWindow *aw = data;
+
+  gdk_color_parse( DEFAULT_COLOR, &color);
+  gtk_color_button_set_color(GTK_COLOR_BUTTON(aw->color_entry_button), &color);
+
+}
+
+static void
 commodity_changed_cb (GNCGeneralSelect *gsl, gpointer data)
 {
   AccountWindow *aw = data;
@@ -1205,6 +1232,13 @@ gnc_account_window_create(AccountWindow 
 		    G_CALLBACK (gnc_account_name_changed_cb), aw);
 
   aw->description_entry = glade_xml_get_widget (xml, "description_entry");
+
+  aw->color_entry_button = glade_xml_get_widget (xml, "color_entry_button");
+
+  aw->color_default_button = glade_xml_get_widget (xml, "color_default_button");
+  g_signal_connect (G_OBJECT (aw->color_default_button), "clicked",
+		    G_CALLBACK (gnc_account_color_default_cb), aw);
+
   aw->code_entry =        glade_xml_get_widget (xml, "code_entry");
   aw->notes_text_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (glade_xml_get_widget (xml, "notes_text")));
 
diff -rupN original/src/gnome-utils/gnc-main-window.c update/src/gnome-utils/gnc-main-window.c
--- original/src/gnome-utils/gnc-main-window.c	2009-12-02 00:47:07.000000000 +0000
+++ update/src/gnome-utils/gnc-main-window.c	2010-01-27 16:07:31.000000000 +0000
@@ -94,6 +94,7 @@ enum {
 
 #define GNC_MAIN_WINDOW_NAME "GncMainWindow"
 
+
 /* Static Globals *******************************************************/
 
 /** The debugging module that this .o belongs to.  */
@@ -1697,38 +1698,71 @@ main_window_find_tab_items (GncMainWindo
 			    GtkWidget **entry_p)
 {
   GncMainWindowPrivate *priv;
-  GtkWidget *tab_hbox, *widget;
+  GtkWidget *tab_hbox, *widget, *event_box;
   GList *children, *tmp;
 
   ENTER("window %p, page %p, label_p %p, entry_p %p",
 	window, page, label_p, entry_p);
   priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
   *label_p = *entry_p = NULL;
-  tab_hbox = gtk_notebook_get_tab_label(GTK_NOTEBOOK(priv->notebook),
+
+  event_box = gtk_notebook_get_tab_label(GTK_NOTEBOOK(priv->notebook),
 					page->notebook_page);
+
+  tab_hbox = gtk_bin_get_child(GTK_BIN(event_box));
+
   children = gtk_container_get_children(GTK_CONTAINER(tab_hbox));
   for (tmp = children; tmp; tmp = g_list_next(tmp)) {
     widget = tmp->data;
-    if (GTK_IS_EVENT_BOX(widget)) {
-      *label_p = gtk_bin_get_child(GTK_BIN(widget));
+    if (GTK_IS_LABEL(widget)) {
+      *label_p = widget;
     } else if (GTK_IS_ENTRY(widget)) {
       *entry_p = widget;
     }
   }
+
   g_list_free(children);
 
   LEAVE("label %p, entry %p", *label_p, *entry_p);
   return (*label_p && *entry_p);
 }
 
+static gboolean
+main_window_find_tab_event (GncMainWindow *window,
+			    GncPluginPage *page,
+			    GtkWidget **event_p)
+{
+  GncMainWindowPrivate *priv;
+  GtkWidget *event_box;
+
+  ENTER("window %p, page %p, event %p",
+	window, page, event_p);
+  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
+  *event_p = NULL;
+
+  event_box = gtk_notebook_get_tab_label(GTK_NOTEBOOK(priv->notebook),
+					page->notebook_page);
+  if (GTK_IS_EVENT_BOX(event_box)) {
+    *event_p = event_box;
+    LEAVE("event %p", *event_p);
+    return (TRUE);
+  }
+
+  LEAVE("event %p", *event_p);
+  return (FALSE);
+}
+
 void
 main_window_update_page_name (GncPluginPage *page,
 			      const gchar *name_in)
 {
   GncMainWindow *window;
   GncMainWindowPrivate *priv;
-  GtkWidget *label, *entry;
-  gchar *name;
+  GtkWidget *label, *entry, *event_box;
+  gchar *name, *oldname, *longname, *position;
+  gchar *newlongname;
+  gint index;
+
 
   ENTER(" ");
 
@@ -1737,6 +1771,7 @@ main_window_update_page_name (GncPluginP
     return;
   }
   name = g_strstrip(g_strdup(name_in));
+
   /* Optimization, if the name hasn't changed, don't update X. */
   if (*name == '\0' || 0 == strcmp(name, gnc_plugin_page_get_page_name(page))) {
     g_free(name);
@@ -1744,6 +1779,10 @@ main_window_update_page_name (GncPluginP
     return;
   }
 
+  oldname = g_strdup( gnc_plugin_page_get_page_name(page));
+  longname = g_strdup( gnc_plugin_page_get_page_long_name(page));
+  position = strstr(longname,oldname);
+
   /* Update the plugin */
   window = GNC_MAIN_WINDOW(page->window);
   priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
@@ -1753,6 +1792,22 @@ main_window_update_page_name (GncPluginP
   main_window_find_tab_items(window, page, &label, &entry);
   gtk_label_set_text(GTK_LABEL(label), name);
 
+  /* Update Tooltip on notebook Tab */
+  main_window_find_tab_event(window, page, &event_box);
+
+  if(position != NULL) {
+    gchar *newlongname;
+
+    index = strlen(longname) - strlen(oldname);
+
+    newlongname = g_strconcat(g_strndup(longname, index), name, NULL);
+
+    gnc_plugin_page_set_page_long_name(page, newlongname);
+    gtk_tooltips_set_tip(GTK_TOOLTIPS(tips), event_box, newlongname, NULL);
+
+    g_free(newlongname);
+  }
+
   /* Update the notebook menu */
   label = gtk_notebook_get_menu_label (GTK_NOTEBOOK(priv->notebook),
 				       page->notebook_page);
@@ -1764,6 +1819,56 @@ main_window_update_page_name (GncPluginP
   LEAVE("done");
 }
 
+
+void
+main_window_update_page_color (GncPluginPage *page,
+			      const gchar *color_in)
+{
+  GncMainWindow *window;
+  GncMainWindowPrivate *priv;
+  GtkWidget *entry, *event_box;
+  GdkColor TabColor;
+  gchar *colorstring, *oldcolorstring;
+
+
+  ENTER(" ");
+
+  if ((color_in == NULL) || (*color_in == '\0')) {
+    LEAVE("no string");
+    return;
+  }
+  colorstring = g_strstrip(g_strdup(color_in));
+
+  /* Optimization, if the color hasn't changed, don't update X. */
+  if (*colorstring == '\0' || 0 == strcmp(colorstring, gnc_plugin_page_get_page_color(page))) {
+    g_free(colorstring);
+    LEAVE("empty string or color unchanged");
+    return;
+  }
+
+  oldcolorstring = g_strdup( gnc_plugin_page_get_page_color(page));
+
+  /* Update the plugin */
+  window = GNC_MAIN_WINDOW(page->window);
+  priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
+  gnc_plugin_page_set_page_color(page, colorstring);
+
+  /* Update the notebook tab */
+  main_window_find_tab_event(window, page, &event_box);
+
+  if (gdk_color_parse(colorstring, &TabColor)) {
+    gtk_widget_modify_bg(event_box, GTK_STATE_NORMAL, &TabColor);
+    gtk_widget_modify_bg(event_box, GTK_STATE_ACTIVE, &TabColor);
+  }
+
+  g_free(oldcolorstring);
+  g_free(colorstring);
+  LEAVE("done");
+}
+
+
+
+
 static void
 gnc_main_window_tab_entry_activate (GtkWidget *entry,
 				    GncPluginPage *page)
@@ -2275,10 +2380,11 @@ gnc_main_window_open_page (GncMainWindow
 	GncMainWindowPrivate *priv;
 	GtkWidget *tab_hbox;
 	GtkWidget *label, *entry, *event_box;
-	const gchar *icon, *text;
+	const gchar *icon, *text, *colorstring;
 	GtkWidget *image;
 	GList *tmp;
 	gint width;
+	GdkColor TabColor;
 
 	ENTER("window %p, page %p", window, page);
 
@@ -2334,13 +2440,24 @@ gnc_main_window_open_page (GncMainWindow
 		image = gtk_image_new_from_stock (icon, GTK_ICON_SIZE_MENU);
 		gtk_widget_show (image);
 		gtk_box_pack_start (GTK_BOX (tab_hbox), image, FALSE, FALSE, 0);
-	} 
+		gtk_box_pack_start (GTK_BOX (tab_hbox), label, FALSE, FALSE, 0);
+	}
+	else
+		gtk_box_pack_start (GTK_BOX (tab_hbox), label, FALSE, FALSE, 0);
 
         event_box = gtk_event_box_new();
-        gtk_event_box_set_visible_window(GTK_EVENT_BOX(event_box), FALSE);
+        gtk_event_box_set_visible_window(GTK_EVENT_BOX(event_box), TRUE);
         gtk_widget_show(event_box);
-        gtk_container_add(GTK_CONTAINER(event_box), label);
-	gtk_box_pack_start (GTK_BOX (tab_hbox), event_box, TRUE, TRUE, 0);
+
+        gtk_container_add(GTK_CONTAINER(event_box), tab_hbox);
+
+
+	colorstring = gnc_plugin_page_get_page_color(page);
+
+	if (gdk_color_parse(colorstring, &TabColor)) {
+	  gtk_widget_modify_bg(event_box, GTK_STATE_NORMAL, &TabColor);
+	  gtk_widget_modify_bg(event_box, GTK_STATE_ACTIVE, &TabColor);
+	}
 
         text = gnc_plugin_page_get_page_long_name(page);
         if (text) {
@@ -2397,7 +2514,7 @@ gnc_main_window_open_page (GncMainWindow
 	/*
 	 * Now install it all in the window.
 	 */
-	gnc_main_window_connect(window, page, tab_hbox, label);
+	gnc_main_window_connect(window, page, event_box, label);
 
 	LEAVE("");
 }
diff -rupN original/src/gnome-utils/gnc-main-window.h update/src/gnome-utils/gnc-main-window.h
--- original/src/gnome-utils/gnc-main-window.h	2009-12-02 00:47:07.000000000 +0000
+++ update/src/gnome-utils/gnc-main-window.h	2010-01-25 15:05:42.000000000 +0000
@@ -156,10 +156,28 @@ void gnc_main_window_foreach_page (GncMa
 GncPluginPage *gnc_main_window_get_current_page (GncMainWindow *window);
 
 
+/** Update the name of the page in the main window.
+ *
+ *  @parm page The page to be updated.
+ *
+ *  @parm name_in The new name for the page.
+*/
 void
 main_window_update_page_name (GncPluginPage *page,
 			      const gchar *name_in);
 
+
+/** Update the color on the page tabs in the main window.
+ *
+ *  @parm page The page to be updated.
+ *
+ *  @parm color_in The new color string for the page tab.
+*/
+void
+main_window_update_page_color (GncPluginPage *page,
+			      const gchar *color_in);
+
+
 /** Manually add a set of actions to the specified window.  Plugins
  *  whose user interface is not hard coded (e.g. the menu-additions *
  *  plugin) must create their actions at run time, then use this *
diff -rupN original/src/gnome-utils/gnc-plugin-page.c update/src/gnome-utils/gnc-plugin-page.c
--- original/src/gnome-utils/gnc-plugin-page.c	2009-12-02 00:47:07.000000000 +0000
+++ update/src/gnome-utils/gnc-plugin-page.c	2010-01-25 14:55:45.000000000 +0000
@@ -69,6 +69,7 @@ enum {
 enum {
   PROP_0,
   PROP_PAGE_NAME,
+  PROP_PAGE_COLOR,
   PROP_PAGE_URI,
   PROP_BOOK,
   PROP_STATUSBAR_TEXT,
@@ -96,6 +97,7 @@ typedef struct _GncPluginPagePrivate
 
 	gchar *page_name;
 	gchar *page_long_name;
+	gchar *page_color;
 	gchar *uri;
 	gchar *statusbar_text;
 } GncPluginPagePrivate;
@@ -402,6 +404,17 @@ gnc_plugin_page_class_init (GncPluginPag
 
         g_object_class_install_property
 	  (gobject_class,
+	   PROP_PAGE_COLOR,
+	   g_param_spec_string ("page-color",
+				"Page Color",
+				"The color of this page.  This value is "
+				"used to generate the notebook tab color "
+				"when this page is visible.",
+				NULL,
+				G_PARAM_READWRITE));
+
+        g_object_class_install_property
+	  (gobject_class,
 	   PROP_PAGE_URI,
 	   g_param_spec_string ("page-uri",
 				"Page URI",
@@ -514,6 +527,7 @@ gnc_plugin_page_init (GncPluginPage *pag
 
 	priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
 	priv->page_name   = NULL;
+	priv->page_color  = NULL;
 	priv->uri         = NULL;
 
 	page->window      = NULL;
@@ -541,6 +555,8 @@ gnc_plugin_page_finalize (GObject *objec
   priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
   if (priv->page_name)
 	g_free(priv->page_name);
+  if (priv->page_color)
+	g_free(priv->page_color);
   if (priv->uri)
 	g_free(priv->uri);
   if (priv->statusbar_text)
@@ -596,6 +612,9 @@ gnc_plugin_page_get_property (GObject   
     case PROP_PAGE_NAME:
       g_value_set_string (value, priv->page_name);
       break;
+    case PROP_PAGE_COLOR:
+      g_value_set_string (value, priv->page_color);
+      break;
     case PROP_PAGE_URI:
       g_value_set_string (value, priv->uri);
       break;
@@ -654,6 +673,9 @@ gnc_plugin_page_set_property (GObject   
     case PROP_PAGE_NAME:
       gnc_plugin_page_set_page_name(page, g_value_get_string(value));
       break;
+    case PROP_PAGE_COLOR:
+      gnc_plugin_page_set_page_color(page, g_value_get_string(value));
+      break;
     case PROP_PAGE_URI:
       gnc_plugin_page_set_uri(page, g_value_get_string(value));
       break;
@@ -787,7 +809,7 @@ gnc_plugin_page_get_page_long_name (GncP
 
 
 /*  Set the long name of this page.  This is the string used in the
- *  tooltip that is attached to the pate name in the notebook tab. */
+ *  tooltip that is attached to the page name in the notebook tab. */
 void
 gnc_plugin_page_set_page_long_name (GncPluginPage *page, const gchar *name)
 {
@@ -802,6 +824,34 @@ gnc_plugin_page_set_page_long_name (GncP
 }
 
 
+/*  Get the color of this page.  This is the string used in the notebook tab. */
+const gchar *
+gnc_plugin_page_get_page_color (GncPluginPage *page)
+{
+  GncPluginPagePrivate *priv;
+
+  g_return_val_if_fail (GNC_IS_PLUGIN_PAGE (page), NULL);
+
+  priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
+  return priv->page_color;
+}
+
+
+/*  Set the color of this page.  This is the string used in the notebook tab. */
+void
+gnc_plugin_page_set_page_color (GncPluginPage *page, const gchar *color)
+{
+  GncPluginPagePrivate *priv;
+
+  g_return_if_fail (GNC_IS_PLUGIN_PAGE (page));
+
+  priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
+  if (priv->page_color)
+    g_free(priv->page_color);
+  priv->page_color = g_strdup(color);
+}
+
+
 /*  Retrieve the Uniform Resource Identifier for this page. */
 const gchar *
 gnc_plugin_page_get_uri (GncPluginPage *page)
diff -rupN original/src/gnome-utils/gnc-plugin-page.h update/src/gnome-utils/gnc-plugin-page.h
--- original/src/gnome-utils/gnc-plugin-page.h	2009-12-02 00:47:07.000000000 +0000
+++ update/src/gnome-utils/gnc-plugin-page.h	2010-01-25 14:54:00.000000000 +0000
@@ -374,6 +374,28 @@ const gchar *gnc_plugin_page_get_page_lo
 void gnc_plugin_page_set_page_long_name (GncPluginPage *page, const char *name);
 
 
+/** Retrieve the color of this page. This is the color string used
+ *  in the notebook tab.
+ *
+ *  @param page The page whose name should be retrieved.
+ *
+ *  @return The color for this page.  This string is owned by the page and
+ *  should not be freed by the caller.
+ */
+const gchar *gnc_plugin_page_get_page_color (GncPluginPage *page);
+
+
+/** Set the color of this page. This is the color string used
+ *  in the notebook tab.
+ *
+ *  @param page The page whose name should be retrieved.
+ *
+ *  @return The color for this page.  This string is owned by the page and
+ *  should not be freed by the caller.
+ */
+void gnc_plugin_page_set_page_color (GncPluginPage *page, const char *color);
+
+
 /** Retrieve the Uniform Resource Identifier for this page.
  *
  *  @param page The page whose URI should be retrieved.
