diff --git a/primitive-atomic.cabal b/primitive-atomic.cabal
--- a/primitive-atomic.cabal
+++ b/primitive-atomic.cabal
@@ -1,6 +1,6 @@
 cabal-version: 2.2
 name: primitive-atomic
-version: 0.1.0.0
+version: 0.1.0.1
 synopsis: Wrappers for primops around atomic operations
 homepage: https://github.com/andrewthad/primitive-atomic
 license: BSD-3-Clause
@@ -21,7 +21,8 @@
     Data.Primitive.PrimArray.Atomic
   build-depends:
     , base >=4.11.1 && <5
-    , primitive >= 0.6.4
+    , primitive >= 0.7 && <0.8
+    , primitive-unlifted >= 0.1 && <0.2
   hs-source-dirs: src
   default-language: Haskell2010
   ghc-options: -Wall
@@ -34,5 +35,6 @@
     , base
     , primitive-atomic
     , primitive
+    , primitive-unlifted
   ghc-options: -Wall -O2
   default-language: Haskell2010
diff --git a/src/Data/Primitive/Unlifted/Atomic.hs b/src/Data/Primitive/Unlifted/Atomic.hs
--- a/src/Data/Primitive/Unlifted/Atomic.hs
+++ b/src/Data/Primitive/Unlifted/Atomic.hs
@@ -8,8 +8,8 @@
   ) where
 
 import Control.Monad.Primitive (PrimMonad,PrimState,primitive)
-import Data.Primitive (MutableUnliftedArray(..),PrimUnlifted)
-import Data.Primitive (toArrayArray#,fromArrayArray#)
+import Data.Primitive.Unlifted.Array (MutableUnliftedArray(..))
+import Data.Primitive.Unlifted.Class (PrimUnlifted,Unlifted,toUnlifted#,fromUnlifted#)
 import GHC.Exts (Any,MutableArrayArray#,MutableArray#,ArrayArray#,Int(I#))
 import GHC.Exts (casArray#,isTrue#,(==#),unsafeCoerce#)
 
@@ -32,9 +32,11 @@
 casUnliftedArray (MutableUnliftedArray arr#) (I# i#) old new =
   -- All of this unsafeCoercing is really nasty business. This will go away
   -- once https://github.com/ghc-proposals/ghc-proposals/pull/203 happens.
+  -- Also, this is unsound if the result is immidiately consumed by
+  -- the FFI.
   primitive $ \s0 ->
-    let !uold = (unsafeCoerce# :: ArrayArray# -> Any) (toArrayArray# old)
-        !unew = (unsafeCoerce# :: ArrayArray# -> Any) (toArrayArray# new)
+    let !uold = (unsafeCoerce# :: Unlifted a -> Any) (toUnlifted# old)
+        !unew = (unsafeCoerce# :: Unlifted a -> Any) (toUnlifted# new)
      in case casArray# ((unsafeCoerce# :: MutableArrayArray# (PrimState m) -> MutableArray# (PrimState m) Any) arr#) i# uold unew s0 of
-          (# s1, n, ur #) -> (# s1, (isTrue# (n ==# 0# ),fromArrayArray# ((unsafeCoerce# :: Any -> ArrayArray#) ur)) #)
+          (# s1, n, ur #) -> (# s1, (isTrue# (n ==# 0# ),fromUnlifted# ((unsafeCoerce# :: Any -> Unlifted a) ur)) #)
 
diff --git a/test/Unit.hs b/test/Unit.hs
--- a/test/Unit.hs
+++ b/test/Unit.hs
@@ -1,6 +1,7 @@
 {-# language MultiWayIf #-}
 
 import Data.Primitive.Unlifted.Atomic
+import Data.Primitive.Unlifted.Array
 import Data.Primitive
 import Control.Monad (when)
 
