diff --git a/benchmark/hashtable-benchmark.cabal b/benchmark/hashtable-benchmark.cabal
--- a/benchmark/hashtable-benchmark.cabal
+++ b/benchmark/hashtable-benchmark.cabal
@@ -17,7 +17,7 @@
   main-is:           Main.hs
   hs-source-dirs:    src ../src
 
-  build-depends:     base                 >= 4.4     && <5,
+  build-depends:     base                 >= 4       && <5,
                      base16-bytestring    == 0.1.*,
                      bytestring           >= 0.10    && <0.11,
                      containers           >= 0.4     && <0.6,
diff --git a/hashtables.cabal b/hashtables.cabal
--- a/hashtables.cabal
+++ b/hashtables.cabal
@@ -1,5 +1,5 @@
 Name:                hashtables
-Version:             1.1.0.1
+Version:             1.1.0.2
 Synopsis:            Mutable hash tables in the ST monad
 Homepage:            http://github.com/gregorycollins/hashtables
 License:             BSD3
@@ -169,7 +169,7 @@
                      Data.HashTable.Internal.Utils,
                      Data.HashTable.Internal.Linear.Bucket
 
-  Build-depends:     base      >= 4.4 && <5,
+  Build-depends:     base      >= 4   && <5,
                      hashable  >= 1.1 && <2,
                      primitive,
                      vector    >= 0.7 && < 0.11
diff --git a/src/Data/HashTable/IO.hs b/src/Data/HashTable/IO.hs
--- a/src/Data/HashTable/IO.hs
+++ b/src/Data/HashTable/IO.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE BangPatterns   #-}
+{-# LANGUAGE CPP            #-}
 {-# LANGUAGE EmptyDataDecls #-}
 
 -- | This module provides wrappers in 'IO' around the functions from
@@ -56,8 +57,12 @@
 
 ------------------------------------------------------------------------------
 import           Control.Monad.Primitive  (PrimState)
+#if MIN_VERSION_base(4,4,0)
 import           Control.Monad.ST         (stToIO)
 import           Control.Monad.ST.Unsafe  (unsafeIOToST)
+#else
+import Control.Monad.ST (stToIO, unsafeIOToST)
+#endif
 import           Data.Hashable            (Hashable)
 import qualified Data.HashTable.Class     as C
 import           Prelude                  hiding (lookup, mapM_)
diff --git a/src/Data/HashTable/Internal/CacheLine.hs b/src/Data/HashTable/Internal/CacheLine.hs
--- a/src/Data/HashTable/Internal/CacheLine.hs
+++ b/src/Data/HashTable/Internal/CacheLine.hs
@@ -19,8 +19,13 @@
   , maskw#
   ) where
 
+#if MIN_VERSION_base(4,4,0)
 import           Control.Monad.ST (ST)
 import           Control.Monad.ST.Unsafe
+#else
+import           Control.Monad.ST
+#endif
+
 import           Data.HashTable.Internal.IntArray (IntArray)
 import qualified Data.HashTable.Internal.IntArray as M
 
diff --git a/test/suite/Data/HashTable/Test/Common.hs b/test/suite/Data/HashTable/Test/Common.hs
--- a/test/suite/Data/HashTable/Test/Common.hs
+++ b/test/suite/Data/HashTable/Test/Common.hs
@@ -12,7 +12,12 @@
 
 ------------------------------------------------------------------------------
 import           Control.Monad                        (foldM_, liftM, when)
+
+#if MIN_VERSION_base(4,4,0)
 import           Control.Monad.ST.Unsafe              (unsafeIOToST)
+#else
+import           Control.Monad.ST                     (unsafeIOToST)
+#endif
 import           Data.IORef
 import           Data.List                            hiding (delete, insert,
                                                        lookup)
