--- /dev/null
+--- a/src/aptrarray.h
++++ b/src/aptrarray.h
+@@ -27,8 +27,25 @@
+ G_BEGIN_DECLS
+
+
+-#define ZAK_APTR_TYPE_ARRAY zak_aptr_array_get_type ()
+-G_DECLARE_FINAL_TYPE (ZakAptrArray, zak_aptr_array, ZAK_APTR, ARRAY, GObject)
++#define ZAK_APTR_TYPE_ARRAY (zak_aptr_array_get_type ())
++#define ZAK_APTR_ARRAY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ZAK_APTR_TYPE_ARRAY, ZakAptrArray))
++#define ZAK_APTR_ARRAY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ZAK_APTR_TYPE_ARRAY, ZakAptrArrayClass))
++#define ZAK_APTR_IS_ARRAY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ZAK_APTR_TYPE_ARRAY))
++#define ZAK_APTR_IS_ARRAY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ZAK_APTR_TYPE_ARRAY))
++#define ZAK_APTR_ARRAY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), ZAK_APTR_TYPE_ARRAY, ZakAptrArrayClass))
++
++typedef struct _ZakAptrArray ZakAptrArray;
++typedef struct _ZakAptrArrayClass ZakAptrArrayClass;
++
++struct _ZakAptrArray
++ {
++ GObject parent;
++ };
++
++struct _ZakAptrArrayClass
++{
++ GObjectClass parent_class;
++};
+
+ ZakAptrArray *zak_aptr_array_new ();
+
+--- a/src/aptrarray.c
++++ b/src/aptrarray.c
+@@ -39,13 +39,14 @@ static void zak_aptr_array_get_property (GObject *object,
+ static void zak_aptr_array_dispose (GObject *gobject);
+ static void zak_aptr_array_finalize (GObject *gobject);
+
+-struct _ZakAptrArray
+- {
+- GObject parent_instance;
++#define ZAK_APTR_ARRAY_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), ZAK_APTR_TYPE_ARRAY, ZakAptrArrayPrivate))
+
++typedef struct _ZakAptrArrayPrivate ZakAptrArrayPrivate;
++struct _ZakAptrArrayPrivate
++ {
+ GHashTable *ht;
+ GPtrArray *ar;
+- };
++ };
+
+ G_DEFINE_TYPE (ZakAptrArray, zak_aptr_array, G_TYPE_OBJECT)
+
+@@ -58,13 +59,17 @@ zak_aptr_array_class_init (ZakAptrArrayClass *klass)
+ object_class->get_property = zak_aptr_array_get_property;
+ object_class->dispose = zak_aptr_array_dispose;
+ object_class->finalize = zak_aptr_array_finalize;
++
++ g_type_class_add_private (object_class, sizeof (ZakAptrArrayPrivate));
+ }
+
+ static void
+ zak_aptr_array_init (ZakAptrArray *zak_aptr_array)
+ {
+- zak_aptr_array->ht = g_hash_table_new (g_str_hash, g_str_equal);
+- zak_aptr_array->ar = g_ptr_array_new ();
++ ZakAptrArrayPrivate *priv = ZAK_APTR_ARRAY_GET_PRIVATE (zak_aptr_array);
++
++ priv->ht = g_hash_table_new (g_str_hash, g_str_equal);
++ priv->ar = g_ptr_array_new ();
+ }
+
+ /**
+@@ -92,8 +97,10 @@ ZakAptrArray
+ void
+ zak_aptr_array_add (ZakAptrArray *zak_aptr_array, const gchar *name, gpointer data)
+ {
+- g_ptr_array_add (zak_aptr_array->ar, data);
+- zak_aptr_array_bind (zak_aptr_array, zak_aptr_array->ar->len - 1, name);
++ ZakAptrArrayPrivate *priv = ZAK_APTR_ARRAY_GET_PRIVATE (zak_aptr_array);
++
++ g_ptr_array_add (priv->ar, data);
++ zak_aptr_array_bind (zak_aptr_array, priv->ar->len - 1, name);
+ }
+
+ /**
+@@ -105,7 +112,9 @@ zak_aptr_array_add (ZakAptrArray *zak_aptr_array, const gchar *name, gpointer da
+ GPtrArray
+ *zak_aptr_array_get_array (ZakAptrArray *zak_aptr_array)
+ {
+- return zak_aptr_array->ar;
++ ZakAptrArrayPrivate *priv = ZAK_APTR_ARRAY_GET_PRIVATE (zak_aptr_array);
++
++ return priv->ar;
+ }
+
+ /**
+@@ -118,8 +127,10 @@ GPtrArray
+ void
+ zak_aptr_array_bind (ZakAptrArray *zak_aptr_array, guint index, const gchar *name)
+ {
++ ZakAptrArrayPrivate *priv = ZAK_APTR_ARRAY_GET_PRIVATE (zak_aptr_array);
++
+ /* with 0 (zero) the function GUINT_TO_POINTER doesn't work */
+- g_hash_table_insert (zak_aptr_array->ht, (gpointer)g_strdup (name), GUINT_TO_POINTER (index + 1));
++ g_hash_table_insert (priv->ht, (gpointer)g_strdup (name), GUINT_TO_POINTER (index + 1));
+ }
+
+ /**
+@@ -135,12 +146,14 @@ zak_aptr_array_lookup (ZakAptrArray *zak_aptr_array, const gchar *name)
+ gint index;
+ gpointer ret;
+
++ ZakAptrArrayPrivate *priv = ZAK_APTR_ARRAY_GET_PRIVATE (zak_aptr_array);
++
+ index = zak_aptr_array_lookup_get_index (zak_aptr_array, name);
+
+ ret = NULL;
+ if (index >= 0)
+ {
+- ret = g_ptr_array_index (zak_aptr_array->ar, index);
++ ret = g_ptr_array_index (priv->ar, index);
+ }
+
+ return ret;
+@@ -159,7 +172,9 @@ zak_aptr_array_lookup_get_index (ZakAptrArray *zak_aptr_array, const gchar *name
+ gpointer index;
+ gint ret;
+
+- index = g_hash_table_lookup (zak_aptr_array->ht, (gconstpointer)name);
++ ZakAptrArrayPrivate *priv = ZAK_APTR_ARRAY_GET_PRIVATE (zak_aptr_array);
++
++ index = g_hash_table_lookup (priv->ht, (gconstpointer)name);
+
+ ret = -1;
+ if (index != NULL)