diff --git a/bolt.cabal b/bolt.cabal
--- a/bolt.cabal
+++ b/bolt.cabal
@@ -1,5 +1,5 @@
 name:                bolt
-version:             0.1.0.1
+version:             0.1.0.2
 synopsis:            Bolt driver for Neo4j
 description:         Please see README.md
 homepage:            https://github.com/bflyblue/bolt#readme
@@ -19,6 +19,7 @@
   exposed-modules:     Data.PackStream
                      , Database.Bolt.Exception
                      , Database.Bolt.Protocol.Ver1
+                     , Database.Bolt.Protocol.Ver1.Graph
                      , Database.Bolt.Protocol.Ver1.Message
                      , Database.Bolt.Protocol.Ver1.Pretty
                      , Database.Bolt.Protocol.Ver1.Request
diff --git a/src/Data/PackStream.hs b/src/Data/PackStream.hs
--- a/src/Data/PackStream.hs
+++ b/src/Data/PackStream.hs
@@ -184,7 +184,7 @@
        | 0xa0 <= marker && marker < 0xb0
                           -> getMap (fromIntegral marker .&. 0x0f)
        | marker == 0xd8   -> fromIntegral <$> getWord8    >>= getMap
-       | marker == 0xd8   -> fromIntegral <$> getWord16be >>= getMap
+       | marker == 0xd9   -> fromIntegral <$> getWord16be >>= getMap
        | marker == 0xda   -> fromIntegral <$> getWord32be >>= getMap
 
        | 0xb0 <= marker && marker < 0xc0
@@ -221,7 +221,7 @@
     |               -0x80 <= i && i < 0x80               = putWord8 0xc8 >> putWord8    (fromIntegral i)
     |             -0x8000 <= i && i < 0x8000             = putWord8 0xc9 >> putWord16be (fromIntegral i)
     |         -0x80000000 <= i && i < 0x80000000         = putWord8 0xca >> putWord32be (fromIntegral i)
-    | otherwise                                          = putWord8 0xca >> putWord64be (fromIntegral i)
+    | otherwise                                          = putWord8 0xcb >> putWord64be (fromIntegral i)
 
 putPackStream (String t) = do
     let size = T.length t
diff --git a/src/Database/Bolt/Protocol/Ver1/Graph.hs b/src/Database/Bolt/Protocol/Ver1/Graph.hs
new file mode 100644
--- /dev/null
+++ b/src/Database/Bolt/Protocol/Ver1/Graph.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Database.Bolt.Protocol.Ver1.Graph
+ ( Node(..)
+ , Relationship(..)
+ , Path(..)
+ , UnboundedRelationship(..)
+ )
+where
+
+import           Data.Int
+import           Data.PackStream
+
+import           Database.Bolt.Protocol.Ver1.Types
+
+data Node = Node
+    { nodeIdentity      :: Identity
+    , nodeLabels        :: [Label]
+    , nodeProperties    :: Properties
+    } deriving (Show, Eq)
+
+data Relationship = Relationship
+    { relIdentity       :: Identity
+    , startNodeIdentity :: Identity
+    , endNodeIdentity   :: Identity
+    , relType           :: Type
+    , relProperties     :: Properties
+    } deriving (Show, Eq)
+
+data Path = Path
+    { pathNodes         :: [Node]
+    , pathRelationships :: [UnboundedRelationship]
+    , pathSequence      :: [Int64]
+    } deriving (Show, Eq)
+
+data UnboundedRelationship = UnboundedRelationship
+    { urelIdentity      :: Identity
+    , urelType          :: Type
+    , urelProperties    :: Properties
+    } deriving (Show, Eq)
+
+instance ToPackStream Node where
+    toPackStream (Node nodeid labels props) = Struct 0x4e [toPackStream nodeid, toPackStream labels, toPackStream props]
+
+instance FromPackStream Node where
+    parsePackStream s = do
+        struct <- parsePackStream s
+        case struct of
+            (Struct 0x4e [nodeid, labels, props]) -> Node <$> parsePackStream nodeid <*> parsePackStream labels <*> parsePackStream props
+            _                                     -> error "Invalid Node"
+
+instance ToPackStream Relationship where
+    toPackStream (Relationship relid start end ty props) = Struct 0x52 [ toPackStream relid, toPackStream start, toPackStream end
+                                                                       , toPackStream ty, toPackStream props ]
+
+instance FromPackStream Relationship where
+    parsePackStream s = do
+        struct <- parsePackStream s
+        case struct of
+            (Struct 0x52 [relid, start, end, ty, props]) -> Relationship <$> parsePackStream relid <*> parsePackStream start <*> parsePackStream end
+                                                                         <*> parsePackStream ty <*> parsePackStream props
+            _                                            -> error "Invalid Relationship"
+
+instance ToPackStream Path where
+    toPackStream (Path nodes rels seqn) = Struct 0x50 [ toPackStream nodes, toPackStream rels, toPackStream seqn]
+
+instance FromPackStream Path where
+    parsePackStream s = do
+        struct <- parsePackStream s
+        case struct of
+            (Struct 0x50 [nodes, rels, seqn]) -> Path <$> parsePackStream nodes <*> parsePackStream rels <*> parsePackStream seqn
+            _                                 -> error "Invalid Path"
+
+instance ToPackStream UnboundedRelationship where
+    toPackStream (UnboundedRelationship relid ty props) = Struct 0x72 [toPackStream relid, toPackStream ty, toPackStream props]
+
+instance FromPackStream UnboundedRelationship where
+    parsePackStream s = do
+        struct <- parsePackStream s
+        case struct of
+            (Struct 0x72 [relid, ty, props]) -> UnboundedRelationship <$> parsePackStream relid <*> parsePackStream ty <*> parsePackStream props
+            _                                -> error "Invalid UnboundedRelationship"
diff --git a/src/Database/Bolt/Protocol/Ver1/Message.hs b/src/Database/Bolt/Protocol/Ver1/Message.hs
--- a/src/Database/Bolt/Protocol/Ver1/Message.hs
+++ b/src/Database/Bolt/Protocol/Ver1/Message.hs
@@ -50,7 +50,7 @@
             (Struct 0x71 value)                  -> return $ Record  value
             (Struct 0x7e [metadata])             -> Ignored <$> parsePackStream metadata
             (Struct 0x7f [metadata])             -> Failure <$> parsePackStream metadata
-            _                                    -> error "Invalid message"
+            _                                    -> error "Invalid Message"
 
 data AuthToken = NoAuth
                | Basic Principal Credentials
diff --git a/src/Database/Bolt/Protocol/Ver1/Types.hs b/src/Database/Bolt/Protocol/Ver1/Types.hs
--- a/src/Database/Bolt/Protocol/Ver1/Types.hs
+++ b/src/Database/Bolt/Protocol/Ver1/Types.hs
@@ -1,5 +1,6 @@
 module Database.Bolt.Protocol.Ver1.Types where
 
+import           Data.Int
 import qualified Data.HashMap.Strict as HM
 import           Data.PackStream
 import           Data.Text           (Text)
@@ -8,8 +9,12 @@
 type Principal   = Text
 type Credentials = Text
 type Statement   = Text
+type Label       = Text
+type Type        = Text
+type Identity    = Int64
 
 type Object      = HM.HashMap Text PackStream
 type Parameters  = Object
+type Properties  = Object
 type Metadata    = Object
 type Record      = [PackStream]
