diff --git a/Database/Cayley/Internal.hs b/Database/Cayley/Internal.hs
new file mode 100644
--- /dev/null
+++ b/Database/Cayley/Internal.hs
@@ -0,0 +1,32 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Database.Cayley.Internal where
+ 
+import Control.Monad.Catch
+import Control.Monad.IO.Class
+import Control.Monad.Reader
+import qualified Data.Aeson as A
+import qualified Data.Text as T (pack)
+import Data.Vector (fromList)
+import Network.HTTP.Client
+
+import Database.Cayley.Types
+
+apiRequest :: Manager -> String -> Int -> RequestBody -> ReaderT CayleyConfig IO (Maybe A.Value)
+apiRequest m u p b = do
+    r <- parseUrl u >>= \c ->
+             return c { method = "POST", port = p, requestBody = b }
+    t <- liftIO $ try $ httpLbs r m
+    case t of
+        Right r -> return $ A.decode $ responseBody r
+        Left e  ->
+            return $
+                Just $
+                    A.object ["error" A..= T.pack (show (e :: SomeException))]
+
+toRequestBody :: [Quad] -> RequestBody
+toRequestBody qs = RequestBodyLBS $ A.encode $ fromList $ map A.toJSON qs
+
+getManager (CayleyConnection (_,m)) = m
+
+getConfig (CayleyConnection (c,_)) = c
diff --git a/Database/Cayley/Types.hs b/Database/Cayley/Types.hs
new file mode 100644
--- /dev/null
+++ b/Database/Cayley/Types.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Database.Cayley.Types where
+
+import qualified Data.Aeson as A
+import Control.Applicative
+import Control.Monad
+import qualified Data.Text as T
+import Network.HTTP.Client (Manager)
+
+data CayleyConfig = CayleyConfig
+    { serverPort :: Int    -- ^ Default to 64210
+    , serverName :: String -- ^ Default to "localhost"
+    , apiVersion :: String -- ^ Default to "1"
+    , queryLang  :: String -- ^ Default to "gremlin"
+    } deriving (Eq,Show)
+
+-- | CayleyConfig { serverPort = 64210 , serverName = "localhost" , apiVersion = "1" , queryLang  = "gremlin" }
+defaultCayleyConfig = CayleyConfig
+    { serverPort = 64210
+    , serverName = "localhost"
+    , apiVersion = "1"
+    , queryLang  = "gremlin"
+    }
+
+data CayleyConnection = CayleyConnection (CayleyConfig,Manager)
+     
+data Quad = Quad
+    { subject   :: T.Text       -- ^ Subject node
+    , predicate :: T.Text       -- ^ Predicate node
+    , object    :: T.Text       -- ^ Object node
+    , label     :: Maybe T.Text -- ^ Label node
+    } deriving (Eq,Show)
+
+instance A.ToJSON Quad where
+    toJSON (Quad subject predicate object label) =
+        A.object [ "subject"   A..= subject
+                 , "predicate" A..= predicate
+                 , "object"    A..= object
+                 , "label"     A..= label
+                 ]
+
+instance A.FromJSON Quad where
+    parseJSON (A.Object v) = Quad <$>
+                             v A..: "subject" <*>
+                             v A..: "predicate" <*>
+                             v A..: "object" <*>
+                             v A..: "label"
+    parseJSON _            = mzero
diff --git a/cayley-client.cabal b/cayley-client.cabal
--- a/cayley-client.cabal
+++ b/cayley-client.cabal
@@ -1,9 +1,9 @@
 name:                cayley-client
-version:             0.1.0.0
+version:             0.1.0.1
 stability:           Experimental
 synopsis:            An Haskell client for Cayley graph database
 description:         cayley-client implements the RESTful API of the Cayley database graph.
-homepage:            http://mb.cybervisible.fr/haskell-cayley-client
+homepage:            http://mb.cybervisible.fr/cayley-client-for-haskell
 license:             BSD3
 license-file:        LICENSE
 author:              Michel Boucey
@@ -18,7 +18,7 @@
   Location: https://github.com/MichelBoucey/cayley-client
 
 library
-  exposed-modules:     Database.Cayley.Client
+  exposed-modules:     Database.Cayley.Client, Database.Cayley.Types, Database.Cayley.Internal
   other-extensions:    OverloadedStrings
   build-depends:       base >=4.7 && <4.8, mtl >=2.1 && <2.2, transformers >=0.3 && <0.4, attoparsec >=0.12 && <0.13, bytestring >=0.10 && <0.11, text >=1.2 && <1.3, vector >=0.10 && <0.11, http-conduit >=2.1 && <2.2, http-client >=0.4 && <0.5, aeson >=0.8 && <0.9, lens >= 4.6.0.1, lens-aeson >=1.0.0.3, unordered-containers >=0.2 && <0.3, exceptions >= 0.6 && <0.7
   default-language:    Haskell2010
