diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
diff --git a/hydrogen-data.cabal b/hydrogen-data.cabal
--- a/hydrogen-data.cabal
+++ b/hydrogen-data.cabal
@@ -1,15 +1,15 @@
 name:                 hydrogen-data
-version:              0.7.1
-homepage:             https://github.com/scravy/hydrogen-data
+version:              0.10
+homepage:             https://scravy.de/hydrogen-data/
 synopsis:             Hydrogen Data
 license:              BSD3
 license-file:         LICENSE
-extra-source-files:   CHANGELOG.md
+extra-source-files:   CHANGELOG.md, README.md
 author:               Julian Fleischer
-maintainer:           julfleischer@paypal.com
+maintainer:           julian@scravy.de
 category:             Language
 build-type:           Simple
-cabal-version:        >=1.18
+cabal-version:        >=1.14
 
 source-repository head
     type:             git
@@ -21,9 +21,9 @@
                       , Hydrogen.Data.Types
   build-depends:      base ==4.7.*
                       , containers ==0.5.*
-                      , hydrogen-prelude ==0.7.1
-                      , hydrogen-syntax ==0.7.1
-                      , hydrogen-util ==0.7.1
+                      , hydrogen-prelude ==0.10
+                      , hydrogen-parsing ==0.10
+                      , hydrogen-syntax ==0.10
                       , nicify ==1.1.*
                       , parsec ==3.1.*
                       , uuid ==1.3.*
diff --git a/src/Hydrogen/Data.hs b/src/Hydrogen/Data.hs
--- a/src/Hydrogen/Data.hs
+++ b/src/Hydrogen/Data.hs
@@ -1,17 +1,41 @@
 module Hydrogen.Data (
     emptyNode
+  , parseData
   , loadData
   , merge
   , Data
+  , isNode
+  , isNumber
+  , isString
+  , isVersion
+  , isUUID
+  , isBool
+  , isDateTime
+  , isDate
+  , isTime
+  , isLink
+  , isConstant
+  , getNodeMap
+  , getNodeList
+  , getNumber
+  , getString
+  , getVersion
+  , getUUID
+  , getBool
+  , getDateTime
+  , getDate
+  , getTime
+  , getLink
+  , getConstant
   ) where
 
-import Hydrogen.Prelude
+import Hydrogen.Prelude hiding (isNumber)
 
 import Hydrogen.Syntax.Parser
 import Hydrogen.Data.Parser
 import Hydrogen.Data.Types
 
-import Hydrogen.Util.Parsec hiding (parse)
+import Hydrogen.Parsing hiding (parse)
 
 import qualified Data.Map as Map
 
@@ -26,4 +50,111 @@
 loadData :: FilePath -> IO (Either SomethingBad Data)
 loadData fp = (parseData <+< parse fp) <$> readFile fp
 
+isNode, isNumber, isString, isVersion, isUUID, isBool,
+  isDateTime, isDate, isTime, isLink, isConstant
+    :: Data -> Bool
+
+isNode = \case
+    DNode _ _ -> True
+    _ -> False
+
+isNumber = \case
+    DNumber _ -> True
+    _ -> False
+
+isString = \case
+    DString _ -> True
+    _ -> False
+
+isVersion = \case
+    DVersion _ -> True
+    _ -> False
+
+isUUID = \case
+    DUUID _ -> True
+    _ -> False
+
+isBool = \case
+    DBool _ -> True
+    _ -> False
+
+isDateTime = \case
+    DDateTime _ -> True
+    _ -> False
+
+isDate = \case
+    DDate _ -> True
+    _ -> False
+
+isTime = \case
+    DTime _ -> True
+    _ -> False
+
+isLink = \case
+    DLink _ -> True
+    _ -> False
+
+isConstant = \case
+    DConstant _ -> True
+    _ -> False
+
+getNodeMap :: Data -> Map String Data
+getNodeMap = \case
+    DNode keyValueMap _ -> keyValueMap
+    _ -> Map.empty
+
+getNodeList :: Data -> [Data]
+getNodeList = \case
+    DNode _ xs -> xs
+    _ -> []
+
+getNumber :: Monad m => Data -> m Rational
+getNumber = \case
+    DNumber r -> return r
+    _ -> fail "not a DNumber"
+
+getString :: Monad m => Data -> m String
+getString = \case
+    DString r -> return r
+    _ -> fail "not a DString"
+
+getVersion :: Monad m => Data -> m Version
+getVersion = \case
+    DVersion v -> return v
+    _ -> fail "not a DVersion"
+
+getUUID :: Monad m => Data -> m UUID
+getUUID = \case
+    DUUID u -> return u
+    _ -> fail "not a DUUID"
+
+getBool :: Monad m => Data -> m Bool
+getBool = \case
+    DBool b -> return b
+    _ -> fail "not a DBool"
+
+getDateTime :: Monad m => Data -> m ZonedTime
+getDateTime = \case
+    DDateTime d -> return d
+    _ -> fail "not a DDateTime"
+
+getDate :: Monad m => Data -> m Day
+getDate = \case
+    DDate d -> return d
+    _ -> fail "not a DDate"
+
+getTime :: Monad m => Data -> m TimeOfDay
+getTime = \case
+    DTime d -> return d
+    _ -> fail "not a DTime"
+
+getLink :: Monad m => Data -> m String
+getLink = \case
+    DLink l -> return l
+    _ -> fail "not a DLink"
+
+getConstant :: Monad m => Data -> m String
+getConstant = \case
+    DConstant c -> return c
+    _ -> fail "not a DConstant"
 
diff --git a/src/Hydrogen/Data/Parser.hs b/src/Hydrogen/Data/Parser.hs
--- a/src/Hydrogen/Data/Parser.hs
+++ b/src/Hydrogen/Data/Parser.hs
@@ -5,8 +5,7 @@
 
 import Hydrogen.Syntax.Types
 
-import Hydrogen.Util.Parsec
-import Hydrogen.Util.Read
+import Hydrogen.Parsing
 
 import qualified Data.Map as Map
 
