diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,29 @@
+Copyright (c) <2009>, <Maurício C. Antunes>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the author nor the names of contributors
+    may be used to endorse or promote products derived from this
+    software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/bindings-gobject.cabal b/bindings-gobject.cabal
new file mode 100644
--- /dev/null
+++ b/bindings-gobject.cabal
@@ -0,0 +1,39 @@
+cabal-version: >= 1.2.3
+name: bindings-gobject
+homepage: http://bitbucket.org/mauricio/bindings-gobject
+synopsis:
+  Low level bindings to GObject.
+version: 0.1
+license: BSD3
+license-file: LICENSE
+maintainer: Maurício C. Antunes <mauricio.antunes@gmail.com>
+author: Maurício C. Antunes
+build-type: Simple
+category: FFI
+bug-reports: http://bitbucket.org/mauricio/bindings-gobject/issues
+library
+  hs-source-dirs: src
+  extensions:
+    ForeignFunctionInterface
+  build-depends:
+    base >= 3 && < 5,
+    bindings-DSL >= 1.0 && < 1.1,
+    bindings-glib >= 0.1 && < 0.2
+  include-dirs: src
+  install-includes:
+    bindings-gobject.dsl.h
+    bindings-gobject.cmacros.h
+  exposed-modules:
+    Bindings.GObject
+    Bindings.GObject.BaseObjectType
+    Bindings.GObject.BoxedTypes
+    Bindings.GObject.EnumerationAndFlagTypes
+    Bindings.GObject.GenericValues
+    Bindings.GObject.GParamSpec
+    Bindings.GObject.GTypeModule
+    Bindings.GObject.GTypePlugin
+    Bindings.GObject.TypeInformation
+    Bindings.GObject.ValueArrays
+    Bindings.GObject.Varargs
+  c-sources: src/inlines.c
+  pkgconfig-depends: gobject-2.0 >= 2.22.2
diff --git a/src/Bindings/GObject.hs b/src/Bindings/GObject.hs
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GObject.hs
@@ -0,0 +1,1 @@
+module Bindings.GObject (module Bindings.GObject.BaseObjectType,module Bindings.GObject.BoxedTypes,module Bindings.GObject.EnumerationAndFlagTypes,module Bindings.GObject.GenericValues,module Bindings.GObject.GParamSpec,module Bindings.GObject.GTypeModule,module Bindings.GObject.GTypePlugin,module Bindings.GObject.TypeInformation,module Bindings.GObject.ValueArrays,module Bindings.GObject.Varargs) where {import Bindings.GObject.BaseObjectType;import Bindings.GObject.BoxedTypes;import Bindings.GObject.EnumerationAndFlagTypes;import Bindings.GObject.GenericValues;import Bindings.GObject.GParamSpec;import Bindings.GObject.GTypeModule;import Bindings.GObject.GTypePlugin;import Bindings.GObject.TypeInformation;import Bindings.GObject.ValueArrays;import Bindings.GObject.Varargs}
diff --git a/src/Bindings/GObject/BaseObjectType.hsc b/src/Bindings/GObject/BaseObjectType.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GObject/BaseObjectType.hsc
@@ -0,0 +1,104 @@
+#include <bindings.dsl.h>
+#include <glib-object.h>
+
+-- | <http://library.gnome.org/devel/gobject/stable/gobject-The-Base-Object-Type.html>
+
+module Bindings.GObject.BaseObjectType where
+#strict_import
+import Bindings.GLib
+import Bindings.GObject.TypeInformation
+import Bindings.GObject.GParamSpec
+
+#starttype GObject
+#stoptype
+
+#starttype GObjectClass
+#field g_type_class , <GTypeClass>
+#field constructor , FunPtr (<GType>, <guint>, Ptr <GObjectConstructParam> -> IO (Ptr <GObject>))
+#field set_property , FunPtr (Ptr <GObject>, <guint>, Ptr <GValue>, Ptr <GParamSpec> -> IO ())
+#field get_property , FunPtr (Ptr <GObject>, <guint>, Ptr <GValue>, Ptr <GParamSpec> -> IO ())
+#field dispose , FunPtr (Ptr <GObject> -> IO ())
+#field finalize , FunPtr (Ptr <GObject> -> IO ())
+#field dispatch_properties_changed , FunPtr (Ptr <GObject>, <guint>, Ptr (Ptr <GParamSpec>) -> IO ())
+#field notify , FunPtr (Ptr <GObject>, Ptr <GParamSpec> -> IO ())
+#field constructed , FunPtr (Ptr <GObject> -> IO ())
+#stoptype
+
+#starttype GObjectConstructParam
+#field pspec , Ptr <GParamSpec>
+#field value , Ptr <GValue>
+#stoptype
+
+#callback GObjectGetPropertyFunc , Ptr <GObject> -> <guint> -> Ptr <GValue> -> Ptr <GParamSpec> -> IO ()
+#callback GObjectSetPropertyFunc , Ptr <GObject> -> <guint> -> Ptr <GValue> -> Ptr <GParamSpec> -> IO ()
+#callback GObjectFinalizeFunc , Ptr <GObject> -> IO ()
+
+#cinline G_TYPE_IS_OBJECT , <GType> -> IO <gboolean>
+#cinline G_OBJECT , Ptr <GTypeInstance> -> IO (Ptr <GObject>)
+#cinline G_IS_OBJECT , Ptr <GTypeInstance> -> IO <gboolean>
+#cinline G_OBJECT_CLASS , Ptr <GTypeClass> -> IO <GObjectClass>
+#cinline G_IS_OBJECT_CLASS , Ptr <GTypeClass> -> IO <gboolean>
+#cinline G_OBJECT_GET_CLASS , Ptr <GTypeInstance> -> IO (Ptr <GObjectClass>)
+#cinline G_OBJECT_TYPE , Ptr <GTypeInstance> -> IO <GType>
+#cinline G_OBJECT_TYPE_NAME , Ptr <GTypeInstance> -> IO (Ptr <gchar>)
+#cinline G_OBJECT_CLASS_TYPE , Ptr <GTypeClass> -> IO <GType>
+#cinline G_OBJECT_CLASS_NAME , Ptr <GTypeClass> -> IO (Ptr <gchar>)
+
+#ccall g_object_class_install_property , Ptr <GObjectClass> -> <guint> -> Ptr <GParamSpec> -> IO ()
+#ccall g_object_class_find_property , Ptr <GObjectClass> -> Ptr <gchar> -> IO (Ptr <GParamSpec>)
+#ccall g_object_class_list_properties , Ptr <GObjectClass> -> Ptr <guint> -> IO (Ptr (Ptr <GParamSpec>))
+#ccall g_object_class_override_property , Ptr <GObjectClass> -> <guint> -> Ptr <gchar> -> IO ()
+#ccall g_object_interface_install_property , <gpointer> -> Ptr <GParamSpec> -> IO ()
+#ccall g_object_interface_find_property , <gpointer> -> Ptr <gchar> -> IO (Ptr <GParamSpec>)
+#ccall g_object_interface_list_properties , <gpointer> -> Ptr <guint> -> IO (Ptr (Ptr <GParamSpec>))
+#ccall g_object_newv , <GType> -> <guint> -> Ptr <GParameter> -> IO <gpointer>
+
+#starttype GParameter
+#field name , Ptr <gchar>
+#field value , <GValue>
+#stoptype
+
+#ccall g_object_ref , <gpointer> -> IO <gpointer>
+#ccall g_object_unref , <gpointer> -> IO ()
+#ccall g_object_ref_sink , <gpointer> -> IO <gpointer>
+
+#starttype GInitiallyUnowned
+#stoptype
+
+#starttype GInitiallyUnownedClass
+#stoptype
+
+#cinline G_TYPE_INITIALLY_UNOWNED , IO <GType>
+
+#ccall g_object_is_floating , <gpointer> -> IO <gboolean>
+#ccall g_object_force_floating , Ptr <GObject> -> IO ()
+
+#callback GWeakNotify , <gpointer> -> Ptr <GObject> -> IO ()
+
+#ccall g_object_weak_ref , Ptr <GObject> -> <GWeakNotify> -> <gpointer> -> IO ()
+#ccall g_object_weak_unref , Ptr <GObject> -> <GWeakNotify> -> <gpointer> -> IO ()
+#ccall g_object_add_weak_pointer , Ptr <GObject> -> Ptr <gpointer> -> IO ()
+#ccall g_object_remove_weak_pointer , Ptr <GObject> -> Ptr <gpointer> -> IO ()
+
+#callback GToggleNotify , <gpointer> -> Ptr <GObject> -> <gboolean> -> IO ()
+
+#ccall g_object_add_toggle_ref , Ptr <GObject> -> <GToggleNotify> -> <gpointer> -> IO ()
+#ccall g_object_remove_toggle_ref , Ptr <GObject> -> <GToggleNotify> -> <gpointer> -> IO ()
+#ccall g_object_notify , Ptr <GObject> -> Ptr <gchar> -> IO ()
+#ccall g_object_freeze_notify , Ptr <GObject> -> IO ()
+#ccall g_object_thaw_notify , Ptr <GObject> -> IO ()
+#ccall g_object_get_data , Ptr <GObject> -> Ptr <gchar> -> IO <gpointer>
+#ccall g_object_set_data , Ptr <GObject> -> Ptr <gchar> -> <gpointer> -> IO ()
+#ccall g_object_set_data_full , Ptr <GObject> -> Ptr <gchar> -> <gpointer> -> <GDestroyNotify> -> IO ()
+#ccall g_object_steal_data , Ptr <GObject> -> Ptr <gchar> -> IO <gpointer>
+#ccall g_object_get_qdata , Ptr <GObject> -> <GQuark> -> IO <gpointer>
+#ccall g_object_set_qdata , Ptr <GObject> -> <GQuark> -> <gpointer> -> IO ()
+#ccall g_object_set_qdata_full , Ptr <GObject> -> <GQuark> -> <gpointer> -> <GDestroyNotify> -> IO ()
+#ccall g_object_steal_qdata , Ptr <GObject> -> <GQuark> -> IO <gpointer>
+#ccall g_object_set_property , Ptr <GObject> -> Ptr <gchar> -> Ptr <GValue> -> IO ()
+#ccall g_object_get_property , Ptr <GObject> -> Ptr <gchar> -> Ptr <GValue> -> IO ()
+#ccall g_object_watch_closure , Ptr <GObject> -> Ptr <GClosure> -> IO ()
+#ccall g_object_run_dispose , Ptr <GObject> -> IO ()
+
+#cinline G_OBJECT_WARN_INVALID_PROPERTY_ID , Ptr <GObject> -> <guint> -> Ptr <GParamSpec> -> IO ()
+
diff --git a/src/Bindings/GObject/BoxedTypes.hsc b/src/Bindings/GObject/BoxedTypes.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GObject/BoxedTypes.hsc
@@ -0,0 +1,29 @@
+#include <bindings.dsl.h>
+#include <glib-object.h>
+
+-- | <http://library.gnome.org/devel/gobject/stable/gobject-Boxed-Types.html>
+
+module Bindings.GObject.BoxedTypes where
+#strict_import
+import Bindings.GLib.Fundamentals
+import Bindings.GObject.TypeInformation
+
+#callback GBoxedCopyFunc , <gpointer> -> IO <gpointer>
+#callback GBoxedFreeFunc , <gpointer> -> IO ()
+
+#ccall g_boxed_copy , <GType> -> <gconstpointer> -> IO <gpointer>
+#ccall g_boxed_free , <GType> -> <gpointer> -> IO ()
+#ccall g_boxed_type_register_static , Ptr <gchar> -> <GBoxedCopyFunc> -> <GBoxedFreeFunc> -> IO <GType>
+#ccall g_pointer_type_register_static , Ptr <gchar> -> IO <GType>
+
+#cinline G_TYPE_HASH_TABLE , IO <GType>
+#cinline G_TYPE_DATE , IO <GType>
+#cinline G_TYPE_GSTRING , IO <GType>
+#cinline G_TYPE_STRV , IO <GType>
+#cinline G_TYPE_REGEX , IO <GType>
+#cinline G_TYPE_ARRAY , IO <GType>
+#cinline G_TYPE_BYTE_ARRAY , IO <GType>
+#cinline G_TYPE_PTR_ARRAY , IO <GType>
+
+#synonym_t GStrv , Ptr (Ptr <gchar>)
+
diff --git a/src/Bindings/GObject/EnumerationAndFlagTypes.hsc b/src/Bindings/GObject/EnumerationAndFlagTypes.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GObject/EnumerationAndFlagTypes.hsc
@@ -0,0 +1,59 @@
+#include <bindings.dsl.h>
+#include <glib-object.h>
+
+-- | <http://library.gnome.org/devel/gobject/stable/gobject-Enumeration-and-Flag-Types.html>
+
+module Bindings.GObject.EnumerationAndFlagTypes where
+#strict_import
+import Bindings.GLib
+import Bindings.GObject.TypeInformation
+
+#starttype GEnumClass
+#field g_type_class , <GTypeClass>
+#field minimum , <gint>
+#field maximum , <gint>
+#field n_values , <guint>
+#field values , Ptr <GEnumValue>
+#stoptype
+
+#starttype GFlagsClass
+#field g_type_class , <GTypeClass>
+#field mask , <guint>
+#field n_values , <guint>
+#field values , Ptr <GFlagsValue>
+#stoptype
+
+#cinline G_ENUM_CLASS_TYPE , Ptr <GEnumClass> -> IO <GType>
+#cinline G_ENUM_CLASS_TYPE_NAME , Ptr <GEnumClass> -> IO (Ptr <gchar>)
+#cinline G_TYPE_IS_ENUM , <GType> -> IO <gboolean>
+#cinline G_ENUM_CLASS , Ptr <GTypeClass> -> IO (Ptr <GEnumClass>)
+#cinline G_IS_ENUM_CLASS , Ptr <GTypeClass> -> IO <gboolean>
+#cinline G_TYPE_IS_FLAGS , <GType> -> IO <gboolean>
+#cinline G_FLAGS_CLASS , Ptr <GTypeClass> -> IO (Ptr <GFlagsClass>)
+#cinline G_IS_FLAGS_CLASS , Ptr <GTypeClass> -> IO <gboolean>
+#cinline G_FLAGS_CLASS_TYPE , Ptr <GFlagsClass> -> IO <GType>
+#cinline G_FLAGS_CLASS_TYPE_NAME , Ptr <GFlagsClass> -> IO (Ptr <gchar>)
+
+#starttype GEnumValue
+#field value , <gint>
+#field value_name , Ptr <gchar>
+#field value_nick , Ptr <gchar>
+#stoptype
+
+#starttype GFlagsValue
+#field value , <gint>
+#field value_name , Ptr <gchar>
+#field value_nick , Ptr <gchar>
+#stoptype
+
+#ccall g_enum_get_value , Ptr <GEnumClass> -> <gint> -> IO (Ptr <GEnumValue>)
+#ccall g_enum_get_value_by_name , Ptr <GEnumClass> -> Ptr <gchar> -> IO (Ptr <GEnumValue>)
+#ccall g_enum_get_value_by_nick , Ptr <GEnumClass> -> Ptr <gchar> -> IO (Ptr <GEnumValue>)
+#ccall g_flags_get_first_value , Ptr <GFlagsClass> -> <guint> -> IO (Ptr <GFlagsValue>)
+#ccall g_flags_get_value_by_name , Ptr <GFlagsClass> -> Ptr <gchar> -> IO (Ptr <GFlagsValue>)
+#ccall g_flags_get_value_by_nick , Ptr <GFlagsClass> -> Ptr <gchar> -> IO (Ptr <GFlagsValue>)
+#ccall g_enum_register_static , Ptr <gchar> -> Ptr <GEnumValue> -> IO <GType>
+#ccall g_flags_register_static , Ptr <gchar> -> Ptr <GFlagsValue> -> IO <GType>
+#ccall g_enum_complete_type_info , <GType> -> Ptr <GTypeInfo> -> Ptr <GEnumValue> -> IO ()
+#ccall g_flags_complete_type_info , <GType> -> Ptr <GTypeInfo> -> Ptr <GFlagsValue> -> IO ()
+
diff --git a/src/Bindings/GObject/GParamSpec.hsc b/src/Bindings/GObject/GParamSpec.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GObject/GParamSpec.hsc
@@ -0,0 +1,93 @@
+#include <bindings.dsl.h>
+#include <glib-object.h>
+
+-- | <http://library.gnome.org/devel/gobject/stable/gobject-GParamSpec.html>
+
+module Bindings.GObject.GParamSpec where
+#strict_import
+import Bindings.GLib
+import Bindings.GObject.TypeInformation
+
+#cinline G_TYPE_IS_PARAM , <GType> -> IO <gboolean>
+#cinline G_PARAM_SPEC , Ptr <GTypeInstance> -> IO (Ptr <GParamSpec>)
+#cinline G_IS_PARAM_SPEC , Ptr <GTypeInstance> -> IO <gboolean>
+#cinline G_PARAM_SPEC_CLASS , Ptr <GTypeClass> -> IO (Ptr <GParamSpecClass>)
+#cinline G_IS_PARAM_SPEC_CLASS , Ptr <GTypeClass> -> IO <gboolean>
+#cinline G_PARAM_SPEC_GET_CLASS , Ptr <GParamSpec> -> IO (Ptr <GParamSpecClass>)
+#cinline G_PARAM_SPEC_TYPE , Ptr <GParamSpec> -> IO <GType>
+#cinline G_PARAM_SPEC_TYPE_NAME , Ptr <GParamSpec> -> IO (Ptr <gchar>)
+#cinline G_PARAM_SPEC_VALUE_TYPE , Ptr <GParamSpec> -> IO <GType>
+
+#starttype GParamSpec
+#field g_type_instance , <GTypeInstance>
+#field name , Ptr <gchar>
+#field flags , <GParamFlags>
+#field value_type , <GType>
+#field owner_type , <GType>
+#stoptype
+
+#starttype GParamSpecClass
+#field g_type_class , <GTypeClass>
+#field value_type , <GType>
+#field finalize , FunPtr (Ptr <GParamSpec> -> IO ())
+#field value_set_default , FunPtr (Ptr <GParamSpec> -> Ptr <GValue> -> IO ())
+#field value_validate , FunPtr (Ptr <GParamSpec> -> Ptr <GValue> -> IO <gboolean>)
+#field values_cmp , FunPtr (Ptr <GParamSpec> -> Ptr <GValue> -> Ptr <GValue> -> IO <gint>)
+#stoptype
+
+#integral_t GParamFlags
+
+#num G_PARAM_READABLE
+#num G_PARAM_WRITABLE
+#num G_PARAM_CONSTRUCT
+#num G_PARAM_CONSTRUCT_ONLY
+#num G_PARAM_LAX_VALIDATION
+#num G_PARAM_STATIC_NAME
+#num G_PARAM_STATIC_NICK
+#num G_PARAM_STATIC_BLURB
+
+#num G_PARAM_READWRITE
+#num G_PARAM_STATIC_STRINGS
+#num G_PARAM_MASK
+#num G_PARAM_USER_SHIFT
+
+#ccall g_param_spec_ref , Ptr <GParamSpec> -> IO (Ptr <GParamSpec>)
+#ccall g_param_spec_unref , Ptr <GParamSpec> -> IO ()
+#ccall g_param_spec_sink , Ptr <GParamSpec> -> IO ()
+#ccall g_param_spec_ref_sink , Ptr <GParamSpec> -> IO (Ptr <GParamSpec>)
+#ccall g_param_value_set_default , Ptr <GParamSpec> -> Ptr <GValue> -> IO ()
+#ccall g_param_value_defaults , Ptr <GParamSpec> -> Ptr <GValue> -> IO <gboolean>
+#ccall g_param_value_validate , Ptr <GParamSpec> -> Ptr <GValue> -> IO <gboolean>
+#ccall g_param_value_convert , Ptr <GParamSpec> -> Ptr <GValue> -> Ptr <GValue> -> <gboolean> -> IO <gboolean>
+#ccall g_param_values_cmp , Ptr <GParamSpec> -> Ptr <GValue> -> Ptr <GValue> -> IO <gint>
+#ccall g_param_spec_get_name , Ptr <GParamSpec> -> IO (Ptr <gchar>)
+#ccall g_param_spec_get_nick , Ptr <GParamSpec> -> IO (Ptr <gchar>)
+#ccall g_param_spec_get_blurb , Ptr <GParamSpec> -> IO (Ptr <gchar>)
+#ccall g_param_spec_get_qdata , Ptr <GParamSpec> -> <GQuark> -> IO <gpointer>
+#ccall g_param_spec_set_qdata , Ptr <GParamSpec> -> <GQuark> -> <gpointer> -> IO ()
+#ccall g_param_spec_set_qdata_full , Ptr <GParamSpec> -> <GQuark> -> <gpointer> -> <GDestroyNotify> -> IO ()
+#ccall g_param_spec_steal_qdata , Ptr <GParamSpec> -> <GQuark> -> IO <gpointer>
+#ccall g_param_spec_get_redirect_target , Ptr <GParamSpec> -> IO (Ptr <GParamSpec>)
+#ccall g_param_spec_internal , <GType> -> Ptr <gchar> -> Ptr <gchar> -> Ptr <gchar> -> <GParamFlags> -> IO <gpointer>
+
+#starttype GParamSpecTypeInfo
+#field instance_size , <guint16>
+#field n_preallocs , <guint16>
+#field instance_init , FunPtr (Ptr <GParamSpec> -> IO ())
+#field value_type , <GType>
+#field finalize , FunPtr (Ptr <GParamSpec> -> IO ())
+#field value_set_default , FunPtr (Ptr <GParamSpec> -> Ptr <GValue> -> IO ())
+#field value_validate , FunPtr (Ptr <GParamSpec> -> Ptr <GValue> -> IO <gboolean>)
+#field values_cmp , FunPtr (Ptr <GParamSpec> -> Ptr <GValue> -> Ptr <GValue> -> IO <gint>)
+#stoptype
+
+#ccall g_param_type_register_static , Ptr <gchar> -> Ptr <GParamSpecTypeInfo> -> IO <GType>
+
+#opaque_t GParamSpecPool
+
+#ccall g_param_spec_pool_insert , Ptr <GParamSpecPool> -> Ptr <GParamSpec> -> <GType> -> IO ()
+#ccall g_param_spec_pool_remove , Ptr <GParamSpecPool> -> Ptr <GParamSpec> -> IO ()
+#ccall g_param_spec_pool_lookup , Ptr <GParamSpecPool> -> Ptr <gchar> -> <GType> -> <gboolean> -> IO (Ptr <GParamSpec>)
+#ccall g_param_spec_pool_list , Ptr <GParamSpecPool> -> <GType> -> Ptr <guint> -> IO (Ptr (Ptr <GParamSpec>))
+#ccall g_param_spec_pool_list_owned , Ptr <GParamSpecPool> -> <GType> -> IO (Ptr <GList>)
+
diff --git a/src/Bindings/GObject/GTypeModule.hsc b/src/Bindings/GObject/GTypeModule.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GObject/GTypeModule.hsc
@@ -0,0 +1,29 @@
+#include <bindings.dsl.h>
+#include <glib-object.h>
+
+-- | <http://library.gnome.org/devel/gobject/stable/GTypeModule.html>
+
+module Bindings.GObject.GTypeModule where
+#strict_import
+import Bindings.GLib.Fundamentals
+import Bindings.GObject.BaseObjectType
+
+#starttype GTypeModule
+#field name , Ptr <gchar>
+#stoptype
+
+#starttype GTypeModuleClass
+#field parent_class , <GObjectClass>
+#field load , Ptr <GTypeModule> -> IO <gboolean>
+#field unload , Ptr <GTypeModule> -> IO ()
+#stoptype
+
+#ccall g_type_module_use , Ptr <GTypeModule> -> IO <gboolean>
+#ccall g_type_module_unuse , Ptr <GTypeModule> -> IO ()
+#ccall g_type_module_set_name , Ptr <GTypeModule> -> Ptr <gchar> -> IO ()
+#ccall g_type_module_register_type , Ptr <GTypeModule> -> <GType> -> Ptr <gchar> -> Ptr <GTypeInfo> -> <GTypeFlags> -> IO <GType>
+#ccall g_type_module_add_interface , Ptr <GTypeModule> -> <GType> -> <GType> -> Ptr <GInterfaceInfo> -> IO ()
+#ccall g_type_module_register_enum , Ptr <GTypeModule> -> Ptr <gchar> -> Ptr <GEnumValue> -> IO <GType>
+#ccall g_type_module_register_flags , Ptr <GTypeModule> -> Ptr <gchar> -> Ptr <GFlagsValue> -> IO <GType>
+
+
diff --git a/src/Bindings/GObject/GTypePlugin.hsc b/src/Bindings/GObject/GTypePlugin.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GObject/GTypePlugin.hsc
@@ -0,0 +1,23 @@
+#include <bindings.dsl.h>
+#include <glib-object.h>
+
+-- | <http://library.gnome.org/devel/gobject/stable/GTypePlugin.html>
+
+module Bindings.GObject.GTypePlugin where
+#strict_import
+import Bindings.GObject.TypeInformation
+
+#starttype GTypePluginClass
+#field use_plugin , <GTypePluginUse>
+#field unuse_plugin , <GTypePluginUnuse>
+#field complete_type_info , <GTypePluginCompleteTypeInfo>
+#field complete_interface_info , <GTypePluginCompleteInterfaceInfo>
+#stoptype
+
+#callback GTypePluginUse , Ptr <GTypePlugin> -> IO ()
+#callback GTypePluginUnuse , Ptr <GTypePlugin> -> IO ()
+#callback GTypePluginCompleteTypeInfo , Ptr <GTypePlugin> -> \
+    <GType> -> Ptr <GTypeInfo> -> Ptr <GTypeValueTable> -> IO ()
+#callback GTypePluginCompleteInterfaceInfo , Ptr <GTypePlugin> -> \
+    <GType> -> <GType> -> Ptr <GInterfaceInfo> -> IO ()
+
diff --git a/src/Bindings/GObject/GenericValues.hsc b/src/Bindings/GObject/GenericValues.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GObject/GenericValues.hsc
@@ -0,0 +1,31 @@
+#include <bindings.dsl.h>
+#include <glib-object.h>
+
+-- | <http://library.gnome.org/devel/gobject/stable/gobject-Generic-values.html>
+
+module Bindings.GObject.GenericValues where
+#strict_import
+import Bindings.GLib
+import Bindings.GObject.TypeInformation
+
+#cinline G_VALUE_HOLDS , Ptr <GValue> -> <GType> -> IO <gboolean>
+#cinline G_VALUE_TYPE , Ptr <GValue> -> IO <GType>
+#cinline G_VALUE_TYPE_NAME , Ptr <GValue> -> IO (Ptr <gchar>)
+#cinline G_TYPE_IS_VALUE , <GType> -> IO <gboolean>
+#cinline G_TYPE_IS_VALUE_ABSTRACT , <GType> -> IO <gboolean>
+#cinline G_IS_VALUE , Ptr <GValue> -> IO <gboolean>
+
+#ccall g_value_init , Ptr <GValue> -> <GType> -> IO (Ptr <GValue>)
+#ccall g_value_copy , Ptr <GValue> -> Ptr <GValue> -> IO ()
+#ccall g_value_reset , Ptr <GValue> -> IO (Ptr <GValue>)
+#ccall g_value_unset , Ptr <GValue> -> IO ()
+#ccall g_value_set_instance , Ptr <GValue> -> <gpointer> -> IO ()
+#ccall g_value_type_compatible , <GType> -> <GType> -> IO <gboolean>
+#ccall g_value_type_transformable , <GType> -> <GType> -> IO <gboolean>
+#ccall g_value_transform , Ptr <GValue> -> Ptr <GValue> -> IO <gboolean>
+
+#callback GValueTransform , Ptr <GValue> -> Ptr <GValue> -> IO ()
+
+#ccall g_value_register_transform_func , <GType> -> <GType> -> <GValueTransform> -> IO ()
+#ccall g_strdup_value_contents , Ptr <GValue> -> IO (Ptr <gchar>)
+
diff --git a/src/Bindings/GObject/TypeInformation.hsc b/src/Bindings/GObject/TypeInformation.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GObject/TypeInformation.hsc
@@ -0,0 +1,181 @@
+#include <bindings.dsl.h>
+#include <glib-object.h>
+
+-- | <http://library.gnome.org/devel/gobject/stable/gobject-Type-Information.html>
+
+module Bindings.GObject.TypeInformation where
+#strict_import
+import Bindings.GLib
+import Bindings.GObject.Varargs
+
+#integral_t GType
+#opaque_t GTypePlugin
+#opaque_t GValue
+
+#cinline G_TYPE_FUNDAMENTAL , <GType> -> <GType>
+
+#num G_TYPE_FUNDAMENTAL_MAX
+
+#cinline G_TYPE_MAKE_FUNDAMENTAL , <GType> -> <GType>
+#cinline G_TYPE_IS_ABSTRACT , <GType> -> <gboolean>
+#cinline G_TYPE_IS_DERIVED , <GType> -> <gboolean>
+#cinline G_TYPE_IS_FUNDAMENTAL , <GType> -> <gboolean>
+#cinline G_TYPE_IS_VALUE_TYPE , <GType> -> <gboolean>
+#cinline G_TYPE_HAS_VALUE_TABLE , <GType> -> <gboolean>
+#cinline G_TYPE_IS_CLASSED , <GType> -> <gboolean>
+#cinline G_TYPE_IS_INSTANTIATABLE , <GType> -> <gboolean>
+#cinline G_TYPE_IS_DERIVABLE , <GType> -> <gboolean>
+#cinline G_TYPE_IS_DEEP_DERIVABLE , <GType> -> <gboolean>
+#cinline G_TYPE_IS_INTERFACE , <GType> -> <gboolean>
+
+#starttype GTypeInterface
+#stoptype
+
+#starttype GTypeInstance
+#stoptype
+
+#starttype GTypeClass
+#stoptype
+
+#starttype GTypeInfo
+#field class_size , <guint16>
+#field base_init , <GBaseInitFunc>
+#field base_finalize , <GBaseFinalizeFunc>
+#field class_init , <GClassInitFunc>
+#field class_finalize , <GClassFinalizeFunc>
+#field class_data , <gconstpointer>
+#field instance_size , <guint16>
+#field instance_init , <GInstanceInitFunc>
+#field value_table , Ptr <GTypeValueTable>
+#stoptype
+
+#starttype GTypeFundamentalInfo
+#field type_flags , <GTypeFundamentalFlags>
+#stoptype
+
+#starttype GInterfaceInfo
+#field interface_init , <GInterfaceInitFunc>
+#field interface_finalize , <GInterfaceFinalizeFunc>
+#field interface_data , <gpointer>
+#stoptype
+
+#starttype GTypeValueTable
+#field value_init , FunPtr (Ptr <GValue> -> IO ())
+#field value_free , FunPtr (Ptr <GValue> -> IO ())
+#field value_copy , FunPtr (Ptr <GValue> -> Ptr <GValue> -> IO ())
+#field value_peek_pointer , FunPtr (Ptr <GValue> -> IO <gpointer>)
+#field collect_format , Ptr <gchar>
+#field collect_value , FunPtr (Ptr <GValue> -> <guint> -> Ptr <GTypeCValue> -> <guint> -> IO (Ptr <gchar>))
+#field lcopy_format , Ptr <gchar>
+#field lcopy_value , FunPtr (Ptr <GValue> -> <guint> -> Ptr <GTypeCValue> -> <guint> -> IO (Ptr <gchar>))
+#stoptype
+
+#num G_TYPE_FLAG_RESERVED_ID_BIT
+#ccall g_type_init , IO ()
+#integral_t GTypeDebugFlags
+
+#num G_TYPE_DEBUG_NONE
+#num G_TYPE_DEBUG_OBJECTS
+#num G_TYPE_DEBUG_SIGNALS
+#num G_TYPE_DEBUG_MASK
+
+#ccall g_type_init_with_debug_flags , <GTypeDebugFlags> -> IO ()
+#ccall g_type_name , <GType> -> IO (Ptr <gchar>)
+#ccall g_type_qname , <GType> -> IO <GQuark>
+#ccall g_type_from_name , Ptr <gchar> -> IO <GType>
+#ccall g_type_parent , <GType> -> IO <GType>
+#ccall g_type_depth , <GType> -> IO <guint>
+#ccall g_type_next_base , <GType> -> <GType> -> IO <GType>
+#ccall g_type_is_a , <GType> -> <GType> -> IO <gboolean>
+#ccall g_type_class_ref , <GType> -> IO <gpointer>
+#ccall g_type_class_peek , <GType> -> IO <gpointer>
+#ccall g_type_class_peek_static , <GType> -> IO <gpointer>
+#ccall g_type_class_unref , <gpointer> -> IO ()
+#ccall g_type_class_peek_parent , <gpointer> -> IO <gpointer>
+#ccall g_type_class_add_private , <gpointer> -> <gsize> -> IO ()
+#ccall g_type_interface_peek , <gpointer> -> <GType> -> IO <gpointer>
+#ccall g_type_interface_peek_parent , <gpointer> -> IO <gpointer>
+#ccall g_type_default_interface_ref , <GType> -> IO <gpointer>
+#ccall g_type_default_interface_peek , <GType> -> IO <gpointer>
+#ccall g_type_default_interface_unref , <gpointer> -> IO ()
+#ccall g_type_children , <GType> -> Ptr <guint> -> IO (Ptr <GType>)
+#ccall g_type_interfaces , <GType> -> Ptr <guint> -> IO (Ptr <GType>)
+#ccall g_type_interface_prerequisites , <GType> -> Ptr <guint> -> IO (Ptr <GType>)
+#ccall g_type_set_qdata , <GType> -> <GQuark> -> <gpointer> -> IO ()
+#ccall g_type_get_qdata , <GType> -> <GQuark> -> IO <gpointer>
+#ccall g_type_query , <GType> -> Ptr <GTypeQuery> -> IO ()
+
+#starttype GTypeQuery
+#field type , <GType>
+#field type_name , Ptr <gchar>
+#field class_size , <guint>
+#field instance_size , <guint>
+#stoptype
+
+#callback GBaseInitFunc , <gpointer> -> IO ()
+#callback GBaseFinalizeFunc , <gpointer> -> IO ()
+#callback GClassInitFunc , <gpointer> -> <gpointer> -> IO ()
+#callback GClassFinalizeFunc , <gpointer> -> <gpointer> -> IO ()
+#callback GInstanceInitFunc , Ptr <GTypeInstance> -> <gpointer> -> IO ()
+#callback GInterfaceInitFunc , <gpointer> -> <gpointer> -> IO ()
+#callback GInterfaceFinalizeFunc , <gpointer> -> <gpointer> -> IO ()
+#callback GTypeClassCacheFunc , <gpointer> -> Ptr <GTypeClass> -> IO <gboolean>
+
+#integral_t GTypeFlags
+
+#num G_TYPE_FLAG_ABSTRACT
+#num G_TYPE_FLAG_VALUE_ABSTRACT
+
+#integral_t GTypeFundamentalFlags
+
+#num G_TYPE_FLAG_CLASSED
+#num G_TYPE_FLAG_INSTANTIATABLE
+#num G_TYPE_FLAG_DERIVABLE
+#num G_TYPE_FLAG_DEEP_DERIVABLE
+
+#ccall g_type_register_static , <GType> -> Ptr <gchar> -> Ptr <GTypeInfo> -> <GTypeFlags> -> IO (<GType>)
+#ccall g_type_register_static_simple , <GType> -> Ptr <gchar> -> <guint> -> <GClassInitFunc> -> <guint> -> <GInstanceInitFunc> -> <GTypeFlags> -> IO (<GType>)
+#ccall g_type_register_dynamic , <GType> -> Ptr <gchar> -> Ptr <GTypePlugin> -> <GTypeFlags> -> IO (<GType>)
+#ccall g_type_register_fundamental , <GType> -> Ptr <gchar> -> Ptr <GTypeInfo> -> Ptr <GTypeFundamentalInfo> -> <GTypeFlags> -> IO (<GType>)
+#ccall g_type_add_interface_static , <GType> -> <GType> -> Ptr <GInterfaceInfo> -> IO ()
+#ccall g_type_add_interface_dynamic , <GType> -> <GType> -> Ptr <GTypePlugin> -> IO ()
+#ccall g_type_interface_add_prerequisite , <GType> -> <GType> -> IO ()
+#ccall g_type_get_plugin , <GType> -> IO (Ptr <GTypePlugin>)
+#ccall g_type_interface_get_plugin , <GType> -> <GType> -> IO (Ptr <GTypePlugin>)
+#ccall g_type_fundamental_next , IO (<GType>)
+#ccall g_type_add_class_cache_func , <gpointer> -> <GTypeClassCacheFunc> -> IO ()
+#ccall g_type_remove_class_cache_func , <gpointer> -> <GTypeClassCacheFunc> -> IO ()
+#ccall g_type_class_unref_uncached , <gpointer> -> IO ()
+#ccall g_type_add_interface_check , <gpointer> -> <GTypeInterfaceCheckFunc> -> IO ()
+#ccall g_type_remove_interface_check , <gpointer> -> <GTypeInterfaceCheckFunc> -> IO ()
+
+#callback GTypeInterfaceCheckFunc , <gpointer> -> <gpointer> -> IO ()
+
+#num G_TYPE_INVALID
+#num G_TYPE_NONE
+#num G_TYPE_INTERFACE
+#num G_TYPE_CHAR
+#num G_TYPE_UCHAR
+#num G_TYPE_BOOLEAN
+#num G_TYPE_INT
+#num G_TYPE_UINT
+#num G_TYPE_LONG
+#num G_TYPE_ULONG
+#num G_TYPE_INT64
+#num G_TYPE_UINT64
+#num G_TYPE_ENUM
+#num G_TYPE_FLAGS
+#num G_TYPE_FLOAT
+#num G_TYPE_DOUBLE
+#num G_TYPE_STRING
+#num G_TYPE_POINTER
+#num G_TYPE_BOXED
+#num G_TYPE_PARAM
+#num G_TYPE_OBJECT
+-- G_TYPE_GTYPE
+#num G_TYPE_RESERVED_GLIB_FIRST
+#num G_TYPE_RESERVED_GLIB_LAST
+#num G_TYPE_RESERVED_BSE_FIRST
+#num G_TYPE_RESERVED_BSE_LAST
+#num G_TYPE_RESERVED_USER_FIRST
+
diff --git a/src/Bindings/GObject/ValueArrays.hsc b/src/Bindings/GObject/ValueArrays.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GObject/ValueArrays.hsc
@@ -0,0 +1,26 @@
+#include <bindings.dsl.h>
+#include <glib-object.h>
+
+-- | <http://library.gnome.org/devel/gobject/stable/gobject-Value-arrays.html>
+
+module Bindings.GObject.ValueArrays where
+#strict_import
+import Bindings.GLib
+import Bindings.GObject.TypeInformation
+
+#starttype GValueArray
+#field n_values , <guint>
+#field values , Ptr <GValue>
+#stoptype
+
+#ccall g_value_array_get_nth , Ptr <GValueArray> -> <guint> -> IO (Ptr <GValue>)
+#ccall g_value_array_new , <guint> -> IO (Ptr <GValueArray>)
+#ccall g_value_array_copy , Ptr <GValueArray> -> IO (Ptr <GValueArray>)
+#ccall g_value_array_free , Ptr <GValueArray> -> IO ()
+#ccall g_value_array_append , Ptr <GValueArray> -> Ptr <GValue> -> IO (Ptr <GValueArray>)
+#ccall g_value_array_prepend , Ptr <GValueArray> -> Ptr <GValue> -> IO (Ptr <GValueArray>)
+#ccall g_value_array_insert , Ptr <GValueArray> -> <guint> -> Ptr <GValue> -> IO (Ptr <GValueArray>)
+#ccall g_value_array_remove , Ptr <GValueArray> -> <guint> -> IO (Ptr <GValueArray>)
+#ccall g_value_array_sort , Ptr <GValueArray> -> <GCompareFunc> -> IO (Ptr <GValueArray>)
+#ccall g_value_array_sort_with_data , Ptr <GValueArray> -> <GCompareDataFunc> -> <gpointer> -> IO (Ptr <GValueArray>)
+
diff --git a/src/Bindings/GObject/Varargs.hsc b/src/Bindings/GObject/Varargs.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GObject/Varargs.hsc
@@ -0,0 +1,19 @@
+#include <bindings.dsl.h>
+#include <gobject/gvaluecollector.h>
+
+-- | <http://library.gnome.org/devel/gobject/stable/gobject-Varargs-Value-Collection.html>
+
+module Bindings.GObject.Varargs where
+#strict_import
+import Bindings.GLib
+
+#starttype GTypeCValue
+#field v_int , <gint>
+#field v_long , <glong>
+#field v_int64 , <gint64>
+#field v_double , <gdouble>
+#field v_pointer , <gpointer>
+#stoptype
+
+#num G_VALUE_COLLECT_FORMAT_MAX_LENGTH
+
diff --git a/src/bindings-gobject.cmacros.h b/src/bindings-gobject.cmacros.h
new file mode 100644
--- /dev/null
+++ b/src/bindings-gobject.cmacros.h
@@ -0,0 +1,18 @@
+#ifndef __BINDINGS_GOBJECT_CMACROS_H__
+#define __BINDINGS_GOBJECT_CMACROS_H__
+
+#include <bindings.cmacros.h>
+
+#define BC_STANDARD_MACROS_NONCLASSED(prefix,object,CamelCase) \
+    BC_INLINE_(prefix##_TYPE_##object,GType) \
+    BC_INLINE1(prefix##_##object,GTypeInstance*,CamelCase*) \
+    BC_INLINE1(prefix##_IS_##object,GTypeInstance*,gboolean) \
+
+#define BC_STANDARD_MACROS(prefix,object,CamelCase) \
+    BC_STANDARD_MACROS_NONCLASSED(prefix,object,CamelCase) \
+    BC_INLINE1(prefix##_##object##_CLASS,GTypeClass*,CamelCase##Class*) \
+    BC_INLINE1(prefix##_IS_##object##_CLASS,GTypeClass*,gboolean) \
+    BC_INLINE1(prefix##_##object##_GET_CLASS,GTypeInstance*,CamelCase##Class*) \
+
+#endif /* __BINDINGS_GOBJECT_CMACROS_H__ */
+
diff --git a/src/bindings-gobject.dsl.h b/src/bindings-gobject.dsl.h
new file mode 100644
--- /dev/null
+++ b/src/bindings-gobject.dsl.h
@@ -0,0 +1,20 @@
+#ifndef __BINDINGS_GOBJECT_DSL_H__
+#define __BINDINGS_GOBJECT_DSL_H__
+
+#include <bindings.dsl.h>
+
+#define hsc_standard_macros_nonclassed(prefix,object,CamelCase) \
+    hsc_opaque_t(CamelCase) \
+    hsc_cinline(prefix##_TYPE_##object,IO <GType>) \
+    hsc_cinline(prefix##_##object,Ptr <GTypeInstance> -> IO (Ptr <CamelCase>)) \
+    hsc_cinline(prefix##_IS_##object,Ptr <GTypeInstance> -> IO <gboolean>) \
+
+#define hsc_standard_macros(prefix,object,CamelCase) \
+    hsc_opaque_t(CamelCase##Class) \
+    hsc_standard_macros_nonclassed(prefix,object,CamelCase) \
+    hsc_cinline(prefix##_##object##_CLASS,Ptr <GTypeClass> -> IO (Ptr <CamelCase##Class>)) \
+    hsc_cinline(prefix##_IS_##object##_CLASS,Ptr <GTypeClass> -> IO <gboolean>) \
+    hsc_cinline(prefix##_##object##_GET_CLASS,Ptr <GTypeInstance> -> IO (Ptr <CamelCase##Class>)) \
+
+#endif /* __BINDINGS_GOBJECT_DSL_H__ */
+
diff --git a/src/inlines.c b/src/inlines.c
new file mode 100644
--- /dev/null
+++ b/src/inlines.c
@@ -0,0 +1,26 @@
+#include<glib-object.h>
+#include<bindings-gobject.cmacros.h>
+
+BC_INLINE4(g_signal_connect,gpointer,gchar*,GCallback,gpointer,gulong)
+BC_INLINE1(G_TYPE_FUNDAMENTAL,GType,GType)
+BC_INLINE1(G_TYPE_MAKE_FUNDAMENTAL,GType,GType)
+BC_INLINE1(G_TYPE_IS_ABSTRACT,GType,gboolean)
+BC_INLINE1(G_TYPE_IS_DERIVED,GType,gboolean)
+BC_INLINE1(G_TYPE_IS_FUNDAMENTAL,GType,gboolean)
+BC_INLINE1(G_TYPE_IS_VALUE_TYPE,GType,gboolean)
+BC_INLINE1(G_TYPE_HAS_VALUE_TABLE,GType,gboolean)
+BC_INLINE1(G_TYPE_IS_CLASSED,GType,gboolean)
+BC_INLINE1(G_TYPE_IS_INSTANTIATABLE,GType,gboolean)
+BC_INLINE1(G_TYPE_IS_DERIVABLE,GType,gboolean)
+BC_INLINE1(G_TYPE_IS_DEEP_DERIVABLE,GType,gboolean)
+BC_INLINE1(G_TYPE_IS_INTERFACE,GType,gboolean)
+BC_INLINE2(G_VALUE_HOLDS,GValue*,GType,gboolean)
+BC_INLINE1(G_VALUE_TYPE,GValue*,GType)
+BC_INLINE1(G_VALUE_TYPE_NAME,GValue*,const gchar*)
+BC_INLINE1(G_TYPE_IS_VALUE,GType,gboolean)
+BC_INLINE1(G_TYPE_IS_VALUE_ABSTRACT,GType,gboolean)
+BC_INLINE1(G_IS_VALUE,GValue*,gboolean)
+BC_INLINE1(G_CALLBACK,void*,GCallback)
+
+BC_INLINE1(G_OBJECT,void*,GObject*)
+
