diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,7 @@
+0.8
+-----
+* Trustworthiness
+
 0.4
 ---
 * Added a missing () instance
diff --git a/bytes.cabal b/bytes.cabal
--- a/bytes.cabal
+++ b/bytes.cabal
@@ -1,6 +1,6 @@
 name:          bytes
 category:      Data, Serialization
-version:       0.7
+version:       0.8
 license:       BSD3
 cabal-version: >= 1.8
 license-file:  LICENSE
@@ -45,6 +45,7 @@
     binary                    >= 0.5      && < 0.8,
     bytestring                >= 0.9      && < 0.11,
     cereal                    >= 0.3.5    && < 0.4,
+    containers                >= 0.5      && < 1,
     ghc-prim,
     mtl                       >= 2.0      && < 2.2,
     text                      >= 0.2      && < 1,
diff --git a/src/Data/Bytes/Get.hs b/src/Data/Bytes/Get.hs
--- a/src/Data/Bytes/Get.hs
+++ b/src/Data/Bytes/Get.hs
@@ -2,6 +2,7 @@
 {-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE DefaultSignatures #-}
+{-# LANGUAGE Trustworthy #-}
 --------------------------------------------------------------------
 -- |
 -- Copyright :  (c) Edward Kmett 2013
diff --git a/src/Data/Bytes/Put.hs b/src/Data/Bytes/Put.hs
--- a/src/Data/Bytes/Put.hs
+++ b/src/Data/Bytes/Put.hs
@@ -5,6 +5,7 @@
 {-# LANGUAGE TypeOperators #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE UndecidableInstances #-}
+{-# LANGUAGE Trustworthy #-}
 --------------------------------------------------------------------
 -- |
 -- Copyright :  (c) Edward Kmett 2013
diff --git a/src/Data/Bytes/Serial.hs b/src/Data/Bytes/Serial.hs
--- a/src/Data/Bytes/Serial.hs
+++ b/src/Data/Bytes/Serial.hs
@@ -34,12 +34,18 @@
   ) where
 
 import Control.Monad
+import qualified Data.Foldable as F
 import Data.Bytes.Get
 import Data.Bytes.Put
 import Data.ByteString.Internal
 import Data.ByteString.Lazy as Lazy
 import Data.ByteString as Strict
 import Data.Int
+import qualified Data.IntMap as IMap
+import qualified Data.IntSet as ISet
+import qualified Data.Map as Map
+import qualified Data.Sequence as Seq
+import qualified Data.Set as Set
 import Data.Text as SText
 import Data.Text.Encoding as SText
 import Data.Text.Lazy as LText
@@ -167,6 +173,26 @@
   serialize = absurd
   deserialize = fail "I looked into the void."
 
+instance Serial ISet.IntSet where
+  serialize = serialize . ISet.toAscList
+  deserialize = ISet.fromDistinctAscList `liftM` deserialize
+
+instance Serial a => Serial (Seq.Seq a) where
+  serialize = serializeWith serialize
+  deserialize = deserializeWith deserialize
+
+instance Serial a => Serial (Set.Set a) where
+  serialize = serializeWith serialize
+  deserialize = deserializeWith deserialize
+
+instance Serial v => Serial (IMap.IntMap v) where
+  serialize = serializeWith serialize
+  deserialize = deserializeWith deserialize
+
+instance (Serial k, Serial v) => Serial (Map.Map k v) where
+  serialize = serializeWith serialize
+  deserialize = deserializeWith deserialize
+
 ------------------------------------------------------------------------------
 -- Generic Serialization
 ------------------------------------------------------------------------------
@@ -253,6 +279,24 @@
   serializeWith = serializeWith2 serialize
   deserializeWith = deserializeWith2 deserialize
 
+instance Serial1 Seq.Seq where
+  serializeWith pv = serializeWith pv . F.toList
+  deserializeWith gv = Seq.fromList `liftM` deserializeWith gv
+
+instance Serial1 Set.Set where
+  serializeWith pv = serializeWith pv . Set.toAscList
+  deserializeWith gv = Set.fromDistinctAscList `liftM` deserializeWith gv
+
+instance Serial1 IMap.IntMap where
+  serializeWith pv = serializeWith (serializeWith2 serialize pv)
+                   . IMap.toAscList
+  deserializeWith gv = IMap.fromDistinctAscList
+               `liftM` deserializeWith (deserializeWith2 deserialize gv)
+
+instance Serial k => Serial1 (Map.Map k) where
+  serializeWith = serializeWith2 serialize
+  deserializeWith = deserializeWith2 deserialize
+
 serialize1 :: (MonadPut m, Serial1 f, Serial a) => f a -> m ()
 serialize1 = serializeWith serialize
 {-# INLINE serialize1 #-}
@@ -347,3 +391,8 @@
 instance (Serial a, Serial b, Serial c) => Serial2 ((,,,,) a b c) where
   serializeWith2 f g (a, b, c, d, e) = serialize a >> serialize b >> serialize c >> f d >> g e
   deserializeWith2 m n = liftM5 (,,,,) deserialize deserialize deserialize m n
+
+instance Serial2 Map.Map where
+  serializeWith2 pk pv = serializeWith (serializeWith2 pk pv) . Map.toAscList
+  deserializeWith2 gk gv = Map.fromDistinctAscList
+                   `liftM` deserializeWith (deserializeWith2 gk gv)
