diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+### 0.1.3.4
+
+* Fix byte array bugs in System.Random.PCG.Pure
+
 ### 0.1.3.3
 
 * Added System.Random.PCG.Pure module.
diff --git a/pcg-random.cabal b/pcg-random.cabal
--- a/pcg-random.cabal
+++ b/pcg-random.cabal
@@ -1,5 +1,5 @@
 name:                pcg-random
-version:             0.1.3.3
+version:             0.1.3.4
 synopsis:            Haskell bindings to the PCG random number generator.
 description:
   PCG is a family of simple fast space-efficient statistically good
diff --git a/src/System/Random/PCG/Pure.hs b/src/System/Random/PCG/Pure.hs
--- a/src/System/Random/PCG/Pure.hs
+++ b/src/System/Random/PCG/Pure.hs
@@ -107,8 +107,11 @@
   poke ptr (SetSeq x y) = poke ptr' x >> pokeElemOff ptr' 1 y
     where ptr' = castPtr ptr
   {-# INLINE poke #-}
-  peek ptr = SetSeq <$> peek ptr' <*> peekElemOff ptr' 1
-    where ptr' = castPtr ptr
+  peek ptr = do
+    let ptr' = castPtr ptr
+    s <- peek ptr'
+    inc <- peekElemOff ptr' 1
+    return $ SetSeq s inc
   {-# INLINE peek #-}
 
 -- | Fixed seed.
@@ -199,7 +202,10 @@
 
 -- | Save the state of a 'Gen' in a 'Seed'.
 save :: PrimMonad m => Gen (PrimState m) -> m SetSeq
-save (G a) = SetSeq <$> readByteArray a 0 <*> readByteArray a 8
+save (G a) = do
+  s   <- readByteArray a 0
+  inc <- readByteArray a 1
+  return $ SetSeq s inc
 {-# INLINE save #-}
 
 -- | Restore a 'Gen' from a 'Seed'.
@@ -207,7 +213,7 @@
 restore (SetSeq s inc) = do
   a <- newByteArray 16
   writeByteArray a 0 s
-  writeByteArray a 8 inc
+  writeByteArray a 1 inc
   return $! G a
 {-# INLINE restore #-}
 
@@ -277,14 +283,14 @@
 instance (PrimMonad m, s ~ PrimState m) => Generator (Gen s) m where
   uniform1 f (G a) = do
     s   <- readByteArray a 0
-    inc <- readByteArray a 8
+    inc <- readByteArray a 1
     writeByteArray a 0 $! s * multiplier + inc
     return $! f (output s)
   {-# INLINE uniform1 #-}
 
   uniform2 f (G a) = do
     s   <- readByteArray a 0
-    inc <- readByteArray a 8
+    inc <- readByteArray a 1
     let !s' = s * multiplier + inc
     writeByteArray a 0 $! s' * multiplier + inc
     return $! f (output s) (output s')
