diff --git a/generic-binary.cabal b/generic-binary.cabal
--- a/generic-binary.cabal
+++ b/generic-binary.cabal
@@ -1,5 +1,5 @@
 Name:              generic-binary
-Version:           1.0.0
+Version:           1.0.1
 Description:       Generic Data.Binary derivation using GHC generics.
 Synopsis:          Generic Data.Binary derivation using GHC generics.
 Category:          Generics, Data
@@ -22,3 +22,4 @@
   Build-Depends:     base >= 4.0 && < 4.5
                    , ghc-prim < 0.3
                    , binary >= 0.5 && < 0.6
+                   , bytestring >= 0.9 && < 0.10
diff --git a/src/Data/Binary/Generic.hs b/src/Data/Binary/Generic.hs
--- a/src/Data/Binary/Generic.hs
+++ b/src/Data/Binary/Generic.hs
@@ -3,14 +3,28 @@
   , FlexibleInstances
   , TypeOperators
  #-}
-module Data.Binary.Generic (put, get) where
+module Data.Binary.Generic
+( encode
+, decode
+, put
+, get
+) where
 
 import Control.Applicative
 import GHC.Generics
-import Data.Binary hiding (put, get)
+import Data.Binary (Binary, Put, Get)
+import Data.Binary.Get (runGet)
+import Data.Binary.Put (runPut)
+import Data.ByteString.Lazy
 
 import qualified Data.Binary as B
 
+encode :: (Generic a, GBinary (Rep a)) => a -> ByteString
+encode = runPut . put
+
+decode :: (Generic a, GBinary (Rep a)) => ByteString -> a
+decode = runGet get
+
 put :: (Generic a, GBinary (Rep a)) => a -> Put
 put = gput . from
 
@@ -32,7 +46,7 @@
 instance (GBinary a, GBinary b) => GBinary (a :+: b) where
   gput (L1 l) = do B.put False; gput l
   gput (R1 r) = do B.put True; gput r
-  gget = B.get >>= \v -> if v then L1 <$> gget else R1 <$> gget
+  gget = B.get >>= \v -> if not v then L1 <$> gget else R1 <$> gget
 
 instance GBinary a => GBinary (M1 D c a) where
   gput = gput . unM1
