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-glib.cabal b/bindings-glib.cabal
new file mode 100644
--- /dev/null
+++ b/bindings-glib.cabal
@@ -0,0 +1,67 @@
+cabal-version: >= 1.4
+name: bindings-glib
+synopsis:
+  Low level bindings to GLib.
+version: 0.1.5
+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-dsl/issues
+library
+  hs-source-dirs: src
+  extensions:
+    ForeignFunctionInterface
+  build-depends:
+    base >= 3 && < 5,
+    bindings-DSL >= 1.0.7 && < 1.1
+  pkgconfig-depends: glib-2.0 >= 2.22.2, gthread-2.0 >= 2.22.2
+  exposed-modules:
+    Bindings.GLib
+    Bindings.GLib.Fundamentals
+    Bindings.GLib.Fundamentals.AtomicOperations
+    Bindings.GLib.Fundamentals.BasicTypes
+    Bindings.GLib.Fundamentals.ByteOrderMacros
+    Bindings.GLib.Fundamentals.LimitsOfBasicTypes
+    Bindings.GLib.Fundamentals.MiscellaneousMacros
+    Bindings.GLib.Fundamentals.NumericalDefinitions
+    Bindings.GLib.Fundamentals.StandardMacros
+    Bindings.GLib.Fundamentals.TypeConversionMacros
+    Bindings.GLib.Fundamentals.VersionInformation
+    Bindings.GLib.CoreApplicationSupport
+    Bindings.GLib.CoreApplicationSupport.AsynchronousQueues
+    Bindings.GLib.CoreApplicationSupport.ErrorReporting
+    Bindings.GLib.CoreApplicationSupport.MainEventLoop
+    Bindings.GLib.CoreApplicationSupport.MemoryAllocation
+    Bindings.GLib.CoreApplicationSupport.MessageLogging
+    Bindings.GLib.CoreApplicationSupport.MessageOutputAndDebuggingFunctions
+    Bindings.GLib.CoreApplicationSupport.ThreadPools
+    Bindings.GLib.CoreApplicationSupport.Threads
+    Bindings.GLib.Utilities
+    Bindings.GLib.Utilities.CommandlineOptionParser
+    Bindings.GLib.Utilities.DateAndTimeFunctions
+    Bindings.GLib.Utilities.HostnameUtilities
+    Bindings.GLib.Utilities.SimpleXmlSubsetParser
+    Bindings.GLib.Utilities.UnicodeManipulation
+    Bindings.GLib.DataTypes
+    Bindings.GLib.DataTypes.Arrays
+    Bindings.GLib.DataTypes.BalancedBinaryTrees
+    Bindings.GLib.DataTypes.Datasets
+    Bindings.GLib.DataTypes.DoublyLinkedLists
+    Bindings.GLib.DataTypes.HashTables
+    Bindings.GLib.DataTypes.MemorySlices
+    Bindings.GLib.DataTypes.NAryTrees
+    Bindings.GLib.DataTypes.PointerArrays
+    Bindings.GLib.DataTypes.Quarks
+    Bindings.GLib.DataTypes.SinglyLinkedLists
+    Bindings.GLib.DataTypes.StringChunks
+    Bindings.GLib.DataTypes.Strings
+    Bindings.GLib.DataTypes.TrashStacks
+  c-sources:
+    src/datatypes.narytrees.c
+    src/datatypes.pointerarrays.c
+    src/datatypes.singlylinkedlists.c
+    src/inlines.c
+    src/utilities.unicodemanipulation.c
diff --git a/gen_cabal.sh b/gen_cabal.sh
new file mode 100644
--- /dev/null
+++ b/gen_cabal.sh
@@ -0,0 +1,59 @@
+#!/bin/sh
+
+cat <<-"(head-end)"
+	cabal-version: >= 1.4
+	name: bindings-glib
+	synopsis:
+	  Low level bindings to GLib.
+	version: 0.1.5
+	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-dsl/issues
+	library
+	  hs-source-dirs: src
+	  extensions:
+	    ForeignFunctionInterface
+	  build-depends:
+	    base >= 3 && < 5,
+	    bindings-DSL >= 1.0.7 && < 1.1
+	  pkgconfig-depends: glib-2.0 >= 2.22.2, gthread-2.0 >= 2.22.2
+(head-end)
+
+printf "  exposed-modules:\n    Bindings.GLib\n"
+
+base="\
+	Fundamentals:library.gnome.org/devel/glib/stable/glib-fundamentals.html \
+	CoreApplicationSupport:library.gnome.org/devel/glib/stable/glib-core.html \
+	Utilities:library.gnome.org/devel/glib/stable/glib-utilities.html \
+	DataTypes:library.gnome.org/devel/glib/stable/glib-data-types.html"
+
+imports=$(mktemp)
+
+for b in $base ; do
+	module=$(printf "%s" $b | cut -d ':' -f 1)
+	printf "    Bindings.GLib.%s\n" $module
+	dir=src/Bindings/GLib/$module
+	doc=$(printf "%s" $b | cut -d ':' -f 2)
+	printf -- "-- | <http://%s>\nmodule Bindings.GLib.%s (\n" $doc $module > $dir.hs
+	printf " ) where\n" > $imports
+	sub=$(ls -1 $dir | grep '.hsc$' | sed 's/\.hsc$//')
+	for s in $sub ; do
+		printf "    Bindings.GLib.%s.%s\n" $module $s
+		printf "  module Bindings.GLib.%s.%s,\n" $module $s >> $dir.hs
+		printf "import Bindings.GLib.%s.%s\n" $module $s >> $imports
+	done
+	cat $imports >> $dir.hs
+done
+
+rm $imports
+
+printf "  c-sources:\n"
+
+for f in $(ls -1 src/*.c) ; do
+	printf "    %s\n" $f
+done
+
diff --git a/src/Bindings/GLib.hs b/src/Bindings/GLib.hs
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib.hs
@@ -0,0 +1,1 @@
+module Bindings.GLib (module Bindings.GLib.CoreApplicationSupport,module Bindings.GLib.DataTypes,module Bindings.GLib.Fundamentals,module Bindings.GLib.Utilities) where {import Bindings.GLib.CoreApplicationSupport;import Bindings.GLib.DataTypes;import Bindings.GLib.Fundamentals;import Bindings.GLib.Utilities}
diff --git a/src/Bindings/GLib/CoreApplicationSupport.hs b/src/Bindings/GLib/CoreApplicationSupport.hs
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/CoreApplicationSupport.hs
@@ -0,0 +1,19 @@
+-- | <http://library.gnome.org/devel/glib/stable/glib-core.html>
+module Bindings.GLib.CoreApplicationSupport (
+  module Bindings.GLib.CoreApplicationSupport.AsynchronousQueues,
+  module Bindings.GLib.CoreApplicationSupport.ErrorReporting,
+  module Bindings.GLib.CoreApplicationSupport.MainEventLoop,
+  module Bindings.GLib.CoreApplicationSupport.MemoryAllocation,
+  module Bindings.GLib.CoreApplicationSupport.MessageLogging,
+  module Bindings.GLib.CoreApplicationSupport.MessageOutputAndDebuggingFunctions,
+  module Bindings.GLib.CoreApplicationSupport.ThreadPools,
+  module Bindings.GLib.CoreApplicationSupport.Threads,
+ ) where
+import Bindings.GLib.CoreApplicationSupport.AsynchronousQueues
+import Bindings.GLib.CoreApplicationSupport.ErrorReporting
+import Bindings.GLib.CoreApplicationSupport.MainEventLoop
+import Bindings.GLib.CoreApplicationSupport.MemoryAllocation
+import Bindings.GLib.CoreApplicationSupport.MessageLogging
+import Bindings.GLib.CoreApplicationSupport.MessageOutputAndDebuggingFunctions
+import Bindings.GLib.CoreApplicationSupport.ThreadPools
+import Bindings.GLib.CoreApplicationSupport.Threads
diff --git a/src/Bindings/GLib/CoreApplicationSupport/AsynchronousQueues.hsc b/src/Bindings/GLib/CoreApplicationSupport/AsynchronousQueues.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/CoreApplicationSupport/AsynchronousQueues.hsc
@@ -0,0 +1,36 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Asynchronous-Queues.html>
+
+module Bindings.GLib.CoreApplicationSupport.AsynchronousQueues where
+#strict_import
+import Bindings.GLib.Fundamentals
+import Bindings.GLib.Utilities.DateAndTimeFunctions
+import Bindings.GLib.DataTypes.DoublyLinkedLists
+import Bindings.GLib.DataTypes.Datasets
+
+#opaque_t GAsyncQueue
+
+#ccall g_async_queue_new , IO (Ptr <GAsyncQueue>)
+#ccall g_async_queue_new_full , <GDestroyNotify> -> IO (Ptr <GAsyncQueue>)
+#ccall g_async_queue_ref , Ptr <GAsyncQueue> -> IO (Ptr <GAsyncQueue>)
+#ccall g_async_queue_unref , Ptr <GAsyncQueue> -> IO ()
+#ccall g_async_queue_push , Ptr <GAsyncQueue> -> <gpointer> -> IO ()
+#ccall g_async_queue_push_sorted , Ptr <GAsyncQueue> -> <gpointer> -> <GCompareDataFunc> -> <gpointer> -> IO ()
+#ccall g_async_queue_pop , Ptr <GAsyncQueue> -> IO <gpointer>
+#ccall g_async_queue_try_pop , Ptr <GAsyncQueue> -> IO <gpointer>
+#ccall g_async_queue_timed_pop , Ptr <GAsyncQueue> -> Ptr <GTimeVal> -> IO <gpointer>
+#ccall g_async_queue_length , Ptr <GAsyncQueue> -> IO <gint>
+#ccall g_async_queue_sort , Ptr <GAsyncQueue> -> <GCompareDataFunc> -> <gpointer> -> IO ()
+
+#ccall g_async_queue_lock , Ptr <GAsyncQueue> -> IO ()
+#ccall g_async_queue_unlock , Ptr <GAsyncQueue> -> IO ()
+#ccall g_async_queue_push_unlocked , Ptr <GAsyncQueue> -> <gpointer> -> IO ()
+#ccall g_async_queue_push_sorted_unlocked , Ptr <GAsyncQueue> -> <gpointer> -> <GCompareDataFunc> -> <gpointer> -> IO ()
+#ccall g_async_queue_pop_unlocked , Ptr <GAsyncQueue> -> IO <gpointer>
+#ccall g_async_queue_try_pop_unlocked , Ptr <GAsyncQueue> -> IO <gpointer>
+#ccall g_async_queue_timed_pop_unlocked , Ptr <GAsyncQueue> -> Ptr <GTimeVal> -> IO <gpointer>
+#ccall g_async_queue_length_unlocked , Ptr <GAsyncQueue> -> IO <gint>
+#ccall g_async_queue_sort_unlocked , Ptr <GAsyncQueue> -> <GCompareDataFunc> -> <gpointer> -> IO ()
+
diff --git a/src/Bindings/GLib/CoreApplicationSupport/ErrorReporting.hsc b/src/Bindings/GLib/CoreApplicationSupport/ErrorReporting.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/CoreApplicationSupport/ErrorReporting.hsc
@@ -0,0 +1,24 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Error-Reporting.html>
+
+module Bindings.GLib.CoreApplicationSupport.ErrorReporting where
+#strict_import
+import Bindings.GLib.Fundamentals
+import Bindings.GLib.DataTypes.Quarks
+
+#starttype GError
+#field domain , <GQuark>
+#field code , <gint>
+#field message , Ptr <gchar>
+#stoptype
+
+#ccall g_error_new_literal , <GQuark> -> <gint> -> Ptr <gchar> -> IO (Ptr <GError>)
+#ccall g_error_free , Ptr <GError> -> IO ()
+#ccall g_error_copy , Ptr <GError> -> IO (Ptr <GError>)
+#ccall g_error_matches , Ptr <GError> -> <GQuark> -> <gint> -> IO <gboolean>
+#ccall g_set_error_literal , Ptr (Ptr <GError>) -> <GQuark> -> <gint> -> Ptr <gchar> -> IO ()
+#ccall g_propagate_error , Ptr (Ptr <GError>) -> Ptr <GError> -> IO ()
+#ccall g_clear_error , Ptr (Ptr <GError>) -> IO ()
+
diff --git a/src/Bindings/GLib/CoreApplicationSupport/MainEventLoop.hsc b/src/Bindings/GLib/CoreApplicationSupport/MainEventLoop.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/CoreApplicationSupport/MainEventLoop.hsc
@@ -0,0 +1,132 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-The-Main-Event-Loop.html>
+
+module Bindings.GLib.CoreApplicationSupport.MainEventLoop where
+#strict_import
+import Bindings.GLib.Fundamentals
+import Bindings.GLib.Utilities.DateAndTimeFunctions
+import Bindings.GLib.DataTypes.Datasets
+import Bindings.GLib.CoreApplicationSupport.Threads
+
+#opaque_t GMainLoop
+
+#ccall g_main_loop_new , Ptr <GMainContext> -> <gboolean> -> IO (Ptr <GMainLoop>)
+#ccall g_main_loop_ref , Ptr <GMainLoop> -> IO (Ptr <GMainLoop>)
+#ccall g_main_loop_unref , Ptr <GMainLoop> -> IO ()
+#ccall g_main_loop_run , Ptr <GMainLoop> -> IO ()
+#ccall g_main_loop_quit , Ptr <GMainLoop> -> IO ()
+#ccall g_main_loop_is_running , Ptr <GMainLoop> -> IO <gboolean>
+#ccall g_main_loop_get_context , Ptr <GMainLoop> -> IO (Ptr <GMainContext>)
+
+#num G_PRIORITY_HIGH
+#num G_PRIORITY_DEFAULT
+#num G_PRIORITY_HIGH_IDLE
+#num G_PRIORITY_DEFAULT_IDLE
+#num G_PRIORITY_LOW
+
+#opaque_t GMainContext
+
+#ccall g_main_context_new , IO (Ptr <GMainContext>)
+#ccall g_main_context_ref , Ptr <GMainContext> -> IO (Ptr <GMainContext>)
+#ccall g_main_context_unref , Ptr <GMainContext> -> IO ()
+#ccall g_main_context_default , IO (Ptr <GMainContext>)
+#ccall g_main_context_iteration , Ptr <GMainContext> -> <gboolean> -> IO <gboolean>
+#ccall g_main_context_pending , Ptr <GMainContext> -> IO <gboolean>
+#ccall g_main_context_find_source_by_id , Ptr <GMainContext> -> <guint> -> IO (Ptr <GSource>)
+#ccall g_main_context_find_source_by_user_data , Ptr <GMainContext> -> <gpointer> -> IO (Ptr <GSource>)
+#ccall g_main_context_find_source_by_funcs_user_data , Ptr <GMainContext> -> Ptr <GSourceFuncs> -> <gpointer> -> IO (Ptr <GSource>)
+#ccall g_main_context_wakeup , Ptr <GMainContext> -> IO ()
+#ccall g_main_context_acquire , Ptr <GMainContext> -> IO <gboolean>
+#ccall g_main_context_release , Ptr <GMainContext> -> IO ()
+#ccall g_main_context_is_owner , Ptr <GMainContext> -> IO <gboolean>
+#ccall g_main_context_wait , Ptr <GMainContext> -> Ptr <GCond> -> Ptr <GMutex> -> IO <gboolean>
+#ccall g_main_context_prepare , Ptr <GMainContext> -> Ptr <gint> -> IO <gboolean>
+#ccall g_main_context_query , Ptr <GMainContext> -> <gint> -> Ptr <gint> -> Ptr <GPollFD> -> <gint> -> IO <gint>
+#ccall g_main_context_check , Ptr <GMainContext> -> <gint> -> Ptr <GPollFD> -> <gint> -> IO <gint>
+#ccall g_main_context_dispatch , Ptr <GMainContext> -> IO ()
+#ccall g_main_context_set_poll_func , Ptr <GMainContext> -> <GPollFunc> -> IO ()
+#ccall g_main_context_get_poll_func , Ptr <GMainContext> -> IO <GPollFunc>
+
+#callback GPollFunc , Ptr <GPollFD> -> <guint> -> <gint> -> IO <gint>
+
+#ccall g_main_context_add_poll , Ptr <GMainContext> -> Ptr <GPollFD> -> <gint> -> IO ()
+#ccall g_main_context_remove_poll , Ptr <GMainContext> -> Ptr <GPollFD> -> IO ()
+#ccall g_main_depth , IO <gint>
+#ccall g_main_current_source , IO (Ptr <GSource>)
+
+#ccall g_main_context_get_thread_default , IO (Ptr <GMainContext>)
+#ccall g_main_context_push_thread_default , Ptr <GMainContext> -> IO ()
+#ccall g_main_context_pop_thread_default , Ptr <GMainContext> -> IO ()
+
+#ccall g_timeout_source_new , <guint> -> IO (Ptr <GSource>)
+#ccall g_timeout_source_new_seconds , <guint> -> IO (Ptr <GSource>)
+#ccall g_timeout_add , <guint> -> <GSourceFunc> -> <gpointer> -> IO <guint>
+#ccall g_timeout_add_full , <gint> -> <guint> -> <GSourceFunc> -> <gpointer> -> <GDestroyNotify> -> IO <guint>
+#ccall g_timeout_add_seconds , <guint> -> <GSourceFunc> -> <gpointer> -> IO <guint>
+#ccall g_timeout_add_seconds_full , <gint> -> <guint> -> <GSourceFunc> -> <gpointer> -> <GDestroyNotify> -> IO <guint>
+
+#ccall g_idle_source_new , IO (Ptr <GSource>)
+#ccall g_idle_add , <GSourceFunc> -> <gpointer> -> IO <guint>
+#ccall g_idle_add_full , <gint> -> <GSourceFunc> -> <gpointer> -> <GDestroyNotify> -> IO <guint>
+#ccall g_idle_remove_by_data , <gpointer> -> IO <gboolean>
+
+#integral_t GPid
+
+#callback GChildWatchFunc , <GPid> -> <gint> -> <gpointer> -> IO ()
+
+#ccall g_child_watch_source_new , <GPid> -> IO (Ptr <GSource>)
+#ccall g_child_watch_add , <GPid> -> <GChildWatchFunc> -> <gpointer> -> IO <guint>
+#ccall g_child_watch_add_full , <gint> -> <GPid> -> <GChildWatchFunc> -> <gpointer> -> <GDestroyNotify> -> IO <guint>
+
+#starttype GPollFD
+#field events , <gushort>
+#field revents , <gushort>
+#stoptype
+
+#ccall g_poll , Ptr <GPollFD> -> <guint> -> <gint> -> IO <gint>
+
+#opaque_t GSource
+
+#callback GSourceDummyMarshal , IO ()
+
+#starttype GSourceFuncs
+#field prepare , FunPtr (Ptr <GSource> -> Ptr <gint> -> IO <gboolean>)
+#field check , FunPtr (Ptr <GSource> -> IO <gboolean>)
+#field dispatch , FunPtr (Ptr <GSource> -> <GSourceFunc> -> <gpointer> -> IO <gboolean>)
+#field finalize , FunPtr (Ptr <GSource> -> IO ())
+#field closure_callback , <GSourceFunc>
+#field closure_marshal , <GSourceDummyMarshal>
+#stoptype
+
+#starttype GSourceCallbackFuncs
+#field ref , FunPtr (<gpointer> -> IO ())
+#field unref , FunPtr (<gpointer> -> IO ())
+#field get , FunPtr (<gpointer> -> Ptr <GSource> -> Ptr <GSourceFunc> -> Ptr <gpointer> -> IO ())
+#stoptype
+
+#ccall g_source_new , Ptr <GSourceFuncs> -> <guint> -> IO (Ptr <GSource>)
+#ccall g_source_ref , Ptr <GSource> -> IO (Ptr <GSource>)
+#ccall g_source_unref , Ptr <GSource> -> IO ()
+#ccall g_source_set_funcs , Ptr <GSource> -> Ptr <GSourceFuncs> -> IO ()
+#ccall g_source_attach , Ptr <GSource> -> Ptr <GMainContext> -> IO <guint>
+#ccall g_source_destroy , Ptr <GSource> -> IO ()
+#ccall g_source_is_destroyed , Ptr <GSource> -> IO <gboolean>
+#ccall g_source_set_priority , Ptr <GSource> -> <gint> -> IO ()
+#ccall g_source_get_priority , Ptr <GSource> -> IO <gint>
+#ccall g_source_set_can_recurse , Ptr <GSource> -> <gboolean> -> IO ()
+#ccall g_source_get_can_recurse , Ptr <GSource> -> IO <gboolean>
+#ccall g_source_get_id , Ptr <GSource> -> IO <guint>
+#ccall g_source_get_context , Ptr <GSource> -> IO (Ptr <GMainContext>)
+#ccall g_source_set_callback , Ptr <GSource> -> <GSourceFunc> -> <gpointer> -> <GDestroyNotify> -> IO ()
+
+#callback GSourceFunc , <gpointer> -> IO <gboolean>
+
+#ccall g_source_set_callback_indirect , Ptr <GSource> -> <gpointer> -> Ptr <GSourceCallbackFuncs> -> IO ()
+#ccall g_source_add_poll , Ptr <GSource> -> Ptr <GPollFD> -> IO ()
+#ccall g_source_remove_poll , Ptr <GSource> -> Ptr <GPollFD> -> IO ()
+#ccall g_source_get_current_time , Ptr <GSource> -> Ptr <GTimeVal> -> IO ()
+#ccall g_source_remove , <guint> -> IO <gboolean>
+#ccall g_source_remove_by_funcs_user_data , Ptr <GSourceFuncs> -> <gpointer> -> IO <gboolean>
+#ccall g_source_remove_by_user_data , <gpointer> -> IO <gboolean>
diff --git a/src/Bindings/GLib/CoreApplicationSupport/MemoryAllocation.hsc b/src/Bindings/GLib/CoreApplicationSupport/MemoryAllocation.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/CoreApplicationSupport/MemoryAllocation.hsc
@@ -0,0 +1,35 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Memory-Allocation.html>
+
+module Bindings.GLib.CoreApplicationSupport.MemoryAllocation where
+import Bindings.GLib.Fundamentals.BasicTypes
+#strict_import
+
+#ccall g_malloc , <gsize> -> IO <gpointer>
+#ccall g_malloc0 , <gsize> -> IO <gpointer>
+#ccall g_realloc , <gpointer> -> <gsize> -> IO <gpointer>
+#ccall g_try_malloc , <gsize> -> IO <gpointer>
+#ccall g_try_malloc0 , <gsize> -> IO <gpointer>
+#ccall g_try_realloc , <gpointer> -> <gsize> -> IO <gpointer>
+#ccall g_free , <gpointer> -> IO ()
+#globalvar g_mem_gc_friendly , <gboolean>
+
+#ccall g_memdup , <gconstpointer> -> <guint> -> IO <gpointer>
+
+#starttype GMemVTable
+#field malloc , FunPtr (<gsize> -> IO <gpointer>)
+#field realloc , FunPtr (<gpointer> -> <gsize> -> IO <gpointer>)
+#field free , FunPtr (<gpointer> -> IO ())
+#field calloc , FunPtr (<gsize> -> <gsize> -> IO <gpointer>)
+#field try_malloc , FunPtr (<gsize> -> IO <gpointer>)
+#field try_realloc , FunPtr (<gpointer> -> <gsize> -> IO <gpointer>)
+#stoptype
+
+#ccall g_mem_set_vtable , Ptr <GMemVTable> -> IO ()
+#ccall g_mem_is_system_malloc , IO <gboolean>
+
+#globalvar glib_mem_profiler_table , Ptr <GMemVTable>
+#ccall g_mem_profile , IO ()
+
diff --git a/src/Bindings/GLib/CoreApplicationSupport/MessageLogging.hsc b/src/Bindings/GLib/CoreApplicationSupport/MessageLogging.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/CoreApplicationSupport/MessageLogging.hsc
@@ -0,0 +1,34 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Message-Logging.html>
+
+module Bindings.GLib.CoreApplicationSupport.MessageLogging where
+#strict_import
+import Bindings.GLib.Fundamentals
+
+#pointer G_LOG_DOMAIN
+#num G_LOG_FATAL_MASK
+#num G_LOG_LEVEL_USER_SHIFT
+
+#callback GLogFunc , Ptr <gchar> -> <GLogLevelFlags> -> Ptr <gchar> -> <gpointer> -> IO ()
+
+#integral_t GLogLevelFlags
+
+#num G_LOG_FLAG_RECURSION
+#num G_LOG_FLAG_FATAL
+#num G_LOG_LEVEL_ERROR
+#num G_LOG_LEVEL_CRITICAL
+#num G_LOG_LEVEL_WARNING
+#num G_LOG_LEVEL_MESSAGE
+#num G_LOG_LEVEL_INFO
+#num G_LOG_LEVEL_DEBUG
+#num G_LOG_LEVEL_MASK
+
+#ccall g_log_set_handler , Ptr <gchar> -> <GLogLevelFlags> -> <GLogFunc> -> <gpointer> -> IO <guint>
+#ccall g_log_remove_handler , Ptr <gchar> -> <guint> -> IO ()
+#ccall g_log_set_always_fatal , <GLogLevelFlags> -> IO <GLogLevelFlags>
+#ccall g_log_set_fatal_mask , Ptr <gchar> -> <GLogLevelFlags> -> IO <GLogLevelFlags>
+#ccall g_log_default_handler , Ptr <gchar> -> <GLogLevelFlags> -> Ptr <gchar> -> <gpointer> -> IO ()
+#ccall g_log_set_default_handler , <GLogFunc> -> <gpointer> -> IO <GLogFunc>
+
diff --git a/src/Bindings/GLib/CoreApplicationSupport/MessageOutputAndDebuggingFunctions.hsc b/src/Bindings/GLib/CoreApplicationSupport/MessageOutputAndDebuggingFunctions.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/CoreApplicationSupport/MessageOutputAndDebuggingFunctions.hsc
@@ -0,0 +1,18 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Warnings-and-Assertions.html>
+
+module Bindings.GLib.CoreApplicationSupport.MessageOutputAndDebuggingFunctions where
+#strict_import
+import Bindings.GLib.Fundamentals
+
+#ccall g_set_print_handler , Ptr <GPrintFunc> -> IO <GPrintFunc>
+
+#callback GPrintFunc , Ptr <gchar> -> IO ()
+
+#ccall g_set_printerr_handler , <GPrintFunc> -> IO <GPrintFunc>
+
+#ccall g_on_error_query , Ptr <gchar> -> IO ()
+#ccall g_on_error_stack_trace , Ptr <gchar> -> IO ()
+
diff --git a/src/Bindings/GLib/CoreApplicationSupport/ThreadPools.hsc b/src/Bindings/GLib/CoreApplicationSupport/ThreadPools.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/CoreApplicationSupport/ThreadPools.hsc
@@ -0,0 +1,32 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Thread-Pools.html>
+
+module Bindings.GLib.CoreApplicationSupport.ThreadPools where
+#strict_import
+import Bindings.GLib.Fundamentals
+import Bindings.GLib.CoreApplicationSupport.ErrorReporting
+import Bindings.GLib.DataTypes.DoublyLinkedLists
+
+#starttype GThreadPool
+#field func , <GFunc>
+#field user_data , <gpointer>
+#field exclusive , <gboolean>
+#stoptype
+
+#ccall g_thread_pool_new , <GFunc> -> <gpointer> -> <gint> -> <gboolean> -> Ptr (Ptr <GError>) -> IO (Ptr <GThreadPool>)
+#ccall g_thread_pool_push , Ptr <GThreadPool> -> <gpointer> -> Ptr (Ptr <GError>) -> IO ()
+#ccall g_thread_pool_set_max_threads , Ptr <GThreadPool> -> <gint> -> Ptr (Ptr <GError>) -> IO ()
+#ccall g_thread_pool_get_max_threads , Ptr <GThreadPool> -> IO <gint>
+#ccall g_thread_pool_get_num_threads , Ptr <GThreadPool> -> IO <guint>
+#ccall g_thread_pool_unprocessed , Ptr <GThreadPool> -> IO <guint>
+#ccall g_thread_pool_free , Ptr <GThreadPool> -> <gboolean> -> <gboolean> -> IO ()
+#ccall g_thread_pool_set_max_unused_threads , <gint> -> IO ()
+#ccall g_thread_pool_get_max_unused_threads , IO <gint>
+#ccall g_thread_pool_get_num_unused_threads , IO <guint>
+#ccall g_thread_pool_stop_unused_threads , IO ()
+#ccall g_thread_pool_set_sort_function , Ptr <GThreadPool> -> <GCompareDataFunc> -> <gpointer> -> IO ()
+#ccall g_thread_pool_set_max_idle_time , <guint> -> IO ()
+#ccall g_thread_pool_get_max_idle_time , IO <guint>
+
diff --git a/src/Bindings/GLib/CoreApplicationSupport/Threads.hsc b/src/Bindings/GLib/CoreApplicationSupport/Threads.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/CoreApplicationSupport/Threads.hsc
@@ -0,0 +1,145 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Threads.html>
+
+module Bindings.GLib.CoreApplicationSupport.Threads where
+#strict_import
+import Bindings.GLib.Fundamentals
+import Bindings.GLib.Utilities.DateAndTimeFunctions
+import Bindings.GLib.DataTypes.Datasets
+import Bindings.GLib.DataTypes.DoublyLinkedLists
+import Bindings.GLib.CoreApplicationSupport.ErrorReporting
+
+#num G_THREAD_ERROR
+
+#integral_t GThreadError
+
+#num G_THREAD_ERROR_AGAIN
+
+#starttype GThreadFunctions
+#field mutex_new , FunPtr (IO (Ptr <GMutex>))
+#field mutex_lock , FunPtr (Ptr <GMutex> -> IO ())
+#field mutex_trylock , FunPtr (Ptr <GMutex> -> IO <gboolean>)
+#field mutex_unlock , FunPtr (Ptr <GMutex> -> IO ())
+#field mutex_free , FunPtr (Ptr <GMutex> -> IO ())
+#field cond_new , FunPtr (IO (Ptr <GCond>))
+#field cond_signal , FunPtr (Ptr <GCond> -> IO ())
+#field cond_broadcast , FunPtr (Ptr <GCond> -> IO ())
+#field cond_wait , FunPtr (Ptr <GCond> -> Ptr <GMutex> -> IO ())
+#field cond_timed_wait , FunPtr (Ptr <GCond> -> Ptr <GMutex> -> Ptr <GTimeVal> -> IO <gboolean>)
+#field cond_free , FunPtr (Ptr <GCond> -> IO ())
+#field private_new , FunPtr (<GDestroyNotify> -> IO (Ptr <GPrivate>))
+#field private_get , FunPtr (Ptr <GPrivate> -> IO <gpointer>)
+#field private_set , FunPtr (Ptr <GPrivate> -> <gpointer> -> IO ())
+#field thread_create , FunPtr (<GThreadFunc> -> <gpointer> -> <gulong> -> <gboolean> -> <gboolean> -> <GThreadPriority> -> <gpointer> -> Ptr (Ptr <GError>) -> IO ())
+#field thread_yield , FunPtr (IO ())
+#field thread_join , FunPtr (<gpointer> -> IO ())
+#field thread_exit , FunPtr (IO ())
+#field thread_set_priority , FunPtr (<gpointer> -> <GThreadPriority> -> IO ())
+#field thread_self , FunPtr (<gpointer> -> IO ())
+#field thread_equal , FunPtr (<gpointer> -> <gpointer> -> IO <gboolean>)
+#stoptype
+
+#ccall g_thread_init , Ptr <GThreadFunctions> -> IO ()
+#cinline g_thread_supported , IO <gboolean>
+#ccall g_thread_get_initialized , IO <gboolean>
+
+#callback GThreadFunc , <gpointer> -> IO <gpointer>
+
+#integral_t GThreadPriority
+
+#num G_THREAD_PRIORITY_LOW
+#num G_THREAD_PRIORITY_NORMAL
+#num G_THREAD_PRIORITY_HIGH
+#num G_THREAD_PRIORITY_URGENT
+
+#opaque_t GThread
+
+#cinline g_thread_create , <GThreadFunc> -> <gpointer> -> <gboolean> -> Ptr (Ptr <GError>) -> IO (Ptr <GThread>)
+#ccall g_thread_create_full , <GThreadFunc> -> <gpointer> -> <gulong> -> <gboolean> -> <gboolean> -> <GThreadPriority> -> Ptr (Ptr <GError>) -> IO (Ptr <GThread>)
+#ccall g_thread_self , IO (Ptr <GThread>)
+#ccall g_thread_join , Ptr <GThread> -> IO <gpointer>
+#ccall g_thread_set_priority , Ptr <GThread> -> <GThreadPriority> -> IO ()
+#cinline g_thread_yield , IO ()
+#ccall g_thread_exit , <gpointer> -> IO ()
+#ccall g_thread_foreach , <GFunc> -> <gpointer> -> IO ()
+
+#opaque_t GMutex
+
+#cinline g_mutex_new , IO (Ptr <GMutex>)
+#cinline g_mutex_lock , Ptr <GMutex> -> IO ()
+#cinline g_mutex_trylock , Ptr <GMutex> -> IO <gboolean>
+#cinline g_mutex_unlock , Ptr <GMutex> -> IO ()
+#cinline g_mutex_free , Ptr <GMutex> -> IO ()
+
+#starttype GStaticMutex
+#stoptype
+
+#cinline g_static_mutex_init , Ptr <GStaticMutex> -> IO ()
+#cinline g_static_mutex_lock , Ptr <GStaticMutex> -> IO ()
+#cinline g_static_mutex_trylock , Ptr <GStaticMutex> -> IO <gboolean>
+#cinline g_static_mutex_unlock , Ptr <GStaticMutex> -> IO ()
+#cinline g_static_mutex_get_mutex , Ptr <GStaticMutex> -> IO (Ptr <GMutex>) 
+#cinline g_static_mutex_free , Ptr <GStaticMutex> -> IO ()
+
+#starttype GStaticRecMutex
+#stoptype
+
+#ccall g_static_rec_mutex_init , Ptr <GStaticRecMutex> -> IO ()
+#ccall g_static_rec_mutex_lock , Ptr <GStaticRecMutex> -> IO ()
+#ccall g_static_rec_mutex_trylock , Ptr <GStaticRecMutex> -> IO <gboolean>
+#ccall g_static_rec_mutex_unlock , Ptr <GStaticRecMutex> -> IO ()
+#ccall g_static_rec_mutex_lock_full , Ptr <GStaticRecMutex> -> <guint> -> IO ()
+#ccall g_static_rec_mutex_unlock_full , Ptr <GStaticRecMutex> -> IO <guint>
+#ccall g_static_rec_mutex_free , Ptr <GStaticRecMutex> -> IO ()
+
+#starttype GStaticRWLock
+#stoptype
+
+#ccall g_static_rw_lock_init , Ptr <GStaticRWLock> -> IO ()
+#ccall g_static_rw_lock_reader_lock , Ptr <GStaticRWLock> -> IO ()
+#ccall g_static_rw_lock_reader_trylock , Ptr <GStaticRWLock> -> IO <gboolean>
+#ccall g_static_rw_lock_reader_unlock , Ptr <GStaticRWLock> -> IO ()
+#ccall g_static_rw_lock_writer_lock , Ptr <GStaticRWLock> -> IO ()
+#ccall g_static_rw_lock_writer_trylock , Ptr <GStaticRWLock> -> IO <gboolean>
+#ccall g_static_rw_lock_writer_unlock , Ptr <GStaticRWLock> -> IO ()
+#ccall g_static_rw_lock_free , Ptr <GStaticRWLock> -> IO ()
+
+#opaque_t GCond
+
+#cinline g_cond_new , IO (Ptr <GCond>)
+#cinline g_cond_signal , Ptr <GCond> -> IO ()
+#cinline g_cond_broadcast , Ptr <GCond> -> IO ()
+#cinline g_cond_wait , Ptr <GCond> -> Ptr <GMutex> -> IO ()
+#cinline g_cond_timed_wait , Ptr <GCond> -> Ptr <GMutex> -> Ptr <GTimeVal> -> IO <gboolean>
+#cinline g_cond_free , Ptr <GCond> -> IO ()
+
+#opaque_t GPrivate
+
+#cinline g_private_new , <GDestroyNotify> -> IO (Ptr <GPrivate>)
+#cinline g_private_get , Ptr <GPrivate> -> IO <gpointer>
+#cinline g_private_set , Ptr <GPrivate> -> <gpointer> -> IO ()
+
+#starttype GStaticPrivate
+#stoptype
+
+#ccall g_static_private_init , Ptr <GStaticPrivate> -> IO ()
+#ccall g_static_private_get , Ptr <GStaticPrivate> -> IO <gpointer>
+#ccall g_static_private_set , Ptr <GStaticPrivate> -> <gpointer> -> <GDestroyNotify> -> IO ()
+#ccall g_static_private_free , Ptr <GStaticPrivate> -> IO ()
+
+#starttype GOnce
+#field status , <GOnceStatus>
+#field retval , <gpointer>
+#stoptype
+
+#integral_t GOnceStatus
+
+#num G_ONCE_STATUS_NOTCALLED
+#num G_ONCE_STATUS_PROGRESS
+#num G_ONCE_STATUS_READY
+
+#ccall g_once_init_enter , Ptr <gsize> -> IO <gboolean>
+#ccall g_once_init_leave , Ptr <gsize> -> <gsize> -> IO ()
+
diff --git a/src/Bindings/GLib/DataTypes.hs b/src/Bindings/GLib/DataTypes.hs
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/DataTypes.hs
@@ -0,0 +1,29 @@
+-- | <http://library.gnome.org/devel/glib/stable/glib-data-types.html>
+module Bindings.GLib.DataTypes (
+  module Bindings.GLib.DataTypes.Arrays,
+  module Bindings.GLib.DataTypes.BalancedBinaryTrees,
+  module Bindings.GLib.DataTypes.Datasets,
+  module Bindings.GLib.DataTypes.DoublyLinkedLists,
+  module Bindings.GLib.DataTypes.HashTables,
+  module Bindings.GLib.DataTypes.MemorySlices,
+  module Bindings.GLib.DataTypes.NAryTrees,
+  module Bindings.GLib.DataTypes.PointerArrays,
+  module Bindings.GLib.DataTypes.Quarks,
+  module Bindings.GLib.DataTypes.SinglyLinkedLists,
+  module Bindings.GLib.DataTypes.StringChunks,
+  module Bindings.GLib.DataTypes.Strings,
+  module Bindings.GLib.DataTypes.TrashStacks,
+ ) where
+import Bindings.GLib.DataTypes.Arrays
+import Bindings.GLib.DataTypes.BalancedBinaryTrees
+import Bindings.GLib.DataTypes.Datasets
+import Bindings.GLib.DataTypes.DoublyLinkedLists
+import Bindings.GLib.DataTypes.HashTables
+import Bindings.GLib.DataTypes.MemorySlices
+import Bindings.GLib.DataTypes.NAryTrees
+import Bindings.GLib.DataTypes.PointerArrays
+import Bindings.GLib.DataTypes.Quarks
+import Bindings.GLib.DataTypes.SinglyLinkedLists
+import Bindings.GLib.DataTypes.StringChunks
+import Bindings.GLib.DataTypes.Strings
+import Bindings.GLib.DataTypes.TrashStacks
diff --git a/src/Bindings/GLib/DataTypes/Arrays.hsc b/src/Bindings/GLib/DataTypes/Arrays.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/DataTypes/Arrays.hsc
@@ -0,0 +1,35 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Arrays.html>
+
+module Bindings.GLib.DataTypes.Arrays where
+#strict_import
+import Bindings.GLib.Fundamentals
+import Bindings.GLib.DataTypes.DoublyLinkedLists
+
+#starttype GArray
+#field data , Ptr <gchar>
+#field len , <guint>
+#stoptype
+
+#ccall g_array_new , <gboolean> -> <gboolean> -> <guint> -> IO (Ptr <GArray>)
+#ccall g_array_sized_new , <gboolean> -> <gboolean> -> <guint> -> <guint>  -> IO (Ptr <GArray>)
+#ccall g_array_ref , Ptr <GArray> -> IO (Ptr <GArray>)
+#ccall g_array_unref , Ptr <GArray> -> IO ()
+#ccall g_array_get_element_size , Ptr <GArray> -> IO <guint>
+
+#ccall g_array_append_vals , Ptr <GArray> -> <gconstpointer> -> <guint>  -> IO (Ptr <GArray>)
+
+#ccall g_array_prepend_vals , Ptr <GArray> -> <gconstpointer> -> <guint>  -> IO (Ptr <GArray>)
+
+#ccall g_array_insert_vals , Ptr <GArray> -> <guint> -> <gconstpointer> -> <guint>  -> IO (Ptr <GArray>)
+#ccall g_array_remove_index , Ptr <GArray> -> <guint>  -> IO (Ptr <GArray>)
+#ccall g_array_remove_index_fast , Ptr <GArray> -> <guint>  -> IO (Ptr <GArray>)
+#ccall g_array_remove_range , Ptr <GArray> -> <guint> -> <guint>  -> IO (Ptr <GArray>)
+#ccall g_array_sort , Ptr <GArray> -> <GCompareFunc> -> IO ()
+#ccall g_array_sort_with_data , Ptr <GArray> -> <GCompareDataFunc> -> <gpointer> -> IO ()
+
+#ccall g_array_set_size , Ptr <GArray> -> <guint>  -> IO (Ptr <GArray>)
+#ccall g_array_free , Ptr <GArray> -> <gboolean> -> IO (Ptr <gchar>)
+
diff --git a/src/Bindings/GLib/DataTypes/BalancedBinaryTrees.hsc b/src/Bindings/GLib/DataTypes/BalancedBinaryTrees.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/DataTypes/BalancedBinaryTrees.hsc
@@ -0,0 +1,39 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Balanced-Binary-Trees.html>
+
+module Bindings.GLib.DataTypes.BalancedBinaryTrees where
+#strict_import
+import Bindings.GLib.Fundamentals
+import Bindings.GLib.DataTypes.Datasets
+import Bindings.GLib.DataTypes.DoublyLinkedLists
+
+#opaque_t GTree
+
+#ccall g_tree_new , <GCompareFunc> -> IO (Ptr <GTree>)
+#ccall g_tree_ref , Ptr <GTree> -> IO (Ptr <GTree>)
+#ccall g_tree_unref , Ptr <GTree> -> IO ()
+#ccall g_tree_new_with_data , <GCompareDataFunc> -> <gpointer> -> IO (Ptr <GTree>)
+#ccall g_tree_new_full , <GCompareDataFunc> -> <gpointer> -> <GDestroyNotify> -> <GDestroyNotify> -> IO (Ptr <GTree>)
+#ccall g_tree_insert , Ptr <GTree> -> <gpointer> -> <gpointer> -> IO ()
+#ccall g_tree_replace , Ptr <GTree> -> <gpointer> -> <gpointer> -> IO ()
+#ccall g_tree_nnodes , Ptr <GTree> -> IO <gint>
+#ccall g_tree_height , Ptr <GTree> -> IO <gint>
+#ccall g_tree_lookup , Ptr <GTree> -> <gconstpointer> -> IO <gpointer>
+#ccall g_tree_lookup_extended , Ptr <GTree> -> <gconstpointer> -> Ptr <gpointer> -> Ptr <gpointer> -> IO <gboolean>
+#ccall g_tree_foreach , Ptr <GTree> -> <GTraverseFunc> -> <gpointer> -> IO ()
+#ccall g_tree_traverse , Ptr <GTree> -> <GTraverseFunc> -> <GTraverseType> -> <gpointer> -> IO ()
+
+#callback GTraverseFunc , <gpointer> -> <gpointer> -> <gpointer> -> IO <gboolean> 
+
+#integral_t GTraverseType
+#num G_IN_ORDER
+#num G_PRE_ORDER
+#num G_POST_ORDER
+#num G_LEVEL_ORDER
+
+#ccall g_tree_search , Ptr <GTree> -> <GCompareFunc> -> <gconstpointer> -> IO <gpointer>
+#ccall g_tree_remove , Ptr <GTree> -> <gconstpointer> -> IO <gboolean>
+#ccall g_tree_steal , Ptr <GTree> -> <gconstpointer> -> IO <gboolean>
+#ccall g_tree_destroy , Ptr <GTree> -> IO ()
diff --git a/src/Bindings/GLib/DataTypes/Datasets.hsc b/src/Bindings/GLib/DataTypes/Datasets.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/DataTypes/Datasets.hsc
@@ -0,0 +1,31 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Datasets.html>
+
+module Bindings.GLib.DataTypes.Datasets where
+#strict_import
+import Bindings.GLib.Fundamentals.BasicTypes
+import Bindings.GLib.DataTypes.Quarks
+
+#cinline g_dataset_id_set_data , <gconstpointer> -> <GQuark> -> <gpointer> -> IO ()
+#ccall g_dataset_id_set_data_full , <gconstpointer> -> <GQuark> -> <gpointer> -> <GDestroyNotify> -> IO ()
+
+#callback GDestroyNotify , <gpointer> -> IO ()
+
+#ccall g_dataset_id_get_data , <gconstpointer> -> <GQuark> -> IO <gpointer>
+#cinline g_dataset_id_remove_data , <gconstpointer> -> <GQuark> -> IO ()
+#ccall g_dataset_id_remove_no_notify , <gconstpointer> -> <GQuark> -> IO <gpointer>
+
+#cinline g_dataset_set_data , <gconstpointer> -> Ptr <gchar> -> <gpointer> -> IO ()
+#cinline g_dataset_set_data_full , <gconstpointer> -> Ptr <gchar> -> <gpointer> -> <GDestroyNotify> -> IO ()
+#cinline g_dataset_get_data , <gconstpointer> -> Ptr <gchar> -> IO <gpointer>
+#cinline g_dataset_remove_data , <gconstpointer> -> Ptr <gchar> -> IO <gpointer>
+#cinline g_dataset_remove_no_notify , <gconstpointer> -> Ptr <gchar> -> IO <gpointer>
+
+#ccall g_dataset_foreach , <gconstpointer> -> <GDataForeachFunc> -> <gpointer> -> IO ()
+
+#callback GDataForeachFunc , <GQuark> -> <gpointer> -> <gpointer> -> IO ()
+
+#ccall g_dataset_destroy , <gconstpointer> -> IO ()
+
diff --git a/src/Bindings/GLib/DataTypes/DoublyLinkedLists.hsc b/src/Bindings/GLib/DataTypes/DoublyLinkedLists.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/DataTypes/DoublyLinkedLists.hsc
@@ -0,0 +1,60 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Doubly-Linked-Lists.html>
+
+module Bindings.GLib.DataTypes.DoublyLinkedLists where
+#strict_import
+import Bindings.GLib.Fundamentals
+
+#starttype GList
+#field data , <gpointer>
+#field next , Ptr <GList>
+#field prev , Ptr <GList>
+#stoptype
+
+#ccall g_list_append , Ptr <GList> -> <gpointer> -> IO (Ptr <GList>)
+#ccall g_list_prepend , Ptr <GList> -> <gpointer> -> IO (Ptr <GList>)
+#ccall g_list_insert , Ptr <GList> -> <gpointer> -> <gint> -> IO (Ptr <GList>)
+#ccall g_list_insert_before , Ptr <GList> -> Ptr <GList> -> <gpointer> -> IO (Ptr <GList>)
+#ccall g_list_insert_sorted , Ptr <GList> -> <gpointer> -> <GCompareFunc> -> IO (Ptr <GList>)
+#ccall g_list_remove , Ptr <GList> -> <gconstpointer> -> IO (Ptr <GList>)
+#ccall g_list_remove_link , Ptr <GList> -> Ptr <GList> -> IO (Ptr <GList>)
+#ccall g_list_delete_link , Ptr <GList> -> Ptr <GList> -> IO (Ptr <GList>)
+#ccall g_list_remove_all , Ptr <GList> -> <gconstpointer> -> IO (Ptr <GList>)
+#ccall g_list_free , Ptr <GList> -> IO ()
+
+#ccall g_list_alloc , IO (Ptr <GList>)
+#ccall g_list_free_1 , Ptr <GList> -> IO ()
+#cinline g_list_free1 , Ptr <GList> -> IO ()
+
+#ccall g_list_length , Ptr <GList> -> IO <guint>
+#ccall g_list_copy , Ptr <GList> -> IO (Ptr <GList>)
+#ccall g_list_reverse , Ptr <GList> -> IO (Ptr <GList>)
+#ccall g_list_sort , Ptr <GList> -> <GCompareFunc> -> IO (Ptr <GList>)
+
+#callback GCompareFunc , <gconstpointer> -> <gconstpointer> -> IO <gint>
+
+#ccall g_list_insert_sorted_with_data , Ptr <GList> -> <gpointer> -> <GCompareDataFunc> -> <gpointer> -> IO (Ptr <GList>)
+#ccall g_list_sort_with_data , Ptr <GList> -> <GCompareDataFunc> -> <gpointer> -> IO (Ptr <GList>)
+
+#callback GCompareDataFunc , <gconstpointer> -> <gconstpointer> -> <gpointer> -> IO <gint>
+
+#ccall g_list_concat , Ptr <GList> -> Ptr <GList> -> IO (Ptr <GList>)
+#ccall g_list_foreach , Ptr <GList> -> <GFunc> -> <gpointer> -> IO ()
+
+#callback GFunc , <gpointer> -> <gpointer> -> IO ()
+
+#ccall g_list_first , Ptr <GList> -> IO (Ptr <GList>)
+#ccall g_list_last , Ptr <GList> -> IO (Ptr <GList>)
+#cinline g_list_previous , Ptr <GList> -> IO (Ptr <GList>)
+#cinline g_list_next , Ptr <GList> -> IO (Ptr <GList>)
+#ccall g_list_nth , Ptr <GList> -> <guint> -> IO (Ptr <GList>)
+#ccall g_list_nth_data , Ptr <GList> -> <guint> -> IO <gpointer>
+#ccall g_list_nth_prev , Ptr <GList> -> <guint> -> IO (Ptr <GList>)
+
+#ccall g_list_find , Ptr <GList> -> <gconstpointer> -> IO (Ptr <GList>)
+#ccall g_list_find_custom , Ptr <GList> -> <gconstpointer> -> <GCompareFunc> -> IO (Ptr <GList>)
+#ccall g_list_position , Ptr <GList> -> Ptr <GList> -> IO <gint>
+#ccall g_list_index , Ptr <GList> -> <gconstpointer> -> IO <gint>
+
diff --git a/src/Bindings/GLib/DataTypes/HashTables.hsc b/src/Bindings/GLib/DataTypes/HashTables.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/DataTypes/HashTables.hsc
@@ -0,0 +1,63 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Hash-Tables.html>
+
+module Bindings.GLib.DataTypes.HashTables where
+#strict_import
+import Bindings.GLib.Fundamentals
+import Bindings.GLib.DataTypes.Datasets
+import Bindings.GLib.DataTypes.DoublyLinkedLists
+
+#opaque_t GHashTable
+
+#ccall g_hash_table_new , <GHashFunc> -> <GEqualFunc> -> IO (Ptr <GHashTable>)
+#ccall g_hash_table_new_full , <GHashFunc> -> <GEqualFunc> -> <GDestroyNotify> -> <GDestroyNotify> -> IO (Ptr <GHashTable>)
+
+#callback GHashFunc , <gconstpointer> -> IO <guint>
+#callback GEqualFunc , <gconstpointer> -> <gconstpointer> -> IO <gboolean>
+
+#ccall g_hash_table_insert , Ptr <GHashTable> -> <gpointer> -> <gpointer> -> IO ()
+#ccall g_hash_table_replace , Ptr <GHashTable> -> <gpointer> -> <gpointer> -> IO ()
+#ccall g_hash_table_size , Ptr <GHashTable> -> IO <guint>
+#ccall g_hash_table_lookup , Ptr <GHashTable> -> <gconstpointer> -> IO <gpointer>
+#ccall g_hash_table_lookup_extended , Ptr <GHashTable> -> <gconstpointer> -> <gpointer> -> <gpointer> -> IO <gboolean>
+#ccall g_hash_table_foreach , Ptr <GHashTable> -> <GHFunc> -> <gpointer> -> IO ()
+#ccall g_hash_table_find , Ptr <GHashTable> -> <GHRFunc> -> <gpointer> -> IO <gpointer>
+
+#callback GHFunc , <gpointer> -> <gpointer> -> <gpointer> -> IO ()
+
+#ccall g_hash_table_remove , Ptr <GHashTable> -> <gconstpointer> -> IO <gboolean>
+#ccall g_hash_table_steal , Ptr <GHashTable> -> <gconstpointer> -> IO <gboolean>
+#ccall g_hash_table_foreach_remove , Ptr <GHashTable> -> <GHRFunc> -> <gpointer> -> IO <guint>
+#ccall g_hash_table_foreach_steal , Ptr <GHashTable> -> <GHRFunc> -> <gpointer> -> IO <guint>
+#ccall g_hash_table_remove_all , Ptr <GHashTable> -> IO ()
+#ccall g_hash_table_steal_all , Ptr <GHashTable> -> IO ()
+#ccall g_hash_table_get_keys , Ptr <GHashTable> -> IO (Ptr <GList>)
+#ccall g_hash_table_get_values , Ptr <GHashTable> -> IO (Ptr <GList>)
+
+#callback GHRFunc , <gpointer> -> <gpointer> -> <gpointer> -> IO <gboolean>
+
+#ccall g_hash_table_destroy , Ptr <GHashTable> -> IO ()
+#ccall g_hash_table_ref , Ptr <GHashTable> -> IO (Ptr <GHashTable>)
+#ccall g_hash_table_unref , Ptr <GHashTable> -> IO ()
+
+#starttype GHashTableIter
+#stoptype
+
+#ccall g_hash_table_iter_init , Ptr <GHashTableIter> -> Ptr <GHashTable> -> IO ()
+#ccall g_hash_table_iter_next , Ptr <GHashTableIter> -> <gpointer> -> <gpointer> -> IO <gboolean>
+#ccall g_hash_table_iter_get_hash_table , Ptr <GHashTableIter> -> IO (Ptr <GHashTable>)
+#ccall g_hash_table_iter_remove , Ptr <GHashTableIter> -> IO ()
+#ccall g_hash_table_iter_steal , Ptr <GHashTableIter> -> IO ()
+
+#ccall g_direct_equal , <gconstpointer> -> <gconstpointer> -> IO <gboolean>
+#ccall g_direct_hash , <gconstpointer> -> IO <guint>
+#ccall g_int_equal , <gconstpointer> -> <gconstpointer> -> IO <gboolean>
+#ccall g_int_hash , <gconstpointer> -> IO <guint>
+#ccall g_int64_equal , <gconstpointer> -> <gconstpointer> -> IO <gboolean>
+#ccall g_int64_hash , <gconstpointer> -> IO <guint>
+#ccall g_double_equal , <gconstpointer> -> <gconstpointer> -> IO <gboolean>
+#ccall g_double_hash , <gconstpointer> -> IO <guint>
+#ccall g_str_equal , <gconstpointer> -> <gconstpointer> -> IO <gboolean>
+#ccall g_str_hash , <gconstpointer> -> IO <guint>
diff --git a/src/Bindings/GLib/DataTypes/MemorySlices.hsc b/src/Bindings/GLib/DataTypes/MemorySlices.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/DataTypes/MemorySlices.hsc
@@ -0,0 +1,15 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Memory-Slices.html>
+
+module Bindings.GLib.DataTypes.MemorySlices where
+#strict_import
+import Bindings.GLib.Fundamentals
+
+#ccall g_slice_alloc , <gsize> -> IO <gpointer>
+#ccall g_slice_alloc0 , <gsize> -> IO <gpointer>
+#ccall g_slice_copy , <gsize> -> <gconstpointer> -> IO <gpointer>
+#ccall g_slice_free1 , <gsize> -> <gpointer> -> IO ()
+#ccall g_slice_free_chain_with_offset , <gsize> -> <gpointer> -> <gsize> -> IO ()
+
diff --git a/src/Bindings/GLib/DataTypes/NAryTrees.hsc b/src/Bindings/GLib/DataTypes/NAryTrees.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/DataTypes/NAryTrees.hsc
@@ -0,0 +1,83 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-N-ary-Trees.html>
+
+module Bindings.GLib.DataTypes.NAryTrees where
+#strict_import
+import Bindings.GLib.Fundamentals
+import Bindings.GLib.DataTypes.BalancedBinaryTrees
+
+#starttype GNode
+#field data , <gpointer>
+#field next , Ptr <GNode>
+#field prev , Ptr <GNode>
+#field parent , Ptr <GNode>
+#field children , Ptr <GNode>
+#stoptype
+
+#ccall g_node_new , <gpointer> -> IO (Ptr <GNode>)
+#ccall g_node_copy , Ptr <GNode> -> IO (Ptr <GNode>)
+
+#callback GCopyFunc , <gconstpointer> -> <gpointer> -> IO <gpointer> 
+
+#ccall g_node_copy_deep , Ptr <GNode> -> <GCopyFunc> -> <gpointer> -> IO (Ptr <GNode>)
+
+#ccall g_node_insert , Ptr <GNode> -> <gint> -> Ptr <GNode> -> IO (Ptr <GNode>)
+#ccall g_node_insert_before , Ptr <GNode> -> Ptr <GNode> -> Ptr <GNode> -> IO (Ptr <GNode>)
+#ccall g_node_insert_after , Ptr <GNode> -> Ptr <GNode> -> Ptr <GNode> -> IO (Ptr <GNode>)
+
+#cinline g_node_append , Ptr <GNode> -> Ptr <GNode> -> IO (Ptr <GNode>)
+
+#ccall g_node_prepend , Ptr <GNode> -> Ptr <GNode> -> IO (Ptr <GNode>)
+
+#cinline g_node_insert_data , Ptr <GNode> -> <gint> -> <gpointer> -> IO (Ptr <GNode>)
+#cinline g_node_insert_data_before , Ptr <GNode> -> Ptr <GNode> -> <gpointer> -> IO (Ptr <GNode>)
+#cinline g_node_append_data , Ptr <GNode> -> <gpointer> -> IO (Ptr <GNode>)
+#cinline g_node_prepend_data , Ptr <GNode> -> <gpointer> -> IO (Ptr <GNode>)
+
+#ccall g_node_reverse_children , Ptr <GNode> -> IO ()
+#ccall g_node_traverse , Ptr <GNode> -> <GTraverseType> -> <GTraverseFlags> -> <gint> -> <GNodeTraverseFunc> -> <gpointer> -> IO ()
+
+#integral_t GTraverseFlags
+#num G_TRAVERSE_LEAVES
+#num G_TRAVERSE_NON_LEAVES
+#num G_TRAVERSE_ALL
+#num G_TRAVERSE_MASK
+#num G_TRAVERSE_LEAFS
+#num G_TRAVERSE_NON_LEAFS
+
+#callback GNodeTraverseFunc , Ptr <GNode> -> <gpointer> -> IO <gboolean> 
+
+#ccall g_node_children_foreach , Ptr <GNode> -> <GTraverseFlags> -> <GNodeForeachFunc> -> <gpointer> -> IO ()
+
+#callback GNodeForeachFunc , Ptr <GNode> -> <gpointer> -> IO ()
+
+#ccall g_node_get_root , Ptr <GNode> -> IO (Ptr <GNode>)
+#ccall g_node_find , Ptr <GNode> -> <GTraverseType> -> <GTraverseFlags> -> <gpointer> -> IO (Ptr <GNode>)
+#ccall g_node_find_child , Ptr <GNode> -> <GTraverseFlags> -> <gpointer> -> IO (Ptr <GNode>)
+#ccall g_node_child_index , Ptr <GNode> -> <gpointer> -> IO <gint>
+#ccall g_node_child_position , Ptr <GNode> -> Ptr <GNode> -> IO <gint>
+
+#cinline g_node_first_child , Ptr <GNode> -> IO (Ptr <GNode>)
+
+#ccall g_node_last_child , Ptr <GNode> -> IO (Ptr <GNode>)
+#ccall g_node_nth_child , Ptr <GNode> -> <guint> -> IO (Ptr <GNode>)
+#ccall g_node_first_sibling , Ptr <GNode> -> IO (Ptr <GNode>)
+
+#cinline g_node_next_sibling , Ptr <GNode> -> IO (Ptr <GNode>)
+#cinline g_node_prev_sibling , Ptr <GNode> -> IO (Ptr <GNode>)
+
+#ccall g_node_last_sibling , Ptr <GNode> -> IO (Ptr <GNode>)
+
+#cinline G_NODE_IS_LEAF , Ptr <GNode> -> IO <gboolean>
+#cinline G_NODE_IS_ROOT , Ptr <GNode> -> IO <gboolean>
+
+#ccall g_node_depth , Ptr <GNode> -> IO <guint>
+#ccall g_node_n_nodes , Ptr <GNode> -> <GTraverseFlags> -> IO <guint>
+#ccall g_node_n_children , Ptr <GNode> -> IO <guint>
+#ccall g_node_is_ancestor , Ptr <GNode> -> Ptr <GNode> -> IO <gboolean>
+#ccall g_node_max_height , Ptr <GNode> -> IO <guint>
+
+#ccall g_node_unlink , Ptr <GNode> -> IO ()
+#ccall g_node_destroy , Ptr <GNode> -> IO ()
diff --git a/src/Bindings/GLib/DataTypes/PointerArrays.hsc b/src/Bindings/GLib/DataTypes/PointerArrays.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/DataTypes/PointerArrays.hsc
@@ -0,0 +1,37 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Pointer-Arrays.html>
+
+module Bindings.GLib.DataTypes.PointerArrays where
+#strict_import
+import Bindings.GLib.Fundamentals
+import Bindings.GLib.DataTypes.Datasets
+import Bindings.GLib.DataTypes.DoublyLinkedLists
+
+#starttype GPtrArray
+#field pdata , Ptr <gpointer>
+#field len , <guint>
+#stoptype
+
+#ccall g_ptr_array_new , IO (Ptr <GPtrArray>)
+#ccall g_ptr_array_sized_new , <guint> -> IO (Ptr <GPtrArray>)
+#ccall g_ptr_array_new_with_free_func , <GDestroyNotify>  -> IO (Ptr <GPtrArray>)
+#ccall g_ptr_array_set_free_func , Ptr <GPtrArray> -> <GDestroyNotify> -> IO ()
+#ccall g_ptr_array_ref , Ptr <GPtrArray> -> IO (Ptr <GPtrArray>)
+#ccall g_ptr_array_unref , Ptr <GPtrArray> -> IO ()
+#ccall g_ptr_array_add , Ptr <GPtrArray> -> <gpointer> -> IO ()
+#ccall g_ptr_array_remove , Ptr <GPtrArray> -> <gpointer> -> IO <gboolean>
+#ccall g_ptr_array_remove_index , Ptr <GPtrArray> -> <guint> -> IO <gpointer>
+#ccall g_ptr_array_remove_fast , Ptr <GPtrArray> -> <gpointer> -> IO <gboolean>
+#ccall g_ptr_array_remove_index_fast , Ptr <GPtrArray> -> <guint> -> IO <gpointer>
+#ccall g_ptr_array_remove_range , Ptr <GPtrArray> -> <guint> -> <guint> -> IO ()
+#ccall g_ptr_array_sort , Ptr <GPtrArray> -> <GCompareFunc> -> IO ()
+#ccall g_ptr_array_sort_with_data , Ptr <GPtrArray> -> <GCompareDataFunc> -> <gpointer> -> IO ()
+#ccall g_ptr_array_set_size , Ptr <GPtrArray> -> <gint> -> IO ()
+
+#cinline g_ptr_array_index , Ptr <GPtrArray> -> <guint> -> IO <gpointer>
+
+#ccall g_ptr_array_free , Ptr <GPtrArray> -> <gboolean> -> IO (Ptr <gpointer>)
+#ccall g_ptr_array_foreach , Ptr <GPtrArray> -> <GFunc> -> <gpointer> -> IO ()
+
diff --git a/src/Bindings/GLib/DataTypes/Quarks.hsc b/src/Bindings/GLib/DataTypes/Quarks.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/DataTypes/Quarks.hsc
@@ -0,0 +1,18 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Quarks.html>
+
+module Bindings.GLib.DataTypes.Quarks where
+#strict_import
+import Bindings.GLib.Fundamentals
+
+#integral_t GQuark
+
+#ccall g_quark_from_string , Ptr <gchar> -> IO <GQuark>
+#ccall g_quark_from_static_string , Ptr <gchar> -> IO <GQuark>
+#ccall g_quark_to_string , <GQuark> -> IO (Ptr <gchar>)
+#ccall g_quark_try_string , Ptr <gchar> -> IO <GQuark>
+#ccall g_intern_string , Ptr <gchar> -> IO (Ptr <gchar>)
+#ccall g_intern_static_string , Ptr <gchar> -> IO (Ptr <gchar>)
+
diff --git a/src/Bindings/GLib/DataTypes/SinglyLinkedLists.hsc b/src/Bindings/GLib/DataTypes/SinglyLinkedLists.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/DataTypes/SinglyLinkedLists.hsc
@@ -0,0 +1,50 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Singly-Linked-Lists.html>
+
+module Bindings.GLib.DataTypes.SinglyLinkedLists where
+import Bindings.GLib.DataTypes.DoublyLinkedLists
+#strict_import
+import Bindings.GLib.Fundamentals
+
+#starttype GSList
+#field data , <gpointer>
+#field next , Ptr <GSList>
+#stoptype
+
+#ccall g_slist_alloc , IO (Ptr <GSList>)
+#ccall g_slist_append , Ptr <GSList> -> <gpointer> -> IO (Ptr <GSList>)
+#ccall g_slist_prepend , Ptr <GSList> -> <gpointer> -> IO (Ptr <GSList>)
+#ccall g_slist_insert , Ptr <GSList> -> <gpointer> -> <gint> -> IO (Ptr <GSList>)
+#ccall g_slist_insert_before , Ptr <GSList> -> Ptr <GSList> -> <gpointer> -> IO (Ptr <GSList>)
+#ccall g_slist_insert_sorted , Ptr <GSList> -> <gpointer> -> <GCompareFunc> -> IO (Ptr <GSList>)
+#ccall g_slist_remove , Ptr <GSList> -> <gconstpointer> -> IO (Ptr <GSList>)
+#ccall g_slist_remove_link , Ptr <GSList> -> Ptr <GSList> -> IO (Ptr <GSList>)
+#ccall g_slist_delete_link , Ptr <GSList> -> Ptr <GSList> -> IO (Ptr <GSList>)
+#ccall g_slist_remove_all , Ptr <GSList> -> <gconstpointer> -> IO (Ptr <GSList>)
+#ccall g_slist_free , Ptr <GSList> -> IO ()
+#ccall g_slist_free_1 , Ptr <GSList> -> IO ()
+
+#cinline g_slist_free1 , Ptr <GSList> -> IO ()
+
+#ccall g_slist_length , Ptr <GSList> -> IO <guint> 
+#ccall g_slist_copy , Ptr <GSList> -> IO (Ptr <GSList>)
+#ccall g_slist_reverse , Ptr <GSList> -> IO (Ptr <GSList>)
+#ccall g_slist_insert_sorted_with_data , Ptr <GSList> -> <gpointer> -> <GCompareDataFunc> -> <gpointer> -> IO (Ptr <GSList>)
+#ccall g_slist_sort , Ptr <GSList> -> <GCompareFunc> -> IO (Ptr <GSList>)
+#ccall g_slist_sort_with_data , Ptr <GSList> -> <GCompareDataFunc> -> <gpointer> -> IO (Ptr <GSList>)
+#ccall g_slist_concat , Ptr <GSList> -> Ptr <GSList> -> IO (Ptr <GSList>)
+#ccall g_slist_foreach , Ptr <GSList> -> <GFunc> -> <gpointer> -> IO ()
+#ccall g_slist_last , Ptr <GSList> -> IO (Ptr <GSList>)
+
+#cinline g_slist_next , Ptr <GSList> -> IO (Ptr <GSList>)
+
+#ccall g_slist_nth , Ptr <GSList> -> <guint> -> IO (Ptr <GSList>)
+#ccall g_slist_nth_data , Ptr <GSList> -> <guint> -> IO <gpointer>
+#ccall g_slist_find , Ptr <GSList> -> <gconstpointer> -> IO (Ptr <GSList>)
+#ccall g_slist_find_custom , Ptr <GSList> -> <gconstpointer> -> <GCompareFunc> -> IO (Ptr <GSList>)
+#ccall g_slist_position , Ptr <GSList> -> Ptr <GSList> -> IO <gint>
+#ccall g_slist_index , Ptr <GSList> -> <gconstpointer> -> IO <gint>
+#ccall g_slist_push_allocator , <gpointer> -> IO ()
+#ccall g_slist_pop_allocator , IO ()
diff --git a/src/Bindings/GLib/DataTypes/StringChunks.hsc b/src/Bindings/GLib/DataTypes/StringChunks.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/DataTypes/StringChunks.hsc
@@ -0,0 +1,18 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-String-Chunks.html>
+
+module Bindings.GLib.DataTypes.StringChunks where
+#strict_import
+import Bindings.GLib.Fundamentals
+
+#opaque_t GStringChunk
+
+#ccall g_string_chunk_new , <gsize> -> IO (Ptr <GStringChunk>)
+#ccall g_string_chunk_insert , Ptr <GStringChunk> -> Ptr <gchar> -> IO (Ptr <gchar>)
+#ccall g_string_chunk_insert_const , Ptr <GStringChunk> -> Ptr <gchar> -> IO (Ptr <gchar>)
+#ccall g_string_chunk_insert_len , Ptr <GStringChunk> -> Ptr <gchar> -> <gssize> -> IO (Ptr <gchar>)
+#ccall g_string_chunk_clear , Ptr <GStringChunk> -> IO ()
+#ccall g_string_chunk_free , Ptr <GStringChunk> -> IO ()
+
diff --git a/src/Bindings/GLib/DataTypes/Strings.hsc b/src/Bindings/GLib/DataTypes/Strings.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/DataTypes/Strings.hsc
@@ -0,0 +1,53 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Strings.html>
+
+module Bindings.GLib.DataTypes.Strings where
+import Bindings.GLib.Fundamentals.BasicTypes
+import Bindings.GLib.Utilities.UnicodeManipulation
+#strict_import
+
+#starttype GString
+#field str , Ptr <gchar>
+#field len , <gsize>
+#field allocated_len , <gsize>
+#stoptype
+
+#ccall g_string_new , Ptr <gchar> -> IO (Ptr <GString>)
+#ccall g_string_new_len , Ptr <gchar> -> <gssize> -> IO (Ptr <GString>)
+#ccall g_string_sized_new , <gsize> -> IO (Ptr <GString>)
+#ccall g_string_assign , Ptr <GString> -> Ptr <gchar> -> IO (Ptr <GString>)
+#ccall g_string_append , Ptr <GString> -> Ptr <gchar> -> IO (Ptr <GString>)
+#ccall g_string_append_c , Ptr <GString> -> <gchar> -> IO (Ptr <GString>)
+#ccall g_string_append_unichar , Ptr <GString> -> \
+    <gunichar> -> IO (Ptr <GString>)
+#ccall g_string_append_len , Ptr <GString> -> Ptr <gchar> -> \
+    <gssize> -> IO (Ptr <GString>)
+#ccall g_string_append_uri_escaped , Ptr <GString> -> CString -> \
+    CString -> <gboolean> -> IO (Ptr <GString>)
+#ccall g_string_prepend , Ptr <GString> -> Ptr <gchar> -> IO (Ptr <GString>)
+#ccall g_string_prepend_c , Ptr <GString> -> <gchar> -> IO (Ptr <GString>)
+#ccall g_string_prepend_unichar , Ptr <GString> -> \
+    <gunichar> -> IO (Ptr <GString>)
+#ccall g_string_prepend_len , Ptr <GString> -> Ptr <gchar> -> \
+    <gssize> -> IO (Ptr <GString>)
+#ccall g_string_insert , Ptr <GString> -> <gssize> -> \
+    Ptr <gchar> -> IO (Ptr <GString>)
+#ccall g_string_insert_c , Ptr <GString> -> <gssize> -> \
+    <gchar> -> IO (Ptr <GString>)
+#ccall g_string_insert_unichar , Ptr <GString> -> <gssize> -> \
+    <gunichar> -> IO (Ptr <GString>)
+#ccall g_string_insert_len , Ptr <GString> -> <gssize> -> \
+    Ptr <gchar> -> <gssize> -> IO (Ptr <GString>)
+#ccall g_string_overwrite , Ptr <GString> -> <gsize> -> \
+    Ptr <gchar> -> IO (Ptr <GString>)
+#ccall g_string_overwrite_len , Ptr <GString> -> <gsize> -> \
+    Ptr <gchar> -> <gssize> -> IO (Ptr <GString>)
+#ccall g_string_erase , Ptr <GString> -> <gssize> -> \
+    <gssize> -> IO (Ptr <GString>)
+#ccall g_string_truncate , Ptr <GString> -> <gsize> -> IO (Ptr <GString>)
+#ccall g_string_set_size , Ptr <GString> -> <gsize> -> IO (Ptr <GString>)
+#ccall g_string_free , Ptr <GString> -> <gboolean> -> IO (Ptr <gchar>)
+#ccall g_string_hash , Ptr <GString> -> IO <guint>
+#ccall g_string_equal , Ptr <GString> -> Ptr <GString> -> IO <gboolean>
diff --git a/src/Bindings/GLib/DataTypes/TrashStacks.hsc b/src/Bindings/GLib/DataTypes/TrashStacks.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/DataTypes/TrashStacks.hsc
@@ -0,0 +1,18 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Trash-Stacks.html>
+
+module Bindings.GLib.DataTypes.TrashStacks where
+#strict_import
+import Bindings.GLib.Fundamentals
+
+#starttype GTrashStack
+#field next , Ptr <GTrashStack>
+#stoptype
+
+#ccall g_trash_stack_push , Ptr (Ptr <GTrashStack>) -> <gpointer> -> IO ()
+#ccall g_trash_stack_pop , Ptr (Ptr <GTrashStack>) -> IO <gpointer>
+#ccall g_trash_stack_peek , Ptr (Ptr <GTrashStack>) -> IO <gpointer>
+#ccall g_trash_stack_height , Ptr (Ptr <GTrashStack>) -> IO <guint>
+
diff --git a/src/Bindings/GLib/Fundamentals.hs b/src/Bindings/GLib/Fundamentals.hs
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/Fundamentals.hs
@@ -0,0 +1,21 @@
+-- | <http://library.gnome.org/devel/glib/stable/glib-fundamentals.html>
+module Bindings.GLib.Fundamentals (
+  module Bindings.GLib.Fundamentals.AtomicOperations,
+  module Bindings.GLib.Fundamentals.BasicTypes,
+  module Bindings.GLib.Fundamentals.ByteOrderMacros,
+  module Bindings.GLib.Fundamentals.LimitsOfBasicTypes,
+  module Bindings.GLib.Fundamentals.MiscellaneousMacros,
+  module Bindings.GLib.Fundamentals.NumericalDefinitions,
+  module Bindings.GLib.Fundamentals.StandardMacros,
+  module Bindings.GLib.Fundamentals.TypeConversionMacros,
+  module Bindings.GLib.Fundamentals.VersionInformation,
+ ) where
+import Bindings.GLib.Fundamentals.AtomicOperations
+import Bindings.GLib.Fundamentals.BasicTypes
+import Bindings.GLib.Fundamentals.ByteOrderMacros
+import Bindings.GLib.Fundamentals.LimitsOfBasicTypes
+import Bindings.GLib.Fundamentals.MiscellaneousMacros
+import Bindings.GLib.Fundamentals.NumericalDefinitions
+import Bindings.GLib.Fundamentals.StandardMacros
+import Bindings.GLib.Fundamentals.TypeConversionMacros
+import Bindings.GLib.Fundamentals.VersionInformation
diff --git a/src/Bindings/GLib/Fundamentals/AtomicOperations.hsc b/src/Bindings/GLib/Fundamentals/AtomicOperations.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/Fundamentals/AtomicOperations.hsc
@@ -0,0 +1,20 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Atomic-Operations.html>
+
+module Bindings.GLib.Fundamentals.AtomicOperations where
+#strict_import
+import Bindings.GLib.Fundamentals.BasicTypes
+
+#cinline g_atomic_int_get , Ptr <gint> -> IO <gint>
+#cinline g_atomic_int_set , Ptr <gint> -> <gint> -> IO ()
+#cinline g_atomic_int_add , Ptr <gint> -> <gint> -> IO ()
+#cinline g_atomic_int_exchange_and_add , Ptr <gint> -> <gint> -> IO <gint>
+#cinline g_atomic_int_compare_and_exchange , Ptr <gint> -> <gint> -> <gint> -> IO <gboolean>
+#cinline g_atomic_pointer_get , Ptr <gpointer> -> IO <gpointer>
+#cinline g_atomic_pointer_set , Ptr <gpointer> -> <gpointer> -> IO ()
+#cinline g_atomic_pointer_compare_and_exchange , Ptr <gpointer> -> <gpointer> -> <gpointer> -> IO <gboolean>
+#cinline g_atomic_int_inc , Ptr <gint> -> IO ()
+#cinline g_atomic_int_dec_and_test , Ptr <gint> -> IO <gboolean>
+
diff --git a/src/Bindings/GLib/Fundamentals/BasicTypes.hsc b/src/Bindings/GLib/Fundamentals/BasicTypes.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/Fundamentals/BasicTypes.hsc
@@ -0,0 +1,37 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html>
+
+module Bindings.GLib.Fundamentals.BasicTypes where
+#strict_import
+
+#integral_t gboolean
+#synonym_t gpointer , Ptr ()
+#synonym_t gconstpointer , Ptr ()
+#integral_t gchar
+#integral_t guchar
+#integral_t gint
+#integral_t guint
+#integral_t gshort
+#integral_t gushort
+#integral_t glong
+#integral_t gulong
+#integral_t gint8
+#integral_t guint8
+#integral_t gint16
+#integral_t guint16
+#integral_t gint32
+#integral_t guint32
+#integral_t gint64
+#integral_t guint64
+
+#synonym_t gfloat , CFloat
+#synonym_t gdouble , CDouble
+
+#integral_t gsize
+#integral_t gssize
+#integral_t goffset
+#integral_t gintptr
+#integral_t guintptr
+
diff --git a/src/Bindings/GLib/Fundamentals/ByteOrderMacros.hsc b/src/Bindings/GLib/Fundamentals/ByteOrderMacros.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/Fundamentals/ByteOrderMacros.hsc
@@ -0,0 +1,61 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Byte-Order-Macros.html>
+
+module Bindings.GLib.Fundamentals.ByteOrderMacros where
+#strict_import
+import Bindings.GLib.Fundamentals.BasicTypes
+
+#cinline g_htonl , <gint32> -> <gint32>
+#cinline g_htons , <gint16> -> <gint16>
+#cinline g_ntohl , <gint32> -> <gint32>
+#cinline g_ntohs , <gint16> -> <gint16>
+#cinline GINT_FROM_BE , <gint> -> <gint>
+#cinline GINT_FROM_LE , <gint> -> <gint>
+#cinline GINT_TO_BE , <gint> -> <gint>
+#cinline GINT_TO_LE , <gint> -> <gint>
+#cinline GUINT_FROM_BE , <guint> -> <guint>
+#cinline GUINT_FROM_LE , <guint> -> <guint>
+#cinline GUINT_TO_BE , <guint> -> <guint>
+#cinline GUINT_TO_LE , <guint> -> <guint>
+#cinline GLONG_FROM_BE , <glong> -> <glong>
+#cinline GLONG_FROM_LE , <glong> -> <glong>
+#cinline GLONG_TO_BE , <glong> -> <glong>
+#cinline GLONG_TO_LE , <glong> -> <glong>
+#cinline GULONG_FROM_BE , <gulong> -> <gulong>
+#cinline GULONG_FROM_LE , <gulong> -> <gulong>
+#cinline GULONG_TO_BE , <gulong> -> <gulong>
+#cinline GULONG_TO_LE , <gulong> -> <gulong>
+#cinline GINT16_FROM_BE , <gint16> -> <gint16>
+#cinline GINT16_FROM_LE , <gint16> -> <gint16>
+#cinline GINT16_TO_BE , <gint16> -> <gint16>
+#cinline GINT16_TO_LE , <gint16> -> <gint16>
+#cinline GUINT16_FROM_BE , <guint16> -> <guint16>
+#cinline GUINT16_FROM_LE , <guint16> -> <guint16>
+#cinline GUINT16_TO_BE , <guint16> -> <guint16>
+#cinline GUINT16_TO_LE , <guint16> -> <guint16>
+#cinline GINT32_FROM_BE , <gint32> -> <gint32>
+#cinline GINT32_FROM_LE , <gint32> -> <gint32>
+#cinline GINT32_TO_BE , <gint32> -> <gint32>
+#cinline GINT32_TO_LE , <gint32> -> <gint32>
+#cinline GUINT32_FROM_BE , <guint32> -> <guint32>
+#cinline GUINT32_FROM_LE , <guint32> -> <guint32>
+#cinline GUINT32_TO_BE , <guint32> -> <guint32>
+#cinline GUINT32_TO_LE , <guint32> -> <guint32>
+#cinline GINT64_FROM_BE , <gint64> -> <gint64>
+#cinline GINT64_FROM_LE , <gint64> -> <gint64>
+#cinline GINT64_TO_BE , <gint64> -> <gint64>
+#cinline GINT64_TO_LE , <gint64> -> <gint64>
+#cinline GUINT64_FROM_BE , <guint64> -> <guint64>
+#cinline GUINT64_FROM_LE , <guint64> -> <guint64>
+#cinline GUINT64_TO_BE , <guint64> -> <guint64>
+#cinline GUINT64_TO_LE , <guint64> -> <guint64>
+#cinline GUINT16_SWAP_BE_PDP , <guint16> -> <guint16>
+#cinline GUINT16_SWAP_LE_BE , <guint16> -> <guint16>
+#cinline GUINT16_SWAP_LE_PDP , <guint16> -> <guint16>
+#cinline GUINT32_SWAP_BE_PDP , <guint32> -> <guint32>
+#cinline GUINT32_SWAP_LE_BE , <guint32> -> <guint32>
+#cinline GUINT32_SWAP_LE_PDP , <guint32> -> <guint32>
+#cinline GUINT64_SWAP_LE_BE , <guint64> -> <guint64>
+
diff --git a/src/Bindings/GLib/Fundamentals/LimitsOfBasicTypes.hsc b/src/Bindings/GLib/Fundamentals/LimitsOfBasicTypes.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/Fundamentals/LimitsOfBasicTypes.hsc
@@ -0,0 +1,39 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Limits-of-Basic-Types.html>
+
+module Bindings.GLib.Fundamentals.LimitsOfBasicTypes where
+#strict_import
+
+#num G_MININT
+#num G_MAXINT
+#num G_MAXUINT
+#num G_MINSHORT
+#num G_MAXSHORT
+#num G_MAXUSHORT
+#num G_MINLONG
+#num G_MAXLONG
+#num G_MAXULONG
+#num G_MININT8
+#num G_MAXINT8
+#num G_MAXUINT8
+#num G_MININT16
+#num G_MAXINT16
+#num G_MAXUINT16
+#num G_MININT32
+#num G_MAXINT32
+#num G_MAXUINT32
+#num G_MININT64
+#num G_MAXINT64
+#num G_MAXUINT64
+#num G_MAXSIZE
+#num G_MINSSIZE
+#num G_MAXSSIZE
+#num G_MINOFFSET
+#num G_MAXOFFSET
+#num G_MINFLOAT
+#num G_MAXFLOAT
+#num G_MINDOUBLE
+#num G_MAXDOUBLE
+
diff --git a/src/Bindings/GLib/Fundamentals/MiscellaneousMacros.hsc b/src/Bindings/GLib/Fundamentals/MiscellaneousMacros.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/Fundamentals/MiscellaneousMacros.hsc
@@ -0,0 +1,26 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Miscellaneous-Macros.html>
+
+module Bindings.GLib.Fundamentals.MiscellaneousMacros where
+#strict_import
+
+#pointer G_GINT16_MODIFIER
+#pointer G_GINT16_FORMAT
+#pointer G_GUINT16_FORMAT
+#pointer G_GINT32_MODIFIER
+#pointer G_GINT32_FORMAT
+#pointer G_GUINT32_FORMAT
+#pointer G_GINT64_MODIFIER
+#pointer G_GINT64_FORMAT
+#pointer G_GUINT64_FORMAT
+#pointer G_GSIZE_MODIFIER
+#pointer G_GSIZE_FORMAT
+#pointer G_GSSIZE_FORMAT
+#pointer G_GOFFSET_MODIFIER
+#pointer G_GOFFSET_FORMAT
+#pointer G_GINTPTR_MODIFIER
+#pointer G_GINTPTR_FORMAT
+#pointer G_GUINTPTR_FORMAT
+
diff --git a/src/Bindings/GLib/Fundamentals/NumericalDefinitions.hsc b/src/Bindings/GLib/Fundamentals/NumericalDefinitions.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/Fundamentals/NumericalDefinitions.hsc
@@ -0,0 +1,19 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Numerical-Definitions.html>
+
+module Bindings.GLib.Fundamentals.NumericalDefinitions where
+#strict_import
+
+#num G_IEEE754_FLOAT_BIAS
+#num G_IEEE754_DOUBLE_BIAS
+#fractional G_E
+#fractional G_LN2
+#fractional G_LN10
+#fractional G_PI
+#fractional G_PI_2
+#fractional G_PI_4
+#fractional G_SQRT2
+#fractional G_LOG_2_BASE_10
+
diff --git a/src/Bindings/GLib/Fundamentals/StandardMacros.hsc b/src/Bindings/GLib/Fundamentals/StandardMacros.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/Fundamentals/StandardMacros.hsc
@@ -0,0 +1,18 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Standard-Macros.html>
+
+module Bindings.GLib.Fundamentals.StandardMacros where
+#strict_import
+
+#num G_DIR_SEPARATOR
+#pointer G_DIR_SEPARATOR_S
+#cinline G_IS_DIR_SEPARATOR , CChar -> CInt
+#num G_SEARCHPATH_SEPARATOR
+#pointer G_SEARCHPATH_SEPARATOR_S
+#num TRUE
+#num FALSE
+#pointer NULL
+#num G_MEM_ALIGN
+
diff --git a/src/Bindings/GLib/Fundamentals/TypeConversionMacros.hsc b/src/Bindings/GLib/Fundamentals/TypeConversionMacros.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/Fundamentals/TypeConversionMacros.hsc
@@ -0,0 +1,16 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Type-Conversion-Macros.html>
+
+module Bindings.GLib.Fundamentals.TypeConversionMacros where
+#strict_import
+import Bindings.GLib.Fundamentals.BasicTypes
+
+#cinline GINT_TO_POINTER , <gint> -> <gpointer>
+#cinline GPOINTER_TO_INT , <gpointer> -> <gint>
+#cinline GUINT_TO_POINTER , <guint> -> <gpointer>
+#cinline GPOINTER_TO_UINT , <gpointer> -> <guint>
+#cinline GSIZE_TO_POINTER , <gsize> -> <gpointer>
+#cinline GPOINTER_TO_SIZE , <gpointer> -> <gsize>
+
diff --git a/src/Bindings/GLib/Fundamentals/VersionInformation.hsc b/src/Bindings/GLib/Fundamentals/VersionInformation.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/Fundamentals/VersionInformation.hsc
@@ -0,0 +1,19 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/unstable/glib-Version-Information.html>
+
+module Bindings.GLib.Fundamentals.VersionInformation where
+#strict_import
+import Bindings.GLib.Fundamentals.BasicTypes
+
+#globalvar glib_major_version , <guint>
+#globalvar glib_minor_version , <guint>
+#globalvar glib_micro_version , <guint>
+#globalvar glib_binary_age , <guint>
+#globalvar glib_interface_age , <guint>
+#ccall glib_check_version , <guint> -> <guint> -> <guint> -> IO (Ptr <gchar>)
+
+#num GLIB_MAJOR_VERSION
+#num GLIB_MINOR_VERSION
+#num GLIB_MICRO_VERSION
diff --git a/src/Bindings/GLib/Utilities.hs b/src/Bindings/GLib/Utilities.hs
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/Utilities.hs
@@ -0,0 +1,13 @@
+-- | <http://library.gnome.org/devel/glib/stable/glib-utilities.html>
+module Bindings.GLib.Utilities (
+  module Bindings.GLib.Utilities.CommandlineOptionParser,
+  module Bindings.GLib.Utilities.DateAndTimeFunctions,
+  module Bindings.GLib.Utilities.HostnameUtilities,
+  module Bindings.GLib.Utilities.SimpleXmlSubsetParser,
+  module Bindings.GLib.Utilities.UnicodeManipulation,
+ ) where
+import Bindings.GLib.Utilities.CommandlineOptionParser
+import Bindings.GLib.Utilities.DateAndTimeFunctions
+import Bindings.GLib.Utilities.HostnameUtilities
+import Bindings.GLib.Utilities.SimpleXmlSubsetParser
+import Bindings.GLib.Utilities.UnicodeManipulation
diff --git a/src/Bindings/GLib/Utilities/CommandlineOptionParser.hsc b/src/Bindings/GLib/Utilities/CommandlineOptionParser.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/Utilities/CommandlineOptionParser.hsc
@@ -0,0 +1,99 @@
+#include <bindings.dsl.h>
+#include<glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Commandline-option-parser.html>
+
+module Bindings.GLib.Utilities.CommandlineOptionParser where
+#strict_import
+import Bindings.GLib.Fundamentals
+import Bindings.GLib.CoreApplicationSupport.ErrorReporting
+import Bindings.GLib.DataTypes.Datasets
+
+#integral_t GOptionError
+
+#num G_OPTION_ERROR_UNKNOWN_OPTION
+#num G_OPTION_ERROR_BAD_VALUE
+#num G_OPTION_ERROR_FAILED
+
+#num G_OPTION_ERROR
+
+#callback GOptionArgFunc , Ptr <gchar> -> Ptr <gchar> -> <gpointer> -> Ptr (Ptr <GError>) -> IO <gboolean>
+
+#opaque_t GOptionContext
+
+#ccall g_option_context_new , Ptr <gchar> -> IO (Ptr <GOptionContext>)
+#ccall g_option_context_set_summary , Ptr <GOptionContext> -> Ptr <gchar> -> IO ()
+#ccall g_option_context_get_summary , Ptr <GOptionContext> -> IO (Ptr <gchar>)
+#ccall g_option_context_set_description , Ptr <GOptionContext> -> Ptr <gchar> -> IO ()
+#ccall g_option_context_get_description , Ptr <GOptionContext> -> IO (Ptr <gchar>)
+
+
+#callback GTranslateFunc , Ptr <gchar> -> <gpointer> -> IO (Ptr <gchar>)
+
+#ccall g_option_context_set_translate_func , Ptr <GOptionContext> -> <GTranslateFunc> -> <gpointer> -> <GDestroyNotify> -> IO ()
+#ccall g_option_context_set_translation_domain , Ptr <GOptionContext> -> Ptr <gchar> -> IO ()
+#ccall g_option_context_free , Ptr <GOptionContext> -> IO ()
+#ccall g_option_context_parse , Ptr <GOptionContext> -> Ptr <gint> -> Ptr (Ptr (Ptr <gchar>)) -> Ptr (Ptr <GError>) -> IO <gboolean>
+#ccall g_option_context_set_help_enabled , Ptr <GOptionContext> -> <gboolean> -> IO ()
+#ccall g_option_context_get_help_enabled , Ptr <GOptionContext> -> IO <gboolean>
+#ccall g_option_context_set_ignore_unknown_options , Ptr <GOptionContext> -> <gboolean> -> IO ()
+#ccall g_option_context_get_ignore_unknown_options , Ptr <GOptionContext> -> IO <gboolean>
+#ccall g_option_context_get_help , Ptr <GOptionContext> -> <gboolean> -> Ptr <GOptionGroup> -> IO (Ptr <gchar>)
+
+
+#integral_t GOptionArg
+
+#num G_OPTION_ARG_NONE
+#num G_OPTION_ARG_STRING
+#num G_OPTION_ARG_INT
+#num G_OPTION_ARG_CALLBACK
+#num G_OPTION_ARG_FILENAME
+#num G_OPTION_ARG_STRING_ARRAY
+#num G_OPTION_ARG_FILENAME_ARRAY
+#num G_OPTION_ARG_DOUBLE
+#num G_OPTION_ARG_INT64
+
+#integral_t GOptionFlags
+
+#num G_OPTION_FLAG_HIDDEN
+#num G_OPTION_FLAG_IN_MAIN
+#num G_OPTION_FLAG_REVERSE
+#num G_OPTION_FLAG_NO_ARG
+#num G_OPTION_FLAG_FILENAME
+#num G_OPTION_FLAG_OPTIONAL_ARG
+#num G_OPTION_FLAG_NOALIAS
+
+#pointer G_OPTION_REMAINING
+
+#starttype GOptionEntry
+#field long_name , Ptr <gchar>
+#field short_name , <gchar>
+#field flags , <gint>
+#field arg , <GOptionArg>
+#field arg_data , <gpointer>
+#field description , Ptr <gchar>
+#field arg_description , Ptr <gchar>
+#stoptype
+
+#ccall g_option_context_add_main_entries , Ptr <GOptionContext> -> Ptr <GOptionEntry> -> Ptr <gchar> -> IO ()
+
+#opaque_t GOptionGroup
+
+#ccall g_option_context_add_group , Ptr <GOptionContext> -> Ptr <GOptionGroup> -> IO ()
+#ccall g_option_context_set_main_group , Ptr <GOptionContext> -> Ptr <GOptionGroup> -> IO ()
+#ccall g_option_context_get_main_group , Ptr <GOptionContext> -> IO (Ptr <GOptionGroup>)
+#ccall g_option_group_new , Ptr <gchar> -> Ptr <gchar> -> Ptr <gchar> -> <gpointer> -> <GDestroyNotify> -> IO (Ptr <GOptionGroup>)
+#ccall g_option_group_free , Ptr <GOptionGroup> -> IO ()
+#ccall g_option_group_add_entries , Ptr <GOptionGroup> -> Ptr <GOptionEntry> -> IO ()
+
+#callback GOptionParseFunc , Ptr <GOptionContext> -> Ptr <GOptionGroup> -> <gpointer> -> Ptr (Ptr <GError>) -> IO <gboolean>
+
+#ccall g_option_group_set_parse_hooks , Ptr <GOptionGroup> -> <GOptionParseFunc> -> <GOptionParseFunc> -> IO ()
+
+#callback GOptionErrorFunc , Ptr <GOptionContext> -> Ptr <GOptionGroup> -> <gpointer> -> Ptr (Ptr <GError>) -> IO ()
+
+#ccall g_option_group_set_error_hook , Ptr <GOptionGroup> -> <GOptionErrorFunc> -> IO ()
+#ccall g_option_group_set_translate_func , Ptr <GOptionGroup> -> <GTranslateFunc> -> <gpointer> -> <GDestroyNotify> -> IO ()
+#ccall g_option_group_set_translation_domain , Ptr <GOptionGroup> -> Ptr <gchar> -> IO ()
+
+
diff --git a/src/Bindings/GLib/Utilities/DateAndTimeFunctions.hsc b/src/Bindings/GLib/Utilities/DateAndTimeFunctions.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/Utilities/DateAndTimeFunctions.hsc
@@ -0,0 +1,127 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Date-and-Time-Functions.html>
+
+module Bindings.GLib.Utilities.DateAndTimeFunctions where
+#strict_import
+import Bindings.GLib.Fundamentals
+
+#num G_USEC_PER_SEC
+
+#starttype GTimeVal
+#field tv_sec , <glong>
+#field tv_usec , <glong>
+#stoptype
+
+#ccall g_get_current_time , Ptr <GTimeVal> -> IO ()
+#ccall g_usleep , <gulong> -> IO ()
+#ccall g_time_val_add , Ptr <GTimeVal> -> <glong> -> IO ()
+#ccall g_time_val_from_iso8601 , Ptr <gchar> -> Ptr <GTimeVal> -> IO <gboolean>
+#ccall g_time_val_to_iso8601 , Ptr <GTimeVal> -> IO (Ptr <gchar>)
+
+#starttype GDate
+#stoptype
+
+
+#integral_t GDateDMY
+
+#num G_DATE_DAY
+#num G_DATE_MONTH
+#num G_DATE_YEAR
+
+
+#integral_t GDateDay
+
+
+#integral_t GDateMonth
+
+#num G_DATE_BAD_MONTH
+#num G_DATE_JANUARY
+#num G_DATE_FEBRUARY
+#num G_DATE_MARCH
+#num G_DATE_APRIL
+#num G_DATE_MAY
+#num G_DATE_JUNE
+#num G_DATE_JULY
+#num G_DATE_AUGUST
+#num G_DATE_SEPTEMBER
+#num G_DATE_OCTOBER
+#num G_DATE_NOVEMBER
+#num G_DATE_DECEMBER
+
+
+#integral_t GDateYear
+
+
+#integral_t GDateWeekday
+
+#num G_DATE_BAD_WEEKDAY
+#num G_DATE_MONDAY
+#num G_DATE_TUESDAY
+#num G_DATE_WEDNESDAY
+#num G_DATE_THURSDAY
+#num G_DATE_FRIDAY
+#num G_DATE_SATURDAY
+#num G_DATE_SUNDAY
+
+
+#num G_DATE_BAD_DAY
+#num G_DATE_BAD_JULIAN
+#num G_DATE_BAD_YEAR
+
+#ccall g_date_new , IO (Ptr <GDate>)
+#ccall g_date_new_dmy , <GDateDay> -> <GDateMonth> -> <GDateYear> -> IO (Ptr <GDate>)
+#ccall g_date_new_julian , <guint32> -> IO (Ptr <GDate>)
+#ccall g_date_clear , Ptr <GDate> -> <guint> -> IO ()
+#ccall g_date_free , Ptr <GDate> -> IO ()
+
+#ccall g_date_set_day , Ptr <GDate> -> <GDateDay> -> IO ()
+#ccall g_date_set_month , Ptr <GDate> -> <GDateMonth> -> IO ()
+#ccall g_date_set_year , Ptr <GDate> -> <GDateYear> -> IO ()
+#ccall g_date_set_dmy , Ptr <GDate> -> <GDateDay> -> <GDateMonth> -> <GDateYear> -> IO ()
+#ccall g_date_set_julian , Ptr <GDate> -> <guint32> -> IO ()
+#ccall g_date_set_time_t , Ptr <GDate> -> CTime -> IO ()
+#ccall g_date_set_time_val , Ptr <GDate> -> Ptr <GTimeVal> -> IO ()
+#ccall g_date_set_parse , Ptr <GDate> -> Ptr <gchar> -> IO ()
+
+#ccall g_date_add_days , Ptr <GDate> -> <guint> -> IO ()
+#ccall g_date_subtract_days , Ptr <GDate> -> <guint> -> IO ()
+#ccall g_date_add_months , Ptr <GDate> -> <guint> -> IO ()
+#ccall g_date_subtract_months , Ptr <GDate> -> <guint> -> IO ()
+#ccall g_date_add_years , Ptr <GDate> -> <guint> -> IO ()
+#ccall g_date_subtract_years , Ptr <GDate> -> <guint> -> IO ()
+#ccall g_date_days_between , Ptr <GDate> -> Ptr <GDate> -> IO <gint>
+#ccall g_date_compare , Ptr <GDate> -> Ptr <GDate> -> IO <gint>
+#ccall g_date_clamp , Ptr <GDate> -> Ptr <GDate> -> Ptr <GDate> -> IO ()
+#ccall g_date_order , Ptr <GDate> -> Ptr <GDate> -> IO ()
+
+#ccall g_date_get_day , Ptr <GDate> -> IO <GDateDay>
+#ccall g_date_get_month , Ptr <GDate> -> IO <GDateMonth>
+#ccall g_date_get_year , Ptr <GDate> -> IO <GDateYear>
+#ccall g_date_get_julian , Ptr <GDate> -> IO <guint32>
+#ccall g_date_get_weekday , Ptr <GDate> -> IO <GDateWeekday>
+#ccall g_date_get_day_of_year , Ptr <GDate> -> IO <guint>
+
+#ccall g_date_get_days_in_month , <GDateMonth> -> <GDateYear> -> IO <guint8>
+#ccall g_date_is_first_of_month , Ptr <GDate> -> IO <gboolean>
+#ccall g_date_is_last_of_month , Ptr <GDate> -> IO <gboolean>
+#ccall g_date_is_leap_year , <GDateYear> -> IO <gboolean>
+#ccall g_date_get_monday_week_of_year , Ptr <GDate> -> IO <guint>
+#ccall g_date_get_monday_weeks_in_year , <GDateYear> -> IO <guint8>
+#ccall g_date_get_sunday_week_of_year , Ptr <GDate> -> IO <guint>
+#ccall g_date_get_sunday_weeks_in_year , <GDateYear> -> IO <guint8>
+#ccall g_date_get_iso8601_week_of_year , Ptr <GDate> -> IO <guint>
+
+#ccall g_date_strftime , Ptr <gchar> -> <gsize> -> Ptr <gchar> -> Ptr <GDate> -> IO <gsize>
+#opaque_t struct tm
+#ccall g_date_to_struct_tm , Ptr <GDate> -> Ptr <tm> -> IO ()
+
+#ccall g_date_valid , Ptr <GDate> -> IO <gboolean>
+#ccall g_date_valid_day , <GDateDay> -> IO <gboolean>
+#ccall g_date_valid_month , <GDateMonth> -> IO <gboolean>
+#ccall g_date_valid_year , <GDateYear> -> IO <gboolean>
+#ccall g_date_valid_dmy , <GDateDay> -> <GDateMonth> -> <GDateYear> -> IO <gboolean>
+#ccall g_date_valid_julian , <guint32> -> IO <gboolean>
+#ccall g_date_valid_weekday , <GDateWeekday> -> IO <gboolean>
+
diff --git a/src/Bindings/GLib/Utilities/HostnameUtilities.hsc b/src/Bindings/GLib/Utilities/HostnameUtilities.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/Utilities/HostnameUtilities.hsc
@@ -0,0 +1,15 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Hostname-Utilities.html>
+
+module Bindings.GLib.Utilities.HostnameUtilities where
+#strict_import
+import Bindings.GLib.Fundamentals
+
+#ccall g_hostname_to_ascii , Ptr <gchar> -> IO  (Ptr <gchar>)
+#ccall g_hostname_to_unicode , Ptr <gchar> -> IO  (Ptr <gchar>)
+#ccall g_hostname_is_non_ascii , Ptr <gchar> -> IO <gboolean>
+#ccall g_hostname_is_ascii_encoded , Ptr <gchar> -> IO <gboolean>
+#ccall g_hostname_is_ip_address , Ptr <gchar> -> IO <gboolean>
+
diff --git a/src/Bindings/GLib/Utilities/SimpleXmlSubsetParser.hsc b/src/Bindings/GLib/Utilities/SimpleXmlSubsetParser.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/Utilities/SimpleXmlSubsetParser.hsc
@@ -0,0 +1,13 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Simple-XML-Subset-Parser.html>
+
+module Bindings.GLib.Utilities.SimpleXmlSubsetParser where
+#strict_import
+import Bindings.GLib.Fundamentals
+import Bindings.GLib.CoreApplicationSupport.ErrorReporting
+import Bindings.GLib.DataTypes.Datasets
+
+#ccall g_markup_escape_text , Ptr <gchar> -> <gssize> -> IO (Ptr <gchar>)
+
diff --git a/src/Bindings/GLib/Utilities/UnicodeManipulation.hsc b/src/Bindings/GLib/Utilities/UnicodeManipulation.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/GLib/Utilities/UnicodeManipulation.hsc
@@ -0,0 +1,251 @@
+#include <bindings.dsl.h>
+#include <glib.h>
+
+-- | <http://library.gnome.org/devel/glib/stable/glib-Unicode-Manipulation.html>
+
+module Bindings.GLib.Utilities.UnicodeManipulation where
+import Bindings.GLib.Fundamentals.BasicTypes
+import Bindings.GLib.CoreApplicationSupport.ErrorReporting
+#strict_import
+
+#integral_t gunichar
+#integral_t gunichar2
+
+#ccall g_unichar_validate , <gunichar> -> IO <gboolean>
+#ccall g_unichar_isalnum , <gunichar> -> IO <gboolean>
+#ccall g_unichar_isalpha , <gunichar> -> IO <gboolean>
+#ccall g_unichar_iscntrl , <gunichar> -> IO <gboolean>
+#ccall g_unichar_isdefined , <gunichar> -> IO <gboolean>
+#ccall g_unichar_isdigit , <gunichar> -> IO <gboolean>
+#ccall g_unichar_isgraph , <gunichar> -> IO <gboolean>
+#ccall g_unichar_islower , <gunichar> -> IO <gboolean>
+#ccall g_unichar_ismark , <gunichar> -> IO <gboolean>
+#ccall g_unichar_isprint , <gunichar> -> IO <gboolean>
+#ccall g_unichar_ispunct , <gunichar> -> IO <gboolean>
+#ccall g_unichar_isspace , <gunichar> -> IO <gboolean>
+#ccall g_unichar_istitle , <gunichar> -> IO <gboolean>
+#ccall g_unichar_isupper , <gunichar> -> IO <gboolean>
+#ccall g_unichar_isxdigit , <gunichar> -> IO <gboolean>
+#ccall g_unichar_iswide , <gunichar> -> IO <gboolean>
+#ccall g_unichar_iswide_cjk , <gunichar> -> IO <gboolean>
+#ccall g_unichar_iszerowidth , <gunichar> -> IO <gboolean>
+#ccall g_unichar_toupper , <gunichar> -> IO <gunichar>
+#ccall g_unichar_tolower , <gunichar> -> IO <gunichar>
+#ccall g_unichar_totitle , <gunichar> -> IO <gunichar>
+#ccall g_unichar_digit_value , <gunichar> -> IO <gint>
+#ccall g_unichar_xdigit_value , <gunichar> -> IO <gint>
+
+#integral_t GUnicodeType
+
+#num G_UNICODE_FORMAT
+#num G_UNICODE_UNASSIGNED
+#num G_UNICODE_PRIVATE_USE
+#num G_UNICODE_SURROGATE
+#num G_UNICODE_LOWERCASE_LETTER
+#num G_UNICODE_MODIFIER_LETTER
+#num G_UNICODE_OTHER_LETTER
+#num G_UNICODE_TITLECASE_LETTER
+#num G_UNICODE_UPPERCASE_LETTER
+#num G_UNICODE_COMBINING_MARK
+#num G_UNICODE_ENCLOSING_MARK
+#num G_UNICODE_NON_SPACING_MARK
+#num G_UNICODE_DECIMAL_NUMBER
+#num G_UNICODE_LETTER_NUMBER
+#num G_UNICODE_OTHER_NUMBER
+#num G_UNICODE_CONNECT_PUNCTUATION
+#num G_UNICODE_DASH_PUNCTUATION
+#num G_UNICODE_CLOSE_PUNCTUATION
+#num G_UNICODE_FINAL_PUNCTUATION
+#num G_UNICODE_INITIAL_PUNCTUATION
+#num G_UNICODE_OTHER_PUNCTUATION
+#num G_UNICODE_OPEN_PUNCTUATION
+#num G_UNICODE_CURRENCY_SYMBOL
+#num G_UNICODE_MODIFIER_SYMBOL
+#num G_UNICODE_MATH_SYMBOL
+#num G_UNICODE_OTHER_SYMBOL
+#num G_UNICODE_LINE_SEPARATOR
+#num G_UNICODE_PARAGRAPH_SEPARATOR
+#num G_UNICODE_SPACE_SEPARATOR
+
+#ccall g_unichar_type , <gunichar> -> IO <GUnicodeType>
+
+#integral_t GUnicodeBreakType
+
+#num G_UNICODE_BREAK_MANDATORY
+#num G_UNICODE_BREAK_CARRIAGE_RETURN
+#num G_UNICODE_BREAK_LINE_FEED
+#num G_UNICODE_BREAK_COMBINING_MARK
+#num G_UNICODE_BREAK_SURROGATE
+#num G_UNICODE_BREAK_ZERO_WIDTH_SPACE
+#num G_UNICODE_BREAK_INSEPARABLE
+#num G_UNICODE_BREAK_NON_BREAKING_GLUE
+#num G_UNICODE_BREAK_CONTINGENT
+#num G_UNICODE_BREAK_SPACE
+#num G_UNICODE_BREAK_AFTER
+#num G_UNICODE_BREAK_BEFORE
+#num G_UNICODE_BREAK_BEFORE_AND_AFTER
+#num G_UNICODE_BREAK_HYPHEN
+#num G_UNICODE_BREAK_NON_STARTER
+#num G_UNICODE_BREAK_OPEN_PUNCTUATION
+#num G_UNICODE_BREAK_CLOSE_PUNCTUATION
+#num G_UNICODE_BREAK_QUOTATION
+#num G_UNICODE_BREAK_EXCLAMATION
+#num G_UNICODE_BREAK_IDEOGRAPHIC
+#num G_UNICODE_BREAK_NUMERIC
+#num G_UNICODE_BREAK_INFIX_SEPARATOR
+#num G_UNICODE_BREAK_SYMBOL
+#num G_UNICODE_BREAK_ALPHABETIC
+#num G_UNICODE_BREAK_PREFIX
+#num G_UNICODE_BREAK_POSTFIX
+#num G_UNICODE_BREAK_COMPLEX_CONTEXT
+#num G_UNICODE_BREAK_AMBIGUOUS
+#num G_UNICODE_BREAK_UNKNOWN
+#num G_UNICODE_BREAK_NEXT_LINE
+#num G_UNICODE_BREAK_WORD_JOINER
+#num G_UNICODE_BREAK_HANGUL_L_JAMO
+#num G_UNICODE_BREAK_HANGUL_V_JAMO
+#num G_UNICODE_BREAK_HANGUL_T_JAMO
+#num G_UNICODE_BREAK_HANGUL_LV_SYLLABLE
+#num G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE
+
+#ccall g_unichar_break_type , <gunichar> -> IO <GUnicodeBreakType>
+#ccall g_unichar_combining_class , <gunichar> -> IO <gint>
+#ccall g_unicode_canonical_ordering , Ptr <gunichar> -> <gsize> -> IO ()
+#ccall g_unicode_canonical_decomposition , <gunichar> -> Ptr <gsize> -> IO (Ptr <gunichar>)
+#ccall g_unichar_get_mirror_char , <gunichar> -> Ptr <gunichar> -> IO <gboolean
+
+#integral_t GUnicodeScript
+
+#num G_UNICODE_SCRIPT_INVALID_CODE
+#num G_UNICODE_SCRIPT_COMMON
+#num G_UNICODE_SCRIPT_INHERITED
+#num G_UNICODE_SCRIPT_ARABIC
+#num G_UNICODE_SCRIPT_ARMENIAN
+#num G_UNICODE_SCRIPT_BENGALI
+#num G_UNICODE_SCRIPT_BOPOMOFO
+#num G_UNICODE_SCRIPT_CHEROKEE
+#num G_UNICODE_SCRIPT_COPTIC
+#num G_UNICODE_SCRIPT_CYRILLIC
+#num G_UNICODE_SCRIPT_DESERET
+#num G_UNICODE_SCRIPT_DEVANAGARI
+#num G_UNICODE_SCRIPT_ETHIOPIC
+#num G_UNICODE_SCRIPT_GEORGIAN
+#num G_UNICODE_SCRIPT_GOTHIC
+#num G_UNICODE_SCRIPT_GREEK
+#num G_UNICODE_SCRIPT_GUJARATI
+#num G_UNICODE_SCRIPT_GURMUKHI
+#num G_UNICODE_SCRIPT_HAN
+#num G_UNICODE_SCRIPT_HANGUL
+#num G_UNICODE_SCRIPT_HEBREW
+#num G_UNICODE_SCRIPT_HIRAGANA
+#num G_UNICODE_SCRIPT_KANNADA
+#num G_UNICODE_SCRIPT_KATAKANA
+#num G_UNICODE_SCRIPT_KHMER
+#num G_UNICODE_SCRIPT_LAO
+#num G_UNICODE_SCRIPT_LATIN
+#num G_UNICODE_SCRIPT_MALAYALAM
+#num G_UNICODE_SCRIPT_MONGOLIAN
+#num G_UNICODE_SCRIPT_MYANMAR
+#num G_UNICODE_SCRIPT_OGHAM
+#num G_UNICODE_SCRIPT_OLD_ITALIC
+#num G_UNICODE_SCRIPT_ORIYA
+#num G_UNICODE_SCRIPT_RUNIC
+#num G_UNICODE_SCRIPT_SINHALA
+#num G_UNICODE_SCRIPT_SYRIAC
+#num G_UNICODE_SCRIPT_TAMIL
+#num G_UNICODE_SCRIPT_TELUGU
+#num G_UNICODE_SCRIPT_THAANA
+#num G_UNICODE_SCRIPT_THAI
+#num G_UNICODE_SCRIPT_TIBETAN
+#num G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL
+#num G_UNICODE_SCRIPT_YI
+#num G_UNICODE_SCRIPT_TAGALOG
+#num G_UNICODE_SCRIPT_HANUNOO
+#num G_UNICODE_SCRIPT_BUHID
+#num G_UNICODE_SCRIPT_TAGBANWA
+#num G_UNICODE_SCRIPT_BRAILLE
+#num G_UNICODE_SCRIPT_CYPRIOT
+#num G_UNICODE_SCRIPT_LIMBU
+#num G_UNICODE_SCRIPT_OSMANYA
+#num G_UNICODE_SCRIPT_SHAVIAN
+#num G_UNICODE_SCRIPT_LINEAR_B
+#num G_UNICODE_SCRIPT_TAI_LE
+#num G_UNICODE_SCRIPT_UGARITIC
+#num G_UNICODE_SCRIPT_NEW_TAI_LUE
+#num G_UNICODE_SCRIPT_BUGINESE
+#num G_UNICODE_SCRIPT_GLAGOLITIC
+#num G_UNICODE_SCRIPT_TIFINAGH
+#num G_UNICODE_SCRIPT_SYLOTI_NAGRI
+#num G_UNICODE_SCRIPT_OLD_PERSIAN
+#num G_UNICODE_SCRIPT_KHAROSHTHI
+#num G_UNICODE_SCRIPT_UNKNOWN
+#num G_UNICODE_SCRIPT_BALINESE
+#num G_UNICODE_SCRIPT_CUNEIFORM
+#num G_UNICODE_SCRIPT_PHOENICIAN
+#num G_UNICODE_SCRIPT_PHAGS_PA
+#num G_UNICODE_SCRIPT_NKO
+#num G_UNICODE_SCRIPT_KAYAH_LI
+#num G_UNICODE_SCRIPT_LEPCHA
+#num G_UNICODE_SCRIPT_REJANG
+#num G_UNICODE_SCRIPT_SUNDANESE
+#num G_UNICODE_SCRIPT_SAURASHTRA
+#num G_UNICODE_SCRIPT_CHAM
+#num G_UNICODE_SCRIPT_OL_CHIKI
+#num G_UNICODE_SCRIPT_VAI
+#num G_UNICODE_SCRIPT_CARIAN
+#num G_UNICODE_SCRIPT_LYCIAN
+#num G_UNICODE_SCRIPT_LYDIAN
+
+#ccall g_unichar_get_script , <gunichar> -> IO <GUnicodeScript>
+#cinline g_utf8_next_char , Ptr <gchar> -> IO (Ptr <gchar>)
+
+#ccall g_utf8_get_char , Ptr <gchar> -> IO <gunichar>
+#ccall g_utf8_get_char_validated , Ptr <gchar> -> <gssize> -> IO <gunichar>
+#ccall g_utf8_offset_to_pointer , Ptr <gchar> -> <glong> -> IO (Ptr <gchar>)
+#ccall g_utf8_pointer_to_offset , Ptr <gchar> -> Ptr <gchar> -> IO <glong>
+#ccall g_utf8_prev_char , Ptr <gchar> -> IO (Ptr <gchar>)
+#ccall g_utf8_find_next_char , Ptr <gchar> -> Ptr <gchar> -> IO (Ptr <gchar>)
+#ccall g_utf8_find_prev_char , Ptr <gchar> -> Ptr <gchar> -> IO (Ptr <gchar>)
+#ccall g_utf8_strlen , Ptr <gchar> -> <gssize> -> IO <glong>
+#ccall g_utf8_strncpy , Ptr <gchar> -> Ptr <gchar> -> <gsize> -> IO (Ptr <gchar>)
+#ccall g_utf8_strchr , Ptr <gchar> -> <gssize> -> <gunichar> -> IO (Ptr <gchar>)
+#ccall g_utf8_strrchr , Ptr <gchar> -> <gssize> -> <gunichar> -> IO (Ptr <gchar>)
+#ccall g_utf8_strreverse , Ptr <gchar> -> <gssize> -> IO (Ptr <gchar>)
+#ccall g_utf8_validate , Ptr <gchar> -> <gssize> -> Ptr (Ptr <gchar>) -> IO <gboolean>
+#ccall g_utf8_strup , Ptr <gchar> -> <gssize> -> IO (Ptr <gchar>)
+#ccall g_utf8_strdown , Ptr <gchar> -> <gssize> -> IO (Ptr <gchar>)
+#ccall g_utf8_casefold , Ptr <gchar> -> <gssize> -> IO (Ptr <gchar>)
+#ccall g_utf8_normalize , Ptr <gchar> -> <gssize> -> <GNormalizeMode> -> IO (Ptr <gchar>)
+
+#integral_t GNormalizeMode
+
+#num G_NORMALIZE_DEFAULT
+#num G_NORMALIZE_NFD
+#num G_NORMALIZE_DEFAULT_COMPOSE
+#num G_NORMALIZE_NFC
+#num G_NORMALIZE_ALL
+#num G_NORMALIZE_NFKD
+#num G_NORMALIZE_ALL_COMPOSE
+#num G_NORMALIZE_NFKC
+
+#ccall g_utf8_collate , Ptr <gchar> -> Ptr <gchar> -> IO <gint> 
+#ccall g_utf8_collate_key , Ptr <gchar> -> <gssize> -> IO (Ptr <gchar>)
+#ccall g_utf8_collate_key_for_filename , Ptr <gchar> -> \
+    <gssize> -> IO (Ptr <gchar>)
+#ccall g_utf8_to_utf16 , Ptr <gchar> -> <glong> -> Ptr <glong> -> \
+    Ptr <glong> -> Ptr (Ptr <GError>) -> IO (Ptr <gunichar2>)
+#ccall g_utf8_to_ucs4 , Ptr <gchar> -> <glong> -> Ptr <glong> -> \
+    Ptr <glong> -> Ptr (Ptr <GError>) -> IO (Ptr <gunichar>)
+#ccall g_utf8_to_ucs4_fast , Ptr <gchar> -> <glong> -> \
+    Ptr <glong> -> IO (Ptr <gunichar>)
+#ccall g_utf16_to_ucs4 , Ptr <gunichar2> -> <glong> -> Ptr <glong> -> \
+    Ptr <glong> -> Ptr (Ptr <GError>) -> IO (Ptr <gunichar>)
+#ccall g_utf16_to_utf8 , Ptr <gunichar2> -> <glong> -> Ptr <glong> -> \
+    Ptr <glong> -> Ptr (Ptr <GError>) -> IO (Ptr <gchar>)
+#ccall g_ucs4_to_utf16 , Ptr <gunichar> -> <glong> -> Ptr <glong> -> \
+    Ptr <glong> -> Ptr (Ptr <GError>) -> IO (Ptr <gunichar2>)
+#ccall g_ucs4_to_utf8 , Ptr <gunichar> -> <glong> -> Ptr <glong> -> \
+    Ptr <glong> -> Ptr (Ptr <GError>) -> IO (Ptr <gchar>)
+#ccall g_unichar_to_utf8 , <gunichar> -> Ptr <gchar> -> IO <gint>
+
+
diff --git a/src/datatypes.narytrees.c b/src/datatypes.narytrees.c
new file mode 100644
--- /dev/null
+++ b/src/datatypes.narytrees.c
@@ -0,0 +1,13 @@
+#include <bindings.cmacros.h>
+#include <glib.h>
+
+BC_INLINE2 ( g_node_append , GNode* , GNode* ,  GNode*)
+BC_INLINE3 ( g_node_insert_data , GNode* , gint , gpointer ,  GNode*)
+BC_INLINE3 ( g_node_insert_data_before , GNode* , GNode* , gpointer ,  GNode*)
+BC_INLINE2 ( g_node_append_data , GNode* , gpointer ,  GNode*)
+BC_INLINE2 ( g_node_prepend_data , GNode* , gpointer ,  GNode*)
+BC_INLINE1 ( g_node_first_child , GNode* ,  GNode*)
+BC_INLINE1 ( g_node_next_sibling , GNode* ,  GNode*)
+BC_INLINE1 ( g_node_prev_sibling , GNode* ,  GNode*)
+BC_INLINE1 (G_NODE_IS_LEAF , GNode* ,  gboolean)
+BC_INLINE1 (G_NODE_IS_ROOT ,  GNode* ,  gboolean)
diff --git a/src/datatypes.pointerarrays.c b/src/datatypes.pointerarrays.c
new file mode 100644
--- /dev/null
+++ b/src/datatypes.pointerarrays.c
@@ -0,0 +1,5 @@
+#include <bindings.cmacros.h>
+#include <glib.h>
+
+BC_INLINE2(g_ptr_array_index,GPtrArray*,guint,gpointer)
+
diff --git a/src/datatypes.singlylinkedlists.c b/src/datatypes.singlylinkedlists.c
new file mode 100644
--- /dev/null
+++ b/src/datatypes.singlylinkedlists.c
@@ -0,0 +1,6 @@
+#include<bindings.cmacros.h>
+#include<glib.h>
+
+BC_INLINE1VOID(g_slist_free1,GSList*)
+BC_INLINE1(g_slist_next,GSList*,GSList*)
+
diff --git a/src/inlines.c b/src/inlines.c
new file mode 100644
--- /dev/null
+++ b/src/inlines.c
@@ -0,0 +1,109 @@
+#include<bindings.cmacros.h>
+#include<glib.h>
+
+BC_INLINE1(GINT_TO_POINTER,gint,gpointer)
+BC_INLINE1(GPOINTER_TO_INT,gpointer,gint)
+BC_INLINE1(GUINT_TO_POINTER,guint,gpointer)
+BC_INLINE1(GPOINTER_TO_UINT,gpointer,guint)
+BC_INLINE1(GSIZE_TO_POINTER,gsize,gpointer)
+BC_INLINE1(GPOINTER_TO_SIZE,gpointer,gsize)
+BC_INLINE1(G_IS_DIR_SEPARATOR,char,int)
+BC_INLINE1(g_htonl,gint32,gint32)
+BC_INLINE1(g_htons,gint16,gint16)
+BC_INLINE1(g_ntohl,gint32,gint32)
+BC_INLINE1(g_ntohs,gint16,gint16)
+BC_INLINE1(GINT_FROM_BE,gint,gint)
+BC_INLINE1(GINT_FROM_LE,gint,gint)
+BC_INLINE1(GINT_TO_BE,gint,gint)
+BC_INLINE1(GINT_TO_LE,gint,gint)
+BC_INLINE1(GUINT_FROM_BE,guint,guint)
+BC_INLINE1(GUINT_FROM_LE,guint,guint)
+BC_INLINE1(GUINT_TO_BE,guint,guint)
+BC_INLINE1(GUINT_TO_LE,guint,guint)
+BC_INLINE1(GLONG_FROM_BE,glong,glong)
+BC_INLINE1(GLONG_FROM_LE,glong,glong)
+BC_INLINE1(GLONG_TO_BE,glong,glong)
+BC_INLINE1(GLONG_TO_LE,glong,glong)
+BC_INLINE1(GULONG_FROM_BE,gulong,gulong)
+BC_INLINE1(GULONG_FROM_LE,gulong,gulong)
+BC_INLINE1(GULONG_TO_BE,gulong,gulong)
+BC_INLINE1(GULONG_TO_LE,gulong,gulong)
+BC_INLINE1(GINT16_FROM_BE,gint16,gint16)
+BC_INLINE1(GINT16_FROM_LE,gint16,gint16)
+BC_INLINE1(GINT16_TO_BE,gint16,gint16)
+BC_INLINE1(GINT16_TO_LE,gint16,gint16)
+BC_INLINE1(GUINT16_FROM_BE,guint16,guint16)
+BC_INLINE1(GUINT16_FROM_LE,guint16,guint16)
+BC_INLINE1(GUINT16_TO_BE,guint16,guint16)
+BC_INLINE1(GUINT16_TO_LE,guint16,guint16)
+BC_INLINE1(GINT32_FROM_BE,gint32,gint32)
+BC_INLINE1(GINT32_FROM_LE,gint32,gint32)
+BC_INLINE1(GINT32_TO_BE,gint32,gint32)
+BC_INLINE1(GINT32_TO_LE,gint32,gint32)
+BC_INLINE1(GUINT32_FROM_BE,guint32,guint32)
+BC_INLINE1(GUINT32_FROM_LE,guint32,guint32)
+BC_INLINE1(GUINT32_TO_BE,guint32,guint32)
+BC_INLINE1(GUINT32_TO_LE,guint32,guint32)
+BC_INLINE1(GINT64_FROM_BE,gint64,gint64)
+BC_INLINE1(GINT64_FROM_LE,gint64,gint64)
+BC_INLINE1(GINT64_TO_BE,gint64,gint64)
+BC_INLINE1(GINT64_TO_LE,gint64,gint64)
+BC_INLINE1(GUINT64_FROM_BE,guint64,guint64)
+BC_INLINE1(GUINT64_FROM_LE,guint64,guint64)
+BC_INLINE1(GUINT64_TO_BE,guint64,guint64)
+BC_INLINE1(GUINT64_TO_LE,guint64,guint64)
+BC_INLINE1(GUINT16_SWAP_BE_PDP,guint16,guint16)
+BC_INLINE1(GUINT16_SWAP_LE_BE,guint16,guint16)
+BC_INLINE1(GUINT16_SWAP_LE_PDP,guint16,guint16)
+BC_INLINE1(GUINT32_SWAP_BE_PDP,guint32,guint32)
+BC_INLINE1(GUINT32_SWAP_LE_BE,guint32,guint32)
+BC_INLINE1(GUINT32_SWAP_LE_PDP,guint32,guint32)
+BC_INLINE1(GUINT64_SWAP_LE_BE,guint64,guint64)
+
+BC_INLINE1(g_atomic_int_get,gint*,gint)
+BC_INLINE2VOID(g_atomic_int_set,gint*,gint)
+BC_INLINE2VOID(g_atomic_int_add,gint*,gint)
+BC_INLINE2(g_atomic_int_exchange_and_add,gint*,gint,gint)
+BC_INLINE3(g_atomic_int_compare_and_exchange,gint*,gint,gint,gboolean)
+BC_INLINE1(g_atomic_pointer_get,gpointer*,gpointer)
+BC_INLINE2VOID(g_atomic_pointer_set,gpointer*,gpointer)
+BC_INLINE3(g_atomic_pointer_compare_and_exchange,gpointer*,gpointer,gpointer,gboolean)
+BC_INLINE1VOID(g_atomic_int_inc,gint*)
+BC_INLINE1(g_atomic_int_dec_and_test,gint*,gboolean)
+
+BC_INLINE0(g_thread_supported,gboolean)
+BC_INLINE4(g_thread_create,GThreadFunc,gpointer,gboolean,GError**,GThread*)
+BC_INLINE0VOID(g_thread_yield)
+BC_INLINE0(g_mutex_new,GMutex*)
+BC_INLINE1VOID(g_mutex_lock,GMutex*)
+BC_INLINE1(g_mutex_trylock,GMutex*,gboolean)
+BC_INLINE1VOID(g_mutex_unlock,GMutex*)
+BC_INLINE1VOID(g_mutex_free,GMutex*)
+BC_INLINE1VOID(g_static_mutex_init,GStaticMutex*)
+BC_INLINE1VOID(g_static_mutex_lock,GStaticMutex*)
+BC_INLINE1(g_static_mutex_trylock,GStaticMutex*,gboolean)
+BC_INLINE1VOID(g_static_mutex_unlock,GStaticMutex*)
+BC_INLINE1(g_static_mutex_get_mutex,GStaticMutex*,GMutex*)
+BC_INLINE1VOID(g_static_mutex_free,GStaticMutex*)
+BC_INLINE0(g_cond_new,GCond*)
+BC_INLINE1VOID(g_cond_signal,GCond*)
+BC_INLINE1VOID(g_cond_broadcast,GCond*)
+BC_INLINE2VOID(g_cond_wait,GCond*,GMutex*)
+BC_INLINE3(g_cond_timed_wait,GCond*,GMutex*,GTimeVal*,gboolean)
+BC_INLINE1VOID(g_cond_free,GCond*)
+BC_INLINE1(g_private_new,GDestroyNotify,GPrivate*)
+BC_INLINE1(g_private_get,GPrivate*,gpointer)
+BC_INLINE2VOID(g_private_set,GPrivate*,gpointer)
+
+BC_INLINE3VOID(g_dataset_id_set_data,gconstpointer,GQuark,gpointer)
+BC_INLINE3VOID(g_dataset_set_data,gconstpointer,gchar*,gpointer)
+BC_INLINE4VOID(g_dataset_set_data_full,gconstpointer,gchar*,gpointer,GDestroyNotify)
+BC_INLINE2(g_dataset_get_data,gconstpointer,gchar*,gpointer)
+BC_INLINE2VOID(g_dataset_remove_data,gconstpointer,gchar*)
+BC_INLINE2(g_dataset_remove_no_notify,gconstpointer,gchar*,gpointer)
+BC_INLINE2VOID(g_dataset_id_remove_data,gconstpointer,GQuark)
+
+BC_INLINE1VOID(g_list_free1,GList*)
+BC_INLINE1(g_list_previous,GList*,GList*)
+BC_INLINE1(g_list_next,GList*,GList*)
+
diff --git a/src/utilities.unicodemanipulation.c b/src/utilities.unicodemanipulation.c
new file mode 100644
--- /dev/null
+++ b/src/utilities.unicodemanipulation.c
@@ -0,0 +1,4 @@
+#include <bindings.cmacros.h>
+#include <glib.h>
+
+BC_INLINE1(g_utf8_next_char,gchar*,gchar*)
