Index: src/register/register-gnome/gnucash-sheet.c
===================================================================
--- src/register/register-gnome/gnucash-sheet.c	(revision 18902)
+++ src/register/register-gnome/gnucash-sheet.c	(working copy)
@@ -1214,28 +1214,13 @@
 gnucash_sheet_check_direct_update_cell(GnucashSheet *sheet,
                                        const VirtualLocation virt_loc)
 {
-    const gchar *dupdate_list[] =
-    {
-        /* From src/register/ledger-core/split-register-layout.c */
-        /* DATE_CELL_TYPE_NAME */
-        DATE_CELL,
-        DDUE_CELL,
-        /* COMBO_CELL_TYPE_NAME */
-        XFRM_CELL,
-        MXFRM_CELL,
-        ACTN_CELL,
-        NULL,
-    };
-    const gchar *cell_name;
-    int i;
+    const gchar *type_name;
 
-    cell_name = gnc_table_get_cell_name (sheet->table, virt_loc);
-    for (i = 0; dupdate_list[i]; i++)
-    {
-        if (gnc_cell_name_equal (cell_name,
-                                 dupdate_list[i]))
-            return TRUE;
-    }
+    type_name = gnc_table_get_cell_type_name (sheet->table, virt_loc);
+
+    if( (g_strcmp0 (type_name, DATE_CELL_TYPE_NAME) == 0)
+        || (g_strcmp0 (type_name, COMBO_CELL_TYPE_NAME) == 0) ) return TRUE;
+
     return FALSE;
 }
 
@@ -3120,6 +3105,6 @@
 
 /*
   Local Variables:
-  c-basic-offset: 8
+  c-basic-offset: 4
   End:
 */
Index: src/register/ledger-core/split-register-layout.c
===================================================================
--- src/register/ledger-core/split-register-layout.c	(revision 18902)
+++ src/register/ledger-core/split-register-layout.c	(working copy)
@@ -51,6 +51,7 @@
     cell = gnc_register_make_cell (cell_type_name);
 
     gnc_basic_cell_set_name (cell, cell_name);
+    gnc_basic_cell_set_type_name (cell, cell_type_name);
     gnc_basic_cell_set_sample_text (cell, sample_text);
     gnc_basic_cell_set_alignment (cell, alignment);
     gnc_basic_cell_set_expandable (cell, expandable);
Index: src/register/register-core/basiccell.c
===================================================================
--- src/register/register-core/basiccell.c	(revision 18902)
+++ src/register/register-core/basiccell.c	(working copy)
@@ -68,7 +68,8 @@
 {
     g_free (cell->cell_name);
     cell->cell_name = NULL;
-
+    g_free (cell->cell_type_name);
+    cell->cell_type_name = NULL;
     cell->changed = FALSE;
     cell->conditionally_changed = FALSE;
 
@@ -143,7 +144,28 @@
     return (strcmp (name, cell->cell_name) == 0);
 }
 
+
 void
+gnc_basic_cell_set_type_name (BasicCell *cell, const gchar *type_name)
+{
+    if (!cell) return;
+    if (cell->cell_type_name == type_name) return;
+
+    g_free (cell->cell_type_name);
+    cell->cell_type_name = g_strdup(type_name);
+}
+
+gboolean
+gnc_basic_cell_has_type_name (BasicCell *cell, const gchar *type_name)
+{
+    if (!cell) return FALSE;
+    if (!type_name) return FALSE;
+    if(!cell->cell_type_name) return FALSE;
+
+    return (g_strcmp0 (type_name, cell->cell_type_name));
+}
+
+void
 gnc_basic_cell_set_sample_text (BasicCell *cell,
                                 const char *sample_text)
 {
Index: src/register/register-core/basiccell.h
===================================================================
--- src/register/register-core/basiccell.h	(revision 18902)
+++ src/register/register-core/basiccell.h	(working copy)
@@ -190,7 +190,7 @@
 struct basic_cell
 {
     char * cell_name;
-
+    gchar *cell_type_name;
     char * value;                  /* current value */
     guint value_chars;           /* number of characters in value */
 
@@ -233,7 +233,11 @@
 
 void         gnc_basic_cell_set_name (BasicCell *cell, const char *name);
 gboolean     gnc_basic_cell_has_name (BasicCell *cell, const char *name);
+void         gnc_basic_cell_set_type_name (BasicCell *cell, const gchar *type_name);
+gboolean     gnc_basic_cell_has_type_name (BasicCell *cell, const gchar *type_name);
 
+
+
 void         gnc_basic_cell_set_sample_text (BasicCell *cell,
         const char *sample_text);
 void         gnc_basic_cell_set_alignment (BasicCell *cell,
Index: src/register/register-core/table-allgui.c
===================================================================
--- src/register/register-core/table-allgui.c	(revision 18902)
+++ src/register/register-core/table-allgui.c	(working copy)
@@ -506,6 +506,19 @@
     return cell->cell_name;
 }
 
+const gchar *
+gnc_table_get_cell_type_name (Table *table, VirtualLocation virt_loc)
+{
+    BasicCell *cell;
+
+    cell = gnc_table_get_cell (table, virt_loc);
+    if (cell == NULL)
+        return NULL;
+
+    return cell->cell_type_name;
+}
+
+
 gboolean
 gnc_table_get_cell_location (Table *table,
                              const char *cell_name,
Index: src/register/register-core/table-allgui.h
===================================================================
--- src/register/register-core/table-allgui.h	(revision 18902)
+++ src/register/register-core/table-allgui.h	(working copy)
@@ -228,7 +228,8 @@
 
 const char *   gnc_table_get_cell_name (Table *table,
                                         VirtualLocation virt_loc);
-
+const gchar *  gnc_table_get_cell_type_name (Table *table,
+                                              VirtualLocation virt_loc);
 gboolean       gnc_table_get_cell_location (Table *table,
         const char * cell_name,
         VirtualCellLocation vcell_loc,
Index: src/business/business-ledger/gncEntryLedgerLayout.c
===================================================================
--- src/business/business-ledger/gncEntryLedgerLayout.c	(revision 18902)
+++ src/business/business-ledger/gncEntryLedgerLayout.c	(working copy)
@@ -46,6 +46,7 @@
     cell = gnc_register_make_cell (cell_type_name);
 
     gnc_basic_cell_set_name (cell, cell_name);
+    gnc_basic_cell_set_type_name (cell, cell_type_name);
     gnc_basic_cell_set_sample_text (cell, sample_text);
     gnc_basic_cell_set_alignment (cell, alignment);
     gnc_basic_cell_set_expandable (cell, expandable);
