diff --git a/Data/Named/IOB.hs b/Data/Named/IOB.hs
--- a/Data/Named/IOB.hs
+++ b/Data/Named/IOB.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE DeriveFunctor #-}
+
 {- |
     IOB encoding method extended to forests.
 
@@ -38,6 +40,7 @@
 
 import Control.Applicative ((<$>))
 import Data.Maybe (fromJust)
+import Data.Binary (Binary, get, put)
 import Data.Named.Tree hiding (span)
 
 -- | An 'IOB' data structure consists of a word with a corresponding
@@ -53,7 +56,15 @@
 -- | An 'Atom' is the atomic label with additional marker.
 data Atom a  = B a      -- ^ Beginning marker
              | I a      -- ^ Inside marker 
-             deriving (Show, Eq, Ord)
+             deriving (Show, Eq, Ord, Functor)
+
+instance Binary a => Binary (Atom a) where
+    put (B x) = put '1' >> put x
+    put (I x) = put '2' >> put x
+    get = get >>= \i -> case i of
+        '1' -> B <$> get
+        '2' -> I <$> get
+        _   -> error "Atom Binary instance: invalid code"
 
 push :: Atom a -> IOB w a -> IOB w a
 push x (IOB w xs) = IOB w (x:xs)
diff --git a/data-named.cabal b/data-named.cabal
--- a/data-named.cabal
+++ b/data-named.cabal
@@ -1,5 +1,5 @@
 name:               data-named
-version:            0.4.0
+version:            0.5.0
 synopsis:           Data types for named entities
 description:
     The library provides data types which can be used to represent
@@ -32,6 +32,7 @@
       , containers
       , text
       , attoparsec
+      , binary
 
     exposed-modules:
         Data.Named.Tree
