diff -ru evolution-2.9.5/a11y/e-table/gal-a11y-e-cell-tree.c evolution-2.9.5.hack/a11y/e-table/gal-a11y-e-cell-tree.c
--- evolution-2.9.5/a11y/e-table/gal-a11y-e-cell-tree.c	2007-01-03 15:34:57.000000000 +0000
+++ evolution-2.9.5.hack/a11y/e-table/gal-a11y-e-cell-tree.c	2007-01-30 11:14:56.000000000 +0000
@@ -50,9 +50,30 @@
 }
 
 static void
+kill_view_cb(ECellView *subcell_view,
+             GList *subcell_a11ies)
+{
+        GList *node;
+        GalA11yECell *subcell;
+        for (node = subcell_a11ies; node != NULL; node = g_list_next (node))
+        {
+            subcell = GAL_A11Y_E_CELL(node->data);
+            if (subcell && subcell->cell_view == subcell_view)
+            {
+                fprintf(stderr, "subcell_view %p deleted before the a11y object %p\n", subcell_view, subcell);
+                subcell->cell_view = NULL;
+            }
+        }
+}
+
+static void
 ectr_subcell_weak_ref (GalA11yECellTree *a11y,
 		       GalA11yECell     *subcell_a11y)
 {
+        ECellView *subcell_view = subcell_a11y ? subcell_a11y->cell_view : 0;
+        if (subcell_a11y && subcell_view && subcell_view->kill_view_cb_data)
+            g_list_remove(subcell_view->kill_view_cb_data, subcell_a11y);
+
 	g_signal_handler_disconnect (GAL_A11Y_E_CELL (a11y)->item->table_model,
 				     a11y->model_row_changed_id);
 	g_object_unref (a11y);
@@ -207,6 +233,14 @@
 		g_signal_connect (item->table_model, "model_row_changed",
 				  G_CALLBACK (ectr_model_row_changed_cb),
 				  subcell_a11y);
+
+        if (subcell_a11y && subcell_view)
+        {
+            subcell_view->kill_view_cb = kill_view_cb;
+            if (!g_list_find(subcell_view->kill_view_cb_data, subcell_a11y))
+                subcell_view->kill_view_cb_data = g_list_append(subcell_view->kill_view_cb_data, subcell_a11y);
+        }
+
 	g_object_weak_ref (G_OBJECT (subcell_a11y), (GWeakNotify) ectr_subcell_weak_ref, a11y);
 
 	return subcell_a11y;
diff -ru evolution-2.9.5/widgets/table/e-cell.h evolution-2.9.5.hack/widgets/table/e-cell.h
--- evolution-2.9.5/widgets/table/e-cell.h	2007-01-03 15:34:45.000000000 +0000
+++ evolution-2.9.5.hack/widgets/table/e-cell.h	2007-01-30 10:39:27.000000000 +0000
@@ -73,13 +73,16 @@
 	GtkObject       object;
 } ECell;
 
-typedef struct {
+typedef struct _ECellView {
 	ECell *ecell;
 	ETableModel *e_table_model;
 	void        *e_table_item_view;
 	
 	gint   focus_x1, focus_y1, focus_x2, focus_y2;
 	gint   focus_col, focus_row;
+
+	void  (*kill_view_cb) (struct _ECellView*, gpointer );
+	GList *kill_view_cb_data;
 } ECellView;
 
 #define E_CELL_IS_FOCUSED(ecell_view) (ecell_view->focus_x1 != -1)
diff -ru evolution-2.9.5/widgets/table/e-cell-hbox.c evolution-2.9.5.hack/widgets/table/e-cell-hbox.c
--- evolution-2.9.5/widgets/table/e-cell-hbox.c	2007-01-03 15:34:45.000000000 +0000
+++ evolution-2.9.5.hack/widgets/table/e-cell-hbox.c	2007-01-30 10:35:27.000000000 +0000
@@ -61,6 +61,8 @@
 	hbox_view->cell_view.ecell = ecell;
 	hbox_view->cell_view.e_table_model = table_model;
 	hbox_view->cell_view.e_table_item_view = e_table_item_view;
+        hbox_view->cell_view.kill_view_cb = NULL;
+        hbox_view->cell_view.kill_view_cb_data = NULL;
 	
 	/* create our subcell view */
 	hbox_view->subcell_view_count = ecv->subcell_count;
@@ -86,6 +88,12 @@
 	ECellHboxView *hbox_view = (ECellHboxView *) ecv;
 	int i;
 
+        if (hbox_view->cell_view.kill_view_cb)
+            (hbox_view->cell_view.kill_view_cb)(ecv, hbox_view->cell_view.kill_view_cb_data);
+
+        if (hbox_view->cell_view.kill_view_cb_data)
+            g_list_free(hbox_view->cell_view.kill_view_cb_data);
+
 	/* kill our subcell view */
 	for (i = 0; i < hbox_view->subcell_view_count; i++)
 		e_cell_kill_view (hbox_view->subcell_views[i]);
diff -ru evolution-2.9.5/widgets/table/e-cell-pixbuf.c evolution-2.9.5.hack/widgets/table/e-cell-pixbuf.c
--- evolution-2.9.5/widgets/table/e-cell-pixbuf.c	2007-01-03 15:34:45.000000000 +0000
+++ evolution-2.9.5.hack/widgets/table/e-cell-pixbuf.c	2007-01-30 10:35:48.000000000 +0000
@@ -103,6 +103,9 @@
     pixbuf_view->cell_view.ecell = ecell;
     pixbuf_view->cell_view.e_table_model = table_model;
     pixbuf_view->cell_view.e_table_item_view = e_table_item_view;
+    pixbuf_view->cell_view.kill_view_cb = NULL;
+    pixbuf_view->cell_view.kill_view_cb_data = NULL;
+
     pixbuf_view->canvas = canvas;
 
     return (ECellView *) pixbuf_view;
@@ -113,6 +116,12 @@
 {
     ECellPixbufView *pixbuf_view = (ECellPixbufView *) ecell_view;
 
+    if (pixbuf_view->cell_view.kill_view_cb)
+        (pixbuf_view->cell_view.kill_view_cb)(ecell_view, pixbuf_view->cell_view.kill_view_cb_data);
+
+    if (pixbuf_view->cell_view.kill_view_cb_data)
+        g_list_free(pixbuf_view->cell_view.kill_view_cb_data);
+
     g_free (pixbuf_view);
 }
 
diff -ru evolution-2.9.5/widgets/table/e-cell-popup.c evolution-2.9.5.hack/widgets/table/e-cell-popup.c
--- evolution-2.9.5/widgets/table/e-cell-popup.c	2007-01-03 15:34:45.000000000 +0000
+++ evolution-2.9.5.hack/widgets/table/e-cell-popup.c	2007-01-30 10:36:10.000000000 +0000
@@ -208,6 +208,8 @@
 	ecp_view->cell_view.ecell = ecell;
 	ecp_view->cell_view.e_table_model = table_model;
 	ecp_view->cell_view.e_table_item_view = e_table_item_view;
+        ecp_view->cell_view.kill_view_cb = NULL;
+        ecp_view->cell_view.kill_view_cb_data = NULL;
 
 	ecp_view->child_view = e_cell_new_view (ecp->child, table_model,
 						e_table_item_view);
@@ -224,6 +226,12 @@
 {
 	ECellPopupView *ecp_view = (ECellPopupView *) ecv;
 
+        if (ecp_view->cell_view.kill_view_cb)
+            (ecp_view->cell_view.kill_view_cb)(ecv, ecp_view->cell_view.kill_view_cb_data);
+
+        if (ecp_view->cell_view.kill_view_cb_data)
+            g_list_free(ecp_view->cell_view.kill_view_cb_data);
+
 	if (ecp_view->child_view)
 		e_cell_kill_view (ecp_view->child_view);
 	g_free (ecp_view);
diff -ru evolution-2.9.5/widgets/table/e-cell-progress.c evolution-2.9.5.hack/widgets/table/e-cell-progress.c
--- evolution-2.9.5/widgets/table/e-cell-progress.c	2007-01-03 15:34:45.000000000 +0000
+++ evolution-2.9.5.hack/widgets/table/e-cell-progress.c	2007-01-30 10:36:32.000000000 +0000
@@ -70,6 +70,8 @@
 	progress_view->cell_view.ecell = ecell;
 	progress_view->cell_view.e_table_model = table_model;
 	progress_view->cell_view.e_table_item_view = e_table_item_view;
+        progress_view->cell_view.kill_view_cb = NULL;
+        progress_view->cell_view.kill_view_cb_data = NULL;
 	progress_view->canvas = canvas;
 	
 	return (ECellView *) progress_view;
@@ -78,6 +80,14 @@
 static void
 eprog_kill_view (ECellView *ecell_view)
 {
+        ECellProgressView *progress_view = (ECellProgressView*) ecell_view;
+
+        if (progress_view->cell_view.kill_view_cb)
+            (progress_view->cell_view.kill_view_cb)(ecell_view, progress_view->cell_view.kill_view_cb_data);
+
+        if (progress_view->cell_view.kill_view_cb_data)
+            g_list_free(progress_view->cell_view.kill_view_cb_data);
+
 	g_free (ecell_view);
 }	
 
diff -ru evolution-2.9.5/widgets/table/e-cell-spin-button.c evolution-2.9.5.hack/widgets/table/e-cell-spin-button.c
--- evolution-2.9.5/widgets/table/e-cell-spin-button.c	2007-01-03 15:34:45.000000000 +0000
+++ evolution-2.9.5.hack/widgets/table/e-cell-spin-button.c	2007-01-30 09:39:07.000000000 +0000
@@ -187,6 +187,8 @@
 	ecsb_view->cell_view.ecell = ecell;
 	ecsb_view->cell_view.e_table_model = etm;
 	ecsb_view->cell_view.e_table_item_view = eti_view;
+        ecsb_view->cell_view.kill_view_cb = NULL;
+        ecsb_view->cell_view.kill_view_cb_data = NULL;
 
 	ecsb_view->child_view = e_cell_new_view (ecsb->child, etm, eti_view);
 
diff -ru evolution-2.9.5/widgets/table/e-cell-text.c evolution-2.9.5.hack/widgets/table/e-cell-text.c
--- evolution-2.9.5/widgets/table/e-cell-text.c	2007-01-30 11:09:05.000000000 +0000
+++ evolution-2.9.5.hack/widgets/table/e-cell-text.c	2007-01-30 10:36:50.000000000 +0000
@@ -362,12 +362,16 @@
 	text_view->cell_view.ecell = ecell;
 	text_view->cell_view.e_table_model = table_model;
 	text_view->cell_view.e_table_item_view = e_table_item_view;
+	text_view->cell_view.kill_view_cb = NULL;
+        text_view->cell_view.kill_view_cb_data = NULL;
+	
 
 	text_view->canvas = canvas;
 
 	text_view->xofs = 0.0;
 	text_view->yofs = 0.0;
-	
+
+       
 	return (ECellView *)text_view;
 }
 
@@ -379,6 +383,12 @@
 {
 	ECellTextView *text_view = (ECellTextView *) ecv;
 
+	if (text_view->cell_view.kill_view_cb)
+            (text_view->cell_view.kill_view_cb)(ecv, text_view->cell_view.kill_view_cb_data);
+
+	if (text_view->cell_view.kill_view_cb_data)
+	    g_list_free(text_view->cell_view.kill_view_cb_data);
+
 	g_free (text_view);
 }
 
diff -ru evolution-2.9.5/widgets/table/e-cell-toggle.c evolution-2.9.5.hack/widgets/table/e-cell-toggle.c
--- evolution-2.9.5/widgets/table/e-cell-toggle.c	2007-01-03 15:34:45.000000000 +0000
+++ evolution-2.9.5.hack/widgets/table/e-cell-toggle.c	2007-01-30 10:37:13.000000000 +0000
@@ -80,6 +80,8 @@
 	toggle_view->cell_view.ecell = ecell;
 	toggle_view->cell_view.e_table_model = table_model;
 	toggle_view->cell_view.e_table_item_view = e_table_item_view;
+        toggle_view->cell_view.kill_view_cb = NULL;
+        toggle_view->cell_view.kill_view_cb_data = NULL;
 	toggle_view->canvas = canvas;
 	toggle_view->pixmap_cache = g_new (GdkPixmap *, etog->n_states * CACHE_SEQ_COUNT);
 	for (i = 0; i < etog->n_states * CACHE_SEQ_COUNT; i++)
@@ -95,6 +97,12 @@
 	ECellToggleView *toggle_view = (ECellToggleView *) ecell_view;
 	int i;
 
+        if (toggle_view->cell_view.kill_view_cb)
+            (toggle_view->cell_view.kill_view_cb)(ecell_view, toggle_view->cell_view.kill_view_cb_data);
+
+        if (toggle_view->cell_view.kill_view_cb_data)
+            g_list_free(toggle_view->cell_view.kill_view_cb_data);
+
 	for (i = 0; i < etog->n_states * CACHE_SEQ_COUNT; i++)
 		if (toggle_view->pixmap_cache[i])
 			g_object_unref (toggle_view->pixmap_cache[i]);
diff -ru evolution-2.9.5/widgets/table/e-cell-tree.c evolution-2.9.5.hack/widgets/table/e-cell-tree.c
--- evolution-2.9.5/widgets/table/e-cell-tree.c	2007-01-03 15:34:45.000000000 +0000
+++ evolution-2.9.5.hack/widgets/table/e-cell-tree.c	2007-01-30 10:37:36.000000000 +0000
@@ -133,6 +133,8 @@
 	tree_view->cell_view.ecell = ecell;
 	tree_view->cell_view.e_table_model = table_model;
 	tree_view->cell_view.e_table_item_view = e_table_item_view;
+        tree_view->cell_view.kill_view_cb = NULL;
+        tree_view->cell_view.kill_view_cb_data = NULL;
 	
 	/* create our subcell view */
 	tree_view->subcell_view = e_cell_new_view (ect->subcell, table_model, e_table_item_view /* XXX */);
@@ -150,6 +152,12 @@
 {
 	ECellTreeView *tree_view = (ECellTreeView *) ecv;
 
+        if (tree_view->cell_view.kill_view_cb)
+            (tree_view->cell_view.kill_view_cb)(ecv, tree_view->cell_view.kill_view_cb_data);
+
+        if (tree_view->cell_view.kill_view_cb_data)
+            g_list_free(tree_view->cell_view.kill_view_cb_data);
+
 	/* kill our subcell view */
 	e_cell_kill_view (tree_view->subcell_view);
 
diff -ru evolution-2.9.5/widgets/table/e-cell-vbox.c evolution-2.9.5.hack/widgets/table/e-cell-vbox.c
--- evolution-2.9.5/widgets/table/e-cell-vbox.c	2007-01-03 15:34:45.000000000 +0000
+++ evolution-2.9.5.hack/widgets/table/e-cell-vbox.c	2007-01-30 10:37:58.000000000 +0000
@@ -61,6 +61,8 @@
 	vbox_view->cell_view.ecell = ecell;
 	vbox_view->cell_view.e_table_model = table_model;
 	vbox_view->cell_view.e_table_item_view = e_table_item_view;
+        vbox_view->cell_view.kill_view_cb = NULL;
+        vbox_view->cell_view.kill_view_cb_data = NULL;
 	
 	/* create our subcell view */
 	vbox_view->subcell_view_count = ecv->subcell_count;
@@ -84,6 +86,12 @@
 	ECellVboxView *vbox_view = (ECellVboxView *) ecv;
 	int i;
 
+        if (vbox_view->cell_view.kill_view_cb)
+        	(vbox_view->cell_view.kill_view_cb)(ecv, vbox_view->cell_view.kill_view_cb_data);
+
+        if (vbox_view->cell_view.kill_view_cb_data)
+            g_list_free(vbox_view->cell_view.kill_view_cb_data);
+
 	/* kill our subcell view */
 	for (i = 0; i < vbox_view->subcell_view_count; i++)
 		e_cell_kill_view (vbox_view->subcell_views[i]);
