diff --git a/Blaze/ByteString/Builder/ZoomCache.hs b/Blaze/ByteString/Builder/ZoomCache.hs
--- a/Blaze/ByteString/Builder/ZoomCache.hs
+++ b/Blaze/ByteString/Builder/ZoomCache.hs
@@ -86,7 +86,7 @@
         -- the top (len-n) bits and (the lower n bits with the
         -- extension bit set if any of the top (len-n) bits are
         -- non-zero). We assume n < 8.
-        bCont :: Bits a => Int -> a -> (a, a)
+        bCont :: (Num a, Bits a) => Int -> a -> (a, a)
         bCont n v 
             | hi == 0   = (hi, lo)
             | otherwise = (hi, lo .|. (2^n))
diff --git a/Data/ZoomCache/Multichannel/NList.hs b/Data/ZoomCache/Multichannel/NList.hs
--- a/Data/ZoomCache/Multichannel/NList.hs
+++ b/Data/ZoomCache/Multichannel/NList.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE ExistentialQuantification #-}
+{-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE TypeFamilies #-}
 {-# OPTIONS_GHC -Wall -fno-warn-orphans #-}
@@ -90,17 +91,19 @@
 prettyPacketNList :: (Nat n, ZoomReadable a) => NList n a -> String
 prettyPacketNList (NList _ l) = "[" ++ (concat $ intersperse "," (map prettyRaw l)) ++ "]"
 
-readNList :: (Functor m, Monad m, Nat n, ZoomReadable a)
+readNList :: forall m n a. (Functor m, Monad m, Nat n, ZoomReadable a)
           => Iteratee ByteString m (NList n a)
 readNList = NList unify <$> replicateM (toInt unify) readRaw
     where
+        unify :: n
         unify = undefined
 
-readSummaryNList :: (Functor m, Monad m, Nat n, ZoomReadable a)
+readSummaryNList :: forall m n a. (Functor m, Monad m, Nat n, ZoomReadable a)
                  => Iteratee ByteString m (SummaryData (NList n a))
 readSummaryNList = SummaryNList .
     NList unify <$> replicateM (toInt unify) readSummary
     where
+        unify :: n
         unify = undefined
 
 prettySummaryNList :: (Nat n, ZoomReadable a) => SummaryData (NList n a) -> String
@@ -130,11 +133,12 @@
 fromNList :: ZoomWritable a => (NList n a) -> Builder
 fromNList (NList _ l) = mconcat $ map fromRaw l
 
-initSummaryNList :: (Nat n, ZoomWritable a)
+initSummaryNList :: forall n a. (Nat n, ZoomWritable a)
                  => SampleOffset -> SummaryWork (NList n a)
 initSummaryNList entry = SummaryWorkNList $
     NList unify (replicate (toInt unify) (initSummaryWork entry))
     where
+        unify :: n
         unify = undefined
 
 mkSummaryNList :: ZoomWritable a
diff --git a/Data/ZoomCache/NList.hs b/Data/ZoomCache/NList.hs
--- a/Data/ZoomCache/NList.hs
+++ b/Data/ZoomCache/NList.hs
@@ -41,9 +41,10 @@
     typeOf _ = mkTyConApp (mkTyCon "Data.ZoomCache.NList") [typeOf (undefined :: a)]
 #endif
 
-instance (Nat n, Arbitrary a) => Arbitrary (NList n a) where
+instance forall n a. (Nat n, Arbitrary a) => Arbitrary (NList n a) where
     arbitrary = NList unify <$> sequence [ arbitrary | _ <- [1..(toInt unify)] ]
         where
+            unify :: n
             unify = undefined
 
 nListToList :: NList n a -> [a]
diff --git a/Data/ZoomCache/Write.hs b/Data/ZoomCache/Write.hs
--- a/Data/ZoomCache/Write.hs
+++ b/Data/ZoomCache/Write.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE BangPatterns #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE OverloadedStrings #-}
@@ -508,6 +509,9 @@
 
 ------------------------------------------------------------
 
+#if !MIN_VERSION_base(4,5,0)
+
 (<>) :: Monoid a => a -> a -> a
 (<>) = mappend
 
+#endif
diff --git a/zoom-cache.cabal b/zoom-cache.cabal
--- a/zoom-cache.cabal
+++ b/zoom-cache.cabal
@@ -3,7 +3,7 @@
 -- The package version. See the Haskell package versioning policy
 -- (http://www.haskell.org/haskellwiki/Package_versioning_policy) for
 -- standards guiding when and how versions should be incremented.
-Version:             1.2.1.2
+Version:             1.2.1.3
 
 Synopsis:            A streamable, seekable, zoomable cache file format
 
