diff --git a/Bindings/Libgit2.hs b/Bindings/Libgit2.hs
deleted file mode 100644
--- a/Bindings/Libgit2.hs
+++ /dev/null
@@ -1,42 +0,0 @@
-
-module Bindings.Libgit2 (
-    module Bindings.Libgit2.Repository,
-    module Bindings.Libgit2.Config,
-    module Bindings.Libgit2.Types,
-    module Bindings.Libgit2.Revwalk,
-    module Bindings.Libgit2.OdbBackend,
-    module Bindings.Libgit2.Tag,
-    module Bindings.Libgit2.Net,
-    module Bindings.Libgit2.Refs,
-    module Bindings.Libgit2.Refspec,
-    module Bindings.Libgit2.Reflog,
-    module Bindings.Libgit2.Commit,
-    module Bindings.Libgit2.Index,
-    module Bindings.Libgit2.Signature,
-    module Bindings.Libgit2.Blob,
-    module Bindings.Libgit2.Errors,
-    module Bindings.Libgit2.Oid,
-    module Bindings.Libgit2.Tree,
-    module Bindings.Libgit2.Odb,
-    module Bindings.Libgit2.Common,
-    module Bindings.Libgit2.Object) where
-import Bindings.Libgit2.Repository
-import Bindings.Libgit2.Config
-import Bindings.Libgit2.Types
-import Bindings.Libgit2.Revwalk
-import Bindings.Libgit2.OdbBackend
-import Bindings.Libgit2.Tag
-import Bindings.Libgit2.Net
-import Bindings.Libgit2.Refs
-import Bindings.Libgit2.Refspec
-import Bindings.Libgit2.Reflog
-import Bindings.Libgit2.Commit
-import Bindings.Libgit2.Index
-import Bindings.Libgit2.Signature
-import Bindings.Libgit2.Blob
-import Bindings.Libgit2.Errors
-import Bindings.Libgit2.Oid
-import Bindings.Libgit2.Tree
-import Bindings.Libgit2.Odb
-import Bindings.Libgit2.Common
-import Bindings.Libgit2.Object
diff --git a/Bindings/Libgit2/Blob.hsc b/Bindings/Libgit2/Blob.hsc
deleted file mode 100644
--- a/Bindings/Libgit2/Blob.hsc
+++ /dev/null
@@ -1,17 +0,0 @@
-
-#include <bindings.dsl.h>
-#include <git2.h>
-module Bindings.Libgit2.Blob where
-#strict_import
-
-import Bindings.Libgit2.Common
-import Bindings.Libgit2.Types
-import Bindings.Libgit2.Oid
-import Bindings.Libgit2.Object
-#ccall git_blob_rawcontent , Ptr <git_blob> -> IO (Ptr CChar)
-#ccall git_blob_rawsize , Ptr <git_blob> -> IO (CInt)
-#ccall git_blob_create_fromfile , Ptr <git_oid> -> Ptr <git_repository> -> CString -> IO (CInt)
-#ccall git_blob_create_frombuffer , Ptr <git_oid> -> Ptr <git_repository> -> Ptr CChar -> CSize -> IO (CInt)
-#cinline git_blob_lookup , Ptr (Ptr <git_blob>) -> Ptr <git_repository> -> Ptr <git_oid> -> IO (CInt)
-#cinline git_blob_lookup_prefix , Ptr (Ptr <git_blob>) -> Ptr <git_repository> -> Ptr <git_oid> -> CUInt -> IO (CInt)
-#cinline git_blob_close , Ptr <git_blob> -> IO ()
diff --git a/Bindings/Libgit2/Blob.hsc.helper.c b/Bindings/Libgit2/Blob.hsc.helper.c
deleted file mode 100644
--- a/Bindings/Libgit2/Blob.hsc.helper.c
+++ /dev/null
@@ -1,7 +0,0 @@
-
-#include <bindings.cmacros.h>
-#include <git2.h>
-
-BC_INLINE3(git_blob_lookup, git_blob **, git_repository *, const git_oid *,int)
-BC_INLINE4(git_blob_lookup_prefix, git_blob **, git_repository *, const git_oid *, unsigned int ,int)
-BC_INLINE1VOID(git_blob_close, git_blob *)
diff --git a/Bindings/Libgit2/Commit.hsc b/Bindings/Libgit2/Commit.hsc
deleted file mode 100644
--- a/Bindings/Libgit2/Commit.hsc
+++ /dev/null
@@ -1,26 +0,0 @@
-
-#include <bindings.dsl.h>
-#include <git2.h>
-module Bindings.Libgit2.Commit where
-#strict_import
-
-import Bindings.Libgit2.Common
-import Bindings.Libgit2.Types
-import Bindings.Libgit2.Oid
-import Bindings.Libgit2.Object
-#ccall git_commit_id , Ptr <git_commit> -> IO (Ptr <git_oid>)
-#ccall git_commit_message_short , Ptr <git_commit> -> IO (CString)
-#ccall git_commit_message , Ptr <git_commit> -> IO (CString)
-#ccall git_commit_time , Ptr <git_commit> -> IO (CTime)
-#ccall git_commit_time_offset , Ptr <git_commit> -> IO (CInt)
-#ccall git_commit_committer , Ptr <git_commit> -> IO (Ptr <git_signature>)
-#ccall git_commit_author , Ptr <git_commit> -> IO (Ptr <git_signature>)
-#ccall git_commit_tree , Ptr (Ptr <git_tree>) -> Ptr <git_commit> -> IO (CInt)
-#ccall git_commit_tree_oid , Ptr <git_commit> -> IO (Ptr <git_oid>)
-#ccall git_commit_parentcount , Ptr <git_commit> -> IO (CUInt)
-#ccall git_commit_parent , Ptr (Ptr <git_commit>) -> Ptr <git_commit> -> CUInt -> IO (CInt)
-#ccall git_commit_parent_oid , Ptr <git_commit> -> CUInt -> IO (Ptr <git_oid>)
-#ccall git_commit_create , Ptr <git_oid> -> Ptr <git_repository> -> CString -> Ptr <git_signature> -> Ptr <git_signature> -> CString -> Ptr <git_tree> -> CInt -> Ptr (Ptr <git_commit>) -> IO (CInt)
-#cinline git_commit_lookup , Ptr (Ptr <git_commit>) -> Ptr <git_repository> -> Ptr <git_oid> -> IO (CInt)
-#cinline git_commit_lookup_prefix , Ptr (Ptr <git_commit>) -> Ptr <git_repository> -> Ptr <git_oid> -> CUInt -> IO (CInt)
-#cinline git_commit_close , Ptr <git_commit> -> IO ()
diff --git a/Bindings/Libgit2/Commit.hsc.helper.c b/Bindings/Libgit2/Commit.hsc.helper.c
deleted file mode 100644
--- a/Bindings/Libgit2/Commit.hsc.helper.c
+++ /dev/null
@@ -1,7 +0,0 @@
-
-#include <bindings.cmacros.h>
-#include <git2.h>
-
-BC_INLINE3(git_commit_lookup, git_commit **, git_repository *, const git_oid *,int)
-BC_INLINE4(git_commit_lookup_prefix, git_commit **, git_repository *, const git_oid *, unsigned ,int)
-BC_INLINE1VOID(git_commit_close, git_commit *)
diff --git a/Bindings/Libgit2/Common.hsc b/Bindings/Libgit2/Common.hsc
deleted file mode 100644
--- a/Bindings/Libgit2/Common.hsc
+++ /dev/null
@@ -1,18 +0,0 @@
-
-#include <bindings.dsl.h>
-#include <git2.h>
-module Bindings.Libgit2.Common where
-#strict_import
-
-#num    GIT_PATH_LIST_SEPARATOR
-#num    GIT_PATH_MAX
-{- typedef struct {
-	char **strings;
-	size_t count;
-} git_strarray; -}
-#starttype git_strarray
-#field    strings , Ptr CString
-#field    count , CSize
-#stoptype
-#ccall git_strarray_free , Ptr <git_strarray> -> IO ()
-#ccall git_libgit2_version , Ptr CInt -> Ptr CInt -> Ptr CInt -> IO ()
diff --git a/Bindings/Libgit2/Config.hsc b/Bindings/Libgit2/Config.hsc
deleted file mode 100644
--- a/Bindings/Libgit2/Config.hsc
+++ /dev/null
@@ -1,36 +0,0 @@
-
-#include <bindings.dsl.h>
-#include <git2.h>
-module Bindings.Libgit2.Config where
-#strict_import
-
-import Bindings.Libgit2.Common
-import Bindings.Libgit2.Types
-
-#starttype struct git_config_file
-#field cfg, Ptr <git_config>
-#field open, FunPtr (Ptr <git_config_file> -> IO CInt)
-#field get, FunPtr (Ptr <git_config_file> -> CString -> Ptr CString -> IO CInt)
-#field set, FunPtr (Ptr <git_config_file> -> CString -> CString -> IO CInt)
-#field foreach, FunPtr (Ptr <git_config_file> -> FunPtr (CString -> CString -> Ptr () -> CInt) -> Ptr () -> IO CInt)
-#field free, FunPtr (Ptr <git_config_file> -> IO ())
-#stoptype
-
-#ccall git_config_find_global , CString -> IO (CInt)
-#ccall git_config_open_global , Ptr (Ptr <git_config>) -> IO (CInt)
-#ccall git_config_file__ondisk , Ptr (Ptr <git_config_file>) -> CString -> IO (CInt)
-#ccall git_config_new , Ptr (Ptr <git_config>) -> IO (CInt)
-#ccall git_config_add_file , Ptr <git_config> -> Ptr <git_config_file> -> CInt -> IO (CInt)
-#ccall git_config_add_file_ondisk , Ptr <git_config> -> CString -> CInt -> IO (CInt)
-#ccall git_config_open_ondisk , Ptr (Ptr <git_config>) -> CString -> IO (CInt)
-#ccall git_config_free , Ptr <git_config> -> IO ()
-#ccall git_config_get_int , Ptr <git_config> -> CString -> Ptr CInt -> IO (CInt)
-#ccall git_config_get_long , Ptr <git_config> -> CString -> CLong -> IO (CInt)
-#ccall git_config_get_bool , Ptr <git_config> -> CString -> Ptr CInt -> IO (CInt)
-#ccall git_config_get_string , Ptr <git_config> -> CString -> Ptr CString -> IO (CInt)
-#ccall git_config_set_int , Ptr <git_config> -> CString -> CInt -> IO (CInt)
-#ccall git_config_set_long , Ptr <git_config> -> CString -> CLong -> IO (CInt)
-#ccall git_config_set_bool , Ptr <git_config> -> CString -> CInt -> IO (CInt)
-#ccall git_config_set_string , Ptr <git_config> -> CString -> CString -> IO (CInt)
-#ccall git_config_delete , Ptr <git_config> -> CString -> IO (CInt)
-#ccall git_config_foreach , Ptr <git_config> -> CInt -> IO (CInt)
diff --git a/Bindings/Libgit2/Errors.hsc b/Bindings/Libgit2/Errors.hsc
deleted file mode 100644
--- a/Bindings/Libgit2/Errors.hsc
+++ /dev/null
@@ -1,67 +0,0 @@
-
-#include <bindings.dsl.h>
-#include <git2.h>
-module Bindings.Libgit2.Errors where
-#strict_import
-
-import Bindings.Libgit2.Common
-{- typedef enum {
-	GIT_OK = 0,
-	GIT_ERROR = -1,
-	GIT_ENOTFOUND = -3,
-	GIT_EEXISTS = -4,
-	GIT_EAMBIGUOUS = -5,
-	GIT_EBUFS = -6,
-
-	GIT_PASSTHROUGH = -30,
-	GIT_REVWALKOVER = -31,
-}; -}
-#num GIT_OK
-#num GIT_ERROR
-#num GIT_ENOTFOUND
-#num GIT_EEXISTS
-#num GIT_EAMBIGUOUS
-#num GIT_EBUFS
-
-#num GIT_PASSTHROUGH
-#num GIT_REVWALKOVER
-{- typedef struct git_error {
-	char *message;
-	int klass;
-} git_error; -}
-{- typedef enum {
-	GITERR_NOMEMORY,
-	GITERR_OS,
-	GITERR_INVALID,
-	GITERR_REFERENCE,
-	GITERR_ZLIB,
-	GITERR_REPOSITORY,
-	GITERR_CONFIG,
-	GITERR_REGEX,
-	GITERR_ODB,
-	GITERR_INDEX,
-	GITERR_OBJECT,
-	GITERR_NET,
-	GITERR_TAG,
-	GITERR_TREE,
-	GITERR_INDEXER,
-} git_error_t; -}
-#integral_t git_error_t
-#num GITERR_NOMEMORY
-#num GITERR_OS
-#num GITERR_INVALID
-#num GITERR_REFERENCE
-#num GITERR_ZLIB
-#num GITERR_REPOSITORY
-#num GITERR_CONFIG
-#num GITERR_REGEX
-#num GITERR_ODB
-#num GITERR_INDEX
-#num GITERR_OBJECT
-#num GITERR_NET
-#num GITERR_TAG
-#num GITERR_TREE
-#num GITERR_INDEXER
-#ccall git_lasterror , IO (CString)
-#ccall git_strerror , CInt -> IO (CString)
-#ccall git_clearerror , IO ()
diff --git a/Bindings/Libgit2/Index.hsc b/Bindings/Libgit2/Index.hsc
deleted file mode 100644
--- a/Bindings/Libgit2/Index.hsc
+++ /dev/null
@@ -1,97 +0,0 @@
-
-#include <bindings.dsl.h>
-#include <git2.h>
-module Bindings.Libgit2.Index where
-#strict_import
-
-import Bindings.Libgit2.Common
-import Bindings.Libgit2.Types
-import Bindings.Libgit2.Oid
-#num    GIT_IDXENTRY_NAMEMASK
-#num    GIT_IDXENTRY_STAGEMASK
-#num    GIT_IDXENTRY_EXTENDED
-#num    GIT_IDXENTRY_VALID
-#num    GIT_IDXENTRY_STAGESHIFT
-#num    GIT_IDXENTRY_UPDATE
-#num    GIT_IDXENTRY_REMOVE
-#num    GIT_IDXENTRY_UPTODATE
-#num    GIT_IDXENTRY_ADDED
-#num    GIT_IDXENTRY_HASHED
-#num    GIT_IDXENTRY_UNHASHED
-#num    GIT_IDXENTRY_WT_REMOVE
-#num    GIT_IDXENTRY_CONFLICTED
-#num    GIT_IDXENTRY_UNPACKED
-#num    GIT_IDXENTRY_NEW_SKIP_WORKTREE
-#num    GIT_IDXENTRY_INTENT_TO_ADD
-#num    GIT_IDXENTRY_SKIP_WORKTREE
-#num    GIT_IDXENTRY_EXTENDED2
-#num    GIT_IDXENTRY_EXTENDED_FLAGS
-{- typedef struct {
-	git_time_t seconds;
-	
-	unsigned int nanoseconds;
-} git_index_time; -}
-#starttype git_index_time
-#field    seconds , CTime
-#field    nanoseconds , CUInt
-#stoptype
-{- typedef struct git_index_entry {
-	git_index_time ctime;
-	git_index_time mtime;
-
-	unsigned int dev;
-	unsigned int ino;
-	unsigned int mode;
-	unsigned int uid;
-	unsigned int gid;
-	git_off_t file_size;
-
-	git_oid oid;
-
-	unsigned short flags;
-	unsigned short flags_extended;
-
-	const char *path;
-} git_index_entry; -}
-#starttype git_index_entry
-#field    ctime , <git_index_time>
-#field    mtime , <git_index_time>
-#field    dev , CUInt
-#field    ino , CUInt
-#field    mode , CUInt
-#field    uid , CUInt
-#field    gid , CUInt
-#field    file_size , <git_off_t>
-#field    oid , <git_oid>
-#field    flags , CUShort
-#field    flags_extended , CUShort
-#field    path , CString
-#stoptype
-{- typedef struct git_index_entry_unmerged {
-	unsigned int mode[3];
-	git_oid oid[3];
-	const char *path;
-} git_index_entry_unmerged; -}
-#starttype git_index_entry_unmerged
-#array_field    mode , CUInt
-#array_field    oid , <git_oid>
-#field    path , CString
-#stoptype
-#ccall git_index_open , Ptr (Ptr <git_index>) -> CString -> IO (CInt)
-#ccall git_index_clear , Ptr <git_index> -> IO ()
-#ccall git_index_free , Ptr <git_index> -> IO ()
-#ccall git_index_read , Ptr <git_index> -> IO (CInt)
-#ccall git_index_write , Ptr <git_index> -> IO (CInt)
-#ccall git_index_find , Ptr <git_index> -> CString -> IO (CInt)
-#ccall git_index_uniq , Ptr <git_index> -> IO ()
-#ccall git_index_add , Ptr <git_index> -> CString -> CInt -> IO (CInt)
-#ccall git_index_add2 , Ptr <git_index> -> Ptr <git_index_entry> -> IO (CInt)
-#ccall git_index_append , Ptr <git_index> -> CString -> CInt -> IO (CInt)
-#ccall git_index_append2 , Ptr <git_index> -> Ptr <git_index_entry> -> IO (CInt)
-#ccall git_index_remove , Ptr <git_index> -> CInt -> IO (CInt)
-#ccall git_index_get , Ptr <git_index> -> CUInt -> IO (Ptr <git_index_entry>)
-#ccall git_index_entrycount , Ptr <git_index> -> IO (CUInt)
-#ccall git_index_entrycount_unmerged , Ptr <git_index> -> IO (CUInt)
-#ccall git_index_get_unmerged_bypath , Ptr <git_index> -> CString -> IO (Ptr <git_index_entry_unmerged>)
-#ccall git_index_get_unmerged_byindex , Ptr <git_index> -> CUInt -> IO (Ptr <git_index_entry_unmerged>)
-#ccall git_index_entry_stage , Ptr <git_index_entry> -> IO (CInt)
diff --git a/Bindings/Libgit2/Net.hsc b/Bindings/Libgit2/Net.hsc
deleted file mode 100644
--- a/Bindings/Libgit2/Net.hsc
+++ /dev/null
@@ -1,12 +0,0 @@
-
-#include <bindings.dsl.h>
-#include <git2.h>
-module Bindings.Libgit2.Net where
-#strict_import
-
-import Bindings.Libgit2.Common
-import Bindings.Libgit2.Oid
-import Bindings.Libgit2.Types
-#num    GIT_DEFAULT_PORT
-#num    GIT_DIR_FETCH
-#num    GIT_DIR_PUSH
diff --git a/Bindings/Libgit2/Object.hsc b/Bindings/Libgit2/Object.hsc
deleted file mode 100644
--- a/Bindings/Libgit2/Object.hsc
+++ /dev/null
@@ -1,19 +0,0 @@
-
-#include <bindings.dsl.h>
-#include <git2.h>
-module Bindings.Libgit2.Object where
-#strict_import
-
-import Bindings.Libgit2.Common
-import Bindings.Libgit2.Types
-import Bindings.Libgit2.Oid
-#ccall git_object_lookup , Ptr (Ptr <git_object>) -> Ptr <git_repository> -> Ptr <git_oid> -> <git_otype> -> IO (CInt)
-#ccall git_object_lookup_prefix , Ptr (Ptr <git_object>) -> Ptr <git_repository> -> Ptr <git_oid> -> CUInt -> <git_otype> -> IO (CInt)
-#ccall git_object_id , Ptr <git_object> -> IO (Ptr <git_oid>)
-#ccall git_object_type , Ptr <git_object> -> IO (<git_otype>)
-#ccall git_object_owner , Ptr <git_object> -> IO (Ptr <git_repository>)
-#ccall git_object_close , Ptr <git_object> -> IO ()
-#ccall git_object_type2string , <git_otype> -> IO (CString)
-#ccall git_object_string2type , CString -> IO (<git_otype>)
-#ccall git_object_typeisloose , <git_otype> -> IO (CInt)
-#ccall git_object__size , <git_otype> -> IO (CSize)
diff --git a/Bindings/Libgit2/Odb.hsc b/Bindings/Libgit2/Odb.hsc
deleted file mode 100644
--- a/Bindings/Libgit2/Odb.hsc
+++ /dev/null
@@ -1,29 +0,0 @@
-
-#include <bindings.dsl.h>
-#include <git2.h>
-module Bindings.Libgit2.Odb where
-#strict_import
-
-import Bindings.Libgit2.Common
-import Bindings.Libgit2.Types
-import Bindings.Libgit2.Oid
-import Bindings.Libgit2.OdbBackend
-#ccall git_odb_new , Ptr (Ptr <git_odb>) -> IO (CInt)
-#ccall git_odb_open , Ptr (Ptr <git_odb>) -> CString -> IO (CInt)
-#ccall git_odb_add_backend , Ptr <git_odb> -> Ptr <git_odb_backend> -> CInt -> IO (CInt)
-#ccall git_odb_add_alternate , Ptr <git_odb> -> Ptr <git_odb_backend> -> CInt -> IO (CInt)
-#ccall git_odb_close , Ptr <git_odb> -> IO ()
-#ccall git_odb_read , Ptr (Ptr <git_odb_object>) -> Ptr <git_odb> -> Ptr <git_oid> -> IO (CInt)
-#ccall git_odb_read_prefix , Ptr (Ptr <git_odb_object>) -> Ptr <git_odb> -> Ptr <git_oid> -> CUInt -> IO (CInt)
-#ccall git_odb_read_header , Ptr CSize -> Ptr <git_otype> -> Ptr <git_odb> -> Ptr <git_oid> -> IO (CInt)
-#ccall git_odb_exists , Ptr <git_odb> -> Ptr <git_oid> -> IO (CInt)
-#ccall git_odb_write , Ptr <git_oid> -> Ptr <git_odb> -> Ptr CChar -> CSize -> <git_otype> -> IO (CInt)
-#ccall git_odb_open_wstream , Ptr (Ptr <git_odb_stream>) -> Ptr <git_odb> -> CSize -> <git_otype> -> IO (CInt)
-#ccall git_odb_open_rstream , Ptr (Ptr <git_odb_stream>) -> Ptr <git_odb> -> Ptr <git_oid> -> IO (CInt)
-#ccall git_odb_hash , Ptr <git_oid> -> Ptr CChar -> CSize -> <git_otype> -> IO (CInt)
-#ccall git_odb_hashfile , Ptr <git_oid> -> CString -> <git_otype> -> IO (CInt)
-#ccall git_odb_object_close , Ptr <git_odb_object> -> IO ()
-#ccall git_odb_object_id , Ptr <git_odb_object> -> IO (Ptr <git_oid>)
-#ccall git_odb_object_data , Ptr <git_odb_object> -> IO (Ptr CChar)
-#ccall git_odb_object_size , Ptr <git_odb_object> -> IO (CSize)
-#ccall git_odb_object_type , Ptr <git_odb_object> -> IO (<git_otype>)
diff --git a/Bindings/Libgit2/OdbBackend.hsc b/Bindings/Libgit2/OdbBackend.hsc
deleted file mode 100644
--- a/Bindings/Libgit2/OdbBackend.hsc
+++ /dev/null
@@ -1,19 +0,0 @@
-
-#include <bindings.dsl.h>
-#include <git2.h>
-module Bindings.Libgit2.OdbBackend where
-#strict_import
-
-import Bindings.Libgit2.Common
-import Bindings.Libgit2.Types
-import Bindings.Libgit2.Oid
-{- typedef enum {
-	GIT_STREAM_RDONLY = (1 << 1),
-	GIT_STREAM_WRONLY = (1 << 2),
-	GIT_STREAM_RW = (GIT_STREAM_RDONLY | GIT_STREAM_WRONLY),
-} git_odb_streammode; -}
-#num    GIT_STREAM_RDONLY
-#num    GIT_STREAM_WRONLY
-#num    GIT_STREAM_RW
-#ccall git_odb_backend_pack , Ptr (Ptr <git_odb_backend>) -> CString -> IO (CInt)
-#ccall git_odb_backend_loose , Ptr (Ptr <git_odb_backend>) -> CString -> IO (CInt)
diff --git a/Bindings/Libgit2/Oid.hsc b/Bindings/Libgit2/Oid.hsc
deleted file mode 100644
--- a/Bindings/Libgit2/Oid.hsc
+++ /dev/null
@@ -1,29 +0,0 @@
-
-#include <bindings.dsl.h>
-#include <git2.h>
-module Bindings.Libgit2.Oid where
-#strict_import
-
-import Bindings.Libgit2.Common
-import Bindings.Libgit2.Types
-#num    GIT_OID_RAWSZ
-#num    GIT_OID_HEXSZ
-#num    GIT_OID_MINPREFIXLEN
-#opaque_t git_oid_shorten
-{- typedef struct {
-	
-	unsigned char id[GIT_OID_RAWSZ];
-} git_oid; -}
-#starttype git_oid
-#array_field    id , Word8
-#stoptype
-#ccall git_oid_fromstr , Ptr <git_oid> -> CString -> IO (CInt)
-#ccall git_oid_fromstrn , Ptr <git_oid> -> CString -> CSize -> IO (CInt)
-#ccall git_oid_fromraw , Ptr <git_oid> -> Ptr Word8 -> IO ()
-#ccall git_oid_fmt , CString -> Ptr <git_oid> -> IO ()
-#ccall git_oid_pathfmt , CString -> Ptr <git_oid> -> IO ()
-#ccall git_oid_allocfmt , Ptr <git_oid> -> IO (CString)
-#ccall git_oid_to_string , CString -> CSize -> Ptr <git_oid> -> IO (CString)
-#ccall git_oid_cpy , Ptr <git_oid> -> Ptr <git_oid> -> IO ()
-#ccall git_oid_cmp , Ptr <git_oid> -> Ptr <git_oid> -> IO (CInt)
-#ccall git_oid_ncmp , Ptr <git_oid> -> Ptr <git_oid> -> CUInt -> IO (CInt)
diff --git a/Bindings/Libgit2/Reflog.hsc b/Bindings/Libgit2/Reflog.hsc
deleted file mode 100644
--- a/Bindings/Libgit2/Reflog.hsc
+++ /dev/null
@@ -1,18 +0,0 @@
-
-#include <bindings.dsl.h>
-#include <git2.h>
-module Bindings.Libgit2.Reflog where
-#strict_import
-
-import Bindings.Libgit2.Common
-import Bindings.Libgit2.Types
-import Bindings.Libgit2.Oid
-#ccall git_reflog_read , Ptr (Ptr <git_reflog>) -> Ptr <git_reference> -> IO (CInt)
-#ccall git_reflog_write , Ptr <git_reference> -> Ptr <git_oid> -> Ptr <git_signature> -> CString -> IO (CInt)
-#ccall git_reflog_entrycount , Ptr <git_reflog> -> IO (CUInt)
-#ccall git_reflog_entry_byindex , Ptr <git_reflog> -> CUInt -> IO (Ptr <git_reflog_entry>)
-#ccall git_reflog_entry_oidold , Ptr <git_reflog_entry> -> IO (CString)
-#ccall git_reflog_entry_oidnew , Ptr <git_reflog_entry> -> IO (CString)
-#ccall git_reflog_entry_committer , Ptr <git_reflog_entry> -> IO (Ptr <git_signature>)
-#ccall git_reflog_entry_msg , Ptr <git_reflog_entry> -> IO (CString)
-#ccall git_reflog_free , Ptr <git_reflog> -> IO ()
diff --git a/Bindings/Libgit2/Refs.hsc b/Bindings/Libgit2/Refs.hsc
deleted file mode 100644
--- a/Bindings/Libgit2/Refs.hsc
+++ /dev/null
@@ -1,25 +0,0 @@
-
-#include <bindings.dsl.h>
-#include <git2.h>
-module Bindings.Libgit2.Refs where
-#strict_import
-
-import Bindings.Libgit2.Common
-import Bindings.Libgit2.Types
-import Bindings.Libgit2.Oid
-#ccall git_reference_lookup , Ptr (Ptr <git_reference>) -> Ptr <git_repository> -> CString -> IO (CInt)
-#ccall git_reference_create_symbolic , Ptr (Ptr <git_reference>) -> Ptr <git_repository> -> CString -> CString -> CInt -> IO (CInt)
-#ccall git_reference_create_oid , Ptr (Ptr <git_reference>) -> Ptr <git_repository> -> CString -> Ptr <git_oid> -> CInt -> IO (CInt)
-#ccall git_reference_oid , Ptr <git_reference> -> IO (Ptr <git_oid>)
-#ccall git_reference_target , Ptr <git_reference> -> IO (CString)
-#ccall git_reference_type , Ptr <git_reference> -> IO (<git_ref_t>)
-#ccall git_reference_name , Ptr <git_reference> -> IO (CString)
-#ccall git_reference_resolve , Ptr (Ptr <git_reference>) -> Ptr <git_reference> -> IO (CInt)
-#ccall git_reference_owner , Ptr <git_reference> -> IO (Ptr <git_repository>)
-#ccall git_reference_set_target , Ptr <git_reference> -> CString -> IO (CInt)
-#ccall git_reference_set_oid , Ptr <git_reference> -> Ptr <git_oid> -> IO (CInt)
-#ccall git_reference_rename , Ptr <git_reference> -> CString -> CInt -> IO (CInt)
-#ccall git_reference_delete , Ptr <git_reference> -> IO (CInt)
-#ccall git_reference_packall , Ptr <git_repository> -> IO (CInt)
-#ccall git_reference_listall , Ptr <git_strarray> -> Ptr <git_repository> -> CUInt -> IO (CInt)
-#ccall git_reference_foreach , Ptr <git_repository> -> CUInt -> CInt -> IO (CInt)
diff --git a/Bindings/Libgit2/Refspec.hsc b/Bindings/Libgit2/Refspec.hsc
deleted file mode 100644
--- a/Bindings/Libgit2/Refspec.hsc
+++ /dev/null
@@ -1,6 +0,0 @@
-
-#include <bindings.dsl.h>
-#include <git2.h>
-
-module Bindings.Libgit2.Refspec where
-#strict_import
diff --git a/Bindings/Libgit2/Repository.hsc b/Bindings/Libgit2/Repository.hsc
deleted file mode 100644
--- a/Bindings/Libgit2/Repository.hsc
+++ /dev/null
@@ -1,23 +0,0 @@
-
-#include <bindings.dsl.h>
-#include <git2.h>
-module Bindings.Libgit2.Repository where
-#strict_import
-
-import Bindings.Libgit2.Common
-import Bindings.Libgit2.Types
-import Bindings.Libgit2.Oid
-#ccall git_repository_open , Ptr (Ptr <git_repository>) -> CString -> IO (CInt)
-#ccall git_repository_open2 , Ptr (Ptr <git_repository>) -> CString -> CString -> CString -> CString -> IO (CInt)
-#ccall git_repository_open3 , Ptr (Ptr <git_repository>) -> CString -> Ptr <git_odb> -> CString -> CString -> IO (CInt)
-#ccall git_repository_discover , CString -> CSize -> CString -> CInt -> CString -> IO (CInt)
-#ccall git_repository_database , Ptr <git_repository> -> IO (Ptr <git_odb>)
-#ccall git_repository_index , Ptr (Ptr <git_index>) -> Ptr <git_repository> -> IO (CInt)
-#ccall git_repository_free , Ptr <git_repository> -> IO ()
-#ccall git_repository_init , Ptr (Ptr <git_repository>) -> CString -> CUInt -> IO (CInt)
-#ccall git_repository_head_detached , Ptr <git_repository> -> IO (CInt)
-#ccall git_repository_head_orphan , Ptr <git_repository> -> IO (CInt)
-#ccall git_repository_is_empty , Ptr <git_repository> -> IO (CInt)
-#ccall git_repository_path , Ptr <git_repository> -> IO (CString)
-#ccall git_repository_is_bare , Ptr <git_repository> -> IO (CInt)
-#ccall git_repository_config , Ptr (Ptr <git_config>) -> Ptr <git_repository> -> CString -> CString -> IO (CInt)
diff --git a/Bindings/Libgit2/Revwalk.hsc b/Bindings/Libgit2/Revwalk.hsc
deleted file mode 100644
--- a/Bindings/Libgit2/Revwalk.hsc
+++ /dev/null
@@ -1,21 +0,0 @@
-
-#include <bindings.dsl.h>
-#include <git2.h>
-module Bindings.Libgit2.Revwalk where
-#strict_import
-
-import Bindings.Libgit2.Common
-import Bindings.Libgit2.Types
-import Bindings.Libgit2.Oid
-#num    GIT_SORT_NONE
-#num    GIT_SORT_TOPOLOGICAL
-#num    GIT_SORT_TIME
-#num    GIT_SORT_REVERSE
-#ccall git_revwalk_new , Ptr (Ptr <git_revwalk>) -> Ptr <git_repository> -> IO (CInt)
-#ccall git_revwalk_reset , Ptr <git_revwalk> -> IO ()
-#ccall git_revwalk_push , Ptr <git_revwalk> -> Ptr <git_oid> -> IO (CInt)
-#ccall git_revwalk_hide , Ptr <git_revwalk> -> Ptr <git_oid> -> IO (CInt)
-#ccall git_revwalk_next , Ptr <git_oid> -> Ptr <git_revwalk> -> IO (CInt)
-#ccall git_revwalk_sorting , Ptr <git_revwalk> -> CUInt -> IO ()
-#ccall git_revwalk_free , Ptr <git_revwalk> -> IO ()
-#ccall git_revwalk_repository , Ptr <git_revwalk> -> IO (Ptr <git_repository>)
diff --git a/Bindings/Libgit2/Signature.hsc b/Bindings/Libgit2/Signature.hsc
deleted file mode 100644
--- a/Bindings/Libgit2/Signature.hsc
+++ /dev/null
@@ -1,12 +0,0 @@
-
-#include <bindings.dsl.h>
-#include <git2.h>
-module Bindings.Libgit2.Signature where
-#strict_import
-
-import Bindings.Libgit2.Common
-import Bindings.Libgit2.Types
-#ccall git_signature_new , CString -> CString -> CTime -> CInt -> IO (Ptr <git_signature>)
-#ccall git_signature_now , CString -> CString -> IO (Ptr <git_signature>)
-#ccall git_signature_dup , Ptr <git_signature> -> IO (Ptr <git_signature>)
-#ccall git_signature_free , Ptr <git_signature> -> IO ()
diff --git a/Bindings/Libgit2/Tag.hsc b/Bindings/Libgit2/Tag.hsc
deleted file mode 100644
--- a/Bindings/Libgit2/Tag.hsc
+++ /dev/null
@@ -1,25 +0,0 @@
-
-#include <bindings.dsl.h>
-#include <git2.h>
-module Bindings.Libgit2.Tag where
-#strict_import
-
-import Bindings.Libgit2.Common
-import Bindings.Libgit2.Types
-import Bindings.Libgit2.Oid
-import Bindings.Libgit2.Object
-#ccall git_tag_id , Ptr <git_tag> -> IO (Ptr <git_oid>)
-#ccall git_tag_target , Ptr (Ptr <git_object>) -> Ptr <git_tag> -> IO (CInt)
-#ccall git_tag_target_oid , Ptr <git_tag> -> IO (Ptr <git_oid>)
-#ccall git_tag_type , Ptr <git_tag> -> IO (<git_otype>)
-#ccall git_tag_name , Ptr <git_tag> -> IO (CString)
-#ccall git_tag_tagger , Ptr <git_tag> -> IO (Ptr <git_signature>)
-#ccall git_tag_message , Ptr <git_tag> -> IO (CString)
-#ccall git_tag_create , Ptr <git_oid> -> Ptr <git_repository> -> CString -> Ptr <git_object> -> Ptr <git_signature> -> CString -> CInt -> IO (CInt)
-#ccall git_tag_create_frombuffer , Ptr <git_oid> -> Ptr <git_repository> -> CString -> CInt -> IO (CInt)
-#ccall git_tag_delete , Ptr <git_repository> -> CString -> IO (CInt)
-#ccall git_tag_list , Ptr <git_strarray> -> Ptr <git_repository> -> IO (CInt)
-#ccall git_tag_list_match , Ptr <git_strarray> -> CString -> Ptr <git_repository> -> IO (CInt)
-#cinline git_tag_lookup , Ptr (Ptr <git_tag>) -> Ptr <git_repository> -> Ptr <git_oid> -> IO (CInt)
-#cinline git_tag_lookup_prefix , Ptr (Ptr <git_tag>) -> Ptr <git_repository> -> Ptr <git_oid> -> CUInt -> IO (CInt)
-#cinline git_tag_close , Ptr <git_tag> -> IO ()
diff --git a/Bindings/Libgit2/Tag.hsc.helper.c b/Bindings/Libgit2/Tag.hsc.helper.c
deleted file mode 100644
--- a/Bindings/Libgit2/Tag.hsc.helper.c
+++ /dev/null
@@ -1,7 +0,0 @@
-
-#include <bindings.cmacros.h>
-#include <git2.h>
-
-BC_INLINE3(git_tag_lookup, git_tag **, git_repository *, const git_oid *,int)
-BC_INLINE4(git_tag_lookup_prefix, git_tag **, git_repository *, const git_oid *, unsigned int ,int)
-BC_INLINE1VOID(git_tag_close, git_tag *)
diff --git a/Bindings/Libgit2/Tree.hsc b/Bindings/Libgit2/Tree.hsc
deleted file mode 100644
--- a/Bindings/Libgit2/Tree.hsc
+++ /dev/null
@@ -1,31 +0,0 @@
-
-#include <bindings.dsl.h>
-#include <git2.h>
-module Bindings.Libgit2.Tree where
-#strict_import
-
-import Bindings.Libgit2.Common
-import Bindings.Libgit2.Types
-import Bindings.Libgit2.Oid
-import Bindings.Libgit2.Object
-#ccall git_tree_id , Ptr <git_tree> -> IO (Ptr <git_oid>)
-#ccall git_tree_entrycount , Ptr <git_tree> -> IO (CUInt)
-#ccall git_tree_entry_byname , Ptr <git_tree> -> CString -> IO (Ptr <git_tree_entry>)
-#ccall git_tree_entry_byindex , Ptr <git_tree> -> CUInt -> IO (Ptr <git_tree_entry>)
-#ccall git_tree_entry_attributes , Ptr <git_tree_entry> -> IO (CUInt)
-#ccall git_tree_entry_name , Ptr <git_tree_entry> -> IO (CString)
-#ccall git_tree_entry_id , Ptr <git_tree_entry> -> IO (Ptr <git_oid>)
-#ccall git_tree_entry_type , Ptr <git_tree_entry> -> IO (<git_otype>)
-#ccall git_tree_entry_2object , Ptr (Ptr <git_object>) -> Ptr <git_repository> -> Ptr <git_tree_entry> -> IO (CInt)
-#ccall git_tree_create_fromindex , Ptr <git_oid> -> Ptr <git_index> -> IO (CInt)
-#ccall git_treebuilder_create , Ptr (Ptr <git_treebuilder>) -> Ptr <git_tree> -> IO (CInt)
-#ccall git_treebuilder_clear , Ptr <git_treebuilder> -> IO ()
-#ccall git_treebuilder_free , Ptr <git_treebuilder> -> IO ()
-#ccall git_treebuilder_get , Ptr <git_treebuilder> -> CString -> IO (Ptr <git_tree_entry>)
-#ccall git_treebuilder_insert , Ptr (Ptr <git_tree_entry>) -> Ptr <git_treebuilder> -> CString -> Ptr <git_oid> -> CUInt -> IO (CInt)
-#ccall git_treebuilder_remove , Ptr <git_treebuilder> -> CString -> IO (CInt)
-#ccall git_treebuilder_filter , Ptr <git_treebuilder> -> CInt -> IO ()
-#ccall git_treebuilder_write , Ptr <git_oid> -> Ptr <git_repository> -> Ptr <git_treebuilder> -> IO (CInt)
-#cinline git_tree_lookup , Ptr (Ptr <git_tree>) -> Ptr <git_repository> -> Ptr <git_oid> -> IO (CInt)
-#cinline git_tree_lookup_prefix , Ptr (Ptr <git_tree>) -> Ptr <git_repository> -> Ptr <git_oid> -> CUInt -> IO (CInt)
-#cinline git_tree_close , Ptr <git_tree> -> IO ()
diff --git a/Bindings/Libgit2/Tree.hsc.helper.c b/Bindings/Libgit2/Tree.hsc.helper.c
deleted file mode 100644
--- a/Bindings/Libgit2/Tree.hsc.helper.c
+++ /dev/null
@@ -1,7 +0,0 @@
-
-#include <bindings.cmacros.h>
-#include <git2.h>
-
-BC_INLINE3(git_tree_lookup, git_tree **, git_repository *, const git_oid *,int)
-BC_INLINE4(git_tree_lookup_prefix, git_tree **, git_repository *, const git_oid *, unsigned int ,int)
-BC_INLINE1VOID(git_tree_close, git_tree *)
diff --git a/Bindings/Libgit2/Types.hsc b/Bindings/Libgit2/Types.hsc
deleted file mode 100644
--- a/Bindings/Libgit2/Types.hsc
+++ /dev/null
@@ -1,87 +0,0 @@
-
-#include <bindings.dsl.h>
-#include <git2.h>
-module Bindings.Libgit2.Types where
-#strict_import
-
-
-#integral_t git_off_t
-{- typedef enum {
-	GIT_OBJ_ANY = -2,		/**< Object can be any of the following */
-	GIT_OBJ_BAD = -1,       /**< Object is invalid. */
-	GIT_OBJ__EXT1 = 0,      /**< Reserved for future use. */
-	GIT_OBJ_COMMIT = 1,     /**< A commit object. */
-	GIT_OBJ_TREE = 2,       /**< A tree (directory listing) object. */
-	GIT_OBJ_BLOB = 3,       /**< A file revision object. */
-	GIT_OBJ_TAG = 4,        /**< An annotated tag object. */
-	GIT_OBJ__EXT2 = 5,      /**< Reserved for future use. */
-	GIT_OBJ_OFS_DELTA = 6,  /**< A delta, base is given by an offset. */
-	GIT_OBJ_REF_DELTA = 7,  /**< A delta, base is given by object id. */
-} git_otype; -}
-#integral_t git_otype
-#num    GIT_OBJ_ANY
-#num    GIT_OBJ_BAD
-#num    GIT_OBJ__EXT1
-#num    GIT_OBJ_COMMIT
-#num    GIT_OBJ_TREE
-#num    GIT_OBJ_BLOB
-#num    GIT_OBJ_TAG
-#num    GIT_OBJ__EXT2
-#num    GIT_OBJ_OFS_DELTA
-#num    GIT_OBJ_REF_DELTA
-{- typedef enum {
-	GIT_REF_INVALID = 0, /** Invalid reference */
-	GIT_REF_OID = 1, /** A reference which points at an object id */
-	GIT_REF_SYMBOLIC = 2, /** A reference which points at another reference */
-	GIT_REF_PACKED = 4,
-	GIT_REF_HAS_PEEL = 8,
-	GIT_REF_LISTALL = GIT_REF_OID|GIT_REF_SYMBOLIC|GIT_REF_PACKED,
-} git_ref_t; -}
-#integral_t git_ref_t
-#num    GIT_REF_INVALID
-#num    GIT_REF_OID
-#num    GIT_REF_SYMBOLIC
-#num    GIT_REF_PACKED
-#num    GIT_REF_HAS_PEEL
-#num    GIT_REF_LISTALL
-#opaque_t git_odb
-#opaque_t git_odb_backend
-#opaque_t git_odb_object
-#opaque_t git_odb_stream
-#opaque_t git_repository
-#opaque_t git_object
-#opaque_t git_revwalk
-#opaque_t git_tag
-#opaque_t git_blob
-#opaque_t git_commit
-#opaque_t git_tree_entry
-#opaque_t git_tree
-#opaque_t git_treebuilder
-#opaque_t git_index
-#opaque_t git_config
-#opaque_t git_reflog_entry
-#opaque_t git_reflog
-#opaque_t git_reference
-#opaque_t git_refspec
-#opaque_t git_remote
-#opaque_t git_transport
-#opaque_t git_remote_head
-#opaque_t git_headarray
-{- typedef struct git_time {
-	git_time_t time; 
-	int offset; 
-} git_time; -}
-#starttype git_time
-#field    time , CTime
-#field    offset , CInt
-#stoptype
-{- typedef struct git_signature {
-	char *name; 
-	char *email; 
-	git_time when; 
-} git_signature; -}
-#starttype git_signature
-#field    name , CString
-#field    email , CString
-#field    when , <git_time>
-#stoptype
diff --git a/hlibgit2.cabal b/hlibgit2.cabal
--- a/hlibgit2.cabal
+++ b/hlibgit2.cabal
@@ -1,5 +1,5 @@
 Name:                hlibgit2
-Version:             0.2
+Version:             0.2.1
 Synopsis:            Low-level bindings to libgit2.
 Description:         Bindings to libgit2 v0.16.0-471-g5b9fac3
 License-file:        LICENSE
@@ -11,41 +11,8 @@
 Category:            FFI
 
 Extra-source-files:
-  libgit2/include/git2/attr.h
-  libgit2/include/git2/blob.h
-  libgit2/include/git2/branch.h
-  libgit2/include/git2/commit.h
-  libgit2/include/git2/common.h
-  libgit2/include/git2/config.h
-  libgit2/include/git2/diff.h
-  libgit2/include/git2/errors.h
-  libgit2/include/git2/index.h
-  libgit2/include/git2/indexer.h
-  libgit2/include/git2/inttypes.h
-  libgit2/include/git2/merge.h
-  libgit2/include/git2/net.h
-  libgit2/include/git2/notes.h
-  libgit2/include/git2/object.h
-  libgit2/include/git2/odb.h
-  libgit2/include/git2/odb_backend.h
-  libgit2/include/git2/oid.h
-  libgit2/include/git2/reflog.h
-  libgit2/include/git2/refs.h
-  libgit2/include/git2/refspec.h
-  libgit2/include/git2/remote.h
-  libgit2/include/git2/repository.h
-  libgit2/include/git2/revwalk.h
-  libgit2/include/git2/signature.h
-  libgit2/include/git2/status.h
-  libgit2/include/git2/stdint.h
-  libgit2/include/git2/submodule.h
-  libgit2/include/git2/tag.h
-  libgit2/include/git2/threads.h
-  libgit2/include/git2/tree.h
-  libgit2/include/git2/types.h
-  libgit2/include/git2/version.h
-  libgit2/include/git2/windows.h
   libgit2/include/git2.h
+  libgit2/include/git2/*.h
 
 Source-repository head
   type: git
@@ -96,11 +63,12 @@
     Bindings.Libgit2.Common
     Bindings.Libgit2.Object
   c-sources:
-    Bindings/Libgit2/Tag.hsc.helper.c
-    Bindings/Libgit2/Commit.hsc.helper.c
-    Bindings/Libgit2/Blob.hsc.helper.c
-    Bindings/Libgit2/Tree.hsc.helper.c
+    src/Bindings/Libgit2/Tag.hsc.helper.c
+    src/Bindings/Libgit2/Commit.hsc.helper.c
+    src/Bindings/Libgit2/Blob.hsc.helper.c
+    src/Bindings/Libgit2/Tree.hsc.helper.c
 
+  hs-source-dirs: src
   include-dirs: libgit2/include
   extra-libraries: git2
   if os(windows)
diff --git a/src/Bindings/Libgit2.hs b/src/Bindings/Libgit2.hs
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Libgit2.hs
@@ -0,0 +1,42 @@
+
+module Bindings.Libgit2 (
+    module Bindings.Libgit2.Repository,
+    module Bindings.Libgit2.Config,
+    module Bindings.Libgit2.Types,
+    module Bindings.Libgit2.Revwalk,
+    module Bindings.Libgit2.OdbBackend,
+    module Bindings.Libgit2.Tag,
+    module Bindings.Libgit2.Net,
+    module Bindings.Libgit2.Refs,
+    module Bindings.Libgit2.Refspec,
+    module Bindings.Libgit2.Reflog,
+    module Bindings.Libgit2.Commit,
+    module Bindings.Libgit2.Index,
+    module Bindings.Libgit2.Signature,
+    module Bindings.Libgit2.Blob,
+    module Bindings.Libgit2.Errors,
+    module Bindings.Libgit2.Oid,
+    module Bindings.Libgit2.Tree,
+    module Bindings.Libgit2.Odb,
+    module Bindings.Libgit2.Common,
+    module Bindings.Libgit2.Object) where
+import Bindings.Libgit2.Repository
+import Bindings.Libgit2.Config
+import Bindings.Libgit2.Types
+import Bindings.Libgit2.Revwalk
+import Bindings.Libgit2.OdbBackend
+import Bindings.Libgit2.Tag
+import Bindings.Libgit2.Net
+import Bindings.Libgit2.Refs
+import Bindings.Libgit2.Refspec
+import Bindings.Libgit2.Reflog
+import Bindings.Libgit2.Commit
+import Bindings.Libgit2.Index
+import Bindings.Libgit2.Signature
+import Bindings.Libgit2.Blob
+import Bindings.Libgit2.Errors
+import Bindings.Libgit2.Oid
+import Bindings.Libgit2.Tree
+import Bindings.Libgit2.Odb
+import Bindings.Libgit2.Common
+import Bindings.Libgit2.Object
diff --git a/src/Bindings/Libgit2/Blob.hsc b/src/Bindings/Libgit2/Blob.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Libgit2/Blob.hsc
@@ -0,0 +1,17 @@
+
+#include <bindings.dsl.h>
+#include <git2.h>
+module Bindings.Libgit2.Blob where
+#strict_import
+
+import Bindings.Libgit2.Common
+import Bindings.Libgit2.Types
+import Bindings.Libgit2.Oid
+import Bindings.Libgit2.Object
+#ccall git_blob_rawcontent , Ptr <git_blob> -> IO (Ptr CChar)
+#ccall git_blob_rawsize , Ptr <git_blob> -> IO (CInt)
+#ccall git_blob_create_fromfile , Ptr <git_oid> -> Ptr <git_repository> -> CString -> IO (CInt)
+#ccall git_blob_create_frombuffer , Ptr <git_oid> -> Ptr <git_repository> -> Ptr CChar -> CSize -> IO (CInt)
+#cinline git_blob_lookup , Ptr (Ptr <git_blob>) -> Ptr <git_repository> -> Ptr <git_oid> -> IO (CInt)
+#cinline git_blob_lookup_prefix , Ptr (Ptr <git_blob>) -> Ptr <git_repository> -> Ptr <git_oid> -> CUInt -> IO (CInt)
+#cinline git_blob_close , Ptr <git_blob> -> IO ()
diff --git a/src/Bindings/Libgit2/Blob.hsc.helper.c b/src/Bindings/Libgit2/Blob.hsc.helper.c
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Libgit2/Blob.hsc.helper.c
@@ -0,0 +1,7 @@
+
+#include <bindings.cmacros.h>
+#include <git2.h>
+
+BC_INLINE3(git_blob_lookup, git_blob **, git_repository *, const git_oid *,int)
+BC_INLINE4(git_blob_lookup_prefix, git_blob **, git_repository *, const git_oid *, unsigned int ,int)
+BC_INLINE1VOID(git_blob_close, git_blob *)
diff --git a/src/Bindings/Libgit2/Commit.hsc b/src/Bindings/Libgit2/Commit.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Libgit2/Commit.hsc
@@ -0,0 +1,26 @@
+
+#include <bindings.dsl.h>
+#include <git2.h>
+module Bindings.Libgit2.Commit where
+#strict_import
+
+import Bindings.Libgit2.Common
+import Bindings.Libgit2.Types
+import Bindings.Libgit2.Oid
+import Bindings.Libgit2.Object
+#ccall git_commit_id , Ptr <git_commit> -> IO (Ptr <git_oid>)
+#ccall git_commit_message_short , Ptr <git_commit> -> IO (CString)
+#ccall git_commit_message , Ptr <git_commit> -> IO (CString)
+#ccall git_commit_time , Ptr <git_commit> -> IO (CTime)
+#ccall git_commit_time_offset , Ptr <git_commit> -> IO (CInt)
+#ccall git_commit_committer , Ptr <git_commit> -> IO (Ptr <git_signature>)
+#ccall git_commit_author , Ptr <git_commit> -> IO (Ptr <git_signature>)
+#ccall git_commit_tree , Ptr (Ptr <git_tree>) -> Ptr <git_commit> -> IO (CInt)
+#ccall git_commit_tree_oid , Ptr <git_commit> -> IO (Ptr <git_oid>)
+#ccall git_commit_parentcount , Ptr <git_commit> -> IO (CUInt)
+#ccall git_commit_parent , Ptr (Ptr <git_commit>) -> Ptr <git_commit> -> CUInt -> IO (CInt)
+#ccall git_commit_parent_oid , Ptr <git_commit> -> CUInt -> IO (Ptr <git_oid>)
+#ccall git_commit_create , Ptr <git_oid> -> Ptr <git_repository> -> CString -> Ptr <git_signature> -> Ptr <git_signature> -> CString -> Ptr <git_tree> -> CInt -> Ptr (Ptr <git_commit>) -> IO (CInt)
+#cinline git_commit_lookup , Ptr (Ptr <git_commit>) -> Ptr <git_repository> -> Ptr <git_oid> -> IO (CInt)
+#cinline git_commit_lookup_prefix , Ptr (Ptr <git_commit>) -> Ptr <git_repository> -> Ptr <git_oid> -> CUInt -> IO (CInt)
+#cinline git_commit_close , Ptr <git_commit> -> IO ()
diff --git a/src/Bindings/Libgit2/Commit.hsc.helper.c b/src/Bindings/Libgit2/Commit.hsc.helper.c
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Libgit2/Commit.hsc.helper.c
@@ -0,0 +1,7 @@
+
+#include <bindings.cmacros.h>
+#include <git2.h>
+
+BC_INLINE3(git_commit_lookup, git_commit **, git_repository *, const git_oid *,int)
+BC_INLINE4(git_commit_lookup_prefix, git_commit **, git_repository *, const git_oid *, unsigned ,int)
+BC_INLINE1VOID(git_commit_close, git_commit *)
diff --git a/src/Bindings/Libgit2/Common.hsc b/src/Bindings/Libgit2/Common.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Libgit2/Common.hsc
@@ -0,0 +1,18 @@
+
+#include <bindings.dsl.h>
+#include <git2.h>
+module Bindings.Libgit2.Common where
+#strict_import
+
+#num    GIT_PATH_LIST_SEPARATOR
+#num    GIT_PATH_MAX
+{- typedef struct {
+	char **strings;
+	size_t count;
+} git_strarray; -}
+#starttype git_strarray
+#field    strings , Ptr CString
+#field    count , CSize
+#stoptype
+#ccall git_strarray_free , Ptr <git_strarray> -> IO ()
+#ccall git_libgit2_version , Ptr CInt -> Ptr CInt -> Ptr CInt -> IO ()
diff --git a/src/Bindings/Libgit2/Config.hsc b/src/Bindings/Libgit2/Config.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Libgit2/Config.hsc
@@ -0,0 +1,36 @@
+
+#include <bindings.dsl.h>
+#include <git2.h>
+module Bindings.Libgit2.Config where
+#strict_import
+
+import Bindings.Libgit2.Common
+import Bindings.Libgit2.Types
+
+#starttype struct git_config_file
+#field cfg, Ptr <git_config>
+#field open, FunPtr (Ptr <git_config_file> -> IO CInt)
+#field get, FunPtr (Ptr <git_config_file> -> CString -> Ptr CString -> IO CInt)
+#field set, FunPtr (Ptr <git_config_file> -> CString -> CString -> IO CInt)
+#field foreach, FunPtr (Ptr <git_config_file> -> FunPtr (CString -> CString -> Ptr () -> CInt) -> Ptr () -> IO CInt)
+#field free, FunPtr (Ptr <git_config_file> -> IO ())
+#stoptype
+
+#ccall git_config_find_global , CString -> IO (CInt)
+#ccall git_config_open_global , Ptr (Ptr <git_config>) -> IO (CInt)
+#ccall git_config_file__ondisk , Ptr (Ptr <git_config_file>) -> CString -> IO (CInt)
+#ccall git_config_new , Ptr (Ptr <git_config>) -> IO (CInt)
+#ccall git_config_add_file , Ptr <git_config> -> Ptr <git_config_file> -> CInt -> IO (CInt)
+#ccall git_config_add_file_ondisk , Ptr <git_config> -> CString -> CInt -> IO (CInt)
+#ccall git_config_open_ondisk , Ptr (Ptr <git_config>) -> CString -> IO (CInt)
+#ccall git_config_free , Ptr <git_config> -> IO ()
+#ccall git_config_get_int , Ptr <git_config> -> CString -> Ptr CInt -> IO (CInt)
+#ccall git_config_get_long , Ptr <git_config> -> CString -> CLong -> IO (CInt)
+#ccall git_config_get_bool , Ptr <git_config> -> CString -> Ptr CInt -> IO (CInt)
+#ccall git_config_get_string , Ptr <git_config> -> CString -> Ptr CString -> IO (CInt)
+#ccall git_config_set_int , Ptr <git_config> -> CString -> CInt -> IO (CInt)
+#ccall git_config_set_long , Ptr <git_config> -> CString -> CLong -> IO (CInt)
+#ccall git_config_set_bool , Ptr <git_config> -> CString -> CInt -> IO (CInt)
+#ccall git_config_set_string , Ptr <git_config> -> CString -> CString -> IO (CInt)
+#ccall git_config_delete , Ptr <git_config> -> CString -> IO (CInt)
+#ccall git_config_foreach , Ptr <git_config> -> CInt -> IO (CInt)
diff --git a/src/Bindings/Libgit2/Errors.hsc b/src/Bindings/Libgit2/Errors.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Libgit2/Errors.hsc
@@ -0,0 +1,67 @@
+
+#include <bindings.dsl.h>
+#include <git2.h>
+module Bindings.Libgit2.Errors where
+#strict_import
+
+import Bindings.Libgit2.Common
+{- typedef enum {
+	GIT_OK = 0,
+	GIT_ERROR = -1,
+	GIT_ENOTFOUND = -3,
+	GIT_EEXISTS = -4,
+	GIT_EAMBIGUOUS = -5,
+	GIT_EBUFS = -6,
+
+	GIT_PASSTHROUGH = -30,
+	GIT_REVWALKOVER = -31,
+}; -}
+#num GIT_OK
+#num GIT_ERROR
+#num GIT_ENOTFOUND
+#num GIT_EEXISTS
+#num GIT_EAMBIGUOUS
+#num GIT_EBUFS
+
+#num GIT_PASSTHROUGH
+#num GIT_REVWALKOVER
+{- typedef struct git_error {
+	char *message;
+	int klass;
+} git_error; -}
+{- typedef enum {
+	GITERR_NOMEMORY,
+	GITERR_OS,
+	GITERR_INVALID,
+	GITERR_REFERENCE,
+	GITERR_ZLIB,
+	GITERR_REPOSITORY,
+	GITERR_CONFIG,
+	GITERR_REGEX,
+	GITERR_ODB,
+	GITERR_INDEX,
+	GITERR_OBJECT,
+	GITERR_NET,
+	GITERR_TAG,
+	GITERR_TREE,
+	GITERR_INDEXER,
+} git_error_t; -}
+#integral_t git_error_t
+#num GITERR_NOMEMORY
+#num GITERR_OS
+#num GITERR_INVALID
+#num GITERR_REFERENCE
+#num GITERR_ZLIB
+#num GITERR_REPOSITORY
+#num GITERR_CONFIG
+#num GITERR_REGEX
+#num GITERR_ODB
+#num GITERR_INDEX
+#num GITERR_OBJECT
+#num GITERR_NET
+#num GITERR_TAG
+#num GITERR_TREE
+#num GITERR_INDEXER
+#ccall git_lasterror , IO (CString)
+#ccall git_strerror , CInt -> IO (CString)
+#ccall git_clearerror , IO ()
diff --git a/src/Bindings/Libgit2/Index.hsc b/src/Bindings/Libgit2/Index.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Libgit2/Index.hsc
@@ -0,0 +1,97 @@
+
+#include <bindings.dsl.h>
+#include <git2.h>
+module Bindings.Libgit2.Index where
+#strict_import
+
+import Bindings.Libgit2.Common
+import Bindings.Libgit2.Types
+import Bindings.Libgit2.Oid
+#num    GIT_IDXENTRY_NAMEMASK
+#num    GIT_IDXENTRY_STAGEMASK
+#num    GIT_IDXENTRY_EXTENDED
+#num    GIT_IDXENTRY_VALID
+#num    GIT_IDXENTRY_STAGESHIFT
+#num    GIT_IDXENTRY_UPDATE
+#num    GIT_IDXENTRY_REMOVE
+#num    GIT_IDXENTRY_UPTODATE
+#num    GIT_IDXENTRY_ADDED
+#num    GIT_IDXENTRY_HASHED
+#num    GIT_IDXENTRY_UNHASHED
+#num    GIT_IDXENTRY_WT_REMOVE
+#num    GIT_IDXENTRY_CONFLICTED
+#num    GIT_IDXENTRY_UNPACKED
+#num    GIT_IDXENTRY_NEW_SKIP_WORKTREE
+#num    GIT_IDXENTRY_INTENT_TO_ADD
+#num    GIT_IDXENTRY_SKIP_WORKTREE
+#num    GIT_IDXENTRY_EXTENDED2
+#num    GIT_IDXENTRY_EXTENDED_FLAGS
+{- typedef struct {
+	git_time_t seconds;
+	
+	unsigned int nanoseconds;
+} git_index_time; -}
+#starttype git_index_time
+#field    seconds , CTime
+#field    nanoseconds , CUInt
+#stoptype
+{- typedef struct git_index_entry {
+	git_index_time ctime;
+	git_index_time mtime;
+
+	unsigned int dev;
+	unsigned int ino;
+	unsigned int mode;
+	unsigned int uid;
+	unsigned int gid;
+	git_off_t file_size;
+
+	git_oid oid;
+
+	unsigned short flags;
+	unsigned short flags_extended;
+
+	const char *path;
+} git_index_entry; -}
+#starttype git_index_entry
+#field    ctime , <git_index_time>
+#field    mtime , <git_index_time>
+#field    dev , CUInt
+#field    ino , CUInt
+#field    mode , CUInt
+#field    uid , CUInt
+#field    gid , CUInt
+#field    file_size , <git_off_t>
+#field    oid , <git_oid>
+#field    flags , CUShort
+#field    flags_extended , CUShort
+#field    path , CString
+#stoptype
+{- typedef struct git_index_entry_unmerged {
+	unsigned int mode[3];
+	git_oid oid[3];
+	const char *path;
+} git_index_entry_unmerged; -}
+#starttype git_index_entry_unmerged
+#array_field    mode , CUInt
+#array_field    oid , <git_oid>
+#field    path , CString
+#stoptype
+#ccall git_index_open , Ptr (Ptr <git_index>) -> CString -> IO (CInt)
+#ccall git_index_clear , Ptr <git_index> -> IO ()
+#ccall git_index_free , Ptr <git_index> -> IO ()
+#ccall git_index_read , Ptr <git_index> -> IO (CInt)
+#ccall git_index_write , Ptr <git_index> -> IO (CInt)
+#ccall git_index_find , Ptr <git_index> -> CString -> IO (CInt)
+#ccall git_index_uniq , Ptr <git_index> -> IO ()
+#ccall git_index_add , Ptr <git_index> -> CString -> CInt -> IO (CInt)
+#ccall git_index_add2 , Ptr <git_index> -> Ptr <git_index_entry> -> IO (CInt)
+#ccall git_index_append , Ptr <git_index> -> CString -> CInt -> IO (CInt)
+#ccall git_index_append2 , Ptr <git_index> -> Ptr <git_index_entry> -> IO (CInt)
+#ccall git_index_remove , Ptr <git_index> -> CInt -> IO (CInt)
+#ccall git_index_get , Ptr <git_index> -> CUInt -> IO (Ptr <git_index_entry>)
+#ccall git_index_entrycount , Ptr <git_index> -> IO (CUInt)
+#ccall git_index_entrycount_unmerged , Ptr <git_index> -> IO (CUInt)
+#ccall git_index_get_unmerged_bypath , Ptr <git_index> -> CString -> IO (Ptr <git_index_entry_unmerged>)
+#ccall git_index_get_unmerged_byindex , Ptr <git_index> -> CUInt -> IO (Ptr <git_index_entry_unmerged>)
+#ccall git_index_entry_stage , Ptr <git_index_entry> -> IO (CInt)
diff --git a/src/Bindings/Libgit2/Net.hsc b/src/Bindings/Libgit2/Net.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Libgit2/Net.hsc
@@ -0,0 +1,12 @@
+
+#include <bindings.dsl.h>
+#include <git2.h>
+module Bindings.Libgit2.Net where
+#strict_import
+
+import Bindings.Libgit2.Common
+import Bindings.Libgit2.Oid
+import Bindings.Libgit2.Types
+#num    GIT_DEFAULT_PORT
+#num    GIT_DIR_FETCH
+#num    GIT_DIR_PUSH
diff --git a/src/Bindings/Libgit2/Object.hsc b/src/Bindings/Libgit2/Object.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Libgit2/Object.hsc
@@ -0,0 +1,19 @@
+
+#include <bindings.dsl.h>
+#include <git2.h>
+module Bindings.Libgit2.Object where
+#strict_import
+
+import Bindings.Libgit2.Common
+import Bindings.Libgit2.Types
+import Bindings.Libgit2.Oid
+#ccall git_object_lookup , Ptr (Ptr <git_object>) -> Ptr <git_repository> -> Ptr <git_oid> -> <git_otype> -> IO (CInt)
+#ccall git_object_lookup_prefix , Ptr (Ptr <git_object>) -> Ptr <git_repository> -> Ptr <git_oid> -> CUInt -> <git_otype> -> IO (CInt)
+#ccall git_object_id , Ptr <git_object> -> IO (Ptr <git_oid>)
+#ccall git_object_type , Ptr <git_object> -> IO (<git_otype>)
+#ccall git_object_owner , Ptr <git_object> -> IO (Ptr <git_repository>)
+#ccall git_object_close , Ptr <git_object> -> IO ()
+#ccall git_object_type2string , <git_otype> -> IO (CString)
+#ccall git_object_string2type , CString -> IO (<git_otype>)
+#ccall git_object_typeisloose , <git_otype> -> IO (CInt)
+#ccall git_object__size , <git_otype> -> IO (CSize)
diff --git a/src/Bindings/Libgit2/Odb.hsc b/src/Bindings/Libgit2/Odb.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Libgit2/Odb.hsc
@@ -0,0 +1,29 @@
+
+#include <bindings.dsl.h>
+#include <git2.h>
+module Bindings.Libgit2.Odb where
+#strict_import
+
+import Bindings.Libgit2.Common
+import Bindings.Libgit2.Types
+import Bindings.Libgit2.Oid
+import Bindings.Libgit2.OdbBackend
+#ccall git_odb_new , Ptr (Ptr <git_odb>) -> IO (CInt)
+#ccall git_odb_open , Ptr (Ptr <git_odb>) -> CString -> IO (CInt)
+#ccall git_odb_add_backend , Ptr <git_odb> -> Ptr <git_odb_backend> -> CInt -> IO (CInt)
+#ccall git_odb_add_alternate , Ptr <git_odb> -> Ptr <git_odb_backend> -> CInt -> IO (CInt)
+#ccall git_odb_close , Ptr <git_odb> -> IO ()
+#ccall git_odb_read , Ptr (Ptr <git_odb_object>) -> Ptr <git_odb> -> Ptr <git_oid> -> IO (CInt)
+#ccall git_odb_read_prefix , Ptr (Ptr <git_odb_object>) -> Ptr <git_odb> -> Ptr <git_oid> -> CUInt -> IO (CInt)
+#ccall git_odb_read_header , Ptr CSize -> Ptr <git_otype> -> Ptr <git_odb> -> Ptr <git_oid> -> IO (CInt)
+#ccall git_odb_exists , Ptr <git_odb> -> Ptr <git_oid> -> IO (CInt)
+#ccall git_odb_write , Ptr <git_oid> -> Ptr <git_odb> -> Ptr CChar -> CSize -> <git_otype> -> IO (CInt)
+#ccall git_odb_open_wstream , Ptr (Ptr <git_odb_stream>) -> Ptr <git_odb> -> CSize -> <git_otype> -> IO (CInt)
+#ccall git_odb_open_rstream , Ptr (Ptr <git_odb_stream>) -> Ptr <git_odb> -> Ptr <git_oid> -> IO (CInt)
+#ccall git_odb_hash , Ptr <git_oid> -> Ptr CChar -> CSize -> <git_otype> -> IO (CInt)
+#ccall git_odb_hashfile , Ptr <git_oid> -> CString -> <git_otype> -> IO (CInt)
+#ccall git_odb_object_close , Ptr <git_odb_object> -> IO ()
+#ccall git_odb_object_id , Ptr <git_odb_object> -> IO (Ptr <git_oid>)
+#ccall git_odb_object_data , Ptr <git_odb_object> -> IO (Ptr CChar)
+#ccall git_odb_object_size , Ptr <git_odb_object> -> IO (CSize)
+#ccall git_odb_object_type , Ptr <git_odb_object> -> IO (<git_otype>)
diff --git a/src/Bindings/Libgit2/OdbBackend.hsc b/src/Bindings/Libgit2/OdbBackend.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Libgit2/OdbBackend.hsc
@@ -0,0 +1,19 @@
+
+#include <bindings.dsl.h>
+#include <git2.h>
+module Bindings.Libgit2.OdbBackend where
+#strict_import
+
+import Bindings.Libgit2.Common
+import Bindings.Libgit2.Types
+import Bindings.Libgit2.Oid
+{- typedef enum {
+	GIT_STREAM_RDONLY = (1 << 1),
+	GIT_STREAM_WRONLY = (1 << 2),
+	GIT_STREAM_RW = (GIT_STREAM_RDONLY | GIT_STREAM_WRONLY),
+} git_odb_streammode; -}
+#num    GIT_STREAM_RDONLY
+#num    GIT_STREAM_WRONLY
+#num    GIT_STREAM_RW
+#ccall git_odb_backend_pack , Ptr (Ptr <git_odb_backend>) -> CString -> IO (CInt)
+#ccall git_odb_backend_loose , Ptr (Ptr <git_odb_backend>) -> CString -> IO (CInt)
diff --git a/src/Bindings/Libgit2/Oid.hsc b/src/Bindings/Libgit2/Oid.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Libgit2/Oid.hsc
@@ -0,0 +1,29 @@
+
+#include <bindings.dsl.h>
+#include <git2.h>
+module Bindings.Libgit2.Oid where
+#strict_import
+
+import Bindings.Libgit2.Common
+import Bindings.Libgit2.Types
+#num    GIT_OID_RAWSZ
+#num    GIT_OID_HEXSZ
+#num    GIT_OID_MINPREFIXLEN
+#opaque_t git_oid_shorten
+{- typedef struct {
+	
+	unsigned char id[GIT_OID_RAWSZ];
+} git_oid; -}
+#starttype git_oid
+#array_field    id , Word8
+#stoptype
+#ccall git_oid_fromstr , Ptr <git_oid> -> CString -> IO (CInt)
+#ccall git_oid_fromstrn , Ptr <git_oid> -> CString -> CSize -> IO (CInt)
+#ccall git_oid_fromraw , Ptr <git_oid> -> Ptr Word8 -> IO ()
+#ccall git_oid_fmt , CString -> Ptr <git_oid> -> IO ()
+#ccall git_oid_pathfmt , CString -> Ptr <git_oid> -> IO ()
+#ccall git_oid_allocfmt , Ptr <git_oid> -> IO (CString)
+#ccall git_oid_to_string , CString -> CSize -> Ptr <git_oid> -> IO (CString)
+#ccall git_oid_cpy , Ptr <git_oid> -> Ptr <git_oid> -> IO ()
+#ccall git_oid_cmp , Ptr <git_oid> -> Ptr <git_oid> -> IO (CInt)
+#ccall git_oid_ncmp , Ptr <git_oid> -> Ptr <git_oid> -> CUInt -> IO (CInt)
diff --git a/src/Bindings/Libgit2/Reflog.hsc b/src/Bindings/Libgit2/Reflog.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Libgit2/Reflog.hsc
@@ -0,0 +1,18 @@
+
+#include <bindings.dsl.h>
+#include <git2.h>
+module Bindings.Libgit2.Reflog where
+#strict_import
+
+import Bindings.Libgit2.Common
+import Bindings.Libgit2.Types
+import Bindings.Libgit2.Oid
+#ccall git_reflog_read , Ptr (Ptr <git_reflog>) -> Ptr <git_reference> -> IO (CInt)
+#ccall git_reflog_write , Ptr <git_reference> -> Ptr <git_oid> -> Ptr <git_signature> -> CString -> IO (CInt)
+#ccall git_reflog_entrycount , Ptr <git_reflog> -> IO (CUInt)
+#ccall git_reflog_entry_byindex , Ptr <git_reflog> -> CUInt -> IO (Ptr <git_reflog_entry>)
+#ccall git_reflog_entry_oidold , Ptr <git_reflog_entry> -> IO (CString)
+#ccall git_reflog_entry_oidnew , Ptr <git_reflog_entry> -> IO (CString)
+#ccall git_reflog_entry_committer , Ptr <git_reflog_entry> -> IO (Ptr <git_signature>)
+#ccall git_reflog_entry_msg , Ptr <git_reflog_entry> -> IO (CString)
+#ccall git_reflog_free , Ptr <git_reflog> -> IO ()
diff --git a/src/Bindings/Libgit2/Refs.hsc b/src/Bindings/Libgit2/Refs.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Libgit2/Refs.hsc
@@ -0,0 +1,25 @@
+
+#include <bindings.dsl.h>
+#include <git2.h>
+module Bindings.Libgit2.Refs where
+#strict_import
+
+import Bindings.Libgit2.Common
+import Bindings.Libgit2.Types
+import Bindings.Libgit2.Oid
+#ccall git_reference_lookup , Ptr (Ptr <git_reference>) -> Ptr <git_repository> -> CString -> IO (CInt)
+#ccall git_reference_create_symbolic , Ptr (Ptr <git_reference>) -> Ptr <git_repository> -> CString -> CString -> CInt -> IO (CInt)
+#ccall git_reference_create_oid , Ptr (Ptr <git_reference>) -> Ptr <git_repository> -> CString -> Ptr <git_oid> -> CInt -> IO (CInt)
+#ccall git_reference_oid , Ptr <git_reference> -> IO (Ptr <git_oid>)
+#ccall git_reference_target , Ptr <git_reference> -> IO (CString)
+#ccall git_reference_type , Ptr <git_reference> -> IO (<git_ref_t>)
+#ccall git_reference_name , Ptr <git_reference> -> IO (CString)
+#ccall git_reference_resolve , Ptr (Ptr <git_reference>) -> Ptr <git_reference> -> IO (CInt)
+#ccall git_reference_owner , Ptr <git_reference> -> IO (Ptr <git_repository>)
+#ccall git_reference_set_target , Ptr <git_reference> -> CString -> IO (CInt)
+#ccall git_reference_set_oid , Ptr <git_reference> -> Ptr <git_oid> -> IO (CInt)
+#ccall git_reference_rename , Ptr <git_reference> -> CString -> CInt -> IO (CInt)
+#ccall git_reference_delete , Ptr <git_reference> -> IO (CInt)
+#ccall git_reference_packall , Ptr <git_repository> -> IO (CInt)
+#ccall git_reference_listall , Ptr <git_strarray> -> Ptr <git_repository> -> CUInt -> IO (CInt)
+#ccall git_reference_foreach , Ptr <git_repository> -> CUInt -> CInt -> IO (CInt)
diff --git a/src/Bindings/Libgit2/Refspec.hsc b/src/Bindings/Libgit2/Refspec.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Libgit2/Refspec.hsc
@@ -0,0 +1,6 @@
+
+#include <bindings.dsl.h>
+#include <git2.h>
+
+module Bindings.Libgit2.Refspec where
+#strict_import
diff --git a/src/Bindings/Libgit2/Repository.hsc b/src/Bindings/Libgit2/Repository.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Libgit2/Repository.hsc
@@ -0,0 +1,23 @@
+
+#include <bindings.dsl.h>
+#include <git2.h>
+module Bindings.Libgit2.Repository where
+#strict_import
+
+import Bindings.Libgit2.Common
+import Bindings.Libgit2.Types
+import Bindings.Libgit2.Oid
+#ccall git_repository_open , Ptr (Ptr <git_repository>) -> CString -> IO (CInt)
+#ccall git_repository_open2 , Ptr (Ptr <git_repository>) -> CString -> CString -> CString -> CString -> IO (CInt)
+#ccall git_repository_open3 , Ptr (Ptr <git_repository>) -> CString -> Ptr <git_odb> -> CString -> CString -> IO (CInt)
+#ccall git_repository_discover , CString -> CSize -> CString -> CInt -> CString -> IO (CInt)
+#ccall git_repository_database , Ptr <git_repository> -> IO (Ptr <git_odb>)
+#ccall git_repository_index , Ptr (Ptr <git_index>) -> Ptr <git_repository> -> IO (CInt)
+#ccall git_repository_free , Ptr <git_repository> -> IO ()
+#ccall git_repository_init , Ptr (Ptr <git_repository>) -> CString -> CUInt -> IO (CInt)
+#ccall git_repository_head_detached , Ptr <git_repository> -> IO (CInt)
+#ccall git_repository_head_orphan , Ptr <git_repository> -> IO (CInt)
+#ccall git_repository_is_empty , Ptr <git_repository> -> IO (CInt)
+#ccall git_repository_path , Ptr <git_repository> -> IO (CString)
+#ccall git_repository_is_bare , Ptr <git_repository> -> IO (CInt)
+#ccall git_repository_config , Ptr (Ptr <git_config>) -> Ptr <git_repository> -> CString -> CString -> IO (CInt)
diff --git a/src/Bindings/Libgit2/Revwalk.hsc b/src/Bindings/Libgit2/Revwalk.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Libgit2/Revwalk.hsc
@@ -0,0 +1,21 @@
+
+#include <bindings.dsl.h>
+#include <git2.h>
+module Bindings.Libgit2.Revwalk where
+#strict_import
+
+import Bindings.Libgit2.Common
+import Bindings.Libgit2.Types
+import Bindings.Libgit2.Oid
+#num    GIT_SORT_NONE
+#num    GIT_SORT_TOPOLOGICAL
+#num    GIT_SORT_TIME
+#num    GIT_SORT_REVERSE
+#ccall git_revwalk_new , Ptr (Ptr <git_revwalk>) -> Ptr <git_repository> -> IO (CInt)
+#ccall git_revwalk_reset , Ptr <git_revwalk> -> IO ()
+#ccall git_revwalk_push , Ptr <git_revwalk> -> Ptr <git_oid> -> IO (CInt)
+#ccall git_revwalk_hide , Ptr <git_revwalk> -> Ptr <git_oid> -> IO (CInt)
+#ccall git_revwalk_next , Ptr <git_oid> -> Ptr <git_revwalk> -> IO (CInt)
+#ccall git_revwalk_sorting , Ptr <git_revwalk> -> CUInt -> IO ()
+#ccall git_revwalk_free , Ptr <git_revwalk> -> IO ()
+#ccall git_revwalk_repository , Ptr <git_revwalk> -> IO (Ptr <git_repository>)
diff --git a/src/Bindings/Libgit2/Signature.hsc b/src/Bindings/Libgit2/Signature.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Libgit2/Signature.hsc
@@ -0,0 +1,12 @@
+
+#include <bindings.dsl.h>
+#include <git2.h>
+module Bindings.Libgit2.Signature where
+#strict_import
+
+import Bindings.Libgit2.Common
+import Bindings.Libgit2.Types
+#ccall git_signature_new , CString -> CString -> CTime -> CInt -> IO (Ptr <git_signature>)
+#ccall git_signature_now , CString -> CString -> IO (Ptr <git_signature>)
+#ccall git_signature_dup , Ptr <git_signature> -> IO (Ptr <git_signature>)
+#ccall git_signature_free , Ptr <git_signature> -> IO ()
diff --git a/src/Bindings/Libgit2/Tag.hsc b/src/Bindings/Libgit2/Tag.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Libgit2/Tag.hsc
@@ -0,0 +1,25 @@
+
+#include <bindings.dsl.h>
+#include <git2.h>
+module Bindings.Libgit2.Tag where
+#strict_import
+
+import Bindings.Libgit2.Common
+import Bindings.Libgit2.Types
+import Bindings.Libgit2.Oid
+import Bindings.Libgit2.Object
+#ccall git_tag_id , Ptr <git_tag> -> IO (Ptr <git_oid>)
+#ccall git_tag_target , Ptr (Ptr <git_object>) -> Ptr <git_tag> -> IO (CInt)
+#ccall git_tag_target_oid , Ptr <git_tag> -> IO (Ptr <git_oid>)
+#ccall git_tag_type , Ptr <git_tag> -> IO (<git_otype>)
+#ccall git_tag_name , Ptr <git_tag> -> IO (CString)
+#ccall git_tag_tagger , Ptr <git_tag> -> IO (Ptr <git_signature>)
+#ccall git_tag_message , Ptr <git_tag> -> IO (CString)
+#ccall git_tag_create , Ptr <git_oid> -> Ptr <git_repository> -> CString -> Ptr <git_object> -> Ptr <git_signature> -> CString -> CInt -> IO (CInt)
+#ccall git_tag_create_frombuffer , Ptr <git_oid> -> Ptr <git_repository> -> CString -> CInt -> IO (CInt)
+#ccall git_tag_delete , Ptr <git_repository> -> CString -> IO (CInt)
+#ccall git_tag_list , Ptr <git_strarray> -> Ptr <git_repository> -> IO (CInt)
+#ccall git_tag_list_match , Ptr <git_strarray> -> CString -> Ptr <git_repository> -> IO (CInt)
+#cinline git_tag_lookup , Ptr (Ptr <git_tag>) -> Ptr <git_repository> -> Ptr <git_oid> -> IO (CInt)
+#cinline git_tag_lookup_prefix , Ptr (Ptr <git_tag>) -> Ptr <git_repository> -> Ptr <git_oid> -> CUInt -> IO (CInt)
+#cinline git_tag_close , Ptr <git_tag> -> IO ()
diff --git a/src/Bindings/Libgit2/Tag.hsc.helper.c b/src/Bindings/Libgit2/Tag.hsc.helper.c
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Libgit2/Tag.hsc.helper.c
@@ -0,0 +1,7 @@
+
+#include <bindings.cmacros.h>
+#include <git2.h>
+
+BC_INLINE3(git_tag_lookup, git_tag **, git_repository *, const git_oid *,int)
+BC_INLINE4(git_tag_lookup_prefix, git_tag **, git_repository *, const git_oid *, unsigned int ,int)
+BC_INLINE1VOID(git_tag_close, git_tag *)
diff --git a/src/Bindings/Libgit2/Tree.hsc b/src/Bindings/Libgit2/Tree.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Libgit2/Tree.hsc
@@ -0,0 +1,31 @@
+
+#include <bindings.dsl.h>
+#include <git2.h>
+module Bindings.Libgit2.Tree where
+#strict_import
+
+import Bindings.Libgit2.Common
+import Bindings.Libgit2.Types
+import Bindings.Libgit2.Oid
+import Bindings.Libgit2.Object
+#ccall git_tree_id , Ptr <git_tree> -> IO (Ptr <git_oid>)
+#ccall git_tree_entrycount , Ptr <git_tree> -> IO (CUInt)
+#ccall git_tree_entry_byname , Ptr <git_tree> -> CString -> IO (Ptr <git_tree_entry>)
+#ccall git_tree_entry_byindex , Ptr <git_tree> -> CUInt -> IO (Ptr <git_tree_entry>)
+#ccall git_tree_entry_attributes , Ptr <git_tree_entry> -> IO (CUInt)
+#ccall git_tree_entry_name , Ptr <git_tree_entry> -> IO (CString)
+#ccall git_tree_entry_id , Ptr <git_tree_entry> -> IO (Ptr <git_oid>)
+#ccall git_tree_entry_type , Ptr <git_tree_entry> -> IO (<git_otype>)
+#ccall git_tree_entry_2object , Ptr (Ptr <git_object>) -> Ptr <git_repository> -> Ptr <git_tree_entry> -> IO (CInt)
+#ccall git_tree_create_fromindex , Ptr <git_oid> -> Ptr <git_index> -> IO (CInt)
+#ccall git_treebuilder_create , Ptr (Ptr <git_treebuilder>) -> Ptr <git_tree> -> IO (CInt)
+#ccall git_treebuilder_clear , Ptr <git_treebuilder> -> IO ()
+#ccall git_treebuilder_free , Ptr <git_treebuilder> -> IO ()
+#ccall git_treebuilder_get , Ptr <git_treebuilder> -> CString -> IO (Ptr <git_tree_entry>)
+#ccall git_treebuilder_insert , Ptr (Ptr <git_tree_entry>) -> Ptr <git_treebuilder> -> CString -> Ptr <git_oid> -> CUInt -> IO (CInt)
+#ccall git_treebuilder_remove , Ptr <git_treebuilder> -> CString -> IO (CInt)
+#ccall git_treebuilder_filter , Ptr <git_treebuilder> -> CInt -> IO ()
+#ccall git_treebuilder_write , Ptr <git_oid> -> Ptr <git_repository> -> Ptr <git_treebuilder> -> IO (CInt)
+#cinline git_tree_lookup , Ptr (Ptr <git_tree>) -> Ptr <git_repository> -> Ptr <git_oid> -> IO (CInt)
+#cinline git_tree_lookup_prefix , Ptr (Ptr <git_tree>) -> Ptr <git_repository> -> Ptr <git_oid> -> CUInt -> IO (CInt)
+#cinline git_tree_close , Ptr <git_tree> -> IO ()
diff --git a/src/Bindings/Libgit2/Tree.hsc.helper.c b/src/Bindings/Libgit2/Tree.hsc.helper.c
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Libgit2/Tree.hsc.helper.c
@@ -0,0 +1,7 @@
+
+#include <bindings.cmacros.h>
+#include <git2.h>
+
+BC_INLINE3(git_tree_lookup, git_tree **, git_repository *, const git_oid *,int)
+BC_INLINE4(git_tree_lookup_prefix, git_tree **, git_repository *, const git_oid *, unsigned int ,int)
+BC_INLINE1VOID(git_tree_close, git_tree *)
diff --git a/src/Bindings/Libgit2/Types.hsc b/src/Bindings/Libgit2/Types.hsc
new file mode 100644
--- /dev/null
+++ b/src/Bindings/Libgit2/Types.hsc
@@ -0,0 +1,87 @@
+
+#include <bindings.dsl.h>
+#include <git2.h>
+module Bindings.Libgit2.Types where
+#strict_import
+
+
+#integral_t git_off_t
+{- typedef enum {
+	GIT_OBJ_ANY = -2,		/**< Object can be any of the following */
+	GIT_OBJ_BAD = -1,       /**< Object is invalid. */
+	GIT_OBJ__EXT1 = 0,      /**< Reserved for future use. */
+	GIT_OBJ_COMMIT = 1,     /**< A commit object. */
+	GIT_OBJ_TREE = 2,       /**< A tree (directory listing) object. */
+	GIT_OBJ_BLOB = 3,       /**< A file revision object. */
+	GIT_OBJ_TAG = 4,        /**< An annotated tag object. */
+	GIT_OBJ__EXT2 = 5,      /**< Reserved for future use. */
+	GIT_OBJ_OFS_DELTA = 6,  /**< A delta, base is given by an offset. */
+	GIT_OBJ_REF_DELTA = 7,  /**< A delta, base is given by object id. */
+} git_otype; -}
+#integral_t git_otype
+#num    GIT_OBJ_ANY
+#num    GIT_OBJ_BAD
+#num    GIT_OBJ__EXT1
+#num    GIT_OBJ_COMMIT
+#num    GIT_OBJ_TREE
+#num    GIT_OBJ_BLOB
+#num    GIT_OBJ_TAG
+#num    GIT_OBJ__EXT2
+#num    GIT_OBJ_OFS_DELTA
+#num    GIT_OBJ_REF_DELTA
+{- typedef enum {
+	GIT_REF_INVALID = 0, /** Invalid reference */
+	GIT_REF_OID = 1, /** A reference which points at an object id */
+	GIT_REF_SYMBOLIC = 2, /** A reference which points at another reference */
+	GIT_REF_PACKED = 4,
+	GIT_REF_HAS_PEEL = 8,
+	GIT_REF_LISTALL = GIT_REF_OID|GIT_REF_SYMBOLIC|GIT_REF_PACKED,
+} git_ref_t; -}
+#integral_t git_ref_t
+#num    GIT_REF_INVALID
+#num    GIT_REF_OID
+#num    GIT_REF_SYMBOLIC
+#num    GIT_REF_PACKED
+#num    GIT_REF_HAS_PEEL
+#num    GIT_REF_LISTALL
+#opaque_t git_odb
+#opaque_t git_odb_backend
+#opaque_t git_odb_object
+#opaque_t git_odb_stream
+#opaque_t git_repository
+#opaque_t git_object
+#opaque_t git_revwalk
+#opaque_t git_tag
+#opaque_t git_blob
+#opaque_t git_commit
+#opaque_t git_tree_entry
+#opaque_t git_tree
+#opaque_t git_treebuilder
+#opaque_t git_index
+#opaque_t git_config
+#opaque_t git_reflog_entry
+#opaque_t git_reflog
+#opaque_t git_reference
+#opaque_t git_refspec
+#opaque_t git_remote
+#opaque_t git_transport
+#opaque_t git_remote_head
+#opaque_t git_headarray
+{- typedef struct git_time {
+	git_time_t time; 
+	int offset; 
+} git_time; -}
+#starttype git_time
+#field    time , CTime
+#field    offset , CInt
+#stoptype
+{- typedef struct git_signature {
+	char *name; 
+	char *email; 
+	git_time when; 
+} git_signature; -}
+#starttype git_signature
+#field    name , CString
+#field    email , CString
+#field    when , <git_time>
+#stoptype
