diff --git src/business/business-gnome/dialog-invoice.c src/business/business-gnome/dialog-invoice.c
index c90c119..5a12f1a 100644
--- src/business/business-gnome/dialog-invoice.c
+++ src/business/business-gnome/dialog-invoice.c
@@ -2290,7 +2290,7 @@ gnc_invoice_create_page (InvoiceWindow *iw, gpointer page)
         regWidget = gnucash_register_new (gnc_entry_ledger_get_table
                                           (entry_ledger));
         gtk_widget_show(regWidget);
-        gnc_table_init_gui( regWidget, entry_ledger );
+        gnc_table_init_gui( regWidget, NULL);
 
         frame = GTK_WIDGET (gtk_builder_get_object (builder, "ledger_frame"));
         gtk_container_add (GTK_CONTAINER (frame), regWidget);
diff --git src/business/business-gnome/dialog-order.c src/business/business-gnome/dialog-order.c
index 29961d3..dc4c528 100644
--- src/business/business-gnome/dialog-order.c
+++ src/business/business-gnome/dialog-order.c
@@ -644,7 +644,7 @@ gnc_order_new_window (QofBook *bookp, OrderDialogType type,
 
     /* Watch the order of operations, here... */
     regWidget = gnucash_register_new (gnc_entry_ledger_get_table (entry_ledger));
-    gnc_table_init_gui( regWidget, entry_ledger );
+    gnc_table_init_gui( regWidget, NULL);
     ow->reg = GNUCASH_REGISTER (regWidget);
     GNUCASH_SHEET (ow->reg->sheet)->window = GTK_WIDGET(ow->dialog);
     gnc_entry_ledger_set_parent (entry_ledger, ow->dialog);
diff --git src/gnome/gnc-split-reg.c src/gnome/gnc-split-reg.c
index 05fad6e..11a260a 100644
--- src/gnome/gnc-split-reg.c
+++ src/gnome/gnc-split-reg.c
@@ -388,6 +388,14 @@ gsr_create_table( GNCSplitReg *gsr )
     GtkWidget *register_widget;
     SplitRegister *sr;
 
+    gchar *gconf_key;
+    const GncGUID * guid;
+    Account * account;
+    
+    account = gnc_ledger_display_leader(gsr->ledger);
+    guid = xaccAccountGetGUID(account);
+    gconf_key = (gchar*)guid_to_string (guid);
+
     ENTER("gsr=%p", gsr);
 
     gnc_ledger_display_set_user_data( gsr->ledger, (gpointer)gsr );
@@ -399,8 +407,7 @@ gsr_create_table( GNCSplitReg *gsr )
     sr = gnc_ledger_display_get_split_register( gsr->ledger );
     register_widget = gnucash_register_new( sr->table );
     gsr->reg = GNUCASH_REGISTER( register_widget );
-    gnc_table_init_gui( GTK_WIDGET(gsr->reg), sr );
-
+    gnc_table_init_gui( GTK_WIDGET(gsr->reg), gconf_key );
     gtk_box_pack_start (GTK_BOX (gsr), GTK_WIDGET(gsr->reg), TRUE, TRUE, 0);
     GNUCASH_SHEET(gsr->reg->sheet)->window = gsr->window;
     gtk_widget_show ( GTK_WIDGET(gsr->reg) );
@@ -696,7 +703,16 @@ static void
 gnc_split_reg_ld_destroy( GNCLedgerDisplay *ledger )
 {
     GNCSplitReg *gsr = gnc_ledger_display_get_user_data( ledger );
-
+    
+    gchar *gconf_key;
+    const GncGUID * guid;
+    Account * account;
+    
+    account = gnc_ledger_display_leader(ledger);
+    guid = xaccAccountGetGUID(account);
+    gconf_key = (gchar*)guid_to_string (guid);
+    
+    
     if (gsr)
     {
         SplitRegister *reg;
@@ -704,7 +720,7 @@ gnc_split_reg_ld_destroy( GNCLedgerDisplay *ledger )
         reg = gnc_ledger_display_get_split_register (ledger);
 
         if (reg && reg->table)
-            gnc_table_save_state (reg->table);
+            gnc_table_save_state (reg->table, gconf_key);
 
         /*
          * Don't destroy the window here any more.  The register no longer
diff --git src/register/register-core/table-allgui.h src/register/register-core/table-allgui.h
index 9f97274..b6d23e9 100644
--- src/register/register-core/table-allgui.h
+++ src/register/register-core/table-allgui.h
@@ -166,7 +166,7 @@ Table *     gnc_table_new (TableLayout *layout,
                            TableControl *control);
 void        gnc_virtual_location_init (VirtualLocation *vloc);
 
-void        gnc_table_save_state (Table *table);
+void        gnc_table_save_state (Table *table, gchar *gconf_key);
 void        gnc_table_destroy (Table *table);
 
 
@@ -303,7 +303,7 @@ gboolean    gnc_table_find_close_valid_cell (Table *table,
 /** UI-specific functions *******************************/
 
 /* Initialize the GUI from a table */
-void        gnc_table_init_gui (GtkWidget *widget, gpointer data);
+void        gnc_table_init_gui (GtkWidget *widget, gchar * gconf_key);
 
 void        gnc_table_realize_gui (Table *table);
 
diff --git src/register/register-gnome/table-gnome.c src/register/register-gnome/table-gnome.c
index c539e6f..68dc216 100644
--- src/register/register-gnome/table-gnome.c
+++ src/register/register-gnome/table-gnome.c
@@ -53,6 +53,8 @@
 #include "gnc-gconf-utils.h"
 #include "gnc-engine.h"
 
+#include "gnc-ledger-display.h"
+
 #define GCONF_SECTION "window/pages/register"
 
 
@@ -65,13 +67,17 @@ static QofLogModule log_module = GNC_MOD_REGISTER;
 /** Implementation *****************************************************/
 
 void
-gnc_table_save_state (Table *table)
+gnc_table_save_state (Table *table, gchar * gconf_key)
 {
     GnucashSheet *sheet;
     GNCHeaderWidths widths;
     GList *node;
     gchar *key;
-
+    
+    gchar * gconf_section;
+    gconf_section =g_strjoin(NULL,GCONF_SECTION, "/", gconf_key,NULL);
+    PINFO("gconf_key=%s",gconf_key );
+    
     if (!table)
         return;
 
@@ -102,7 +108,7 @@ gnc_table_save_state (Table *table)
 
         /* Remember whether the column is visible */
         key = g_strdup_printf("%s_width", cell->cell_name);
-        gnc_gconf_set_int(GCONF_SECTION, key, width, NULL);
+        gnc_gconf_set_int( gconf_section, key, width, NULL);
         g_free(key);
     }
 
@@ -147,8 +153,13 @@ table_destroy_cb (Table *table)
 /* Um, this function checks that data is not null but never uses it.
    Weird.  Also, since this function only works with a GnucashRegister
    widget, maybe some of it should be moved to gnucash-sheet.c. */
+/* Adding to previous note:  Since data doesn't appear do anything and to 
+   align the function with save_state() I've removed the check for 
+   NULL and changed two calls in dialog_order.c and dialog_invoice.c 
+   to pass NULL as second parameter. */
+   
 void
-gnc_table_init_gui (GtkWidget *widget, void *data)
+gnc_table_init_gui (GtkWidget *widget, gchar * gconf_key)
 {
     GNCHeaderWidths widths;
     GnucashSheet *sheet;
@@ -157,12 +168,19 @@ gnc_table_init_gui (GtkWidget *widget, void *data)
     GList *node;
     gchar *key;
     guint value;
-
+    
+    // Stuff for per-register settings load.
+    gchar * gconf_section;
+    if(gconf_key != NULL) gconf_section =g_strjoin(NULL,GCONF_SECTION, "/", gconf_key,NULL);
+    else gconf_key="";
+    
     g_return_if_fail (widget != NULL);
     g_return_if_fail (GNUCASH_IS_REGISTER (widget));
-    g_return_if_fail (data != NULL);
-
-    ENTER("widget=%p, data=%p", widget, data);
+    
+    PINFO("gconf_key=%s",gconf_key);
+    
+    ENTER("widget=%p, data=%p", widget, "");
+    
 
     greg = GNUCASH_REGISTER (widget);
     sheet = GNUCASH_SHEET (greg->sheet);
@@ -190,7 +208,7 @@ gnc_table_init_gui (GtkWidget *widget, void *data)
 
             /* Remember whether the column is visible */
             key = g_strdup_printf("%s_width", cell->cell_name);
-            value = gnc_gconf_get_int(GCONF_SECTION, key, NULL);
+            value = gnc_gconf_get_int(gconf_section, key, NULL);
             if (value != 0)
                 gnc_header_widths_set_width (widths, cell->cell_name, value);
             g_free(key);
