diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Changelog for thread-utils-context
 
+## 0.3.0.4 
+
+- Fix compilation on GHC 8.12
+
 ## 0.3.0.3
 
 - Fix compilation of purgeDeadThreads on GHC 9.6
diff --git a/src/Control/Concurrent/Thread/Storage.hs b/src/Control/Concurrent/Thread/Storage.hs
--- a/src/Control/Concurrent/Thread/Storage.hs
+++ b/src/Control/Concurrent/Thread/Storage.hs
@@ -71,7 +71,7 @@
 import qualified Data.IntSet as IS
 import Foreign.C.Types
 import Prelude hiding (lookup)
-import Unsafe.Coerce (unsafeCoerce#)
+import GHC.Exts (unsafeCoerce#)
 
 foreign import ccall unsafe "rts_getThreadId" c_getThreadId :: Addr# -> CULLong
 
diff --git a/thread-utils-context.cabal b/thread-utils-context.cabal
--- a/thread-utils-context.cabal
+++ b/thread-utils-context.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           thread-utils-context
-version:        0.3.0.3
+version:        0.3.0.4
 synopsis:       Garbage-collected thread local storage
 description:    Please see the README on GitHub at <https://github.com/iand675/thread-utils-context#readme>
 category:       Concurrency
