diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Changelog for `mempack`
 
+## 0.1.2.0
+
+* Fix 32-bit support
+
 ## 0.1.1.0
 
 * Add helpers `packByteStringM`, `unpackByteStringM` and `unpackByteArrayLen`
diff --git a/mempack.cabal b/mempack.cabal
--- a/mempack.cabal
+++ b/mempack.cabal
@@ -1,5 +1,5 @@
 name:                mempack
-version:             0.1.1.0
+version:             0.1.2.0
 synopsis:            Short description
 description:         Please see the README on GitHub at <https://github.com/lehins/mempack#readme>
 homepage:            https://github.com/lehins/mempack
@@ -19,7 +19,7 @@
                    , GHC == 9.0.2
                    , GHC == 9.2.8
                    , GHC == 9.4.8
-                   , GHC == 9.6.6
+                   , GHC == 9.6.7
                    , GHC == 9.8.4
                    , GHC == 9.10.1
                    , GHC == 9.12.1
@@ -92,8 +92,7 @@
                      , mempack
                      , serialise
                      , store
-                     -- This upper bound is necessary to unscrew store building
-                     , vector <0.13.2
+                     , vector
   default-language:    Haskell2010
 
 source-repository head
diff --git a/src/Data/MemPack.hs b/src/Data/MemPack.hs
--- a/src/Data/MemPack.hs
+++ b/src/Data/MemPack.hs
@@ -322,9 +322,11 @@
             buf
             (\ba# -> C# (indexWord8ArrayAsWideChar# ba# i#))
             (\addr# -> C# (indexWideCharOffAddr# (addr# `plusAddr#` i#) 0#))
-    when (ord c > 0x10FFFF) $
+        ordc :: Word32
+        ordc = fromIntegral (ord c)
+    when (ordc > 0x10FFFF) $
       F.fail $
-        "Out of bounds Char was detected: '\\x" ++ showHex (fromEnum c) "'"
+        "Out of bounds Char was detected: '\\x" ++ showHex ordc "'"
     pure c
   {-# INLINE unpackM #-}
 
@@ -1286,16 +1288,16 @@
   packedByteCount = packedVarLenByteCount
   {-# INLINE packedByteCount #-}
 #if WORD_SIZE_IN_BITS == 32
-  packM mba v@(VarLen x) = p7 (p7 (p7 (p7 (p7 (errorTooManyBits "Word"))))) (numBits - 7)
+  packM v@(VarLen x) = p7 (p7 (p7 (p7 (p7 (errorTooManyBits "Word"))))) (numBits - 7)
     where
-      p7 = packIntoCont7 mba x
+      p7 = packIntoCont7 x
       {-# INLINE p7 #-}
       numBits = packedVarLenByteCount v * 7
   {-# INLINE packM #-}
-  unpackM buf = do
-    let d7 = unpack7BitVarLen buf
+  unpackM = do
+    let d7 = unpack7BitVarLen
         {-# INLINE d7 #-}
-    VarLen <$> d7 (d7 (d7 (d7 (unpack7BitVarLenLast buf 0b_1111_0000)))) 0 0
+    VarLen <$> d7 (d7 (d7 (d7 (unpack7BitVarLenLast 0b_1111_0000)))) 0 0
   {-# INLINE unpackM #-}
 #elif WORD_SIZE_IN_BITS == 64
   packM v@(VarLen x) =
diff --git a/tests/Test/Common.hs b/tests/Test/Common.hs
--- a/tests/Test/Common.hs
+++ b/tests/Test/Common.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# OPTIONS_GHC -Wno-orphans #-}
 
@@ -25,9 +26,15 @@
   {-# INLINE uniformWord32 #-}
   uniformWord64 QC = MkGen (\r _n -> runStateGen_ r uniformWord64)
   {-# INLINE uniformWord64 #-}
+#if MIN_VERSION_random(1,3,0)
+  uniformByteArrayM pinned k QC =
+    MkGen (\r _n -> runStateGen_ r (uniformByteArrayM pinned k))
+  {-# INLINE uniformByteArrayM #-}
+#else
   uniformShortByteString k QC =
     MkGen (\r _n -> runStateGen_ r (uniformShortByteString k))
   {-# INLINE uniformShortByteString #-}
+#endif
 
 instance Arbitrary ByteArray where
   arbitrary = qcByteArray . getNonNegative =<< arbitrary
@@ -51,4 +58,8 @@
 qcByteString n = uniformByteStringM (fromIntegral n) QC
 
 qcShortByteString :: Int -> Gen SBS.ShortByteString
+#if MIN_VERSION_random(1,3,0)
+qcShortByteString n = uniformShortByteStringM (fromIntegral n) QC
+#else
 qcShortByteString n = uniformShortByteString (fromIntegral n) QC
+#endif
diff --git a/tests/Test/MemPackSpec.hs b/tests/Test/MemPackSpec.hs
--- a/tests/Test/MemPackSpec.hs
+++ b/tests/Test/MemPackSpec.hs
@@ -59,6 +59,9 @@
   uniformM = uniformEnumM
 instance UniformRange Length where
   uniformRM = uniformEnumRM
+#if MIN_VERSION_random(1,3,0)
+  isInRange = isInRangeEnum
+#endif
 
 instance Arbitrary Length where
   -- Fun fact: `abs minBound == minBound` for Int, so instead of abs we clear top most
