diff --git a/hydrogen-data.cabal b/hydrogen-data.cabal
--- a/hydrogen-data.cabal
+++ b/hydrogen-data.cabal
@@ -1,5 +1,5 @@
 name:                 hydrogen-data
-version:              0.6
+version:              0.7.1
 homepage:             https://github.com/scravy/hydrogen-data
 synopsis:             Hydrogen Data
 license:              BSD3
@@ -21,9 +21,9 @@
                       , Hydrogen.Data.Types
   build-depends:      base ==4.7.*
                       , containers ==0.5.*
-                      , hydrogen-prelude ==0.6.0.1
-                      , hydrogen-syntax ==0.6
-                      , hydrogen-util ==0.6
+                      , hydrogen-prelude ==0.7.1
+                      , hydrogen-syntax ==0.7.1
+                      , hydrogen-util ==0.7.1
                       , nicify ==1.1.*
                       , parsec ==3.1.*
                       , uuid ==1.3.*
@@ -31,6 +31,8 @@
   ghc-options:        -Wall
   default-language:   Haskell2010
   default-extensions:  CPP
+                       , DeriveDataTypeable
+                       , DeriveGeneric
                        , EmptyCase
                        , FlexibleContexts
                        , GADTs
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
@@ -12,7 +12,7 @@
 
 
 parseData :: Parser POPs Data
-parseData = either mkError Right . runIdentity . runParserT items () "-"
+parseData = either mkError Right . runIdentity . runParserT items () ""
 
 items :: Monad m => ParsecT POPs u m Data
 items = do
@@ -53,7 +53,7 @@
       ]
 
 keyValue :: Monad m => ParsecT [(SourcePos, POP)] u m (String, Data)
-keyValue = liftA2 (,) (init <$> matches "^[a-z][a-z0-9-]+:$") value
+keyValue = liftA2 (,) (init <$> matches "^[a-z](\\-?[a-z0-9])*:$") value
 
 node :: Monad m => ParsecT [(SourcePos, POP)] u m (String, Data)
 node = sourceToken $ \case
diff --git a/src/Hydrogen/Data/Types.hs b/src/Hydrogen/Data/Types.hs
--- a/src/Hydrogen/Data/Types.hs
+++ b/src/Hydrogen/Data/Types.hs
@@ -3,7 +3,6 @@
 module Hydrogen.Data.Types where
 
 import Hydrogen.Prelude
-import Hydrogen.Prelude.Extra
 
 import qualified Data.Map as Map
 
@@ -19,7 +18,9 @@
     DTime :: TimeOfDay -> Data
     DLink :: String -> Data
     DConstant :: String -> Data
-  deriving (Eq)
+  deriving (Eq, Generic, Typeable)
+
+instance Serialize Data
 
 showsDNode :: String -> Data -> ShowS
 showsDNode pfx node xs = case node of
