diff -ruN binary-0.5.0.2/binary.cabal binary-0.5.0.3/binary.cabal
--- binary-0.5.0.2/binary.cabal	2009-09-16 10:50:42.000000000 -0700
+++ binary-0.5.0.3/binary.cabal	2010-10-09 06:53:40.000000000 -0700
@@ -1,5 +1,5 @@
 name:            binary
-version:         0.5.0.2
+version:         0.5.0.3
 license:         BSD3
 license-file:    LICENSE
 author:          Lennart Kolmodin <kolmodin@dtek.chalmers.se>
diff -ruN binary-0.5.0.2/src/Data/Binary/Get.hs binary-0.5.0.3/src/Data/Binary/Get.hs
--- binary-0.5.0.2/src/Data/Binary/Get.hs	2009-09-16 10:50:42.000000000 -0700
+++ binary-0.5.0.3/src/Data/Binary/Get.hs	2010-09-25 10:10:10.000000000 -0700
@@ -1,6 +1,5 @@
-{-# LANGUAGE CPP #-}
-{-# OPTIONS_GHC -fglasgow-exts #-}
--- for unboxed shifts
+{-# LANGUAGE CPP, MagicHash, UnboxedTuples #-}
+-- MagicHash, UnboxedTuples for unboxed shifts
 
 -----------------------------------------------------------------------------
 -- |
@@ -370,16 +369,17 @@
         return (xs, ys))
 
   where
-        first r 0 xs@(L.Chunk _ _) = writeSTRef r xs    >> return L.Empty
-        first r _ L.Empty          = writeSTRef r L.Empty >> return L.Empty
-
-        first r n (L.Chunk x xs)
-          | n < l     = do writeSTRef r (L.Chunk (B.drop (fromIntegral n) x) xs)
-                           return $ L.Chunk (B.take (fromIntegral n) x) L.Empty
-          | otherwise = do writeSTRef r (L.drop (n - l) xs)
-                           liftM (L.Chunk x) $ unsafeInterleaveST (first r (n - l) xs)
-
-         where l = fromIntegral (B.length x)
+    first :: STRef s L.ByteString -> Int64 -> L.ByteString -> ST s L.ByteString
+    first r 0 xs@(L.Chunk _ _) = writeSTRef r xs    >> return L.Empty
+    first r _ L.Empty          = writeSTRef r L.Empty >> return L.Empty
+
+    first r n (L.Chunk x xs)
+      | n < l     = do writeSTRef r (L.Chunk (B.drop (fromIntegral n) x) xs)
+                       return $ L.Chunk (B.take (fromIntegral n) x) L.Empty
+      | otherwise = do writeSTRef r (L.drop (n - l) xs)
+                       liftM (L.Chunk x) $ unsafeInterleaveST (first r (n - l) xs)
+      where 
+        l = fromIntegral (B.length x)
 #else
 splitAtST i (B.LPS ps)  = runST (
      do r  <- newSTRef undefined
diff -ruN binary-0.5.0.2/src/Data/Binary/Put.hs binary-0.5.0.3/src/Data/Binary/Put.hs
--- binary-0.5.0.2/src/Data/Binary/Put.hs	2009-09-16 10:50:42.000000000 -0700
+++ binary-0.5.0.3/src/Data/Binary/Put.hs	2010-09-25 10:10:10.000000000 -0700
@@ -64,7 +64,7 @@
 ------------------------------------------------------------------------
 
 -- XXX Strict in buffer only. 
-data PairS a = PairS a {-# UNPACK #-}!Builder
+data PairS a = PairS a !Builder
 
 sndS :: PairS a -> Builder
 sndS (PairS _ b) = b
