diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,14 @@
+0.5.7.0
+=======
+* Added `runPutMBuilder`
+
+0.5.6.0
+=======
+* Added GSerializeGet and GSerializePut instances for V1
+
+0.5.5.0
+=======
+* Added Semigroup instances
 
 0.5.4.0
 =======
diff --git a/cereal.cabal b/cereal.cabal
--- a/cereal.cabal
+++ b/cereal.cabal
@@ -1,5 +1,5 @@
 name:                   cereal
-version:                0.5.5.0
+version:                0.5.7.0
 license:                BSD3
 license-file:           LICENSE
 author:                 Lennart Kolmodin <kolmodin@dtek.chalmers.se>,
diff --git a/src/Data/Serialize.hs b/src/Data/Serialize.hs
--- a/src/Data/Serialize.hs
+++ b/src/Data/Serialize.hs
@@ -592,6 +592,16 @@
     gGet   = pure U1
     {-# INLINE gGet #-}
 
+-- | Always fails to serialize
+instance GSerializePut V1 where
+    gPut v = v `seq` error "GSerializePut.V1"
+    {-# INLINE gPut #-}
+
+-- | Always fails to deserialize
+instance GSerializeGet V1 where
+    gGet   = fail "GSerializeGet.V1"
+    {-# INLINE gGet #-}
+
 instance (GSerializePut a, GSerializePut b) => GSerializePut (a :*: b) where
     gPut (a :*: b) = gPut a *> gPut b
     {-# INLINE gPut #-}
diff --git a/src/Data/Serialize/Put.hs b/src/Data/Serialize/Put.hs
--- a/src/Data/Serialize/Put.hs
+++ b/src/Data/Serialize/Put.hs
@@ -34,6 +34,7 @@
     , runPutM
     , runPutLazy
     , runPutMLazy
+    , runPutMBuilder
     , putBuilder
     , execPut
 
@@ -225,6 +226,11 @@
 runPutMLazy :: PutM a -> (a, L.ByteString)
 runPutMLazy (Put (PairS f s)) = (f, toLazyByteString s)
 {-# INLINE runPutMLazy #-}
+
+-- | Run the 'Put' monad and get the result and underlying 'Builder'
+runPutMBuilder :: PutM a -> (a, Builder)
+runPutMBuilder (Put (PairS f s)) = (f, s)
+{-# INLINE runPutMBuilder #-}
 
 ------------------------------------------------------------------------
 
