[java-atk-wrapper] Complete facility and use it everywhere



commit e4644081d20315b7f814655069a2beaba901caf4
Author: Giuseppe <giuseppecapaldo93 gmail com>
Date:   Tue Jul 23 16:29:17 2019 +0200

    Complete facility and use it everywhere

 jni/src/AtkWrapper.c      | 135 +++++++++++++++++++++++-------------------
 jni/src/jawaction.c       |  46 ++++++++++++++-
 jni/src/jawcomponent.c    |  42 ++++++++++++-
 jni/src/jaweditabletext.c |  45 ++++++++++++++
 jni/src/jawhyperlink.c    |  38 +++++++++++-
 jni/src/jawhypertext.c    |  21 +++++++
 jni/src/jawimage.c        |  21 +++++++
 jni/src/jawimpl.c         |  53 ++++++++++++-----
 jni/src/jawimpl.h         |   1 +
 jni/src/jawobject.c       |  22 +++++++
 jni/src/jawselection.c    |  45 ++++++++++++++
 jni/src/jawtable.c        | 147 ++++++++++++++++++++++++++++++++++++++++++++--
 jni/src/jawtablecell.c    |  33 +++++++++++
 jni/src/jawtext.c         |  88 +++++++++++++++++++++++++++
 jni/src/jawtoplevel.c     |  16 ++++-
 jni/src/jawutil.c         |  23 ++++++++
 jni/src/jawutil.h         |  37 ++++++++----
 jni/src/jawvalue.c        |  29 ++++++++-
 18 files changed, 742 insertions(+), 100 deletions(-)
---
diff --git a/jni/src/AtkWrapper.c b/jni/src/AtkWrapper.c
index 492f1fe..f159c18 100644
--- a/jni/src/AtkWrapper.c
+++ b/jni/src/AtkWrapper.c
@@ -57,27 +57,28 @@ static gboolean jaw_initialized = FALSE;
 
 gboolean jaw_accessibility_init (void)
 {
+  JAW_DEBUG_ALL("");
   if (atk_bridge_adaptor_init (NULL, NULL) < 0)
     return FALSE;
-  if (jaw_debug)
-    printf("Atk Bridge Initialized\n");
+  JAW_DEBUG_I("Atk Bridge Initialized");
   return TRUE;
 }
 
 void
 jaw_accessibility_shutdown (void)
 {
+  JAW_DEBUG_ALL("");
   atk_bridge_adaptor_cleanup();
 }
 
 static gpointer jni_loop_callback(void *data)
 {
+  JAW_DEBUG_C("%p", data);
   if (!g_main_loop_is_running((GMainLoop *)data))
     g_main_loop_run((GMainLoop *)data);
   else
   {
-    if (jaw_debug)
-      printf("Running JNI already\n");
+    JAW_DEBUG_I("Running JNI already");
   }
   return 0;
 }
@@ -89,8 +90,8 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_initNativeLibrary(void)
   if (debug_env)
   {
     int val_debug = atoi(debug_env);
-    if(val_debug > 5)
-      jaw_debug = 5;
+    if(val_debug > 4)
+      jaw_debug = 4;
     else
       jaw_debug = val_debug;
   }
@@ -103,7 +104,7 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_initNativeLibrary(void)
       exit(1);
     }
   }
-  JAW_DEBUG_F(2,"");
+  JAW_DEBUG_JNI("");
 
   if (jaw_initialized)
     return TRUE;
@@ -126,6 +127,7 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_initNativeLibrary(void)
 static guint
 jni_main_idle_add(GSourceFunc    function, gpointer       data)
 {
+  JAW_DEBUG_C("%p, %p", function, data);
   GSource *source;
   guint id;
 
@@ -140,6 +142,7 @@ jni_main_idle_add(GSourceFunc    function, gpointer       data)
 JNIEXPORT void
 JNICALL Java_org_GNOME_Accessibility_AtkWrapper_loadAtkBridge(void)
 {
+  JAW_DEBUG_JNI("");
   // Enable ATK Bridge so we can load it now
   g_unsetenv ("NO_AT_BRIDGE");
 
@@ -150,8 +153,7 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_loadAtkBridge(void)
   err = NULL;
 
   jaw_initialized = jaw_accessibility_init();
-  if (jaw_debug)
-    printf("Jaw Initialization STATUS in loadAtkBridge: %d\n", jaw_initialized);
+  JAW_DEBUG_I("Jaw Initialization STATUS = %d", jaw_initialized);
   if (!jaw_initialized)
     return;
 
@@ -161,17 +163,15 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_loadAtkBridge(void)
   thread = g_thread_try_new(message, jni_loop_callback, (void *) jni_main_loop, &err);
   if(thread == NULL)
   {
-    if (jaw_debug)
-    {
-      printf("Thread create failed: %s!!\n", err->message );
-      g_error_free (err);
-    }
+    JAW_DEBUG_I("Thread create failed: %s !", err->message);
+    g_error_free (err);
   }
 }
 
 JNIEXPORT void
 JNICALL Java_org_GNOME_Accessibility_AtkWrapper_GC(JNIEnv *jniEnv)
 {
+  JAW_DEBUG_JNI("%p", jniEnv);
   object_table_gc(jniEnv);
 }
 
@@ -214,13 +214,13 @@ typedef struct _CallbackPara {
 static CallbackPara*
 alloc_callback_para (JNIEnv *jniEnv, jobject ac)
 {
+  JAW_DEBUG_C("%p, %p", jniEnv, ac);
   if (ac == NULL)
     return NULL;
   JawImpl* jaw_impl = jaw_impl_get_instance(jniEnv, ac);
   if (jaw_impl == NULL)
   {
-    if (jaw_debug)
-      g_warning("\nalloc_callback_para: jaw_impl == NULL\n");
+    JAW_DEBUG_I("jaw_impl == NULL");
     return NULL;
   }
   g_object_ref(G_OBJECT(jaw_impl));
@@ -236,16 +236,17 @@ alloc_callback_para (JNIEnv *jniEnv, jobject ac)
 static void
 free_callback_para (CallbackPara *para)
 {
+  JAW_DEBUG_C("%p", para);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   if (jniEnv == NULL)
   {
+    JAW_DEBUG_I("jniEnv == NULL");
     return;
   }
 
   if (para->global_ac == NULL)
   {
-    if (jaw_debug)
-      g_warning("free_callback_para: para->global_ac == NULL");
+    JAW_DEBUG_I("para->global_ac == NULL");
     return;
   }
 
@@ -267,6 +268,7 @@ static GMutex callback_para_frees_mutex;
 /* Add a note that this callback param should be freed from the application */
 static void queue_free_callback_para(CallbackPara *para)
 {
+  JAW_DEBUG_C("%p", para);
   g_mutex_lock(&callback_para_frees_mutex);
   callback_para_frees = g_slist_prepend(callback_para_frees, para);
   g_mutex_unlock(&callback_para_frees_mutex);
@@ -275,6 +277,7 @@ static void queue_free_callback_para(CallbackPara *para)
 /* Process the unreference requests */
 static void callback_para_process_frees(void)
 {
+  JAW_DEBUG_C("");
   GSList *list, *cur, *next;
 
   g_mutex_lock(&callback_para_frees_mutex);
@@ -293,6 +296,7 @@ static void callback_para_process_frees(void)
 static gboolean
 focus_notify_handler (gpointer p)
 {
+  JAW_DEBUG_C("%p", p);
   CallbackPara *para = (CallbackPara*)p;
 
   AtkObject* atk_obj = ATK_OBJECT(para->jaw_impl);
@@ -310,9 +314,9 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_focusNotify(JNIEnv *jniEnv,
                                                             jclass jClass,
                                                             jobject jAccContext)
 {
+  JAW_DEBUG_JNI("%p, %p, %p", jniEnv, jClass, jAccContext);
   if (!jAccContext) {
-    if (jaw_debug)
-      g_warning("%s: jAccContext == NULL", __func__);
+    JAW_DEBUG_I("jAccContext == NULL");
     return;
   }
   jobject global_ac = (*jniEnv)->NewGlobalRef(jniEnv, jAccContext);
@@ -324,6 +328,7 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_focusNotify(JNIEnv *jniEnv,
 static gboolean
 window_open_handler (gpointer p)
 {
+  JAW_DEBUG_C("%p", p);
   CallbackPara *para = (CallbackPara*)p;
   gboolean is_toplevel = para->is_toplevel;
   AtkObject* atk_obj = ATK_OBJECT(para->jaw_impl);
@@ -366,9 +371,9 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_windowOpen(JNIEnv *jniEnv,
                                                            jobject jAccContext,
                                                            jboolean jIsToplevel)
 {
+  JAW_DEBUG_JNI("%p, %p, %p, %d", jniEnv, jClass, jAccContext, jIsToplevel);
   if (!jAccContext) {
-    if (jaw_debug)
-      g_warning("%s: jAccContext == NULL", __func__);
+    JAW_DEBUG_I("jAccContext == NULL");
     return;
   }
   jobject global_ac = (*jniEnv)->NewGlobalRef(jniEnv, jAccContext);
@@ -381,6 +386,7 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_windowOpen(JNIEnv *jniEnv,
 static gboolean
 window_close_handler (gpointer p)
 {
+  JAW_DEBUG_C("%p", p);
   CallbackPara *para = (CallbackPara*)p;
   gboolean is_toplevel = para->is_toplevel;
   AtkObject* atk_obj = ATK_OBJECT(para->jaw_impl);
@@ -421,9 +427,9 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_windowClose(JNIEnv *jniEnv,
                                                             jobject jAccContext,
                                                             jboolean jIsToplevel)
 {
+  JAW_DEBUG_JNI("%p, %p, %p, %d", jniEnv, jClass, jAccContext, jIsToplevel);
   if (!jAccContext) {
-    if (jaw_debug)
-      g_warning("%s: jAccContext == NULL", __func__);
+    JAW_DEBUG_I("jAccContext == NULL");
     return;
   }
   jobject global_ac = (*jniEnv)->NewGlobalRef(jniEnv, jAccContext);
@@ -436,6 +442,7 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_windowClose(JNIEnv *jniEnv,
 static gboolean
 window_minimize_handler (gpointer p)
 {
+  JAW_DEBUG_C("%p", p);
   CallbackPara *para = (CallbackPara*)p;
   AtkObject* atk_obj = ATK_OBJECT(para->jaw_impl);
 
@@ -451,9 +458,9 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_windowMinimize(JNIEnv *jniEnv,
                                                                jclass jClass,
                                                                jobject jAccContext)
 {
+  JAW_DEBUG_JNI("%p, %p, %p", jniEnv, jClass, jAccContext);
   if (!jAccContext) {
-    if (jaw_debug)
-      g_warning("%s: jAccContext == NULL", __func__);
+    JAW_DEBUG_I("jAccContext == NULL");
     return;
   }
   jobject global_ac = (*jniEnv)->NewGlobalRef(jniEnv, jAccContext);
@@ -465,6 +472,7 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_windowMinimize(JNIEnv *jniEnv,
 static gboolean
 window_maximize_handler (gpointer p)
 {
+  JAW_DEBUG_C("%p", p);
   CallbackPara *para = (CallbackPara*)p;
   AtkObject* atk_obj = ATK_OBJECT(para->jaw_impl);
 
@@ -479,9 +487,9 @@ JNIEXPORT void JNICALL Java_org_GNOME_Accessibility_AtkWrapper_windowMaximize(JN
                                                                               jclass jClass,
                                                                               jobject jAccContext)
 {
+  JAW_DEBUG_JNI("%p, %p, %p", jniEnv, jClass, jAccContext);
   if (!jAccContext) {
-    if (jaw_debug)
-      g_warning("%s: jAccContext == NULL", __func__);
+    JAW_DEBUG_I("jAccContext == NULL");
     return;
   }
   jobject global_ac = (*jniEnv)->NewGlobalRef(jniEnv, jAccContext);
@@ -493,6 +501,7 @@ JNIEXPORT void JNICALL Java_org_GNOME_Accessibility_AtkWrapper_windowMaximize(JN
 static gboolean
 window_restore_handler (gpointer p)
 {
+  JAW_DEBUG_C("%p", p);
   CallbackPara *para = (CallbackPara*)p;
   AtkObject* atk_obj = ATK_OBJECT(para->jaw_impl);
 
@@ -507,9 +516,9 @@ JNIEXPORT void JNICALL Java_org_GNOME_Accessibility_AtkWrapper_windowRestore(JNI
                                                                              jclass jClass,
                                                                              jobject jAccContext)
 {
+  JAW_DEBUG_JNI("%p, %p, %p", jniEnv, jClass, jAccContext);
   if (!jAccContext) {
-    if (jaw_debug)
-      g_warning("%s: jAccContext == NULL", __func__);
+    JAW_DEBUG_I("jAccContext == NULL");
     return;
   }
   jobject global_ac = (*jniEnv)->NewGlobalRef(jniEnv, jAccContext);
@@ -521,6 +530,7 @@ JNIEXPORT void JNICALL Java_org_GNOME_Accessibility_AtkWrapper_windowRestore(JNI
 static gboolean
 window_activate_handler (gpointer p)
 {
+  JAW_DEBUG_C("%p", p);
   CallbackPara *para = (CallbackPara*)p;
   AtkObject* atk_obj = ATK_OBJECT(para->jaw_impl);
 
@@ -535,9 +545,9 @@ JNIEXPORT void JNICALL Java_org_GNOME_Accessibility_AtkWrapper_windowActivate(JN
                                                                               jclass jClass,
                                                                               jobject jAccContext)
 {
+  JAW_DEBUG_JNI("%p, %p, %p", jniEnv, jClass, jAccContext);
   if (!jAccContext) {
-    if (jaw_debug)
-      g_warning("%s: jAccContext == NULL", __func__);
+      JAW_DEBUG_I("jAccContext == NULL");
     return;
   }
   jobject global_ac = (*jniEnv)->NewGlobalRef(jniEnv, jAccContext);
@@ -549,6 +559,7 @@ JNIEXPORT void JNICALL Java_org_GNOME_Accessibility_AtkWrapper_windowActivate(JN
 static gboolean
 window_deactivate_handler (gpointer p)
 {
+  JAW_DEBUG_C("%p", p);
   CallbackPara *para = (CallbackPara*)p;
   AtkObject* atk_obj = ATK_OBJECT(para->jaw_impl);
 
@@ -564,9 +575,9 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_windowDeactivate(JNIEnv *jniEnv,
                                                                  jclass jClass,
                                                                  jobject jAccContext)
 {
+  JAW_DEBUG_JNI("%p, %p, %p", jniEnv, jClass, jAccContext);
   if (!jAccContext) {
-    if (jaw_debug)
-      g_warning("%s: jAccContext == NULL", __func__);
+    JAW_DEBUG_I("jAccContext == NULL");
     return;
   }
   jobject global_ac = (*jniEnv)->NewGlobalRef(jniEnv, jAccContext);
@@ -578,6 +589,7 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_windowDeactivate(JNIEnv *jniEnv,
 static gboolean
 window_state_change_handler (gpointer p)
 {
+  JAW_DEBUG_C("%p", p);
   CallbackPara *para = (CallbackPara*)p;
   AtkObject* atk_obj = ATK_OBJECT(para->jaw_impl);
 
@@ -593,9 +605,9 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_windowStateChange(JNIEnv *jniEnv
                                                                   jclass jClass,
                                                                   jobject jAccContext)
 {
+  JAW_DEBUG_JNI("%p, %p, %p", jniEnv, jClass, jAccContext);
   if (!jAccContext) {
-    if (jaw_debug)
-      g_warning("%s: jAccContext == NULL", __func__);
+    JAW_DEBUG_I("jAccContext == NULL");
     return;
   }
   jobject global_ac = (*jniEnv)->NewGlobalRef(jniEnv, jAccContext);
@@ -607,6 +619,7 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_windowStateChange(JNIEnv *jniEnv
 static gint
 get_int_value (JNIEnv *jniEnv, jobject o)
 {
+  JAW_DEBUG_C("%p, %p", jniEnv, o);
   jclass classInteger = (*jniEnv)->FindClass(jniEnv, "java/lang/Integer");
   jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv, classInteger, "intValue", "()I");
   return (gint)(*jniEnv)->CallIntMethod(jniEnv, o, jmid);
@@ -615,6 +628,7 @@ get_int_value (JNIEnv *jniEnv, jobject o)
 static gboolean
 signal_emit_handler (gpointer p)
 {
+  JAW_DEBUG_C("%p", p);
   CallbackPara *para = (CallbackPara*)p;
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobjectArray args = para->args;
@@ -850,9 +864,9 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_emitSignal(JNIEnv *jniEnv,
                                                            jint id,
                                                            jobjectArray args)
 {
+  JAW_DEBUG_JNI("%p, %p, %p, %d, %p", jniEnv, jClass, jAccContext, id, args);
   if (!jAccContext) {
-    if (jaw_debug)
-      g_warning("%s: jAccContext == NULL", __func__);
+    JAW_DEBUG_I("jAccContext == NULL");
     return;
   }
   jobject global_ac = (*jniEnv)->NewGlobalRef(jniEnv, jAccContext);
@@ -891,8 +905,7 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_emitSignal(JNIEnv *jniEnv,
       JawImpl *child_impl = jaw_impl_get_instance(jniEnv, child_ac);
       if (child_impl == NULL)
       {
-        if (jaw_debug)
-          g_warning("Java_org_GNOME_Accessibility_AtkWrapper_emitSignal: child_impl == NULL");
+        JAW_DEBUG_I("child_impl == NULL");
         free_callback_para(para);
         return;
       }
@@ -905,8 +918,7 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_emitSignal(JNIEnv *jniEnv,
       JawImpl *child_impl = jaw_impl_get_instance(jniEnv, child_ac);
       if (child_impl == NULL)
       {
-        if (jaw_debug)
-          g_warning("Java_org_GNOME_Accessibility_AtkWrapper_emitSignal: child_impl == NULL");
+        JAW_DEBUG_I("child_impl == NULL");
         free_callback_para(para);
         return;
       }
@@ -920,6 +932,7 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_emitSignal(JNIEnv *jniEnv,
 static gboolean
 object_state_change_handler (gpointer p)
 {
+  JAW_DEBUG_C("%p", p);
   CallbackPara *para = (CallbackPara*)p;
 
   atk_object_notify_state_change(ATK_OBJECT(para->jaw_impl),
@@ -937,9 +950,9 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_objectStateChange(JNIEnv *jniEnv
                                                                   jobject state,
                                                                   jboolean value)
 {
+  JAW_DEBUG_JNI("%p, %p, %p, %p, %d", jniEnv, jClass, jAccContext, state, value);
   if (!jAccContext) {
-    if (jaw_debug)
-      g_warning("%s: jAccContext == NULL", __func__);
+    JAW_DEBUG_I("jAccContext == NULL");
     return;
   }
   jobject global_ac = (*jniEnv)->NewGlobalRef(jniEnv, jAccContext);
@@ -954,6 +967,7 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_objectStateChange(JNIEnv *jniEnv
 static gboolean
 component_added_handler (gpointer p)
 {
+  JAW_DEBUG_C("%p", p);
   CallbackPara *para = (CallbackPara*)p;
   AtkObject* atk_obj = ATK_OBJECT(para->jaw_impl);
 
@@ -973,9 +987,9 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_componentAdded(JNIEnv *jniEnv,
                                                                jclass jClass,
                                                                jobject jAccContext)
 {
+  JAW_DEBUG_JNI("%p, %p, %p", jniEnv, jClass, jAccContext);
   if (!jAccContext) {
-    if (jaw_debug)
-      g_warning("%s: jAccContext == NULL", __func__);
+    JAW_DEBUG_I("jAccContext == NULL");
     return;
   }
   jobject global_ac = (*jniEnv)->NewGlobalRef(jniEnv, jAccContext);
@@ -987,13 +1001,13 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_componentAdded(JNIEnv *jniEnv,
 static gboolean
 component_removed_handler (gpointer p)
 {
+  JAW_DEBUG_C("%p", p);
   CallbackPara *para = (CallbackPara*)p;
   AtkObject* atk_obj = ATK_OBJECT(para->jaw_impl);
 
   if (atk_obj == NULL)
   {
-    if (jaw_debug)
-      g_warning("component_removed_handler: atk_obj == NULL");
+    JAW_DEBUG_I("atk_obj == NULL");
     queue_free_callback_para(para);
     return G_SOURCE_REMOVE;
   }
@@ -1009,9 +1023,9 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_componentRemoved(JNIEnv *jniEnv,
                                                                  jclass jClass,
                                                                  jobject jAccContext)
 {
+  JAW_DEBUG_JNI("%p, %p, %p", jniEnv, jClass, jAccContext);
   if (!jAccContext) {
-    if (jaw_debug)
-      g_warning("%s: jAccContext == NULL", __func__);
+    JAW_DEBUG_I("jAccContext == NULL");
     return;
   }
   jobject global_ac = (*jniEnv)->NewGlobalRef(jniEnv, jAccContext);
@@ -1026,14 +1040,14 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_componentRemoved(JNIEnv *jniEnv,
 static gboolean
 bounds_changed_handler (gpointer p)
 {
+  JAW_DEBUG_C("%p", p);
   CallbackPara *para = (CallbackPara*)p;
   AtkObject* atk_obj = ATK_OBJECT(para->jaw_impl);
   AtkRectangle rect;
 
   if (atk_obj == NULL)
   {
-    if (jaw_debug)
-      g_warning("bounds_changed_handler: atk_obj == NULL");
+    JAW_DEBUG_I("atk_obj == NULL");
     queue_free_callback_para(para);
     return G_SOURCE_REMOVE;
   }
@@ -1052,9 +1066,9 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_boundsChanged(JNIEnv *jniEnv,
                                                               jclass jClass,
                                                               jobject jAccContext)
 {
+  JAW_DEBUG_JNI("%p, %p, %p", jniEnv, jClass, jAccContext);
   if (!jAccContext) {
-    if (jaw_debug)
-      g_warning("%s: jAccContext == NULL", __func__);
+    JAW_DEBUG_I("jAccContext == NULL");
     return;
   }
   jobject global_ac = (*jniEnv)->NewGlobalRef(jniEnv, jAccContext);
@@ -1066,6 +1080,7 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_boundsChanged(JNIEnv *jniEnv,
 static gboolean
 key_dispatch_handler (gpointer p)
 {
+  JAW_DEBUG_C("%p", p);
   key_dispatch_result = 0;
   jobject jAtkKeyEvent = (jobject)p;
   AtkKeyEventStruct *event = g_new0(AtkKeyEventStruct, 1);
@@ -1073,8 +1088,7 @@ key_dispatch_handler (gpointer p)
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   if (jniEnv == NULL)
   {
-    if (jaw_debug)
-      g_warning("key_dispatch_handler: env == NULL");
+    JAW_DEBUG_I("jniEnv == NULL");
     return G_SOURCE_REMOVE;
   }
 
@@ -1156,8 +1170,7 @@ key_dispatch_handler (gpointer p)
   event->timestamp = (guint32)(*jniEnv)->GetIntField(jniEnv, jAtkKeyEvent, jfidTimestamp);
 
   gboolean b = jaw_util_dispatch_key_event (event);
-  if(jaw_debug)
-    printf("key_dispatch_result b = %d\n ", b);
+  JAW_DEBUG_I("result b = %d", b);
   if (b) {
     key_dispatch_result = KEY_DISPATCH_CONSUMED;
   } else {
@@ -1176,13 +1189,12 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_dispatchKeyEvent(JNIEnv *jniEnv,
                                                                  jclass jClass,
                                                                  jobject jAtkKeyEvent)
 {
+  JAW_DEBUG_JNI("%p, %p, %p", jniEnv, jClass, jAtkKeyEvent);
   jboolean key_consumed;
   jobject global_key_event = (*jniEnv)->NewGlobalRef(jniEnv, jAtkKeyEvent);
   callback_para_process_frees();
   jni_main_idle_add(key_dispatch_handler, (gpointer)global_key_event);
-
-  if(jaw_debug)
-    printf("key_dispatch_result saved = %d\n ", key_dispatch_result);
+  JAW_DEBUG_I("result saved = %d", key_dispatch_result);
   if (key_dispatch_result == KEY_DISPATCH_CONSUMED)
   {
     key_consumed = TRUE;
@@ -1201,6 +1213,7 @@ JNICALL Java_org_GNOME_Accessibility_AtkWrapper_getInstance(JNIEnv *jniEnv,
                                                             jclass jClass,
                                                             jobject ac)
 {
+  JAW_DEBUG_JNI("%p, %p, %p", jniEnv, jClass, ac);
   if (!ac)
     return 0;
 
diff --git a/jni/src/jawaction.c b/jni/src/jawaction.c
index 0ac04da..cbbca75 100644
--- a/jni/src/jawaction.c
+++ b/jni/src/jawaction.c
@@ -44,6 +44,7 @@ typedef struct _ActionData {
 void
 jaw_action_interface_init (AtkActionIface *iface, gpointer data)
 {
+  JAW_DEBUG_ALL("%p, %p", iface, data);
   iface->do_action = jaw_action_do_action;
   iface->get_n_actions = jaw_action_get_n_actions;
   iface->get_description = jaw_action_get_description;
@@ -56,6 +57,7 @@ jaw_action_interface_init (AtkActionIface *iface, gpointer data)
 gpointer
 jaw_action_data_init (jobject ac)
 {
+  JAW_DEBUG_ALL("%p", ac);
   ActionData *data = g_new0(ActionData, 1);
 
   JNIEnv *jniEnv = jaw_util_get_jni_env();
@@ -74,6 +76,7 @@ jaw_action_data_init (jobject ac)
 void
 jaw_action_data_finalize (gpointer p)
 {
+  JAW_DEBUG_ALL("%p", p);
   ActionData *data = (ActionData*)p;
   JNIEnv *jniEnv = jaw_util_get_jni_env();
 
@@ -119,11 +122,17 @@ jaw_action_data_finalize (gpointer p)
 static gboolean
 jaw_action_do_action (AtkAction *action, gint i)
 {
+  JAW_DEBUG_C("%p, %d", action, i);
   JawObject *jaw_obj = JAW_OBJECT(action);
+  if(!jaw_obj){
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return FALSE;
+  }
   ActionData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_ACTION);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_action = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_action);
   if (!atk_action) {
+    JAW_DEBUG_I("atk_action == NULL");
     return FALSE;
   }
 
@@ -144,11 +153,17 @@ jaw_action_do_action (AtkAction *action, gint i)
 static gint
 jaw_action_get_n_actions (AtkAction *action)
 {
+  JAW_DEBUG_C("%p", action);
   JawObject *jaw_obj = JAW_OBJECT(action);
+  if(!jaw_obj){
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return 0;
+  }
   ActionData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_ACTION);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_action = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_action);
   if (!atk_action) {
+    JAW_DEBUG_I("atk_action == NULL");
     return 0;
   }
 
@@ -166,11 +181,17 @@ jaw_action_get_n_actions (AtkAction *action)
 static const gchar*
 jaw_action_get_description (AtkAction *action, gint i)
 {
+  JAW_DEBUG_C("%p, %d", action, i);
   JawObject *jaw_obj = JAW_OBJECT(action);
+  if(!jaw_obj){
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return NULL;
+  }
   ActionData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_ACTION);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_action = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_action);
   if (!atk_action) {
+    JAW_DEBUG_I("atk_action == NULL");
     return NULL;
   }
 
@@ -205,11 +226,17 @@ jaw_action_get_description (AtkAction *action, gint i)
 static gboolean
 jaw_action_set_description (AtkAction *action, gint i, const gchar *description)
 {
+  JAW_DEBUG_C("%p, %d, %s", action, i, description);
   JawObject *jaw_obj = JAW_OBJECT(action);
+  if(!jaw_obj){
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return FALSE;
+  }
   ActionData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_ACTION);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_action = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_action);
   if (!atk_action) {
+    JAW_DEBUG_I("atk_action == NULL");
     return FALSE;
   }
 
@@ -231,11 +258,17 @@ jaw_action_set_description (AtkAction *action, gint i, const gchar *description)
 static const gchar*
 jaw_action_get_name (AtkAction *action, gint i)
 {
+  JAW_DEBUG_C("%p, %d", action, i);
   JawObject *jaw_obj = JAW_OBJECT(action);
+  if(!jaw_obj){
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return NULL;
+  }
   ActionData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_ACTION);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_action = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_action);
   if (!atk_action) {
+    JAW_DEBUG_I("atk_action == NULL");
     return NULL;
   }
 
@@ -267,11 +300,17 @@ jaw_action_get_name (AtkAction *action, gint i)
 static const gchar*
 jaw_action_get_localized_name (AtkAction *action, gint i)
 {
+  JAW_DEBUG_C("%p, %d", action, i);
   JawObject *jaw_obj = JAW_OBJECT(action);
+  if(!jaw_obj){
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return NULL;
+  }
   ActionData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_ACTION);
   JNIEnv *env = jaw_util_get_jni_env();
   jobject atk_action = (*env)->NewGlobalRef(env, data->atk_action);
   if (!atk_action) {
+    JAW_DEBUG_I("atk_action == NULL");
     return NULL;
   }
 
@@ -295,14 +334,17 @@ jaw_action_get_localized_name (AtkAction *action, gint i)
 static const gchar*
 jaw_action_get_keybinding (AtkAction *action, gint i)
 {
+  JAW_DEBUG_C("%p, %d", action, i);
   JawObject *jaw_obj = JAW_OBJECT(action);
-  if (jaw_obj == NULL)
+  if(!jaw_obj){
+    JAW_DEBUG_I("jaw_obj == NULL");
     return NULL;
-
+  }
   ActionData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_ACTION);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_action = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_action);
   if (!atk_action) {
+    JAW_DEBUG_I("atk_action == NULL");
     return NULL;
   }
 
diff --git a/jni/src/jawcomponent.c b/jni/src/jawcomponent.c
index 50130d8..a98b3fd 100644
--- a/jni/src/jawcomponent.c
+++ b/jni/src/jawcomponent.c
@@ -59,6 +59,7 @@ typedef struct _ComponentData {
 void
 jaw_component_interface_init (AtkComponentIface *iface, gpointer data)
 {
+  JAW_DEBUG_ALL("%p,%p", iface, data);
   iface->contains = jaw_component_contains;
   iface->ref_accessible_at_point = jaw_component_ref_accessible_at_point;
   iface->get_extents = jaw_component_get_extents;
@@ -71,6 +72,7 @@ jaw_component_interface_init (AtkComponentIface *iface, gpointer data)
 gpointer
 jaw_component_data_init (jobject ac)
 {
+  JAW_DEBUG_ALL("%p", ac);
   ComponentData *data = g_new0(ComponentData, 1);
 
   JNIEnv *jniEnv = jaw_util_get_jni_env();
@@ -90,6 +92,7 @@ jaw_component_data_init (jobject ac)
 void
 jaw_component_data_finalize (gpointer p)
 {
+  JAW_DEBUG_ALL("%p", p);
   ComponentData *data = (ComponentData*)p;
   JNIEnv *jniEnv = jaw_util_get_jni_env();
 
@@ -103,11 +106,17 @@ jaw_component_data_finalize (gpointer p)
 static gboolean
 jaw_component_contains (AtkComponent *component, gint x, gint y, AtkCoordType coord_type)
 {
+  JAW_DEBUG_C("%p, %d, %d, %d", component, x, y, coord_type);
   JawObject *jaw_obj = JAW_OBJECT(component);
+  if(!jaw_obj){
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return FALSE;
+  }
   ComponentData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_COMPONENT);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_component = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_component);
   if (!atk_component) {
+    JAW_DEBUG_I("atk_component == NULL");
     return FALSE;
   }
 
@@ -133,11 +142,17 @@ jaw_component_contains (AtkComponent *component, gint x, gint y, AtkCoordType co
 static AtkObject*
 jaw_component_ref_accessible_at_point (AtkComponent *component, gint x, gint y, AtkCoordType coord_type)
 {
+  JAW_DEBUG_C("%p, %d, %d, %d", component, x, y, coord_type);
   JawObject *jaw_obj = JAW_OBJECT(component);
+  if(!jaw_obj){
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return NULL;
+  }
   ComponentData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_COMPONENT);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_component = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_component);
   if (!atk_component) {
+    JAW_DEBUG_I("atk_component == NULL");
     return NULL;
   }
 
@@ -171,6 +186,7 @@ jaw_component_get_extents (AtkComponent *component,
                            gint         *height,
                            AtkCoordType coord_type)
 {
+  JAW_DEBUG_C("%p, %p, %p, %p, %p, %d", component, x, y, width, height, coord_type);
   if (x == NULL || y == NULL || width == NULL || height == NULL)
     return;
 
@@ -178,11 +194,16 @@ jaw_component_get_extents (AtkComponent *component,
     return;
 
   JawObject *jaw_obj = JAW_OBJECT(component);
+  if(!jaw_obj){
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return;
+  }
   ComponentData *data = jaw_object_get_interface_data(jaw_obj,
                                                       INTERFACE_COMPONENT);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_component = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_component);
   if (!atk_component) {
+    JAW_DEBUG_I("atk_component == NULL");
     return;
   }
 
@@ -224,14 +245,19 @@ jaw_component_set_extents (AtkComponent *component,
                            gint         height,
                            AtkCoordType coord_type)
 {
+  JAW_DEBUG_C("%p, %d, %d, %d, %d, %d", component, x, y, width, height, coord_type);
   JawObject *jaw_obj = JAW_OBJECT(component);
-  if (!jaw_obj)
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
     return FALSE;
+  }
   ComponentData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_COMPONENT);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_component = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_component);
-  if (!atk_component)
+  if (!atk_component) {
+    JAW_DEBUG_I("atk_component == NULL");
     return FALSE;
+  }
   jclass classAtkComponent = (*jniEnv)->FindClass(jniEnv, "org/GNOME/Accessibility/AtkComponent");
   jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv, classAtkComponent, "set_extents", "(IIIII)Z");
   jboolean assigned = (*jniEnv)->CallBooleanMethod(jniEnv, atk_component, jmid, (jint)x, (jint)y, 
(jint)width, (jint)height, (jint)coord_type);
@@ -242,11 +268,17 @@ jaw_component_set_extents (AtkComponent *component,
 static gboolean
 jaw_component_grab_focus (AtkComponent *component)
 {
+  JAW_DEBUG_C("%p", component);
   JawObject *jaw_obj = JAW_OBJECT(component);
+  if(!jaw_obj){
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return FALSE;
+  }
   ComponentData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_COMPONENT);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_component = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_component);
   if (!atk_component) {
+    JAW_DEBUG_I("atk_component == NULL");
     return FALSE;
   }
 
@@ -264,12 +296,18 @@ jaw_component_grab_focus (AtkComponent *component)
 static AtkLayer
 jaw_component_get_layer (AtkComponent *component)
 {
+  JAW_DEBUG_C("%p", component);
   JawObject *jaw_obj = JAW_OBJECT(component);
+  if(!jaw_obj){
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return 0;
+  }
   ComponentData *data = jaw_object_get_interface_data(jaw_obj,
                                                       INTERFACE_COMPONENT);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_component = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_component);
   if (!atk_component) {
+    JAW_DEBUG_I("atk_component == NULL");
     return 0;
   }
 
diff --git a/jni/src/jaweditabletext.c b/jni/src/jaweditabletext.c
index c37fd52..5457244 100644
--- a/jni/src/jaweditabletext.c
+++ b/jni/src/jaweditabletext.c
@@ -53,6 +53,7 @@ typedef struct _EditableTextData {
 void
 jaw_editable_text_interface_init (AtkEditableTextIface *iface, gpointer data)
 {
+  JAW_DEBUG_ALL("%p,%p", iface, data);
   iface->set_text_contents = jaw_editable_text_set_text_contents;
   iface->insert_text = jaw_editable_text_insert_text;
   iface->copy_text = jaw_editable_text_copy_text;
@@ -65,6 +66,7 @@ jaw_editable_text_interface_init (AtkEditableTextIface *iface, gpointer data)
 gpointer
 jaw_editable_text_data_init (jobject ac)
 {
+  JAW_DEBUG_ALL("%p", ac);
   EditableTextData *data = g_new0(EditableTextData, 1);
 
   JNIEnv *jniEnv = jaw_util_get_jni_env();
@@ -87,6 +89,7 @@ jaw_editable_text_data_init (jobject ac)
 void
 jaw_editable_text_data_finalize (gpointer p)
 {
+  JAW_DEBUG_ALL("%p", p);
   EditableTextData *data = (EditableTextData*)p;
   JNIEnv *jniEnv = jaw_util_get_jni_env();
 
@@ -101,11 +104,17 @@ void
 jaw_editable_text_set_text_contents (AtkEditableText *text,
                                      const gchar *string)
 {
+  JAW_DEBUG_C("%p, %s", text, string);
   JawObject *jaw_obj = JAW_OBJECT(text);
+  if(!jaw_obj){
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return;
+  }
   EditableTextData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_EDITABLE_TEXT);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_editable_text = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_editable_text);
   if (!atk_editable_text) {
+    JAW_DEBUG_I("atk_editable_text == NULL");
     return;
   }
 
@@ -127,11 +136,17 @@ jaw_editable_text_insert_text (AtkEditableText *text,
                                gint length,
                                gint *position)
 {
+  JAW_DEBUG_C("%p, %s, %d, %p", text, string, length, position);
   JawObject *jaw_obj = JAW_OBJECT(text);
+  if(!jaw_obj){
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return;
+  }
   EditableTextData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_EDITABLE_TEXT);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_editable_text = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_editable_text);
   if (!atk_editable_text) {
+    JAW_DEBUG_I("atk_editable_text == NULL");
     return;
   }
 
@@ -157,12 +172,18 @@ jaw_editable_text_copy_text (AtkEditableText *text,
                              gint start_pos,
                              gint end_pos)
 {
+  JAW_DEBUG_C("%p, %d, %d", text, start_pos, end_pos);
   JawObject *jaw_obj = JAW_OBJECT(text);
+  if(!jaw_obj){
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return;
+  }
   EditableTextData *data = jaw_object_get_interface_data(jaw_obj,
                                                          INTERFACE_EDITABLE_TEXT);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_editable_text = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_editable_text);
   if (!atk_editable_text) {
+    JAW_DEBUG_I("atk_editable_text == NULL");
     return;
   }
 
@@ -184,11 +205,17 @@ void
 jaw_editable_text_cut_text (AtkEditableText *text,
                             gint start_pos, gint end_pos)
 {
+  JAW_DEBUG_C("%p, %d, %d", text, start_pos, end_pos);
   JawObject *jaw_obj = JAW_OBJECT(text);
+  if(!jaw_obj){
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return;
+  }
   EditableTextData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_EDITABLE_TEXT);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_editable_text = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_editable_text);
   if (!atk_editable_text) {
+    JAW_DEBUG_I("atk_editable_text == NULL");
     return;
   }
 
@@ -211,12 +238,18 @@ jaw_editable_text_delete_text (AtkEditableText *text,
                                gint start_pos,
                                gint end_pos)
 {
+  JAW_DEBUG_C("%p, %d, %d", text, start_pos, end_pos);
   JawObject *jaw_obj = JAW_OBJECT(text);
+  if(!jaw_obj){
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return;
+  }
   EditableTextData *data = jaw_object_get_interface_data(jaw_obj,
                                                          INTERFACE_EDITABLE_TEXT);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_editable_text = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_editable_text);
   if (!atk_editable_text) {
+    JAW_DEBUG_I("atk_editable_text == NULL");
     return;
   }
 
@@ -238,12 +271,18 @@ void
 jaw_editable_text_paste_text (AtkEditableText *text,
                               gint position)
 {
+  JAW_DEBUG_C("%p, %d", text, position);
   JawObject *jaw_obj = JAW_OBJECT(text);
+  if(!jaw_obj){
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return;
+  }
   EditableTextData *data = jaw_object_get_interface_data(jaw_obj,
                                                          INTERFACE_EDITABLE_TEXT);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_editable_text = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_editable_text);
   if (!atk_editable_text) {
+    JAW_DEBUG_I("atk_editable_text == NULL");
     return;
   }
 
@@ -266,11 +305,17 @@ jaw_editable_text_set_run_attributes(AtkEditableText *text,
                                      gint             start_offset,
                                      gint             end_offset)
 {
+  JAW_DEBUG_C("%p, %p, %d, %d", text, attrib_set, start_offset, end_offset);
   JawObject *jaw_obj = JAW_OBJECT(text);
+  if(!jaw_obj){
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return FALSE;
+  }
   EditableTextData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_EDITABLE_TEXT);
   JNIEnv *env = jaw_util_get_jni_env();
   jobject atk_editable_text = (*env)->NewGlobalRef(env, data->atk_editable_text);
   if (!atk_editable_text) {
+    JAW_DEBUG_I("atk_editable_text == NULL");
     return FALSE;
   }
   jclass classAtkEditableText = (*env)->FindClass(env, "org/GNOME/Accessibility/AtkEditableText");
diff --git a/jni/src/jawhyperlink.c b/jni/src/jawhyperlink.c
index 6e182cc..6c2bb20 100644
--- a/jni/src/jawhyperlink.c
+++ b/jni/src/jawhyperlink.c
@@ -40,6 +40,7 @@ G_DEFINE_TYPE (JawHyperlink, jaw_hyperlink, ATK_TYPE_HYPERLINK)
 JawHyperlink*
 jaw_hyperlink_new (jobject jhyperlink)
 {
+       JAW_DEBUG_ALL("%p", jhyperlink);
        JawHyperlink* jaw_hyperlink = g_object_new(JAW_TYPE_HYPERLINK, NULL);
        JNIEnv *jniEnv = jaw_util_get_jni_env();
        jaw_hyperlink->jhyperlink = (*jniEnv)->NewWeakGlobalRef(jniEnv, jhyperlink);
@@ -50,6 +51,7 @@ jaw_hyperlink_new (jobject jhyperlink)
 static void
 jaw_hyperlink_class_init (JawHyperlinkClass *klass)
 {
+       JAW_DEBUG_ALL("%p", klass);
        GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
        gobject_class->dispose = jaw_hyperlink_dispose;
        gobject_class->finalize = jaw_hyperlink_finalize;
@@ -66,11 +68,13 @@ jaw_hyperlink_class_init (JawHyperlinkClass *klass)
 static void
 jaw_hyperlink_init (JawHyperlink *link)
 {
+       JAW_DEBUG_ALL("%p", link);
 }
 
 static void
 jaw_hyperlink_dispose(GObject *gobject)
 {
+       JAW_DEBUG_ALL("%p", gobject);
        /* Chain up to parent's dispose */
        G_OBJECT_CLASS(jaw_hyperlink_parent_class)->dispose(gobject);
 }
@@ -78,6 +82,7 @@ jaw_hyperlink_dispose(GObject *gobject)
 static void
 jaw_hyperlink_finalize(GObject *gobject)
 {
+       JAW_DEBUG_ALL("%p", gobject);
        JawHyperlink *jaw_hyperlink = JAW_HYPERLINK(gobject);
 
        JNIEnv *jniEnv = jaw_util_get_jni_env();
@@ -92,7 +97,12 @@ static gchar*
 jaw_hyperlink_get_uri (AtkHyperlink *atk_hyperlink,
                        gint i)
 {
+       JAW_DEBUG_C("%p, %d", atk_hyperlink, i);
        JawHyperlink *jaw_hyperlink = JAW_HYPERLINK(atk_hyperlink);
+       if (!jaw_hyperlink) {
+               JAW_DEBUG_I("jaw_hyperlink == NULL");
+               return NULL;
+       }
        JNIEnv *jniEnv = jaw_util_get_jni_env();
        jobject jhyperlink = (*jniEnv)->NewGlobalRef(jniEnv, jaw_hyperlink->jhyperlink);
        if (!jhyperlink) {
@@ -103,7 +113,7 @@ jaw_hyperlink_get_uri (AtkHyperlink *atk_hyperlink,
        jmethodID jmid = (*jniEnv)->GetMethodID(jniEnv, classAtkHyperlink, "get_uri", 
"(I)Ljava/lang/String;");
        jstring jstr = (*jniEnv)->CallObjectMethod(jniEnv, jhyperlink, jmid, (jint)i);
        (*jniEnv)->DeleteGlobalRef(jniEnv, jhyperlink);
-       
+
        if (jaw_hyperlink->uri != NULL) {
                (*jniEnv)->ReleaseStringUTFChars(jniEnv, jaw_hyperlink->jstrUri, jaw_hyperlink->uri);
                (*jniEnv)->DeleteGlobalRef(jniEnv, jaw_hyperlink->jstrUri);
@@ -119,7 +129,12 @@ static AtkObject*
 jaw_hyperlink_get_object (AtkHyperlink *atk_hyperlink,
                        gint i)
 {
+       JAW_DEBUG_C("%p, %d", atk_hyperlink, i);
        JawHyperlink *jaw_hyperlink = JAW_HYPERLINK(atk_hyperlink);
+       if (!jaw_hyperlink) {
+               JAW_DEBUG_I("jaw_hyperlink == NULL");
+               return NULL;
+       }
        JNIEnv *jniEnv = jaw_util_get_jni_env();
        jobject jhyperlink = (*jniEnv)->NewGlobalRef(jniEnv, jaw_hyperlink->jhyperlink);
        if (!jhyperlink) {
@@ -142,7 +157,12 @@ jaw_hyperlink_get_object (AtkHyperlink *atk_hyperlink,
 static gint
 jaw_hyperlink_get_end_index (AtkHyperlink *atk_hyperlink)
 {
+       JAW_DEBUG_C("%p", atk_hyperlink);
        JawHyperlink *jaw_hyperlink = JAW_HYPERLINK(atk_hyperlink);
+       if (!jaw_hyperlink) {
+               JAW_DEBUG_I("jaw_hyperlink == NULL");
+               return 0;
+       }
        JNIEnv *jniEnv = jaw_util_get_jni_env();
        jobject jhyperlink = (*jniEnv)->NewGlobalRef(jniEnv, jaw_hyperlink->jhyperlink);
        if (!jhyperlink) {
@@ -159,7 +179,12 @@ jaw_hyperlink_get_end_index (AtkHyperlink *atk_hyperlink)
 
 static gint jaw_hyperlink_get_start_index (AtkHyperlink        *atk_hyperlink)
 {
+       JAW_DEBUG_C("%p", atk_hyperlink);
        JawHyperlink *jaw_hyperlink = JAW_HYPERLINK(atk_hyperlink);
+       if (!jaw_hyperlink) {
+               JAW_DEBUG_I("jaw_hyperlink == NULL");
+               return 0;
+       }
        JNIEnv *jniEnv = jaw_util_get_jni_env();
        jobject jhyperlink = (*jniEnv)->NewGlobalRef(jniEnv, jaw_hyperlink->jhyperlink);
        if (!jhyperlink) {
@@ -176,7 +201,12 @@ static gint jaw_hyperlink_get_start_index (AtkHyperlink    *atk_hyperlink)
 
 static gboolean jaw_hyperlink_is_valid (AtkHyperlink *atk_hyperlink)
 {
+       JAW_DEBUG_C("%p", atk_hyperlink);
        JawHyperlink *jaw_hyperlink = JAW_HYPERLINK(atk_hyperlink);
+       if (!jaw_hyperlink) {
+               JAW_DEBUG_I("jaw_hyperlink == NULL");
+               return FALSE;
+       }
        JNIEnv *jniEnv = jaw_util_get_jni_env();
        jobject jhyperlink = (*jniEnv)->NewGlobalRef(jniEnv, jaw_hyperlink->jhyperlink);
        if (!jhyperlink) {
@@ -193,7 +223,12 @@ static gboolean jaw_hyperlink_is_valid (AtkHyperlink *atk_hyperlink)
 
 static gint jaw_hyperlink_get_n_anchors (AtkHyperlink *atk_hyperlink)
 {
+       JAW_DEBUG_C("%p", atk_hyperlink);
        JawHyperlink *jaw_hyperlink = JAW_HYPERLINK(atk_hyperlink);
+       if (!jaw_hyperlink) {
+               JAW_DEBUG_I("jaw_hyperlink == NULL");
+               return 0;
+       }
        JNIEnv *jniEnv = jaw_util_get_jni_env();
        jobject jhyperlink = (*jniEnv)->NewGlobalRef(jniEnv, jaw_hyperlink->jhyperlink);
        if (!jhyperlink) {
@@ -207,4 +242,3 @@ static gint jaw_hyperlink_get_n_anchors (AtkHyperlink *atk_hyperlink)
 
        return janchors;
 }
-
diff --git a/jni/src/jawhypertext.c b/jni/src/jawhypertext.c
index 18157b3..211666e 100644
--- a/jni/src/jawhypertext.c
+++ b/jni/src/jawhypertext.c
@@ -45,6 +45,7 @@ jaw_hypertext_interface_init (AtkHypertextIface *iface, gpointer data)
 static void
 link_destroy_notify (gpointer p)
 {
+       JAW_DEBUG_C("%p", p);
        JawHyperlink* jaw_hyperlink = (JawHyperlink*)p;
        if(G_OBJECT(jaw_hyperlink) != NULL)
                g_object_unref(G_OBJECT(jaw_hyperlink));
@@ -53,6 +54,7 @@ link_destroy_notify (gpointer p)
 gpointer
 jaw_hypertext_data_init (jobject ac)
 {
+       JAW_DEBUG_ALL("%p", ac);
        HypertextData *data = g_new0(HypertextData, 1);
 
        JNIEnv *jniEnv = jaw_util_get_jni_env();
@@ -69,6 +71,7 @@ jaw_hypertext_data_init (jobject ac)
 void
 jaw_hypertext_data_finalize (gpointer p)
 {
+       JAW_DEBUG_ALL("%p", p);
        HypertextData *data = (HypertextData*)p;
        JNIEnv *jniEnv = jaw_util_get_jni_env();
 
@@ -83,11 +86,17 @@ jaw_hypertext_data_finalize (gpointer p)
 static AtkHyperlink*
 jaw_hypertext_get_link (AtkHypertext *hypertext, gint link_index)
 {
+       JAW_DEBUG_C("%p, %d", hypertext, link_index);
        JawObject *jaw_obj = JAW_OBJECT(hypertext);
+       if(!jaw_obj){
+               JAW_DEBUG_I("jaw_obj == NULL");
+               return NULL;
+       }
        HypertextData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_HYPERTEXT);
        JNIEnv *jniEnv = jaw_util_get_jni_env();
        jobject atk_hypertext = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_hypertext);
        if (!atk_hypertext) {
+               JAW_DEBUG_I("atk_hypertext == NULL");
                return NULL;
        }
 
@@ -109,11 +118,17 @@ jaw_hypertext_get_link (AtkHypertext *hypertext, gint link_index)
 static gint
 jaw_hypertext_get_n_links (AtkHypertext *hypertext)
 {
+       JAW_DEBUG_C("%p", hypertext);
        JawObject *jaw_obj = JAW_OBJECT(hypertext);
+       if(!jaw_obj){
+               JAW_DEBUG_I("jaw_obj == NULL");
+               return 0;
+       }
        HypertextData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_HYPERTEXT);
        JNIEnv *jniEnv = jaw_util_get_jni_env();
        jobject atk_hypertext = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_hypertext);
        if (!atk_hypertext) {
+               JAW_DEBUG_I("atk_hypertext == NULL");
                return 0;
        }
 
@@ -128,11 +143,17 @@ jaw_hypertext_get_n_links (AtkHypertext *hypertext)
 static gint
 jaw_hypertext_get_link_index (AtkHypertext *hypertext, gint char_index)
 {
+       JAW_DEBUG_C("%p, %d", hypertext, char_index);
        JawObject *jaw_obj = JAW_OBJECT(hypertext);
+       if(!jaw_obj){
+               JAW_DEBUG_I("jaw_obj == NULL");
+               return 0;
+       }
        HypertextData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_HYPERTEXT);
        JNIEnv *jniEnv = jaw_util_get_jni_env();
        jobject atk_hypertext = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_hypertext);
        if (!atk_hypertext) {
+               JAW_DEBUG_I("atk_hypertext == NULL");
                return 0;
        }
 
diff --git a/jni/src/jawimage.c b/jni/src/jawimage.c
index da9701c..163749b 100644
--- a/jni/src/jawimage.c
+++ b/jni/src/jawimage.c
@@ -40,6 +40,7 @@ typedef struct _ImageData {
 void
 jaw_image_interface_init (AtkImageIface *iface, gpointer data)
 {
+       JAW_DEBUG_ALL("%p, %p", iface, data);
        iface->get_image_position = jaw_image_get_image_position;
        iface->get_image_description = jaw_image_get_image_description;
        iface->set_image_description = NULL;
@@ -49,6 +50,7 @@ jaw_image_interface_init (AtkImageIface *iface, gpointer data)
 gpointer
 jaw_image_data_init (jobject ac)
 {
+       JAW_DEBUG_C("%p", ac);
        ImageData *data = g_new0(ImageData, 1);
 
        JNIEnv *jniEnv = jaw_util_get_jni_env();
@@ -63,6 +65,7 @@ jaw_image_data_init (jobject ac)
 void
 jaw_image_data_finalize (gpointer p)
 {
+       JAW_DEBUG_ALL("%p", p);
        ImageData *data = (ImageData*)p;
        JNIEnv *jniEnv = jaw_util_get_jni_env();
 
@@ -84,11 +87,17 @@ static void
 jaw_image_get_image_position (AtkImage *image,
                gint *x, gint *y, AtkCoordType coord_type)
 {
+       JAW_DEBUG_C("%p, %p, %p, %d", image, x, y, coord_type);
        JawObject *jaw_obj = JAW_OBJECT(image);
+       if (!jaw_obj) {
+               JAW_DEBUG_I("jaw_obj == NULL");
+               return;
+       }
        ImageData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_IMAGE);
        JNIEnv *jniEnv = jaw_util_get_jni_env();
        jobject atk_image = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_image);
        if (!atk_image) {
+               JAW_DEBUG_I("atk_image == NULL");
                return;
        }
 
@@ -116,11 +125,17 @@ jaw_image_get_image_position (AtkImage *image,
 static const gchar*
 jaw_image_get_image_description (AtkImage *image)
 {
+       JAW_DEBUG_C("%p", image);
        JawObject *jaw_obj = JAW_OBJECT(image);
+       if (!jaw_obj) {
+               JAW_DEBUG_I("jaw_obj == NULL");
+               return NULL;
+       }
        ImageData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_IMAGE);
        JNIEnv *jniEnv = jaw_util_get_jni_env();
        jobject atk_image = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_image);
        if (!atk_image) {
+               JAW_DEBUG_I("atk_image == NULL");
                return NULL;
        }
 
@@ -143,11 +158,17 @@ jaw_image_get_image_description (AtkImage *image)
 static void
 jaw_image_get_image_size (AtkImage *image, gint *width, gint *height)
 {
+       JAW_DEBUG_C("%p, %p, %p", image, width, height);
        JawObject *jaw_obj = JAW_OBJECT(image);
+       if (!jaw_obj) {
+               JAW_DEBUG_I("jaw_obj == NULL");
+               return;
+       }
        ImageData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_IMAGE);
        JNIEnv *jniEnv = jaw_util_get_jni_env();
        jobject atk_image = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_image);
        if (!atk_image) {
+               JAW_DEBUG_I("atk_image == NULL");
                return;
        }
 
diff --git a/jni/src/jawimpl.c b/jni/src/jawimpl.c
index 7589ac4..a9dbec7 100644
--- a/jni/src/jawimpl.c
+++ b/jni/src/jawimpl.c
@@ -57,6 +57,7 @@ static GHashTable *objectTable = NULL;
 static void
 object_table_insert (JNIEnv *jniEnv, jobject ac, JawImpl* jaw_impl)
 {
+  JAW_DEBUG_C("%p, %p, %p", jniEnv, ac, jaw_impl);
   jclass atkObject = (*jniEnv)->FindClass (jniEnv,"org/GNOME/Accessibility/AtkObject");
   jmethodID jmid = (*jniEnv)->GetStaticMethodID (jniEnv, atkObject, "hashCode", 
"(Ljavax/accessibility/AccessibleContext;)I");
   jaw_impl->hash_key = (gint)(*jniEnv)->CallStaticIntMethod (jniEnv, atkObject, jmid, ac);
@@ -68,6 +69,7 @@ object_table_insert (JNIEnv *jniEnv, jobject ac, JawImpl* jaw_impl)
 static JawImpl*
 object_table_lookup (JNIEnv *jniEnv, jobject ac)
 {
+  JAW_DEBUG_C("%p, %p", jniEnv, ac);
   jclass atkObject = (*jniEnv)->FindClass (jniEnv,"org/GNOME/Accessibility/AtkObject");
   jmethodID jmid = (*jniEnv)->GetStaticMethodID (jniEnv, atkObject, "hashCode", 
"(Ljavax/accessibility/AccessibleContext;)I");
   gint hash_key = (gint)(*jniEnv)->CallStaticIntMethod (jniEnv, atkObject, jmid, ac);
@@ -86,6 +88,7 @@ object_table_lookup (JNIEnv *jniEnv, jobject ac)
 static void
 object_table_remove(JNIEnv *jniEnv, JawImpl *jaw_impl)
 {
+  JAW_DEBUG_C("%p, %p", jniEnv, jaw_impl);
   g_mutex_lock(&objectTableMutex);
   g_hash_table_remove(objectTable, GINT_TO_POINTER(jaw_impl->hash_key));
   g_mutex_unlock(&objectTableMutex);
@@ -95,10 +98,13 @@ object_table_remove(JNIEnv *jniEnv, JawImpl *jaw_impl)
 void
 object_table_gc(JNIEnv *jniEnv)
 {
+  JAW_DEBUG_C("%p", jniEnv);
   GHashTableIter iter;
   gpointer key, value;
   GSList *list = NULL, *cur, *next;
 
+  unsigned count[INTERFACE_MASK+1] = { 0, };
+
   g_mutex_lock(&objectTableMutex);
   if (objectTable)
   {
@@ -111,10 +117,21 @@ object_table_gc(JNIEnv *jniEnv)
        /* Got garbage-collected, mark for dropping */
        list = g_slist_prepend(list, jaw_impl);
       }
+      else
+      {
+       count[jaw_impl->tflag]++;
+      }
     }
   }
   g_mutex_unlock(&objectTableMutex);
 
+  unsigned i;
+  for (i = 0; i < INTERFACE_MASK+1; i++) {
+    if (count[i] != 0) {
+      JAW_DEBUG_JNI("%x: %d", i, count[i]);
+    }
+  }
+
   for (cur = list; cur != NULL; cur = next)
   {
     JawImpl *jaw_impl = cur->data;
@@ -127,19 +144,23 @@ object_table_gc(JNIEnv *jniEnv)
 GHashTable*
 jaw_impl_get_object_hash_table(void)
 {
+  JAW_DEBUG_ALL("");
   return objectTable;
 }
 
 GMutex*
 jaw_impl_get_object_hash_table_mutex(void)
 {
+  JAW_DEBUG_ALL("");
   return &objectTableMutex;
 }
 
 static void
 aggregate_interface(JNIEnv *jniEnv, JawObject *jaw_obj, guint tflag)
 {
+  JAW_DEBUG_C("%p, %p, %u", jniEnv, jaw_obj, tflag);
   JawImpl *jaw_impl = JAW_IMPL(tflag, jaw_obj);
+  jaw_impl->tflag = tflag;
 
   jobject ac = (*jniEnv)->NewGlobalRef(jniEnv, jaw_obj->acc_context);
   jaw_impl->ifaceTable = g_hash_table_new(NULL, NULL);
@@ -250,6 +271,7 @@ aggregate_interface(JNIEnv *jniEnv, JawObject *jaw_obj, guint tflag)
 JawImpl*
 jaw_impl_get_instance (JNIEnv *jniEnv, jobject ac)
 {
+  JAW_DEBUG_C("%p, %p", jniEnv, ac);
   JawImpl *jaw_impl;
   jniEnv = jaw_util_get_jni_env();
 
@@ -284,21 +306,18 @@ jaw_impl_get_instance (JNIEnv *jniEnv, jobject ac)
           object_table_insert(jniEnv, weak_ref, jaw_impl);
         } else
         {
-          if (jaw_debug)
-            g_warning("jaw_impl_get_instance: jaw_obj == NULL");
+          JAW_DEBUG_I("jaw_obj == NULL");
           (*jniEnv)->DeleteGlobalRef(jniEnv, temp_ref);
           return NULL;
         }
       } else
       {
-        if (jaw_debug)
-          g_warning("jaw_impl_get_instance: jaw_impl == NULL");
+        JAW_DEBUG_I("jaw_impl == NULL");
       }
       (*jniEnv)->DeleteGlobalRef(jniEnv, temp_ref);
     } else
     {
-      if (jaw_debug)
-        g_warning("jaw_impl_get_instance: global_ac == NULL");
+      JAW_DEBUG_I("global_ac == NULL");
       return NULL;
     }
   }
@@ -308,6 +327,7 @@ jaw_impl_get_instance (JNIEnv *jniEnv, jobject ac)
 JawImpl*
 jaw_impl_get_instance_from_jaw (JNIEnv *jniEnv, jobject ac)
 {
+  JAW_DEBUG_C("%p, %p", jniEnv, ac);
   jclass classWrapper = (*jniEnv)->FindClass(jniEnv, "org/GNOME/Accessibility/AtkWrapper");
   jmethodID jmid = (*jniEnv)->GetStaticMethodID(jniEnv, classWrapper, "getInstanceFromSwing", 
"(Ljavax/accessibility/AccessibleContext;)J");
   jlong ptr = (*jniEnv)->CallStaticLongMethod(jniEnv, classWrapper, jmid, ac);
@@ -317,13 +337,13 @@ jaw_impl_get_instance_from_jaw (JNIEnv *jniEnv, jobject ac)
 JawImpl*
 jaw_impl_find_instance (JNIEnv *jniEnv, jobject ac)
 {
+  JAW_DEBUG_C("%p, %p", jniEnv, ac);
   JawImpl *jaw_impl;
 
   jaw_impl = object_table_lookup(jniEnv, ac);
   if (jaw_impl == NULL)
   {
-    if (jaw_debug)
-      g_warning("jaw_impl_find_instance: jaw_impl");
+    JAW_DEBUG_I("jaw_impl == NULL");
     return NULL;
   }
 
@@ -333,6 +353,7 @@ jaw_impl_find_instance (JNIEnv *jniEnv, jobject ac)
 static void
 jaw_impl_class_intern_init (gpointer klass, gpointer data)
 {
+  JAW_DEBUG_ALL("%p, %p", klass, data);
   if (jaw_impl_parent_class == NULL)
   {
     jaw_impl_parent_class = g_type_class_peek_parent (klass);
@@ -344,6 +365,7 @@ jaw_impl_class_intern_init (gpointer klass, gpointer data)
 GType
 jaw_impl_get_type (guint tflag)
 {
+  JAW_DEBUG_C("%u", tflag);
   GType type;
 
   static const GInterfaceInfo atk_action_info =
@@ -483,6 +505,7 @@ jaw_impl_get_type (guint tflag)
 static void
 jaw_impl_class_init(JawImplClass *klass)
 {
+  JAW_DEBUG_ALL("%p", klass);
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
   gobject_class->dispose = jaw_impl_dispose;
   gobject_class->finalize = jaw_impl_finalize;
@@ -493,16 +516,11 @@ jaw_impl_class_init(JawImplClass *klass)
   JawObjectClass *jaw_class = JAW_OBJECT_CLASS (klass);
   jaw_class->get_interface_data = jaw_impl_get_interface_data;
 }
-/*
-static void
-jaw_impl_init(JawImpl *impl)
-{
-       jaw_impl->ifaceTable = g_hash_table_new(NULL, NULL);
-}
-*/
+
 static void
 jaw_impl_dispose(GObject *gobject)
 {
+  JAW_DEBUG_ALL("%p", gobject);
   /* Chain up to parent's dispose */
   G_OBJECT_CLASS(jaw_impl_parent_class)->dispose(gobject);
 }
@@ -510,6 +528,7 @@ jaw_impl_dispose(GObject *gobject)
 static void
 jaw_impl_finalize(GObject *gobject)
 {
+  JAW_DEBUG_ALL("%p", gobject);
   JawObject *jaw_obj = JAW_OBJECT(gobject);
   JawImpl *jaw_impl = (JawImpl*)jaw_obj;
 
@@ -545,6 +564,7 @@ jaw_impl_finalize(GObject *gobject)
 static gpointer
 jaw_impl_get_interface_data (JawObject *jaw_obj, guint iface)
 {
+  JAW_DEBUG_C("%p, %u", jaw_obj, iface);
   JawImpl *jaw_impl = (JawImpl*)jaw_obj;
 
   if (jaw_impl->ifaceTable == NULL || jaw_impl == NULL)
@@ -561,6 +581,7 @@ jaw_impl_get_interface_data (JawObject *jaw_obj, guint iface)
 static void
 jaw_impl_initialize (AtkObject *atk_obj, gpointer data)
 {
+  JAW_DEBUG_C("%p, %p", atk_obj, data);
   ATK_OBJECT_CLASS(jaw_impl_parent_class)->initialize(atk_obj, data);
 
   JawObject *jaw_obj = JAW_OBJECT(atk_obj);
@@ -580,6 +601,7 @@ jaw_impl_initialize (AtkObject *atk_obj, gpointer data)
 static gboolean
 is_java_relation_key (JNIEnv *jniEnv, jstring jKey, const gchar* strKey)
 {
+  JAW_DEBUG_C("%p, %p, %s", jniEnv, jKey, strKey);
   jclass classAccessibleRelation = (*jniEnv)->FindClass(jniEnv, "javax/accessibility/AccessibleRelation");
   jfieldID jfid = (*jniEnv)->GetStaticFieldID(jniEnv, classAccessibleRelation, strKey, "Ljava/lang/String;");
   jstring jConstKey = (*jniEnv)->GetStaticObjectField(jniEnv, classAccessibleRelation, jfid);
@@ -589,6 +611,7 @@ is_java_relation_key (JNIEnv *jniEnv, jstring jKey, const gchar* strKey)
 AtkRelationType
 jaw_impl_get_atk_relation_type(JNIEnv *jniEnv, jstring jrel_key)
 {
+  JAW_DEBUG_C("%p, %p", jniEnv, jrel_key);
   if ( is_java_relation_key(jniEnv, jrel_key, "CHILD_NODE_OF") )
     return ATK_RELATION_NODE_CHILD_OF;
   if ( is_java_relation_key(jniEnv, jrel_key, "CONTROLLED_BY") )
diff --git a/jni/src/jawimpl.h b/jni/src/jawimpl.h
index f35bb1b..2c47bf8 100644
--- a/jni/src/jawimpl.h
+++ b/jni/src/jawimpl.h
@@ -48,6 +48,7 @@ struct _JawImpl
 
        GHashTable *ifaceTable;
        gint hash_key;
+       unsigned tflag;
 };
 
 JawImpl* jaw_impl_get_instance(JNIEnv*, jobject);
diff --git a/jni/src/jawobject.c b/jni/src/jawobject.c
index d8a6b39..5f63b0b 100644
--- a/jni/src/jawobject.c
+++ b/jni/src/jawobject.c
@@ -76,6 +76,7 @@ G_DEFINE_TYPE (JawObject, jaw_object, ATK_TYPE_OBJECT);
 static guint
 jaw_window_add_signal (const gchar *name, JawObjectClass *klass)
 {
+  JAW_DEBUG_C("%s, %p", name, klass);
   return g_signal_new (name,
                        G_TYPE_FROM_CLASS(klass),
                        G_SIGNAL_RUN_LAST,
@@ -89,6 +90,7 @@ jaw_window_add_signal (const gchar *name, JawObjectClass *klass)
 static void
 jaw_object_class_init (JawObjectClass *klass)
 {
+  JAW_DEBUG_ALL("%p", klass);
   GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
   gobject_class->dispose = jaw_object_dispose;
   gobject_class->finalize = jaw_object_finalize;
@@ -129,12 +131,14 @@ jaw_object_class_init (JawObjectClass *klass)
 static void
 jaw_object_initialize(AtkObject *atk_obj, gpointer data)
 {
+  JAW_DEBUG_ALL("%p, %p", atk_obj, data);
   ATK_OBJECT_CLASS (jaw_object_parent_class)->initialize(atk_obj, data);
 }
 
 gpointer
 jaw_object_get_interface_data (JawObject *jaw_obj, guint iface)
 {
+  JAW_DEBUG_C("%p, %u", jaw_obj, iface);
   JawObjectClass *klass = JAW_OBJECT_GET_CLASS(jaw_obj);
   if (klass->get_interface_data)
     return klass->get_interface_data(jaw_obj, iface);
@@ -145,6 +149,7 @@ jaw_object_get_interface_data (JawObject *jaw_obj, guint iface)
 static void
 jaw_object_init (JawObject *object)
 {
+  JAW_DEBUG_ALL("%p", object);
   AtkObject *atk_obj = ATK_OBJECT(object);
   atk_obj->description = NULL;
 
@@ -154,6 +159,7 @@ jaw_object_init (JawObject *object)
 static void
 jaw_object_dispose (GObject *gobject)
 {
+  JAW_DEBUG_C("%p", gobject);
   /* Customized dispose code */
 
   /* Chain up to parent's dispose method */
@@ -163,6 +169,7 @@ jaw_object_dispose (GObject *gobject)
 static void
 jaw_object_finalize (GObject *gobject)
 {
+  JAW_DEBUG_ALL("%p", gobject);
   /* Customized finalize code */
   JawObject *jaw_obj = JAW_OBJECT(gobject);
   AtkObject *atk_obj = ATK_OBJECT(gobject);
@@ -198,6 +205,7 @@ jaw_object_finalize (GObject *gobject)
 static AtkObject*
 jaw_object_get_parent(AtkObject *atk_obj)
 {
+  JAW_DEBUG_C("%p", atk_obj);
   if (jaw_toplevel_get_child_index(JAW_TOPLEVEL(atk_get_root()), atk_obj) != -1)
     return ATK_OBJECT(atk_get_root());
 
@@ -227,6 +235,7 @@ jaw_object_get_parent(AtkObject *atk_obj)
 static void
 jaw_object_set_parent(AtkObject *atk_obj, AtkObject *parent)
 {
+  JAW_DEBUG_C("%p, %p", atk_obj, parent);
   JawObject *jaw_obj = JAW_OBJECT(atk_obj);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject ac = (*jniEnv)->NewGlobalRef(jniEnv, jaw_obj->acc_context);
@@ -251,6 +260,7 @@ jaw_object_set_parent(AtkObject *atk_obj, AtkObject *parent)
 static const gchar*
 jaw_object_get_name (AtkObject *atk_obj)
 {
+  JAW_DEBUG_C("%p", atk_obj);
   JawObject *jaw_obj = JAW_OBJECT(atk_obj);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
 
@@ -304,6 +314,7 @@ jaw_object_get_name (AtkObject *atk_obj)
 
 static void jaw_object_set_name (AtkObject *atk_obj, const gchar *name)
 {
+  JAW_DEBUG_C("%p, %s", atk_obj, name);
   JawObject *jaw_obj = JAW_OBJECT(atk_obj);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject ac = (*jniEnv)->NewGlobalRef(jniEnv, jaw_obj->acc_context);
@@ -326,6 +337,7 @@ static void jaw_object_set_name (AtkObject *atk_obj, const gchar *name)
 static const gchar*
 jaw_object_get_description (AtkObject *atk_obj)
 {
+  JAW_DEBUG_C("%p", atk_obj);
   JawObject *jaw_obj = JAW_OBJECT(atk_obj);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject ac = (*jniEnv)->NewGlobalRef(jniEnv, jaw_obj->acc_context);
@@ -360,6 +372,7 @@ jaw_object_get_description (AtkObject *atk_obj)
 
 static void jaw_object_set_description (AtkObject *atk_obj, const gchar *description)
 {
+  JAW_DEBUG_C("%p, %s", atk_obj, description);
   JawObject *jaw_obj = JAW_OBJECT(atk_obj);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject ac = (*jniEnv)->NewGlobalRef(jniEnv, jaw_obj->acc_context);
@@ -383,6 +396,7 @@ static void jaw_object_set_description (AtkObject *atk_obj, const gchar *descrip
 static gint
 jaw_object_get_n_children (AtkObject *atk_obj)
 {
+  JAW_DEBUG_C("%p", atk_obj);
   JawObject *jaw_obj = JAW_OBJECT(atk_obj);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject ac = (*jniEnv)->NewGlobalRef(jniEnv, jaw_obj->acc_context);
@@ -402,6 +416,7 @@ jaw_object_get_n_children (AtkObject *atk_obj)
 static gint
 jaw_object_get_index_in_parent (AtkObject *atk_obj)
 {
+  JAW_DEBUG_C("%p", atk_obj);
   if (jaw_toplevel_get_child_index(JAW_TOPLEVEL(atk_get_root()), atk_obj) != -1)
   {
     return jaw_toplevel_get_child_index(JAW_TOPLEVEL(atk_get_root()), atk_obj);
@@ -426,6 +441,7 @@ jaw_object_get_index_in_parent (AtkObject *atk_obj)
 static AtkRole
 jaw_object_get_role (AtkObject *atk_obj)
 {
+  JAW_DEBUG_C("%p", atk_obj);
   if (atk_obj->role != ATK_ROLE_INVALID
    && atk_obj->role != ATK_ROLE_UNKNOWN) {
     return atk_obj->role;
@@ -444,12 +460,14 @@ jaw_object_get_role (AtkObject *atk_obj)
 static void
 jaw_object_set_role (AtkObject *atk_obj, AtkRole role)
 {
+  JAW_DEBUG_C("%p, %d", atk_obj, role);
   atk_obj->role = role;
 }
 
 static AtkStateSet*
 jaw_object_ref_state_set (AtkObject *atk_obj)
 {
+  JAW_DEBUG_C("%p", atk_obj);
   JawObject *jaw_obj = JAW_OBJECT(atk_obj);
   AtkStateSet* state_set = jaw_obj->state_set;
   atk_state_set_clear_states( state_set );
@@ -488,6 +506,7 @@ jaw_object_ref_state_set (AtkObject *atk_obj)
 
 static const gchar *jaw_object_get_object_locale (AtkObject *atk_obj)
 {
+  JAW_DEBUG_C("%p", atk_obj);
   JawObject *jaw_obj = JAW_OBJECT(atk_obj);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject ac = (*jniEnv)->NewGlobalRef(jniEnv, jaw_obj->acc_context);
@@ -510,6 +529,7 @@ static const gchar *jaw_object_get_object_locale (AtkObject *atk_obj)
 static AtkRelationSet*
 jaw_object_ref_relation_set (AtkObject *atk_obj)
 {
+  JAW_DEBUG_C("%p)", atk_obj);
   if (atk_obj->relation_set)
     g_object_unref(G_OBJECT(atk_obj->relation_set));
   atk_obj->relation_set = atk_relation_set_new();
@@ -565,6 +585,7 @@ jaw_object_ref_relation_set (AtkObject *atk_obj)
 static AtkObject*
 jaw_object_ref_child(AtkObject *atk_obj, gint i)
 {
+  JAW_DEBUG_C("%p, %d", atk_obj, i);
   JawObject *jaw_obj = JAW_OBJECT(atk_obj);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject ac = (*jniEnv)->NewGlobalRef(jniEnv, jaw_obj->acc_context);
@@ -587,6 +608,7 @@ jaw_object_ref_child(AtkObject *atk_obj, gint i)
 static JawObject*
 jaw_object_table_lookup (JNIEnv *jniEnv, jobject ac)
 {
+  JAW_DEBUG_C("%p, %p", jniEnv, ac);
   GHashTable *object_table = jaw_impl_get_object_hash_table();
   GMutex *object_table_mutex = jaw_impl_get_object_hash_table_mutex();
   jclass atkObject = (*jniEnv)->FindClass (jniEnv, "org/GNOME/Accessibility/AtkObject");
diff --git a/jni/src/jawselection.c b/jni/src/jawselection.c
index b87e059..68ae816 100644
--- a/jni/src/jawselection.c
+++ b/jni/src/jawselection.c
@@ -41,6 +41,7 @@ typedef struct _SelectionData {
 void
 jaw_selection_interface_init (AtkSelectionIface *iface, gpointer data)
 {
+       JAW_DEBUG_ALL("%p, %p", iface, data);
        iface->add_selection = jaw_selection_add_selection;
        iface->clear_selection = jaw_selection_clear_selection;
        iface->ref_selection = jaw_selection_ref_selection;
@@ -53,6 +54,7 @@ jaw_selection_interface_init (AtkSelectionIface *iface, gpointer data)
 gpointer
 jaw_selection_data_init (jobject ac)
 {
+       JAW_DEBUG_ALL("%p", ac);
        SelectionData *data = g_new0(SelectionData, 1);
 
        JNIEnv *jniEnv = jaw_util_get_jni_env();
@@ -67,6 +69,7 @@ jaw_selection_data_init (jobject ac)
 void
 jaw_selection_data_finalize (gpointer p)
 {
+       JAW_DEBUG_ALL("%p", p);
        SelectionData *data = (SelectionData*)p;
        JNIEnv *jniEnv = jaw_util_get_jni_env();
 
@@ -79,11 +82,17 @@ jaw_selection_data_finalize (gpointer p)
 static gboolean
 jaw_selection_add_selection (AtkSelection *selection, gint i)
 {
+       JAW_DEBUG_C("%p, %d", selection, i);
        JawObject *jaw_obj = JAW_OBJECT(selection);
+       if (!jaw_obj) {
+               JAW_DEBUG_I("jaw_obj == NULL");
+               return FALSE;
+       }
        SelectionData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_SELECTION);
        JNIEnv *jniEnv = jaw_util_get_jni_env();
        jobject atk_selection = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_selection);
        if (!atk_selection) {
+               JAW_DEBUG_I("atk_selection == NULL");
                return FALSE;
        }
 
@@ -98,11 +107,17 @@ jaw_selection_add_selection (AtkSelection *selection, gint i)
 static gboolean
 jaw_selection_clear_selection (AtkSelection *selection)
 {
+       JAW_DEBUG_C("%p", selection);
        JawObject *jaw_obj = JAW_OBJECT(selection);
+       if (!jaw_obj) {
+               JAW_DEBUG_I("jaw_obj == NULL");
+               return FALSE;
+       }
        SelectionData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_SELECTION);
        JNIEnv *jniEnv = jaw_util_get_jni_env();
        jobject atk_selection = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_selection);
        if (!atk_selection) {
+               JAW_DEBUG_I("atk_selection == NULL");
                return FALSE;
        }
 
@@ -117,11 +132,17 @@ jaw_selection_clear_selection (AtkSelection *selection)
 static AtkObject*
 jaw_selection_ref_selection (AtkSelection *selection, gint i)
 {
+       JAW_DEBUG_C("%p, %d", selection, i);
        JawObject *jaw_obj = JAW_OBJECT(selection);
+       if (!jaw_obj) {
+               JAW_DEBUG_I("jaw_obj == NULL");
+               return NULL;
+       }
        SelectionData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_SELECTION);
        JNIEnv *jniEnv = jaw_util_get_jni_env();
        jobject atk_selection = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_selection);
        if (!atk_selection) {
+               JAW_DEBUG_I("atk_selection == NULL");
                return NULL;
        }
 
@@ -143,11 +164,17 @@ jaw_selection_ref_selection (AtkSelection *selection, gint i)
 static gint
 jaw_selection_get_selection_count (AtkSelection *selection)
 {
+       JAW_DEBUG_C("%p", selection);
        JawObject *jaw_obj = JAW_OBJECT(selection);
+       if (!jaw_obj) {
+               JAW_DEBUG_I("jaw_obj == NULL");
+               return 0;
+       }
        SelectionData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_SELECTION);
        JNIEnv *jniEnv = jaw_util_get_jni_env();
        jobject atk_selection = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_selection);
        if (!atk_selection) {
+               JAW_DEBUG_I("atk_selection == NULL");
                return 0;
        }
 
@@ -162,11 +189,17 @@ jaw_selection_get_selection_count (AtkSelection *selection)
 static gboolean
 jaw_selection_is_child_selected (AtkSelection *selection, gint i)
 {
+       JAW_DEBUG_C("%p, %d", selection, i);
        JawObject *jaw_obj = JAW_OBJECT(selection);
+       if (!jaw_obj) {
+               JAW_DEBUG_I("jaw_obj == NULL");
+               return FALSE;
+       }
        SelectionData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_SELECTION);
        JNIEnv *jniEnv = jaw_util_get_jni_env();
        jobject atk_selection = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_selection);
        if (!atk_selection) {
+               JAW_DEBUG_I("atk_selection == NULL");
                return FALSE;
        }
 
@@ -181,11 +214,17 @@ jaw_selection_is_child_selected (AtkSelection *selection, gint i)
 static gboolean
 jaw_selection_remove_selection (AtkSelection *selection, gint i)
 {
+       JAW_DEBUG_C("%p, %d", selection, i);
        JawObject *jaw_obj = JAW_OBJECT(selection);
+       if (!jaw_obj) {
+               JAW_DEBUG_I("jaw_obj == NULL");
+               return FALSE;
+       }
        SelectionData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_SELECTION);
        JNIEnv *jniEnv = jaw_util_get_jni_env();
        jobject atk_selection = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_selection);
        if (!atk_selection) {
+               JAW_DEBUG_I("atk_selection == NULL");
                return FALSE;
        }
 
@@ -200,11 +239,17 @@ jaw_selection_remove_selection (AtkSelection *selection, gint i)
 static gboolean
 jaw_selection_select_all_selection (AtkSelection *selection)
 {
+       JAW_DEBUG_C("%p", selection);
        JawObject *jaw_obj = JAW_OBJECT(selection);
+       if (!jaw_obj) {
+               JAW_DEBUG_I("jaw_obj == NULL");
+               return FALSE;
+       }
        SelectionData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_SELECTION);
        JNIEnv *jniEnv = jaw_util_get_jni_env();
        jobject atk_selection = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_selection);
        if (!atk_selection) {
+               JAW_DEBUG_I("atk_selection == NULL");
                return FALSE;
        }
 
diff --git a/jni/src/jawtable.c b/jni/src/jawtable.c
index 96a2070..8756444 100644
--- a/jni/src/jawtable.c
+++ b/jni/src/jawtable.c
@@ -65,6 +65,7 @@ typedef struct _TableData {
 void
 jaw_table_interface_init (AtkTableIface *iface, gpointer data)
 {
+  JAW_DEBUG_ALL("%p, %p", iface, data);
   iface->ref_at = jaw_table_ref_at;
   iface->get_column_at_index = jaw_table_get_column_at_index;
   iface->get_row_at_index = jaw_table_get_row_at_index;
@@ -98,6 +99,7 @@ jaw_table_interface_init (AtkTableIface *iface, gpointer data)
 gpointer
 jaw_table_data_init (jobject ac)
 {
+  JAW_DEBUG_ALL("%p", ac);
   TableData *data = g_new0(TableData, 1);
 
   JNIEnv *env = jaw_util_get_jni_env();
@@ -116,6 +118,7 @@ jaw_table_data_init (jobject ac)
 void
 jaw_table_data_finalize (gpointer p)
 {
+  JAW_DEBUG_ALL("%p", p);
   TableData *data = (TableData*)p;
   JNIEnv *env = jaw_util_get_jni_env();
 
@@ -137,11 +140,17 @@ jaw_table_data_finalize (gpointer p)
 static AtkObject*
 jaw_table_ref_at (AtkTable *table, gint        row, gint column)
 {
+  JAW_DEBUG_C("%p, %d, %d", table, row, column);
   JawObject *jaw_obj = JAW_OBJECT(table);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return NULL;
+  }
   TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE);
   JNIEnv *env = jaw_util_get_jni_env();
   jobject atk_table = (*env)->NewGlobalRef(env, data->atk_table);
   if (!atk_table) {
+    JAW_DEBUG_I("atk_table == NULL");
     return NULL;
   }
 
@@ -167,12 +176,18 @@ jaw_table_ref_at (AtkTable *table, gint   row, gint column)
 static gint
 jaw_table_get_column_at_index (AtkTable *table, gint index)
 {
+  JAW_DEBUG_C("%p, %d", table, index);
   JawObject *jaw_obj = JAW_OBJECT(table);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return 0;
+  }
   TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE);
   JNIEnv *env = jaw_util_get_jni_env();
   jobject atk_table = (*env)->NewGlobalRef(env, data->atk_table);
   if (!atk_table) {
-    return -1;
+    JAW_DEBUG_I("atk_table == NULL");
+    return 0;
   }
 
   jclass classAtkTable = (*env)->FindClass(env, "org/GNOME/Accessibility/AtkTable");
@@ -186,12 +201,18 @@ jaw_table_get_column_at_index (AtkTable *table, gint index)
 static gint
 jaw_table_get_row_at_index (AtkTable *table, gint index)
 {
+  JAW_DEBUG_C("%p, %d", table, index);
   JawObject *jaw_obj = JAW_OBJECT(table);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return 0;
+  }
   TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE);
   JNIEnv *env = jaw_util_get_jni_env();
   jobject atk_table = (*env)->NewGlobalRef(env, data->atk_table);
   if (!atk_table) {
-    return -1;
+    JAW_DEBUG_I("atk_table == NULL");
+    return 0;
   }
 
   jclass classAtkTable = (*env)->FindClass(env, "org/GNOME/Accessibility/AtkTable");
@@ -205,11 +226,17 @@ jaw_table_get_row_at_index (AtkTable *table, gint index)
 static gint
 jaw_table_get_n_columns        (AtkTable *table)
 {
+  JAW_DEBUG_C("%p", table);
   JawObject *jaw_obj = JAW_OBJECT(table);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return 0;
+  }
   TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE);
   JNIEnv *env = jaw_util_get_jni_env();
   jobject atk_table = (*env)->NewGlobalRef(env, data->atk_table);
   if (!atk_table) {
+    JAW_DEBUG_I("atk_table == NULL");
     return 0;
   }
 
@@ -224,11 +251,17 @@ jaw_table_get_n_columns   (AtkTable *table)
 static gint
 jaw_table_get_n_rows (AtkTable *table)
 {
+  JAW_DEBUG_C("%p", table);
   JawObject *jaw_obj = JAW_OBJECT(table);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return 0;
+  }
   TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE);
   JNIEnv *env = jaw_util_get_jni_env();
   jobject atk_table = (*env)->NewGlobalRef(env, data->atk_table);
   if (!atk_table) {
+    JAW_DEBUG_I("atk_table == NULL");
     return 0;
   }
 
@@ -243,11 +276,17 @@ jaw_table_get_n_rows (AtkTable *table)
 static gint
 jaw_table_get_column_extent_at (AtkTable *table, gint row, gint        column)
 {
+  JAW_DEBUG_C("%p, %d, %d", table, row, column);
   JawObject *jaw_obj = JAW_OBJECT(table);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return 0;
+  }
   TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE);
   JNIEnv *env = jaw_util_get_jni_env();
   jobject atk_table = (*env)->NewGlobalRef(env, data->atk_table);
   if (!atk_table) {
+    JAW_DEBUG_I("atk_table == NULL");
     return 0;
   }
 
@@ -262,11 +301,17 @@ jaw_table_get_column_extent_at (AtkTable *table, gint row, gint   column)
 static gint
 jaw_table_get_row_extent_at (AtkTable *table, gint row, gint column)
 {
+  JAW_DEBUG_C("%p, %d, %d", table, row, column);
   JawObject *jaw_obj = JAW_OBJECT(table);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return 0;
+  }
   TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE);
   JNIEnv *env = jaw_util_get_jni_env();
   jobject atk_table = (*env)->NewGlobalRef(env, data->atk_table);
   if (!atk_table) {
+    JAW_DEBUG_I("atk_table == NULL");
     return 0;
   }
 
@@ -281,11 +326,17 @@ jaw_table_get_row_extent_at (AtkTable *table, gint row, gint column)
 static AtkObject*
 jaw_table_get_caption (AtkTable        *table)
 {
+  JAW_DEBUG_C("%p", table);
   JawObject *jaw_obj = JAW_OBJECT(table);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return NULL;
+  }
   TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE);
   JNIEnv *env = jaw_util_get_jni_env();
   jobject atk_table = (*env)->NewGlobalRef(env, data->atk_table);
   if (!atk_table) {
+    JAW_DEBUG_I("atk_table == NULL");
     return NULL;
   }
 
@@ -309,11 +360,17 @@ jaw_table_get_caption (AtkTable   *table)
 static const gchar*
 jaw_table_get_column_description (AtkTable *table, gint        column)
 {
+  JAW_DEBUG_C("%p, %d", table, column);
   JawObject *jaw_obj = JAW_OBJECT(table);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return NULL;
+  };
   TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE);
   JNIEnv *env = jaw_util_get_jni_env();
   jobject atk_table = (*env)->NewGlobalRef(env, data->atk_table);
   if (!atk_table) {
+    JAW_DEBUG_I("atk_table == NULL");
     return NULL;
   }
 
@@ -337,11 +394,17 @@ jaw_table_get_column_description (AtkTable *table, gint   column)
 static const gchar*
 jaw_table_get_row_description (AtkTable *table, gint row)
 {
+  JAW_DEBUG_C("%p, %d", table, row);
   JawObject *jaw_obj = JAW_OBJECT(table);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return NULL;
+  }
   TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE);
   JNIEnv *env = jaw_util_get_jni_env();
   jobject atk_table = (*env)->NewGlobalRef(env, data->atk_table);
   if (!atk_table) {
+    JAW_DEBUG_I("atk_table == NULL");
     return NULL;
   }
 
@@ -365,11 +428,17 @@ jaw_table_get_row_description (AtkTable *table, gint row)
 static AtkObject*
 jaw_table_get_column_header (AtkTable *table, gint column)
 {
+  JAW_DEBUG_C("%p, %d", table, column);
   JawObject *jaw_obj = JAW_OBJECT(table);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return NULL;
+  }
   TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE);
   JNIEnv *env = jaw_util_get_jni_env();
   jobject atk_table = (*env)->NewGlobalRef(env, data->atk_table);
   if (!atk_table) {
+    JAW_DEBUG_I("atk_table == NULL");
     return NULL;
   }
 
@@ -389,11 +458,17 @@ jaw_table_get_column_header (AtkTable *table, gint column)
 static AtkObject*
 jaw_table_get_row_header (AtkTable *table, gint row)
 {
+  JAW_DEBUG_C("%p, %d", table, row);
   JawObject *jaw_obj = JAW_OBJECT(table);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return NULL;
+  }
   TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE);
   JNIEnv *env = jaw_util_get_jni_env();
   jobject atk_table = (*env)->NewGlobalRef(env, data->atk_table);
   if (!atk_table) {
+    JAW_DEBUG_I("atk_table == NULL");
     return NULL;
   }
 
@@ -413,11 +488,17 @@ jaw_table_get_row_header (AtkTable *table, gint row)
 static AtkObject*
 jaw_table_get_summary (AtkTable *table)
 {
+  JAW_DEBUG_C("%p", table);
   JawObject *jaw_obj = JAW_OBJECT(table);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return NULL;
+  }
   TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE);
   JNIEnv *env = jaw_util_get_jni_env();
   jobject atk_table = (*env)->NewGlobalRef(env, data->atk_table);
   if (!atk_table) {
+    JAW_DEBUG_I("atk_table == NULL");
     return NULL;
   }
 
@@ -437,11 +518,17 @@ jaw_table_get_summary (AtkTable *table)
 static gint
 jaw_table_get_selected_columns (AtkTable *table, gint **selected)
 {
+  JAW_DEBUG_C("%p, %p", table, selected);
   JawObject *jaw_obj = JAW_OBJECT(table);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return 0;
+  }
   TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE);
   JNIEnv *env = jaw_util_get_jni_env();
   jobject atk_table = (*env)->NewGlobalRef(env, data->atk_table);
   if (!atk_table) {
+    JAW_DEBUG_I("atk_table == NULL");
     return 0;
   }
 
@@ -470,11 +557,17 @@ jaw_table_get_selected_columns (AtkTable *table, gint **selected)
 static gint
 jaw_table_get_selected_rows (AtkTable *table, gint **selected)
 {
+  JAW_DEBUG_C("%p, %p", table, selected);
   JawObject *jaw_obj = JAW_OBJECT(table);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return 0;
+  }
   TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE);
   JNIEnv *env = jaw_util_get_jni_env();
   jobject atk_table = (*env)->NewGlobalRef(env, data->atk_table);
   if (!atk_table) {
+    JAW_DEBUG_I("atk_table == NULL");
     return 0;
   }
 
@@ -503,11 +596,17 @@ jaw_table_get_selected_rows (AtkTable *table, gint **selected)
 static gboolean
 jaw_table_is_column_selected (AtkTable *table, gint column)
 {
+  JAW_DEBUG_C("%p, %d", table, column);
   JawObject *jaw_obj = JAW_OBJECT(table);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return FALSE;
+  }
   TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE);
   JNIEnv *env = jaw_util_get_jni_env();
   jobject atk_table = (*env)->NewGlobalRef(env, data->atk_table);
   if (!atk_table) {
+    JAW_DEBUG_I("atk_table == NULL");
     return FALSE;
   }
 
@@ -521,11 +620,17 @@ jaw_table_is_column_selected (AtkTable *table, gint column)
 static gboolean
 jaw_table_is_row_selected (AtkTable *table, gint row)
 {
+  JAW_DEBUG_C("%p, %d", table, row);
   JawObject *jaw_obj = JAW_OBJECT(table);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return FALSE;
+  }
   TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE);
   JNIEnv *env = jaw_util_get_jni_env();
   jobject atk_table = (*env)->NewGlobalRef(env, data->atk_table);
   if (!atk_table) {
+    JAW_DEBUG_I("atk_table == NULL");
     return FALSE;
   }
 
@@ -539,11 +644,17 @@ jaw_table_is_row_selected (AtkTable *table, gint row)
 static gboolean
 jaw_table_is_selected (AtkTable *table, gint row, gint column)
 {
+  JAW_DEBUG_C("%p, %d, %d", table, row, column);
   JawObject *jaw_obj = JAW_OBJECT(table);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return FALSE;
+  }
   TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE);
   JNIEnv *env = jaw_util_get_jni_env();
   jobject atk_table = (*env)->NewGlobalRef(env, data->atk_table);
   if (!atk_table) {
+    JAW_DEBUG_I("atk_table == NULL");
     return FALSE;
   }
 
@@ -586,11 +697,17 @@ jaw_table_remove_column_selection (AtkTable *table, gint column)
 static void
 jaw_table_set_row_description(AtkTable *table, gint row, const gchar *description)
 {
+  JAW_DEBUG_C("%p, %d, %s", table, row, description);
   JawObject *jaw_obj = JAW_OBJECT(table);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return;
+  }
   TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE);
   JNIEnv *env = jaw_util_get_jni_env();
   jobject atk_table = (*env)->NewGlobalRef(env, data->atk_table);
   if (!atk_table) {
+    JAW_DEBUG_I("atk_table == NULL");
     return;
   }
 
@@ -607,11 +724,17 @@ jaw_table_set_row_description(AtkTable *table, gint row, const gchar *descriptio
 static void
 jaw_table_set_column_description(AtkTable *table, gint column, const gchar *description)
 {
+  JAW_DEBUG_C("%p, %d, %s", table, column, description);
   JawObject *jaw_obj = JAW_OBJECT(table);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return;
+  }
   TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE);
   JNIEnv *env = jaw_util_get_jni_env();
   jobject atk_table = (*env)->NewGlobalRef(env, data->atk_table);
   if (!atk_table) {
+    JAW_DEBUG_I("atk_table == NULL");
     return;
   }
 
@@ -640,12 +763,17 @@ jaw_table_set_column_header(AtkTable *table, gint column, AtkObject *header)
 static void
 jaw_table_set_caption(AtkTable *table, AtkObject *caption)
 {
+  JAW_DEBUG_C("%p, %p", table, caption);
   JawObject *jaw_obj = JAW_OBJECT(table);
-  if (!jaw_obj)
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
     return;
+  }
   JawObject *jcaption = JAW_OBJECT(caption);
-  if (!jcaption)
+  if (!jcaption) {
+    JAW_DEBUG_I("jcaption == NULL");
     return;
+  }
   TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE);
   JNIEnv *env = jaw_util_get_jni_env();
   jclass accessible = (*env)->FindClass (env, "javax/accessibility/Accessible");
@@ -656,6 +784,7 @@ jaw_table_set_caption(AtkTable *table, AtkObject *caption)
     return;
   jobject atk_table = (*env)->NewGlobalRef(env, data->atk_table);
   if (!atk_table) {
+    JAW_DEBUG_I("atk_table == NULL");
     (*env)->DeleteGlobalRef(env, obj);
     return;
   }
@@ -669,12 +798,17 @@ jaw_table_set_caption(AtkTable *table, AtkObject *caption)
 static void
 jaw_table_set_summary(AtkTable *table, AtkObject *summary)
 {
+  JAW_DEBUG_C("%p, %p", table, summary);
   JawObject *jaw_obj = JAW_OBJECT(table);
-  if (!jaw_obj)
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
     return;
+  }
   JawObject *jsummary = JAW_OBJECT(summary);
-  if (!jsummary)
+  if (!jsummary) {
+    JAW_DEBUG_I("jsummary == NULL");
     return;
+  }
   TableData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE);
   JNIEnv *env = jaw_util_get_jni_env();
   jclass accessible = (*env)->FindClass (env, "javax/accessibility/Accessible");
@@ -685,6 +819,7 @@ jaw_table_set_summary(AtkTable *table, AtkObject *summary)
     return;
   jobject atk_table = (*env)->NewGlobalRef(env, data->atk_table);
   if (!atk_table) {
+    JAW_DEBUG_I("atk_table == NULL");
     (*env)->DeleteGlobalRef(env, obj);
     return;
   }
diff --git a/jni/src/jawtablecell.c b/jni/src/jawtablecell.c
index f65f509..0dda75d 100644
--- a/jni/src/jawtablecell.c
+++ b/jni/src/jawtablecell.c
@@ -41,6 +41,7 @@ typedef struct _TableCellData {
 void
 jaw_table_cell_interface_init (AtkTableCellIface *iface, gpointer data)
 {
+  JAW_DEBUG_ALL("%p, %p", iface, data);
   iface->get_table = jaw_table_cell_get_table;
   iface->get_position = jaw_table_cell_get_position;
   iface->get_row_column_span = jaw_table_cell_get_row_column_span;
@@ -51,6 +52,7 @@ jaw_table_cell_interface_init (AtkTableCellIface *iface, gpointer data)
 gpointer
 jaw_table_cell_data_init (jobject ac)
 {
+  JAW_DEBUG_ALL("%p", ac);
   TableCellData *data = g_new0(TableCellData, 1);
 
   JNIEnv *jniEnv = jaw_util_get_jni_env();
@@ -65,6 +67,7 @@ jaw_table_cell_data_init (jobject ac)
 void
 jaw_table_cell_data_finalize (gpointer p)
 {
+  JAW_DEBUG_ALL("%p", p);
   TableCellData *data = (TableCellData*)p;
   JNIEnv *jniEnv = jaw_util_get_jni_env();
 
@@ -86,11 +89,17 @@ jaw_table_cell_data_finalize (gpointer p)
 static AtkObject*
 jaw_table_cell_get_table(AtkTableCell *cell)
 {
+  JAW_DEBUG_C("%p", cell);
   JawObject *jaw_obj = JAW_OBJECT(cell);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return NULL;
+  }
   TableCellData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE_CELL);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject jatk_table_cell = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_table_cell);
   if (!jatk_table_cell) {
+    JAW_DEBUG_I("jatk_table_cell == NULL");
     return NULL;
   }
 
@@ -114,11 +123,17 @@ jaw_table_cell_get_table(AtkTableCell *cell)
 static gboolean
 jaw_table_cell_get_position(AtkTableCell *cell, gint *row, gint *column)
 {
+  JAW_DEBUG_C("%p, %p, %p", cell, row, column);
   JawObject *jaw_obj = JAW_OBJECT(cell);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return FALSE;
+  }
   TableCellData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE_CELL);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject jatk_table_cell = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_table_cell);
   if (!jatk_table_cell) {
+    JAW_DEBUG_I("jatk_table_cell == NULL");
     return FALSE;
   }
 
@@ -143,11 +158,17 @@ static gboolean jaw_table_cell_get_row_column_span(AtkTableCell *cell,
                                                    gint         *row_span,
                                                    gint         *column_span)
 {
+  JAW_DEBUG_C("%p, %p, %p, %p, %p", cell, row, column, row_span, column_span);
   JawObject *jaw_obj = JAW_OBJECT(cell);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return FALSE;
+  }
   TableCellData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE_CELL);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject jatk_table_cell = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_table_cell);
   if (!jatk_table_cell) {
+    JAW_DEBUG_I("jatk_table_cell == NULL");
     return FALSE;
   }
 
@@ -172,11 +193,17 @@ static gboolean jaw_table_cell_get_row_column_span(AtkTableCell *cell,
 static gint
 jaw_table_cell_get_row_span(AtkTableCell *cell)
 {
+  JAW_DEBUG_C("%p", cell);
   JawObject *jaw_obj = JAW_OBJECT(cell);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return 0;
+  }
   TableCellData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE_CELL);
   JNIEnv *env = jaw_util_get_jni_env();
   jobject jatk_table_cell = (*env)->NewGlobalRef(env, data->atk_table_cell);
   if (!jatk_table_cell) {
+    JAW_DEBUG_I("jatk_table_cell == NULL");
     return 0;
   }
 
@@ -194,11 +221,17 @@ jaw_table_cell_get_row_span(AtkTableCell *cell)
 static gint
 jaw_table_cell_get_column_span(AtkTableCell *cell)
 {
+  JAW_DEBUG_C("%p", cell);
   JawObject *jaw_obj = JAW_OBJECT(cell);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return 0;
+  }
   TableCellData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TABLE_CELL);
   JNIEnv *env = jaw_util_get_jni_env();
   jobject jatk_table_cell = (*env)->NewGlobalRef(env, data->atk_table_cell);
   if (!jatk_table_cell) {
+    JAW_DEBUG_I("jatk_table_cell == NULL");
     return 0;
   }
 
diff --git a/jni/src/jawtext.c b/jni/src/jawtext.c
index 814a6ea..5839fa2 100644
--- a/jni/src/jawtext.c
+++ b/jni/src/jawtext.c
@@ -86,6 +86,7 @@ typedef struct _TextData {
 void
 jaw_text_interface_init (AtkTextIface *iface, gpointer data)
 {
+  JAW_DEBUG_ALL("%p, %p", iface, data);
   iface->get_text = jaw_text_get_text;
   iface->get_character_at_offset = jaw_text_get_character_at_offset;
   iface->get_text_at_offset = jaw_text_get_text_at_offset;
@@ -105,6 +106,7 @@ jaw_text_interface_init (AtkTextIface *iface, gpointer data)
 gpointer
 jaw_text_data_init (jobject ac)
 {
+  JAW_DEBUG_ALL("%p", ac);
   TextData *data = g_new0(TextData, 1);
 
   JNIEnv *jniEnv = jaw_util_get_jni_env();
@@ -123,6 +125,7 @@ jaw_text_data_init (jobject ac)
 void
 jaw_text_data_finalize (gpointer p)
 {
+  JAW_DEBUG_ALL("%p", p);
   TextData *data = (TextData*)p;
   JNIEnv *jniEnv = jaw_util_get_jni_env();
 
@@ -144,6 +147,7 @@ jaw_text_data_finalize (gpointer p)
 static gchar*
 jaw_text_get_gtext_from_jstr (JNIEnv *jniEnv, jstring jstr)
 {
+  JAW_DEBUG_C("%p, %p", jniEnv, jstr);
   if (jstr == NULL)
   {
     return NULL;
@@ -159,11 +163,17 @@ jaw_text_get_gtext_from_jstr (JNIEnv *jniEnv, jstring jstr)
 static gchar*
 jaw_text_get_text (AtkText *text, gint start_offset, gint end_offset)
 {
+  JAW_DEBUG_C("%p, %d, %d", text, start_offset, end_offset);
   JawObject *jaw_obj = JAW_OBJECT(text);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return NULL;
+  }
   TextData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TEXT);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_text = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_text);
   if (!atk_text) {
+    JAW_DEBUG_I("atk_text == NULL");
     return NULL;
   }
 
@@ -187,11 +197,17 @@ jaw_text_get_text (AtkText *text, gint start_offset, gint end_offset)
 static gunichar
 jaw_text_get_character_at_offset (AtkText *text, gint offset)
 {
+  JAW_DEBUG_C("%p, %d", text, offset);
   JawObject *jaw_obj = JAW_OBJECT(text);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return 0;
+  }
   TextData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TEXT);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_text = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_text);
   if (!atk_text) {
+    JAW_DEBUG_I("atk_text == NULL");
     return 0;
   }
 
@@ -215,11 +231,17 @@ jaw_text_get_text_at_offset (AtkText *text,
                              AtkTextBoundary boundary_type,
                              gint *start_offset, gint *end_offset)
 {
+  JAW_DEBUG_C("%p, %d, %d, %p, %p", text, offset, boundary_type, start_offset, end_offset);
   JawObject *jaw_obj = JAW_OBJECT(text);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return NULL;
+  }
   TextData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TEXT);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_text = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_text);
   if (!atk_text) {
+    JAW_DEBUG_I("atk_text == NULL");
     return NULL;
   }
 
@@ -269,11 +291,17 @@ jaw_text_get_text_at_offset (AtkText *text,
 static gint
 jaw_text_get_caret_offset (AtkText *text)
 {
+  JAW_DEBUG_C("%p", text);
   JawObject *jaw_obj = JAW_OBJECT(text);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return 0;
+  }
   TextData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TEXT);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_text = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_text);
   if (!atk_text) {
+    JAW_DEBUG_I("atk_text == NULL");
     return 0;
   }
 
@@ -295,11 +323,17 @@ jaw_text_get_character_extents (AtkText *text,
                                 gint *width, gint *height,
                                 AtkCoordType coords)
 {
+  JAW_DEBUG_C("%p, %d, %p, %p, %p, %p, %d", text, offset, x, y, width, height, coords);
   JawObject *jaw_obj = JAW_OBJECT(text);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return;
+  }
   TextData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TEXT);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_text = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_text);
   if (!atk_text) {
+    JAW_DEBUG_I("atk_text == NULL");
     return;
   }
 
@@ -327,11 +361,17 @@ jaw_text_get_character_extents (AtkText *text,
 static gint
 jaw_text_get_character_count (AtkText *text)
 {
+  JAW_DEBUG_C("%p", text);
   JawObject *jaw_obj = JAW_OBJECT(text);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return 0;
+  }
   TextData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TEXT);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_text = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_text);
   if (!atk_text) {
+    JAW_DEBUG_I("atk_text == NULL");
     return 0;
   }
 
@@ -350,11 +390,17 @@ jaw_text_get_character_count (AtkText *text)
 static gint
 jaw_text_get_offset_at_point (AtkText *text, gint x, gint y, AtkCoordType coords)
 {
+  JAW_DEBUG_C("%p, %d, %d, %d", text, x, y, coords);
   JawObject *jaw_obj = JAW_OBJECT(text);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return 0;
+  }
   TextData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TEXT);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_text = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_text);
   if (!atk_text) {
+    JAW_DEBUG_I("atk_text == NULL");
     return 0;
   }
 
@@ -381,16 +427,22 @@ jaw_text_get_range_extents (AtkText *text,
                             AtkCoordType coord_type,
                             AtkTextRectangle *rect)
 {
+  JAW_DEBUG_C("%p, %d, %d, %d, %p", text, start_offset, end_offset, coord_type, rect);
   if (rect == NULL)
   {
     return;
   }
 
   JawObject *jaw_obj = JAW_OBJECT(text);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return;
+  }
   TextData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TEXT);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_text = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_text);
   if (!atk_text) {
+    JAW_DEBUG_I("atk_text == NULL");
     return;
   }
 
@@ -419,11 +471,17 @@ jaw_text_get_range_extents (AtkText *text,
 static gint
 jaw_text_get_n_selections (AtkText *text)
 {
+  JAW_DEBUG_C("%p", text);
   JawObject *jaw_obj = JAW_OBJECT(text);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return 0;
+  }
   TextData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TEXT);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_text = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_text);
   if (!atk_text) {
+    JAW_DEBUG_I("atk_text == NULL");
     return 0;
   }
 
@@ -442,11 +500,17 @@ jaw_text_get_n_selections (AtkText *text)
 static gchar*
 jaw_text_get_selection (AtkText *text, gint selection_num, gint *start_offset, gint *end_offset)
 {
+  JAW_DEBUG_C("%p, %d, %p, %p", text, selection_num, start_offset, end_offset);
   JawObject *jaw_obj = JAW_OBJECT(text);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return NULL;
+  }
   TextData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TEXT);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_text = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_text);
   if (!atk_text) {
+    JAW_DEBUG_I("atk_text == NULL");
     return NULL;
   }
 
@@ -488,11 +552,17 @@ jaw_text_get_selection (AtkText *text, gint selection_num, gint *start_offset, g
 static gboolean
 jaw_text_add_selection (AtkText *text, gint start_offset, gint end_offset)
 {
+  JAW_DEBUG_C("%p, %d, %d", text, start_offset, end_offset);
   JawObject *jaw_obj = JAW_OBJECT(text);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return FALSE;
+  }
   TextData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TEXT);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_text = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_text);
   if (!atk_text) {
+    JAW_DEBUG_I("atk_text == NULL");
     return FALSE;
   }
 
@@ -514,11 +584,17 @@ jaw_text_add_selection (AtkText *text, gint start_offset, gint end_offset)
 static gboolean
 jaw_text_remove_selection (AtkText *text, gint selection_num)
 {
+  JAW_DEBUG_C("%p, %d", text, selection_num);
   JawObject *jaw_obj = JAW_OBJECT(text);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return FALSE;
+  }
   TextData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TEXT);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_text = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_text);
   if (!atk_text) {
+    JAW_DEBUG_I("atk_text == NULL");
     return FALSE;
   }
 
@@ -540,11 +616,17 @@ jaw_text_remove_selection (AtkText *text, gint selection_num)
 static gboolean
 jaw_text_set_selection (AtkText *text, gint selection_num, gint start_offset, gint end_offset)
 {
+  JAW_DEBUG_C("%p, %d, %d, %d", text, selection_num, start_offset, end_offset);
   JawObject *jaw_obj = JAW_OBJECT(text);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return FALSE;
+  }
   TextData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TEXT);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_text = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_text);
   if (!atk_text) {
+    JAW_DEBUG_I("atk_text == NULL");
     return FALSE;
   }
 
@@ -564,11 +646,17 @@ jaw_text_set_selection (AtkText *text, gint selection_num, gint start_offset, gi
 static gboolean
 jaw_text_set_caret_offset (AtkText *text, gint offset)
 {
+  JAW_DEBUG_C("%p, %d", text, offset);
   JawObject *jaw_obj = JAW_OBJECT(text);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return FALSE;
+  }
   TextData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_TEXT);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_text = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_text);
   if (!atk_text) {
+    JAW_DEBUG_I("atk_text == NULL");
     return FALSE;
   }
 
diff --git a/jni/src/jawtoplevel.c b/jni/src/jawtoplevel.c
index eeacda5..281db85 100644
--- a/jni/src/jawtoplevel.c
+++ b/jni/src/jawtoplevel.c
@@ -22,6 +22,7 @@
 #include <string.h>
 #include <glib.h>
 #include "jawtoplevel.h"
+#include "jawutil.h"
 
 static void jaw_toplevel_initialize(AtkObject *accessible, gpointer data);
 static void jaw_toplevel_object_finalize(GObject *obj);
@@ -40,6 +41,7 @@ G_DEFINE_TYPE (JawToplevel, jaw_toplevel, ATK_TYPE_OBJECT)
 static void
 jaw_toplevel_class_init (JawToplevelClass *klass)
 {
+  JAW_DEBUG_ALL("%p", klass);
   AtkObjectClass *atk_object_class = ATK_OBJECT_CLASS(klass);
   GObjectClass *g_object_class = G_OBJECT_CLASS(klass);
 
@@ -58,18 +60,21 @@ jaw_toplevel_class_init (JawToplevelClass *klass)
 static void
 jaw_toplevel_init (JawToplevel *toplevel)
 {
+  JAW_DEBUG_ALL("%p", toplevel);
   toplevel->windows = NULL;
 }
 
 static void
 jaw_toplevel_initialize(AtkObject *accessible, gpointer data)
 {
+  JAW_DEBUG_ALL("%p, %p", accessible, data);
  ATK_OBJECT_CLASS (jaw_toplevel_parent_class)->initialize(accessible, data);
 }
 
 static void
 jaw_toplevel_object_finalize (GObject *obj)
 {
+  JAW_DEBUG_ALL("%p", obj);
   JawToplevel *jaw_toplevel = JAW_TOPLEVEL(obj);
   g_list_free(jaw_toplevel->windows);
 
@@ -80,6 +85,7 @@ jaw_toplevel_object_finalize (GObject *obj)
 static const gchar*
 jaw_toplevel_get_name (AtkObject *obj)
 {
+  JAW_DEBUG_C("%p", obj);
   gint i;
   for(i = 0; i < atk_object_get_n_accessible_children(obj); i++)
   {
@@ -99,12 +105,14 @@ jaw_toplevel_get_name (AtkObject *obj)
 static const gchar*
 jaw_toplevel_get_description (AtkObject *obj)
 {
+  JAW_DEBUG_C("%p", obj);
   return "Accessible Java application";
 }
 
 static gint
 jaw_toplevel_get_n_children (AtkObject *obj)
 {
+  JAW_DEBUG_C("%p", obj);
   JawToplevel* jaw_toplevel = JAW_TOPLEVEL(obj);
   gint n = g_list_length(jaw_toplevel->windows);
 
@@ -114,6 +122,7 @@ jaw_toplevel_get_n_children (AtkObject *obj)
 static gint
 jaw_toplevel_get_index_in_parent (AtkObject *obj)
 {
+  JAW_DEBUG_C("%p", obj);
   JawToplevel *jaw_toplevel = JAW_TOPLEVEL(obj);
   gint i = g_list_index(jaw_toplevel->windows, obj);
 
@@ -123,12 +132,14 @@ jaw_toplevel_get_index_in_parent (AtkObject *obj)
 static AtkRole
 jaw_toplevel_get_role (AtkObject *obj)
 {
+  JAW_DEBUG_C("%p", obj);
   return ATK_ROLE_APPLICATION;
 }
 
 static AtkObject*
 jaw_toplevel_ref_child (AtkObject *obj, gint i)
 {
+  JAW_DEBUG_C("%p, %d", obj, i);
   JawToplevel *jaw_toplevel = JAW_TOPLEVEL(obj);
   AtkObject* child = (AtkObject*)g_list_nth_data(jaw_toplevel->windows, i);
 
@@ -141,12 +152,14 @@ jaw_toplevel_ref_child (AtkObject *obj, gint i)
 static AtkObject*
 jaw_toplevel_get_parent (AtkObject *obj)
 {
+  JAW_DEBUG_C("%p", obj);
   return NULL;
 }
 
 gint
 jaw_toplevel_add_window (JawToplevel *toplevel, AtkObject *child)
 {
+  JAW_DEBUG_C("%p, %p", toplevel, child);
   if (toplevel == NULL)
   {
     return -1;
@@ -164,6 +177,7 @@ jaw_toplevel_add_window (JawToplevel *toplevel, AtkObject *child)
 
 gint jaw_toplevel_remove_window(JawToplevel *toplevel, AtkObject *child)
 {
+  JAW_DEBUG_C("%p, %p", toplevel, child);
   gint index = -1;
 
   if (toplevel == NULL)
@@ -183,7 +197,7 @@ gint jaw_toplevel_remove_window(JawToplevel *toplevel, AtkObject *child)
 
 gint jaw_toplevel_get_child_index(JawToplevel *toplevel, AtkObject *child)
 {
+  JAW_DEBUG_C("%p, %p", toplevel, child);
   gint i = g_list_index(toplevel->windows, child);
   return i;
 }
-
diff --git a/jni/src/jawutil.c b/jni/src/jawutil.c
index 851b174..439e180 100644
--- a/jni/src/jawutil.c
+++ b/jni/src/jawutil.c
@@ -49,6 +49,7 @@ JavaVM *cachedJVM;
 GType
 jaw_util_get_type(void)
 {
+  JAW_DEBUG_ALL("");
   static GType type = 0;
 
   if (!type) {
@@ -74,6 +75,7 @@ jaw_util_get_type(void)
 static void
 jaw_util_class_init(JawUtilClass *kclass, void *klass_data)
 {
+  JAW_DEBUG_ALL("%p, %p", kclass, klass_data);
   AtkUtilClass *atk_class;
   gpointer data;
 
@@ -95,6 +97,7 @@ typedef struct _JawKeyListenerInfo{
 static gboolean
 notify_hf (gpointer key, gpointer value, gpointer data)
 {
+  JAW_DEBUG_C("%p, %p, %p", key, value, data);
   JawKeyListenerInfo *info = (JawKeyListenerInfo*)value;
   AtkKeyEventStruct *key_event = (AtkKeyEventStruct*)data;
 
@@ -107,6 +110,7 @@ notify_hf (gpointer key, gpointer value, gpointer data)
 static void
 insert_hf (gpointer key, gpointer value, gpointer data)
 {
+  JAW_DEBUG_C("%p, %p, %p", key, value, data);
   GHashTable *new_table = (GHashTable *) data;
   g_hash_table_insert (new_table, key, value);
 }
@@ -114,6 +118,7 @@ insert_hf (gpointer key, gpointer value, gpointer data)
 gboolean
 jaw_util_dispatch_key_event (AtkKeyEventStruct *event)
 {
+  JAW_DEBUG_C("%p", event);
   gint consumed = 0;
   if (key_listener_list) {
     GHashTable *new_hash = g_hash_table_new(NULL, NULL);
@@ -128,6 +133,7 @@ jaw_util_dispatch_key_event (AtkKeyEventStruct *event)
 static guint
 jaw_util_add_key_event_listener (AtkKeySnoopFunc listener, gpointer data)
 {
+  JAW_DEBUG_C("%p, %p", listener, data);
   static guint key = 0;
 
   if (!listener) {
@@ -151,6 +157,7 @@ jaw_util_add_key_event_listener (AtkKeySnoopFunc listener, gpointer data)
 static void
 jaw_util_remove_key_event_listener (guint remove_listener)
 {
+  JAW_DEBUG_C("%u", remove_listener);
   gpointer *value = g_hash_table_lookup(key_listener_list,
                                         GUINT_TO_POINTER(remove_listener));
   if (value)
@@ -162,6 +169,7 @@ jaw_util_remove_key_event_listener (guint remove_listener)
 static AtkObject*
 jaw_util_get_root (void)
 {
+  JAW_DEBUG_C("");
   static JawToplevel *root = NULL;
 
   if (!root) {
@@ -175,12 +183,14 @@ jaw_util_get_root (void)
 static const gchar*
 jaw_util_get_toolkit_name (void)
 {
+  JAW_DEBUG_C("");
   return "J2SE-access-bridge";
 }
 
 static const gchar*
 jaw_util_get_toolkit_version (void)
 {
+  JAW_DEBUG_C("");
   return "1.0";
 }
 
@@ -188,6 +198,7 @@ jaw_util_get_toolkit_version (void)
 guint
 jaw_util_get_tflag_from_jobj(JNIEnv *jniEnv, jobject jObj)
 {
+  JAW_DEBUG_C("%p, %p", jniEnv, jObj);
   jclass atkObject = (*jniEnv)->FindClass (jniEnv, "org/GNOME/Accessibility/AtkObject");
   jmethodID jmid = (*jniEnv)->GetStaticMethodID(jniEnv, atkObject, "getTFlagFromObj", 
"(Ljava/lang/Object;)I");
   return (guint) (*jniEnv)->CallStaticIntMethod (jniEnv, atkObject, jmid, jObj);
@@ -196,6 +207,7 @@ jaw_util_get_tflag_from_jobj(JNIEnv *jniEnv, jobject jObj)
 gboolean
 jaw_util_is_same_jobject(gconstpointer a, gconstpointer b)
 {
+  JAW_DEBUG_C("%p, %p", a, b);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   if ( (*jniEnv)->IsSameObject(jniEnv, (jobject)a, (jobject)b) ) {
     return TRUE;
@@ -206,8 +218,10 @@ jaw_util_is_same_jobject(gconstpointer a, gconstpointer b)
 
 JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserve)
 {
+  JAW_DEBUG_JNI("%p, %p", jvm, reserve);
   if (jvm == NULL)
   {
+    JAW_DEBUG_I("JavaVM pointer was NULL when initializing library");
     g_error("JavaVM pointer was NULL when initializing library");
     return JNI_ERR;
   }
@@ -217,12 +231,14 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *jvm, void *reserve)
 
 JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *jvm, void *reserve)
 {
+  JAW_DEBUG_JNI("%p, %p", jvm, reserve);
   g_warning("JNI_OnUnload() called but this is not supported yet\n");
 }
 
 JNIEnv*
 jaw_util_get_jni_env(void)
 {
+  JAW_DEBUG_C("");
   JNIEnv *env;
   env  = NULL;
   static int i;
@@ -272,6 +288,7 @@ jaw_util_get_jni_env(void)
 void
 jaw_util_detach(void)
 {
+  JAW_DEBUG_C("");
   JavaVM* jvm;
   jvm = cachedJVM;
   (*jvm)->DetachCurrentThread(jvm);
@@ -280,6 +297,7 @@ jaw_util_detach(void)
 static jobject
 jaw_util_get_java_acc_role (JNIEnv *jniEnv, const gchar* roleName)
 {
+  JAW_DEBUG_C("%p, %s", jniEnv, roleName);
   jclass classAccessibleRole = (*jniEnv)->FindClass(jniEnv,
                                                     "javax/accessibility/AccessibleRole");
   jfieldID jfid = (*jniEnv)->GetStaticFieldID(jniEnv,
@@ -294,6 +312,7 @@ jaw_util_get_java_acc_role (JNIEnv *jniEnv, const gchar* roleName)
 static gboolean
 jaw_util_is_java_acc_role (JNIEnv *jniEnv, jobject acc_role, const gchar* roleName)
 {
+  JAW_DEBUG_C("%p, %p, %s", jniEnv, acc_role, roleName);
   jobject jrole = jaw_util_get_java_acc_role (jniEnv, roleName);
 
   if ((*jniEnv)->IsSameObject(jniEnv, acc_role, jrole))
@@ -307,6 +326,7 @@ jaw_util_is_java_acc_role (JNIEnv *jniEnv, jobject acc_role, const gchar* roleNa
 AtkRole
 jaw_util_get_atk_role_from_AccessibleContext (jobject jAccessibleContext)
 {
+  JAW_DEBUG_C("%p", jAccessibleContext);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jclass atkObject = (*jniEnv)->FindClass (jniEnv, "org/GNOME/Accessibility/AtkObject");
   jmethodID jmidgar = (*jniEnv)->GetStaticMethodID (jniEnv, atkObject, "getAccessibleRole", 
"(Ljavax/accessibility/AccessibleContext;)Ljavax/accessibility/AccessibleRole;");
@@ -531,6 +551,7 @@ jaw_util_get_atk_role_from_AccessibleContext (jobject jAccessibleContext)
 static gboolean
 is_same_java_state (JNIEnv *jniEnv, jobject jobj, const gchar* strState)
 {
+  JAW_DEBUG_C("%p, %p, %s", jniEnv, jobj, strState);
   jclass classAccessibleState = (*jniEnv)->FindClass(jniEnv,
                                                      "javax/accessibility/AccessibleState");
   jfieldID jfid = (*jniEnv)->GetStaticFieldID(jniEnv,
@@ -549,6 +570,7 @@ is_same_java_state (JNIEnv *jniEnv, jobject jobj, const gchar* strState)
 AtkStateType
 jaw_util_get_atk_state_type_from_java_state (JNIEnv *jniEnv, jobject jobj)
 {
+  JAW_DEBUG_C("%p, %p", jniEnv, jobj);
   if (is_same_java_state( jniEnv, jobj, "ACTIVE" ))
     return ATK_STATE_ACTIVE;
 
@@ -647,6 +669,7 @@ jaw_util_get_rect_info (JNIEnv *jniEnv,
                         gint *width,
                         gint *height)
 {
+  JAW_DEBUG_C("%p, %p, %p, %p, %p, %p", jniEnv, jrect, x, y, width, height);
   jclass classRectangle = (*jniEnv)->FindClass(jniEnv, "java/awt/Rectangle");
   jfieldID jfidX = (*jniEnv)->GetFieldID(jniEnv, classRectangle, "x", "I");
   jfieldID jfidY = (*jniEnv)->GetFieldID(jniEnv, classRectangle, "y", "I");
diff --git a/jni/src/jawutil.h b/jni/src/jawutil.h
index 7ce7cb5..a340560 100644
--- a/jni/src/jawutil.h
+++ b/jni/src/jawutil.h
@@ -28,22 +28,38 @@
 extern int jaw_debug;
 extern FILE *log_file;
 
-#define JAW_DEBUG(lvl, fmt, ...) do { \
+#define PRINT_AND_FLUSH(fmt, ...) do { \
+    fprintf(log_file, "TIME:[%lu] PID:{%d} %s" fmt "\n", (unsigned long) time(NULL), (int)getpid(), 
__func__, ##__VA_ARGS__); \
+    fflush(log_file); \
+} while (0)
+
+#define JAW_DEBUG_I(fmt, ...) do { \
     if (jaw_debug) { \
-        if (lvl <= jaw_debug) \
-            fprintf(log_file, "TIME:[%lu] PID:{%d} " fmt "\n", (unsigned long) time(NULL), (int)getpid(), ## 
__VA_ARGS__); \
+        if (1 <= jaw_debug) \
+            PRINT_AND_FLUSH(": "fmt, ##__VA_ARGS__); \
     } \
 } while (0)
 
-#define JAW_DEBUG_I(msg, ...) JAW_DEBUG(1, "%s: " msg , __func__, ##__VA_ARGS__)
-
-#define JAW_DEBUG_F(lvl, msg, ...) JAW_DEBUG(lvl, "%s(" msg ")", __func__, ##__VA_ARGS__)
-
-#define JAW_DEBUG_JNI(msg, ...) JAW_DEBUG_F(2, msg, ##__VA_ARGS__)
+#define JAW_DEBUG_JNI(fmt, ...) do { \
+    if (jaw_debug) { \
+        if (2 <= jaw_debug) \
+            PRINT_AND_FLUSH("("fmt")", ##__VA_ARGS__); \
+    } \
+} while (0)
 
-#define JAW_DEBUG_C(msg, ...) JAW_DEBUG_F(3, msg, ##__VA_ARGS__)
+#define JAW_DEBUG_C(fmt, ...) do { \
+    if (jaw_debug) { \
+        if (3 <= jaw_debug) \
+            PRINT_AND_FLUSH("("fmt")", ##__VA_ARGS__); \
+    } \
+} while (0)
 
-#define JAW_DEBUG_ALL(msg, ...) JAW_DEBUG_F(4, msg, ##__VA_ARGS__)
+#define JAW_DEBUG_ALL(fmt, ...) do { \
+    if (jaw_debug) { \
+        if (4 <= jaw_debug) \
+            PRINT_AND_FLUSH("("fmt")", ##__VA_ARGS__); \
+    } \
+} while (0)
 
 G_BEGIN_DECLS
 
@@ -60,6 +76,7 @@ G_BEGIN_DECLS
 #define INTERFACE_TABLE_CELL              0x00000400
 #define INTERFACE_TEXT                    0x00000800
 #define INTERFACE_VALUE                   0x00001000
+#define INTERFACE_MASK                    0x00001fff
 
 #define JAW_TYPE_UTIL               (jaw_util_get_type())
 #define JAW_UTIL(obj)               (G_TYPE_CHECK_INSTANCE_CAST ((obj), JAW_TYPE_UTIL, JawUtil))
diff --git a/jni/src/jawvalue.c b/jni/src/jawvalue.c
index 1308328..efe96a7 100644
--- a/jni/src/jawvalue.c
+++ b/jni/src/jawvalue.c
@@ -39,6 +39,7 @@ typedef struct _ValueData {
 void
 jaw_value_interface_init (AtkValueIface *iface, gpointer data)
 {
+  JAW_DEBUG_ALL("%p, %p", iface, data);
   iface->get_current_value = jaw_value_get_current_value;
   iface->set_value = jaw_value_set_value;
   iface->get_increment = jaw_value_get_increment;
@@ -48,6 +49,7 @@ jaw_value_interface_init (AtkValueIface *iface, gpointer data)
 gpointer
 jaw_value_data_init (jobject ac)
 {
+  JAW_DEBUG_ALL("%p", ac);
   ValueData *data = g_new0(ValueData, 1);
 
   JNIEnv *jniEnv = jaw_util_get_jni_env();
@@ -66,6 +68,7 @@ jaw_value_data_init (jobject ac)
 void
 jaw_value_data_finalize (gpointer p)
 {
+  JAW_DEBUG_ALL("%p", p);
   ValueData *data = (ValueData*)p;
   JNIEnv *jniEnv = jaw_util_get_jni_env();
 
@@ -79,6 +82,7 @@ jaw_value_data_finalize (gpointer p)
 static void
 get_g_value_from_java_number (JNIEnv *jniEnv, jobject jnumber, GValue *value)
 {
+  JAW_DEBUG_C("%p, %p, %p", jniEnv, jnumber, value);
   jclass classByte = (*jniEnv)->FindClass(jniEnv, "java/lang/Byte");
   jclass classDouble = (*jniEnv)->FindClass(jniEnv, "java/lang/Double");
   jclass classFloat = (*jniEnv)->FindClass(jniEnv, "java/lang/Float");
@@ -142,16 +146,22 @@ get_g_value_from_java_number (JNIEnv *jniEnv, jobject jnumber, GValue *value)
 static void
 jaw_value_get_current_value (AtkValue *obj, GValue *value)
 {
+  JAW_DEBUG_C("%p, %p", obj, value);
   if (!value)
   {
     return;
   }
 
   JawObject *jaw_obj = JAW_OBJECT(obj);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return;
+  }
   ValueData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_VALUE);
   JNIEnv *jniEnv = jaw_util_get_jni_env();
   jobject atk_value = (*jniEnv)->NewGlobalRef(jniEnv, data->atk_value);
   if (!atk_value) {
+    JAW_DEBUG_I("atk_value == NULL");
     return;
   }
 
@@ -177,14 +187,20 @@ jaw_value_get_current_value (AtkValue *obj, GValue *value)
 static void
 jaw_value_set_value(AtkValue *obj, const gdouble value)
 {
+  JAW_DEBUG_C("%p, %lf", obj, value);
   if (!value)
     return;
 
   JawObject *jaw_obj = JAW_OBJECT(obj);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return;
+  }
   ValueData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_VALUE);
   JNIEnv *env = jaw_util_get_jni_env();
   jobject atk_value = (*env)->NewGlobalRef(env, data->atk_value);
   if (!atk_value) {
+    JAW_DEBUG_I("atk_value == NULL");
     return;
   }
 
@@ -200,12 +216,17 @@ jaw_value_set_value(AtkValue *obj, const gdouble value)
 static AtkRange*
 jaw_value_get_range(AtkValue *obj)
 {
-
+  JAW_DEBUG_C("%p", obj);
   JawObject *jaw_obj = JAW_OBJECT(obj);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return NULL;
+  }
   ValueData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_VALUE);
   JNIEnv *env = jaw_util_get_jni_env();
   jobject atk_value = (*env)->NewGlobalRef(env, data->atk_value);
   if (!atk_value) {
+    JAW_DEBUG_I("atk_value == NULL");
     return NULL;
   }
 
@@ -222,11 +243,17 @@ jaw_value_get_range(AtkValue *obj)
 static gdouble
 jaw_value_get_increment (AtkValue *obj)
 {
+  JAW_DEBUG_C("%p", obj);
   JawObject *jaw_obj = JAW_OBJECT(obj);
+  if (!jaw_obj) {
+    JAW_DEBUG_I("jaw_obj == NULL");
+    return 0;
+  }
   ValueData *data = jaw_object_get_interface_data(jaw_obj, INTERFACE_VALUE);
   JNIEnv *env = jaw_util_get_jni_env();
   jobject atk_value = (*env)->NewGlobalRef(env, data->atk_value);
   if (!atk_value) {
+    JAW_DEBUG_I("atk_value == NULL");
     return 0.;
   }
   jclass classAtkValue = (*env)->FindClass(env, "org/GNOME/Accessibility/AtkValue");


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]