diff --git a/widgets/table/gal-a11y-e-table-item.c b/widgets/table/gal-a11y-e-table-item.c
index 560ea3f..e75b925 100644
--- a/widgets/table/gal-a11y-e-table-item.c
+++ b/widgets/table/gal-a11y-e-table-item.c
@@ -43,6 +43,8 @@
 #include "gal-a11y-e-cell-registry.h"
 #include "gal-a11y-e-cell.h"
 #include "gal-a11y-e-table-column-header.h"
+#include "gal-a11y-e-table.h"
+#include "gal-a11y-e-tree.h"
 
 static GObjectClass *parent_class;
 static AtkComponentIface *component_parent_iface;
@@ -165,6 +167,33 @@ eti_a11y_get_gobject (AtkObject *accessible)
 	return atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (accessible));
 }
 
+static gboolean
+is_etable_etree_focused (AtkObject *cell)
+{
+	AtkObject *currently_focused;
+
+	currently_focused = atk_get_focus_object ();
+
+	while (currently_focused) {
+		if (GAL_A11Y_IS_E_TABLE (currently_focused) || GAL_A11Y_IS_E_TREE (currently_focused))
+			break;
+
+		currently_focused = atk_object_get_parent (currently_focused);
+	}
+
+	if (!cell || !currently_focused)
+		return FALSE;
+
+	while (cell) {
+		if (cell == currently_focused)
+			return TRUE;
+
+		cell = atk_object_get_parent (cell);
+	}
+
+	return FALSE;
+}
+
 static void
 eti_a11y_reset_focus_object (GalA11yETableItem *a11y,
                              ETableItem *item,
@@ -204,7 +233,7 @@ eti_a11y_reset_focus_object (GalA11yETableItem *a11y,
 	} else
 		g_object_set_data (G_OBJECT (a11y), "gail-focus-object", NULL);
 
-	if (notify && cell)
+	if (notify && cell && is_etable_etree_focused (cell))
 		atk_focus_tracker_notify (cell);
 }
 
diff --git a/widgets/table/gal-a11y-e-table.c b/widgets/table/gal-a11y-e-table.c
index 5db3f44..de31e4b 100644
--- a/widgets/table/gal-a11y-e-table.c
+++ b/widgets/table/gal-a11y-e-table.c
@@ -283,8 +283,7 @@ gal_a11y_e_table_new (GObject *widget)
 
 	a11y = g_object_new (gal_a11y_e_table_get_type (), NULL);
 
-	/* FIXME No way to do this in GTK 3. */
-	/*GTK_ACCESSIBLE (a11y)->widget = GTK_WIDGET (widget);*/
+	gtk_accessible_set_widget (GTK_ACCESSIBLE (a11y), GTK_WIDGET (widget));
 
 	/* we need to init all the children for multiple table items */
 	if (table && gtk_widget_get_mapped (GTK_WIDGET (table)) && table->group && E_IS_TABLE_GROUP_CONTAINER (table->group)) {
diff --git a/widgets/table/gal-a11y-e-tree.c b/widgets/table/gal-a11y-e-tree.c
index 4507e21..f26c525 100644
--- a/widgets/table/gal-a11y-e-tree.c
+++ b/widgets/table/gal-a11y-e-tree.c
@@ -178,8 +178,7 @@ gal_a11y_e_tree_new (GObject *widget)
 
 	a11y = g_object_new (gal_a11y_e_tree_get_type (), NULL);
 
-	/* FIXME No way to do this in GTK 3. */
-	/*GTK_ACCESSIBLE (a11y)->widget = GTK_WIDGET (widget);*/
+	gtk_accessible_set_widget (GTK_ACCESSIBLE (a11y), GTK_WIDGET (widget));
 
 	return ATK_OBJECT (a11y);
 }
