diff --git a/Data/ZoomCache/PCM/IEEE754.hs b/Data/ZoomCache/PCM/IEEE754.hs
--- a/Data/ZoomCache/PCM/IEEE754.hs
+++ b/Data/ZoomCache/PCM/IEEE754.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE OverloadedStrings #-}
@@ -100,17 +101,19 @@
 
     deltaDecodeRaw    = deltaDecodePCM
 
+#if __GLASGOW_HASKELL__ >= 702
 {-# SPECIALIZE readSummaryPCM :: (Functor m, Monad m) => Iteratee ByteString m (SummaryData (PCM Float)) #-}
+#endif
 
 instance ZoomWrite (PCM Float) where
     write = writeData
 
-instance ZoomWrite (TimeStamp, PCM Float) where
+instance ZoomWrite (SampleOffset, PCM Float) where
     write = writeDataVBR
 
 instance ZoomWritable (PCM Float) where
     data SummaryWork (PCM Float) = SummaryWorkPCMFloat
-        { swPCMFloatTime  :: {-# UNPACK #-}!TimeStamp
+        { swPCMFloatTime  :: {-# UNPACK #-}!SampleOffset
         , swPCMFloatLast  :: {-# UNPACK #-}!Float
         , swPCMFloatMin   :: {-# UNPACK #-}!Float
         , swPCMFloatMax   :: {-# UNPACK #-}!Float
@@ -134,7 +137,7 @@
     pcmAvg = summaryPCMFloatAvg
     pcmRMS = summaryPCMFloatRMS
 
-    pcmWorkTime = swPCMFloatTime
+    pcmWorkSO = swPCMFloatTime
     pcmWorkLast = swPCMFloatLast
     pcmWorkMin = swPCMFloatMin
     pcmWorkMax = swPCMFloatMax
@@ -144,10 +147,12 @@
     pcmMkSummary = SummaryPCMFloat
     pcmMkSummaryWork = SummaryWorkPCMFloat
 
+#if __GLASGOW_HASKELL__ >= 702
 {-# SPECIALIZE fromSummaryPCM :: SummaryData (PCM Float) -> Builder #-}
-{-# SPECIALIZE mkSummaryPCM :: TimeStampDiff -> SummaryWork (PCM Float) -> SummaryData (PCM Float) #-}
-{-# SPECIALIZE appendSummaryPCM :: TimeStampDiff -> SummaryData (PCM Float) -> TimeStampDiff -> SummaryData (PCM Float) -> SummaryData (PCM Float) #-}
-{-# SPECIALIZE updateSummaryPCM :: TimeStamp -> PCM Float -> SummaryWork (PCM Float) -> SummaryWork (PCM Float) #-}
+{-# SPECIALIZE mkSummaryPCM :: SampleOffsetDiff -> SummaryWork (PCM Float) -> SummaryData (PCM Float) #-}
+{-# SPECIALIZE appendSummaryPCM :: SampleOffsetDiff -> SummaryData (PCM Float) -> SampleOffsetDiff -> SummaryData (PCM Float) -> SummaryData (PCM Float) #-}
+{-# SPECIALIZE updateSummaryPCM :: SampleOffset -> PCM Float -> SummaryWork (PCM Float) -> SummaryWork (PCM Float) #-}
+#endif
 
 ----------------------------------------------------------------------
 -- Double
@@ -170,17 +175,19 @@
 
     deltaDecodeRaw    = deltaDecodePCM
 
+#if __GLASGOW_HASKELL__ >= 702
 {-# SPECIALIZE readSummaryPCM :: (Functor m, Monad m) => Iteratee ByteString m (SummaryData (PCM Double)) #-}
+#endif
 
 instance ZoomWrite (PCM Double) where
     write = writeData
 
-instance ZoomWrite (TimeStamp, PCM Double) where
+instance ZoomWrite (SampleOffset, PCM Double) where
     write = writeDataVBR
 
 instance ZoomWritable (PCM Double) where
     data SummaryWork (PCM Double) = SummaryWorkPCMDouble
-        { swPCMDoubleTime  :: {-# UNPACK #-}!TimeStamp
+        { swPCMDoubleTime  :: {-# UNPACK #-}!SampleOffset
         , swPCMDoubleLast  :: {-# UNPACK #-}!Double
         , swPCMDoubleMin   :: {-# UNPACK #-}!Double
         , swPCMDoubleMax   :: {-# UNPACK #-}!Double
@@ -204,7 +211,7 @@
     pcmAvg = summaryPCMDoubleAvg
     pcmRMS = summaryPCMDoubleRMS
 
-    pcmWorkTime = swPCMDoubleTime
+    pcmWorkSO = swPCMDoubleTime
     pcmWorkLast = swPCMDoubleLast
     pcmWorkMin = swPCMDoubleMin
     pcmWorkMax = swPCMDoubleMax
@@ -214,10 +221,12 @@
     pcmMkSummary = SummaryPCMDouble
     pcmMkSummaryWork = SummaryWorkPCMDouble
 
+#if __GLASGOW_HASKELL__ >= 702
 {-# SPECIALIZE fromSummaryPCM :: SummaryData (PCM Double) -> Builder #-}
-{-# SPECIALIZE mkSummaryPCM :: TimeStampDiff -> SummaryWork (PCM Double) -> SummaryData (PCM Double) #-}
-{-# SPECIALIZE appendSummaryPCM :: TimeStampDiff -> SummaryData (PCM Double) -> TimeStampDiff -> SummaryData (PCM Double) -> SummaryData (PCM Double) #-}
-{-# SPECIALIZE updateSummaryPCM :: TimeStamp -> PCM Double -> SummaryWork (PCM Double) -> SummaryWork (PCM Double) #-}
+{-# SPECIALIZE mkSummaryPCM :: SampleOffsetDiff -> SummaryWork (PCM Double) -> SummaryData (PCM Double) #-}
+{-# SPECIALIZE appendSummaryPCM :: SampleOffsetDiff -> SummaryData (PCM Double) -> SampleOffsetDiff -> SummaryData (PCM Double) -> SummaryData (PCM Double) #-}
+{-# SPECIALIZE updateSummaryPCM :: SampleOffset -> PCM Double -> SummaryWork (PCM Double) -> SummaryWork (PCM Double) #-}
+#endif
 
 ----------------------------------------------------------------------
 -- Helpers for float and double
@@ -233,7 +242,7 @@
     ]
 
 initSummaryPCMFloat :: (RealFloat a, ZoomPCM a)
-                    => TimeStamp -> SummaryWork (PCM a)
+                    => SampleOffset -> SummaryWork (PCM a)
 initSummaryPCMFloat entry = pcmMkSummaryWork
     entry
     0.0
diff --git a/Data/ZoomCache/PCM/Int.hs b/Data/ZoomCache/PCM/Int.hs
--- a/Data/ZoomCache/PCM/Int.hs
+++ b/Data/ZoomCache/PCM/Int.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE OverloadedStrings #-}
@@ -126,17 +127,19 @@
 
     deltaDecodeRaw = deltaDecodePCM
 
+#if __GLASGOW_HASKELL__ >= 702
 {-# SPECIALIZE readSummaryPCM :: (Functor m, Monad m) => Iteratee ByteString m (SummaryData (PCM Int)) #-}
+#endif
 
 instance ZoomWrite (PCM Int) where
     write = writeData
 
-instance ZoomWrite (TimeStamp, (PCM Int)) where
+instance ZoomWrite (SampleOffset, (PCM Int)) where
     write = writeDataVBR
 
 instance ZoomWritable (PCM Int) where
     data SummaryWork (PCM Int) = SummaryWorkPCMInt
-        { swPCMIntTime  :: {-# UNPACK #-}!TimeStamp
+        { swPCMIntTime  :: {-# UNPACK #-}!SampleOffset
         , swPCMIntLast  :: {-# UNPACK #-}!Int
         , swPCMIntMin   :: {-# UNPACK #-}!Int
         , swPCMIntMax   :: {-# UNPACK #-}!Int
@@ -161,7 +164,7 @@
     pcmAvg = summaryIntAvg
     pcmRMS = summaryIntRMS
 
-    pcmWorkTime = swPCMIntTime
+    pcmWorkSO = swPCMIntTime
     pcmWorkLast = swPCMIntLast
     pcmWorkMin = swPCMIntMin
     pcmWorkMax = swPCMIntMax
@@ -171,11 +174,13 @@
     pcmMkSummary = SummaryPCMInt
     pcmMkSummaryWork = SummaryWorkPCMInt
 
+#if __GLASGOW_HASKELL__ >= 702
 {-# SPECIALIZE fromSummaryPCM :: SummaryData (PCM Int) -> Builder #-}
-{-# SPECIALIZE initSummaryPCMBounded :: TimeStamp -> SummaryWork (PCM Int) #-}
-{-# SPECIALIZE mkSummaryPCM :: TimeStampDiff -> SummaryWork (PCM Int) -> SummaryData (PCM Int) #-}
-{-# SPECIALIZE appendSummaryPCM :: TimeStampDiff -> SummaryData (PCM Int) -> TimeStampDiff -> SummaryData (PCM Int) -> SummaryData (PCM Int) #-}
-{-# SPECIALIZE updateSummaryPCM :: TimeStamp -> PCM Int -> SummaryWork (PCM Int) -> SummaryWork (PCM Int) #-}
+{-# SPECIALIZE initSummaryPCMBounded :: SampleOffset -> SummaryWork (PCM Int) #-}
+{-# SPECIALIZE mkSummaryPCM :: SampleOffsetDiff -> SummaryWork (PCM Int) -> SummaryData (PCM Int) #-}
+{-# SPECIALIZE appendSummaryPCM :: SampleOffsetDiff -> SummaryData (PCM Int) -> SampleOffsetDiff -> SummaryData (PCM Int) -> SummaryData (PCM Int) #-}
+{-# SPECIALIZE updateSummaryPCM :: SampleOffset -> PCM Int -> SummaryWork (PCM Int) -> SummaryWork (PCM Int) #-}
+#endif
 
 ----------------------------------------------------------------------
 -- Int8
@@ -198,17 +203,19 @@
 
     deltaDecodeRaw = deltaDecodePCM
 
+#if __GLASGOW_HASKELL__ >= 702
 {-# SPECIALIZE readSummaryPCM :: (Functor m, Monad m) => Iteratee ByteString m (SummaryData (PCM Int8)) #-}
+#endif
 
 instance ZoomWrite (PCM Int8) where
     write = writeData
 
-instance ZoomWrite (TimeStamp, (PCM Int8)) where
+instance ZoomWrite (SampleOffset, (PCM Int8)) where
     write = writeDataVBR
 
 instance ZoomWritable (PCM Int8) where
     data SummaryWork (PCM Int8) = SummaryWorkPCMInt8
-        { swPCMInt8Time  :: {-# UNPACK #-}!TimeStamp
+        { swPCMInt8Time  :: {-# UNPACK #-}!SampleOffset
         , swPCMInt8Last  :: {-# UNPACK #-}!Int8
         , swPCMInt8Min   :: {-# UNPACK #-}!Int8
         , swPCMInt8Max   :: {-# UNPACK #-}!Int8
@@ -233,7 +240,7 @@
     pcmAvg = summaryInt8Avg
     pcmRMS = summaryInt8RMS
 
-    pcmWorkTime = swPCMInt8Time
+    pcmWorkSO = swPCMInt8Time
     pcmWorkLast = swPCMInt8Last
     pcmWorkMin = swPCMInt8Min
     pcmWorkMax = swPCMInt8Max
@@ -243,11 +250,13 @@
     pcmMkSummary = SummaryPCMInt8
     pcmMkSummaryWork = SummaryWorkPCMInt8
 
+#if __GLASGOW_HASKELL__ >= 702
 {-# SPECIALIZE fromSummaryPCM :: SummaryData (PCM Int8) -> Builder #-}
-{-# SPECIALIZE initSummaryPCMBounded :: TimeStamp -> SummaryWork (PCM Int8) #-}
-{-# SPECIALIZE mkSummaryPCM :: TimeStampDiff -> SummaryWork (PCM Int8) -> SummaryData (PCM Int8) #-}
-{-# SPECIALIZE appendSummaryPCM :: TimeStampDiff -> SummaryData (PCM Int8) -> TimeStampDiff -> SummaryData (PCM Int8) -> SummaryData (PCM Int8) #-}
-{-# SPECIALIZE updateSummaryPCM :: TimeStamp -> PCM Int8 -> SummaryWork (PCM Int8) -> SummaryWork (PCM Int8) #-}
+{-# SPECIALIZE initSummaryPCMBounded :: SampleOffset -> SummaryWork (PCM Int8) #-}
+{-# SPECIALIZE mkSummaryPCM :: SampleOffsetDiff -> SummaryWork (PCM Int8) -> SummaryData (PCM Int8) #-}
+{-# SPECIALIZE appendSummaryPCM :: SampleOffsetDiff -> SummaryData (PCM Int8) -> SampleOffsetDiff -> SummaryData (PCM Int8) -> SummaryData (PCM Int8) #-}
+{-# SPECIALIZE updateSummaryPCM :: SampleOffset -> PCM Int8 -> SummaryWork (PCM Int8) -> SummaryWork (PCM Int8) #-}
+#endif
 
 ----------------------------------------------------------------------
 -- Int16
@@ -270,17 +279,19 @@
 
     deltaDecodeRaw = deltaDecodePCM
 
+#if __GLASGOW_HASKELL__ >= 702
 {-# SPECIALIZE readSummaryPCM :: (Functor m, Monad m) => Iteratee ByteString m (SummaryData (PCM Int16)) #-}
+#endif
 
 instance ZoomWrite (PCM Int16) where
     write = writeData
 
-instance ZoomWrite (TimeStamp, (PCM Int16)) where
+instance ZoomWrite (SampleOffset, (PCM Int16)) where
     write = writeDataVBR
 
 instance ZoomWritable (PCM Int16) where
     data SummaryWork (PCM Int16) = SummaryWorkPCMInt16
-        { swPCMInt16Time  :: {-# UNPACK #-}!TimeStamp
+        { swPCMInt16Time  :: {-# UNPACK #-}!SampleOffset
         , swPCMInt16Last  :: {-# UNPACK #-}!Int16
         , swPCMInt16Min   :: {-# UNPACK #-}!Int16
         , swPCMInt16Max   :: {-# UNPACK #-}!Int16
@@ -305,7 +316,7 @@
     pcmAvg = summaryInt16Avg
     pcmRMS = summaryInt16RMS
 
-    pcmWorkTime = swPCMInt16Time
+    pcmWorkSO = swPCMInt16Time
     pcmWorkLast = swPCMInt16Last
     pcmWorkMin = swPCMInt16Min
     pcmWorkMax = swPCMInt16Max
@@ -315,11 +326,13 @@
     pcmMkSummary = SummaryPCMInt16
     pcmMkSummaryWork = SummaryWorkPCMInt16
 
+#if __GLASGOW_HASKELL__ >= 702
 {-# SPECIALIZE fromSummaryPCM :: SummaryData (PCM Int16) -> Builder #-}
-{-# SPECIALIZE initSummaryPCMBounded :: TimeStamp -> SummaryWork (PCM Int16) #-}
-{-# SPECIALIZE mkSummaryPCM :: TimeStampDiff -> SummaryWork (PCM Int16) -> SummaryData (PCM Int16) #-}
-{-# SPECIALIZE appendSummaryPCM :: TimeStampDiff -> SummaryData (PCM Int16) -> TimeStampDiff -> SummaryData (PCM Int16) -> SummaryData (PCM Int16) #-}
-{-# SPECIALIZE updateSummaryPCM :: TimeStamp -> PCM Int16 -> SummaryWork (PCM Int16) -> SummaryWork (PCM Int16) #-}
+{-# SPECIALIZE initSummaryPCMBounded :: SampleOffset -> SummaryWork (PCM Int16) #-}
+{-# SPECIALIZE mkSummaryPCM :: SampleOffsetDiff -> SummaryWork (PCM Int16) -> SummaryData (PCM Int16) #-}
+{-# SPECIALIZE appendSummaryPCM :: SampleOffsetDiff -> SummaryData (PCM Int16) -> SampleOffsetDiff -> SummaryData (PCM Int16) -> SummaryData (PCM Int16) #-}
+{-# SPECIALIZE updateSummaryPCM :: SampleOffset -> PCM Int16 -> SummaryWork (PCM Int16) -> SummaryWork (PCM Int16) #-}
+#endif
 
 ----------------------------------------------------------------------
 -- Int32
@@ -342,17 +355,19 @@
 
     deltaDecodeRaw = deltaDecodePCM
 
+#if __GLASGOW_HASKELL__ >= 702
 {-# SPECIALIZE readSummaryPCM :: (Functor m, Monad m) => Iteratee ByteString m (SummaryData (PCM Int32)) #-}
+#endif
 
 instance ZoomWrite (PCM Int32) where
     write = writeData
 
-instance ZoomWrite (TimeStamp, (PCM Int32)) where
+instance ZoomWrite (SampleOffset, (PCM Int32)) where
     write = writeDataVBR
 
 instance ZoomWritable (PCM Int32) where
     data SummaryWork (PCM Int32) = SummaryWorkPCMInt32
-        { swPCMInt32Time  :: {-# UNPACK #-}!TimeStamp
+        { swPCMInt32Time  :: {-# UNPACK #-}!SampleOffset
         , swPCMInt32Last  :: {-# UNPACK #-}!Int32
         , swPCMInt32Min   :: {-# UNPACK #-}!Int32
         , swPCMInt32Max   :: {-# UNPACK #-}!Int32
@@ -377,7 +392,7 @@
     pcmAvg = summaryInt32Avg
     pcmRMS = summaryInt32RMS
 
-    pcmWorkTime = swPCMInt32Time
+    pcmWorkSO = swPCMInt32Time
     pcmWorkLast = swPCMInt32Last
     pcmWorkMin = swPCMInt32Min
     pcmWorkMax = swPCMInt32Max
@@ -387,11 +402,13 @@
     pcmMkSummary = SummaryPCMInt32
     pcmMkSummaryWork = SummaryWorkPCMInt32
 
+#if __GLASGOW_HASKELL__ >= 702
 {-# SPECIALIZE fromSummaryPCM :: SummaryData (PCM Int32) -> Builder #-}
-{-# SPECIALIZE initSummaryPCMBounded :: TimeStamp -> SummaryWork (PCM Int32) #-}
-{-# SPECIALIZE mkSummaryPCM :: TimeStampDiff -> SummaryWork (PCM Int32) -> SummaryData (PCM Int32) #-}
-{-# SPECIALIZE appendSummaryPCM :: TimeStampDiff -> SummaryData (PCM Int32) -> TimeStampDiff -> SummaryData (PCM Int32) -> SummaryData (PCM Int32) #-}
-{-# SPECIALIZE updateSummaryPCM :: TimeStamp -> PCM Int32 -> SummaryWork (PCM Int32) -> SummaryWork (PCM Int32) #-}
+{-# SPECIALIZE initSummaryPCMBounded :: SampleOffset -> SummaryWork (PCM Int32) #-}
+{-# SPECIALIZE mkSummaryPCM :: SampleOffsetDiff -> SummaryWork (PCM Int32) -> SummaryData (PCM Int32) #-}
+{-# SPECIALIZE appendSummaryPCM :: SampleOffsetDiff -> SummaryData (PCM Int32) -> SampleOffsetDiff -> SummaryData (PCM Int32) -> SummaryData (PCM Int32) #-}
+{-# SPECIALIZE updateSummaryPCM :: SampleOffset -> PCM Int32 -> SummaryWork (PCM Int32) -> SummaryWork (PCM Int32) #-}
+#endif
 
 ----------------------------------------------------------------------
 -- Int64
@@ -414,17 +431,19 @@
 
     deltaDecodeRaw = deltaDecodePCM
 
+#if __GLASGOW_HASKELL__ >= 702
 {-# SPECIALIZE readSummaryPCM :: (Functor m, Monad m) => Iteratee ByteString m (SummaryData (PCM Int64)) #-}
+#endif
 
 instance ZoomWrite (PCM Int64) where
     write = writeData
 
-instance ZoomWrite (TimeStamp, (PCM Int64)) where
+instance ZoomWrite (SampleOffset, (PCM Int64)) where
     write = writeDataVBR
 
 instance ZoomWritable (PCM Int64) where
     data SummaryWork (PCM Int64) = SummaryWorkPCMInt64
-        { swPCMInt64Time  :: {-# UNPACK #-}!TimeStamp
+        { swPCMInt64Time  :: {-# UNPACK #-}!SampleOffset
         , swPCMInt64Last  :: {-# UNPACK #-}!Int64
         , swPCMInt64Min   :: {-# UNPACK #-}!Int64
         , swPCMInt64Max   :: {-# UNPACK #-}!Int64
@@ -449,7 +468,7 @@
     pcmAvg = summaryInt64Avg
     pcmRMS = summaryInt64RMS
 
-    pcmWorkTime = swPCMInt64Time
+    pcmWorkSO = swPCMInt64Time
     pcmWorkLast = swPCMInt64Last
     pcmWorkMin = swPCMInt64Min
     pcmWorkMax = swPCMInt64Max
@@ -459,11 +478,13 @@
     pcmMkSummary = SummaryPCMInt64
     pcmMkSummaryWork = SummaryWorkPCMInt64
 
+#if __GLASGOW_HASKELL__ >= 702
 {-# SPECIALIZE fromSummaryPCM :: SummaryData (PCM Int64) -> Builder #-}
-{-# SPECIALIZE initSummaryPCMBounded :: TimeStamp -> SummaryWork (PCM Int64) #-}
-{-# SPECIALIZE mkSummaryPCM :: TimeStampDiff -> SummaryWork (PCM Int64) -> SummaryData (PCM Int64) #-}
-{-# SPECIALIZE appendSummaryPCM :: TimeStampDiff -> SummaryData (PCM Int64) -> TimeStampDiff -> SummaryData (PCM Int64) -> SummaryData (PCM Int64) #-}
-{-# SPECIALIZE updateSummaryPCM :: TimeStamp -> PCM Int64 -> SummaryWork (PCM Int64) -> SummaryWork (PCM Int64) #-}
+{-# SPECIALIZE initSummaryPCMBounded :: SampleOffset -> SummaryWork (PCM Int64) #-}
+{-# SPECIALIZE mkSummaryPCM :: SampleOffsetDiff -> SummaryWork (PCM Int64) -> SummaryData (PCM Int64) #-}
+{-# SPECIALIZE appendSummaryPCM :: SampleOffsetDiff -> SummaryData (PCM Int64) -> SampleOffsetDiff -> SummaryData (PCM Int64) -> SummaryData (PCM Int64) #-}
+{-# SPECIALIZE updateSummaryPCM :: SampleOffset -> PCM Int64 -> SummaryWork (PCM Int64) -> SummaryWork (PCM Int64) #-}
+#endif
 
 ----------------------------------------------------------------------
 
diff --git a/Data/ZoomCache/PCM/Internal.hs b/Data/ZoomCache/PCM/Internal.hs
--- a/Data/ZoomCache/PCM/Internal.hs
+++ b/Data/ZoomCache/PCM/Internal.hs
@@ -42,24 +42,24 @@
 {-# INLINABLE fromSummaryPCM #-}
 
 initSummaryPCMBounded :: (Bounded a, ZoomPCM a)
-                      => TimeStamp -> SummaryWork (PCM a)
+                      => SampleOffset -> SummaryWork (PCM a)
 initSummaryPCMBounded entry = pcmMkSummaryWork entry 0 maxBound minBound 0.0 0.0
 {-# INLINEABLE initSummaryPCMBounded #-}
 
 mkSummaryPCM :: ZoomPCM a
-             => TimeStampDiff -> SummaryWork (PCM a)
+             => SampleOffsetDiff -> SummaryWork (PCM a)
              -> SummaryData (PCM a)
-mkSummaryPCM (TSDiff dur) sw =
+mkSummaryPCM (SODiff dur) sw =
     pcmMkSummary (pcmWorkMin sw) (pcmWorkMax sw)
                  (pcmWorkSum sw / fromIntegral dur)
                  (sqrt $ (pcmWorkSumSq sw) / fromIntegral dur)
 {-# INLINEABLE mkSummaryPCM #-}
 
 appendSummaryPCM :: ZoomPCM a
-                 => TimeStampDiff -> SummaryData (PCM a)
-                 -> TimeStampDiff -> SummaryData (PCM a)
+                 => SampleOffsetDiff -> SummaryData (PCM a)
+                 -> SampleOffsetDiff -> SummaryData (PCM a)
                  -> SummaryData (PCM a)
-appendSummaryPCM (TSDiff dur1) s1 (TSDiff dur2) s2 = pcmMkSummary
+appendSummaryPCM (SODiff dur1) s1 (SODiff dur2) s2 = pcmMkSummary
     (min (pcmMin s1) (pcmMin s2))
     (max (pcmMax s1) (pcmMax s2))
     (((pcmAvg s1 * fromIntegral dur1) + (pcmAvg s2 * fromIntegral dur2)) / fromIntegral durSum)
@@ -71,7 +71,7 @@
 {-# INLINEABLE appendSummaryPCM #-}
 
 updateSummaryPCM :: ZoomPCM a
-                 => TimeStamp -> PCM a
+                 => SampleOffset -> PCM a
                  -> SummaryWork (PCM a)
                  -> SummaryWork (PCM a)
 updateSummaryPCM t (PCM d) sw =
@@ -81,7 +81,7 @@
                      ((pcmWorkSum sw) + realToFrac (d * dur))
                      ((pcmWorkSumSq sw) + realToFrac (d*d * dur))
     where
-        !dur = fromIntegral $ (unTS t) - (unTS (pcmWorkTime sw))
+        !dur = fromIntegral $ (unSO t) - (unSO (pcmWorkSO sw))
 {-# INLINEABLE updateSummaryPCM #-}
 
 deltaDecodePCM :: ZoomPCM a => [PCM a] -> [PCM a]
diff --git a/Data/ZoomCache/PCM/Types.hs b/Data/ZoomCache/PCM/Types.hs
--- a/Data/ZoomCache/PCM/Types.hs
+++ b/Data/ZoomCache/PCM/Types.hs
@@ -31,14 +31,14 @@
     pcmAvg :: SummaryData (PCM a) -> Double
     pcmRMS :: SummaryData (PCM a) -> Double
 
-    pcmWorkTime :: SummaryWork (PCM a) -> TimeStamp
-    pcmWorkLast :: SummaryWork (PCM a) -> a
-    pcmWorkMin :: SummaryWork (PCM a) -> a
-    pcmWorkMax :: SummaryWork (PCM a) -> a
-    pcmWorkSum :: SummaryWork (PCM a) -> Double
+    pcmWorkSO    :: SummaryWork (PCM a) -> SampleOffset
+    pcmWorkLast  :: SummaryWork (PCM a) -> a
+    pcmWorkMin   :: SummaryWork (PCM a) -> a
+    pcmWorkMax   :: SummaryWork (PCM a) -> a
+    pcmWorkSum   :: SummaryWork (PCM a) -> Double
     pcmWorkSumSq :: SummaryWork (PCM a) -> Double
 
     pcmMkSummary :: a -> a -> Double -> Double -> SummaryData (PCM a)
-    pcmMkSummaryWork :: TimeStamp -> a -> a -> a -> Double -> Double
+    pcmMkSummaryWork :: SampleOffset -> a -> a -> a -> Double -> Double
                      -> SummaryWork (PCM a)
 
diff --git a/zoom-cache-pcm.cabal b/zoom-cache-pcm.cabal
--- a/zoom-cache-pcm.cabal
+++ b/zoom-cache-pcm.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:             0.2.0.1
+Version:             0.2.1.0
 
 Synopsis:            Library for zoom-cache PCM audio codecs
 
@@ -48,7 +48,7 @@
     containers                >= 0.2     && < 0.5,
     iteratee                  >= 0.8.6.0 && < 0.9,
     ListLike                  >= 1.0     && < 4,
-    zoom-cache                >= 0.7.0.0 && < 0.9
+    zoom-cache                >= 0.7.0.0 && < 0.10
 
   Exposed-modules:
     Data.ZoomCache.PCM
