diff --git a/identifiers.cabal b/identifiers.cabal
--- a/identifiers.cabal
+++ b/identifiers.cabal
@@ -1,5 +1,5 @@
 name:                identifiers
-version:             0.2.0.1
+version:             0.2.1.0
 synopsis:            Numeric identifiers for values.
 description:         Useful for situations where repeated-storage requirements
                      of values become too costly.
@@ -19,6 +19,7 @@
   exposed-modules:     Data.Identifiers
   build-depends:       base >=4.6 && <4.7,
                        binary ==0.7.*,
+                       cereal <0.5,
                        containers ==0.5.*,
                        deepseq ==1.3.*,
                        hashable ==1.2.*,
@@ -34,6 +35,7 @@
   build-depends:       base >=4.6 && <4.7,
                        criterion,
                        binary ==0.7.*,
+                       cereal <0.5,
                        deepseq ==1.3.*,
                        bytestring ==0.10.*,
                        identifiers
diff --git a/src/Data/Identifiers.hs b/src/Data/Identifiers.hs
--- a/src/Data/Identifiers.hs
+++ b/src/Data/Identifiers.hs
@@ -40,8 +40,10 @@
 import Data.HashMap.Lazy (HashMap)
 import Data.Maybe
 import Data.Sequence (Seq, (|>))
+import Data.Serialize (Serialize)
 import qualified Data.HashMap.Lazy as H
 import qualified Data.Sequence as S
+import qualified Data.Serialize as C
 
 
 data Identifiers i a = Identifiers { ids   :: !(HashMap a i)
@@ -54,6 +56,10 @@
 instance (Binary i, Eq a, Hashable a, Binary a) => Binary (Identifiers i a) where
     put s = put (H.toList $ ids s) >> put (names s)
     get = Identifiers <$> (H.fromList <$> get) <*> get
+
+instance (Serialize i, Eq a, Hashable a, Serialize a) => Serialize (Identifiers i a) where
+    put s = C.put (H.toList $ ids s) >> C.put (names s)
+    get = Identifiers <$> (H.fromList <$> C.get) <*> C.get
 
 instance (NFData i, NFData a) => NFData (Identifiers i a) where
     rnf (Identifiers i n) = rnf (i, n)
