diff --git a/System/Xen.hs b/System/Xen.hs
--- a/System/Xen.hs
+++ b/System/Xen.hs
@@ -39,6 +39,8 @@
 	, xcEvtChanUnbind
 	, xcEvtChanPending
 	, xcEvtChanUnmask
+	, xcVersion
+	, getXenVersion
 	-- Types
 	, System.Xen.CBindings.DomId(..)
 	, DumpcoreCallback
@@ -392,3 +394,17 @@
 	lxf "xcEvtChanUnmask"
 	r <- liftIO $ xc_evtchn_unmask hdl port
 	errnoOnNegOne r ()
+
+xcVersion :: XCHandle -> XenVersion -> Xen String
+xcVersion hdl ver = do
+	lxf "xcVersion"
+	r <- liftIO $ xc_version hdl ver nullPtr
+	errnoOnNegOne r "Error"
+	return (show r)
+
+getXenVersion :: Xen String
+getXenVersion = do
+	h <- xcInterfaceOpen
+	r <- liftIO $ xc_version h xENVER_version nullPtr
+	xcInterfaceClose h
+	return (show r)
diff --git a/System/Xen/CBindings.hsc b/System/Xen/CBindings.hsc
--- a/System/Xen/CBindings.hsc
+++ b/System/Xen/CBindings.hsc
@@ -130,6 +130,16 @@
     , MemoryProtectionFlags
     , MMUExtOp(..)
     , XenDomainHandleT
+    , XenVersion
+    , xENVER_extraversion
+    , xENVER_compile_info
+    , xENVER_capabilities
+    , xENVER_changeset
+    , xENVER_platform_parameters
+    , xENVER_get_features
+    , xENVER_pagesize
+    , xENVER_guest_handle
+    , xENVER_version
     ) where
 
 import Data.Bits
@@ -651,7 +661,7 @@
     xc_sysctl :: XCHandle -> Ptr XenSysCtl -> IO CInt
 
 foreign import ccall unsafe "xenctrl.h xc_version"
-    xc_version :: XCHandle -> CInt -> Ptr () -> IO CInt
+    xc_version :: XCHandle -> XenVersion -> Ptr () -> IO CInt
 
 foreign import ccall unsafe "xenctrl.h xc_acm_op"
     xc_acm_op :: XCHandle -> CInt -> Ptr () -> CULong -> IO CInt
@@ -773,3 +783,21 @@
         (#poke xc_core_header_t, xch_ctxt_offset) ptr c
         (#poke xc_core_header_t, xch_index_offset) ptr i
         (#poke xc_core_header_t, xch_pages_offset) ptr g
+
+newtype XenVersion = XV CInt deriving (Eq, Ord, Show, Enum)
+
+instance Storable XenVersion where
+    sizeOf _ = sizeOf (undefined :: CInt)
+    alignment _ = alignment (undefined :: CInt)
+    peek ptr = peek (castPtr ptr :: Ptr CInt) >>= return . toEnum . fromIntegral
+    poke ptr a = poke (castPtr ptr) (fromIntegral (fromEnum a) :: CInt)
+
+xENVER_version = XV 0
+xENVER_extraversion = XV 1
+xENVER_compile_info = XV 2
+xENVER_capabilities = XV 3
+xENVER_changeset = XV 4
+xENVER_platform_parameters = XV 5
+xENVER_get_features = XV 6
+xENVER_pagesize = XV 7
+xENVER_guest_handle = XV 8
diff --git a/hsXenCtrl.cabal b/hsXenCtrl.cabal
--- a/hsXenCtrl.cabal
+++ b/hsXenCtrl.cabal
@@ -1,5 +1,5 @@
 name:                hsXenCtrl
-version:             0.0.7
+version:             0.1.0
 synopsis:            FFI bindings to the Xen Control library.
 description:         FFI bindings to xenctrl.h and perhaps more.
                      The System.Xen.CBindings should provide direct access
@@ -17,7 +17,7 @@
 maintainer:          thomas.dubuisson@gmail.com
 homepage:            http://haskell.org/haskellwiki/HsXenCtrl
 stability:           experimental
-build-Depends:       base, bytestring, mtl, array, dlist
+build-Depends:       base >= 3.0 && < 4.5 , bytestring < 1.0 , mtl < 1.2 && >= 1.0, dlist == 0.5, array >= 0.2 && < 0.4
 build-type:          Simple
 ghc-options:         
 exposed-modules:     System.Xen.CBindings, System.Xen
