diff -up atk-2.22.0/atk/atkgobjectaccessible.c.test atk-2.22.0/atk/atkgobjectaccessible.c
--- atk-2.22.0/atk/atkgobjectaccessible.c.test	2016-09-19 15:26:16.000000000 +0200
+++ atk-2.22.0/atk/atkgobjectaccessible.c	2017-04-25 11:25:16.853844409 +0200
@@ -168,9 +168,25 @@ atk_gobject_accessible_dispose (gpointer
 }
 
 static void
+atk_gobject_accessible_real_dispose (GObject *object)
+{
+   GObject *obj = atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (object));
+
+   if (obj) {
+      g_object_set_qdata (object, quark_accessible_object, NULL);
+      g_object_weak_unref (obj,
+                           (GWeakNotify) atk_gobject_accessible_dispose,
+                           object);
+   }
+
+   G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static void
 atk_gobject_accessible_class_init (AtkGObjectAccessibleClass *klass)
 { 
   AtkObjectClass *class;
+  GObjectClass *object_class;
 
   class = ATK_OBJECT_CLASS (klass);
 
@@ -178,6 +194,9 @@ atk_gobject_accessible_class_init (AtkGO
 
   class->initialize = atk_real_gobject_accessible_initialize;
 
+  object_class = G_OBJECT_CLASS (klass);
+  object_class->dispose = atk_gobject_accessible_real_dispose;
+
   if (!quark_accessible_object)
     quark_accessible_object = g_quark_from_static_string ("accessible-object");
   quark_object = g_quark_from_static_string ("object-for-accessible");
