diff --git a/Graphics/Mars/Array.hs b/Graphics/Mars/Array.hs
--- a/Graphics/Mars/Array.hs
+++ b/Graphics/Mars/Array.hs
@@ -12,8 +12,9 @@
 
 import Prelude(
   (+), (-), (*), Num, Bool, (==), return, Maybe(..), map, sequence_)
-import Data.Array.IArray
+import Data.Array.IArray(IArray, bounds)
 import Data.Array.IO
+  (Ix, MArray, getBounds, inRange, readArray, getBounds, inRange, writeArray)
 
 safeReadArray :: (Ix i, MArray a e m) => a i e -> i -> m (Maybe e)
 safeReadArray a i = do r <- getBounds a
diff --git a/Graphics/Mars/Example.hs b/Graphics/Mars/Example.hs
--- a/Graphics/Mars/Example.hs
+++ b/Graphics/Mars/Example.hs
@@ -12,7 +12,7 @@
 
 import Prelude(IO, (.), ($), writeFile)
 import Graphics.Gloss (black)
-import Data.Array.Unboxed
+import Data.Array.Unboxed (elems)
 import Graphics.Mars.Paint
 import Graphics.Mars.Graph
 import Graphics.Mars.Display2D
diff --git a/Graphics/Mars/Graph.hs b/Graphics/Mars/Graph.hs
--- a/Graphics/Mars/Graph.hs
+++ b/Graphics/Mars/Graph.hs
@@ -11,11 +11,11 @@
 module Graphics.Mars.Graph where
 
 import Prelude((+), (*), fromIntegral, round, Float, Int, take, IO)
-import Data.Array.IO
-import Data.Array.Unboxed
+import Data.Array.IO (newArray, IOUArray, freeze)
+import Data.Array.Unboxed (UArray)
 import Graphics.Mars.Stamp
 import Graphics.Mars.Walk
-import System.Random
+import System.Random (mkStdGen)
 
 -- |Beginning in the center, follows a random walk path, and stamps a circle
 -- shape onto the array at each step. Internally uses a mutable unboxed array
diff --git a/Graphics/Mars/Paint.hs b/Graphics/Mars/Paint.hs
--- a/Graphics/Mars/Paint.hs
+++ b/Graphics/Mars/Paint.hs
@@ -15,15 +15,14 @@
 import Prelude(
   (+), Bool(..), fmap, Float, Int, (<), (>),
   (-), (/), Ord, Num, RealFrac, round, (*))
-import Data.ByteString
-import Data.Colour.RGBSpace
-import Data.Colour.RGBSpace.HSL hiding (hue, lightness)
-import Data.Word
+import Data.ByteString (ByteString, pack, concat)
+import Data.Colour.RGBSpace (channelRed, channelGreen, channelBlue)
+import Data.Colour.RGBSpace.HSL (hsl)
+import Data.Word (Word8)
 import Graphics.Gloss( Picture,
                        bitmapOfByteString )
-import Data.Array.IArray
-import Data.Foldable
-import Data.Array.Unboxed
+import Data.Foldable (Foldable, foldr)
+import Data.Array.Unboxed (elems, bounds, UArray)
 
 ratioToByte :: RealFrac a => a -> Word8
 ratioToByte r = round (r * 255) :: Word8
diff --git a/Graphics/Mars/Ply.hs b/Graphics/Mars/Ply.hs
--- a/Graphics/Mars/Ply.hs
+++ b/Graphics/Mars/Ply.hs
@@ -20,13 +20,10 @@
 import Prelude(
   show, (++), String, concat, Int, map, (+), (-),
   filter, length, or, Float, fromIntegral)
-import Data.Array.IArray
-import Data.Array.MArray
-import Data.Array.IO
 import Graphics.Mars.Array
-import Data.Maybe
-import Data.Array.Unboxed as U
-import Data.Array as A
+import Data.Maybe (Maybe(..), fromJust, isJust)
+import Data.Array.Unboxed as U (UArray, bounds, indices, assocs)
+import Data.Array as A (Array, elems, bounds, listArray, array)
 
 data Vertex = Vertex Float Float Float
 data Face = Face Int Int Int Int
diff --git a/Graphics/Mars/ReaderStateRandom.hs b/Graphics/Mars/ReaderStateRandom.hs
--- a/Graphics/Mars/ReaderStateRandom.hs
+++ b/Graphics/Mars/ReaderStateRandom.hs
@@ -11,8 +11,7 @@
 Stacks the Reader, Lazy State, and Random monads together.
 -}
 module Graphics.Mars.ReaderStateRandom (
-  module System.Random
-  , module Control.Monad.Reader
+  module Control.Monad.Reader
   , module Control.Monad.State.Lazy
   , module Control.Monad.Random
   , ReaderStateRandom(..)
@@ -22,8 +21,7 @@
   ) where
 
 import Prelude((.), fst, snd)
-import System.Random
-import Control.Applicative
+import Control.Applicative (Applicative)
 import Control.Monad.Random
 import Control.Monad.State.Lazy
 import Control.Monad.Reader
diff --git a/Graphics/Mars/Stamp.hs b/Graphics/Mars/Stamp.hs
--- a/Graphics/Mars/Stamp.hs
+++ b/Graphics/Mars/Stamp.hs
@@ -17,8 +17,8 @@
 import Prelude(
   map, sequence_, Num, (+), fromIntegral, abs,
   (<=), (-), (*), ceiling, Float, Integral, (**), sqrt)
-import Data.Array.IArray
-import Data.Array.IO
+import Data.Array.IArray (assocs, IArray, listArray)
+import Data.Array.IO (MArray, Ix)
 import Graphics.Mars.Array
 
 type Point = (Float, Float)
diff --git a/Graphics/Mars/Walk.hs b/Graphics/Mars/Walk.hs
--- a/Graphics/Mars/Walk.hs
+++ b/Graphics/Mars/Walk.hs
@@ -25,6 +25,7 @@
 
 import Prelude(repeat, Float, (/), (+), (*), (-))
 import Graphics.Mars.ReaderStateRandom
+  (ask, put, get, RandomGen, getRandomR, evalRSR, sequence, ReaderStateRandom)
 
 type RandomWalk g = ReaderStateRandom Float (Float, Float) g (Float, Float)
 
diff --git a/mars.cabal b/mars.cabal
--- a/mars.cabal
+++ b/mars.cabal
@@ -10,7 +10,7 @@
 -- PVP summary:      +-+------- breaking API changes
 --                   | | +----- non-breaking API additions
 --                   | | | +--- code changes with no API change
-version:             0.1.0.3
+version:             0.1.0.4
 
 -- A short (one-line) description of the package.
 synopsis:            Generates mountainous terrain using a random walk algorithm.
@@ -74,10 +74,10 @@
   -- Other library packages from which modules are imported.
   build-depends:       base >=4.6 && <4.10
                        , gloss >=1.7 && <1.10
-                       , random >=1.0 && <1.1
+                       , random >=1.0 && <1.2
                        , MonadRandom >=0.4 && <0.5
                        , mtl >=2.2 && <2.3
-                       , array >=0.4 && <0.5
+                       , array >=0.4 && <0.6
                        , bytestring >=0.10 && <0.11
                        , colour >=2.3 && <2.4
   
