diff --git a/Control/Monad/ST/Trans.hs b/Control/Monad/ST/Trans.hs
--- a/Control/Monad/ST/Trans.hs
+++ b/Control/Monad/ST/Trans.hs
@@ -130,6 +130,7 @@
 instance Eq (STRef s a) where
   STRef v1 == STRef v2 = isTrue# (sameMutVar# v1 v2)
 
+{-# NOINLINE runST #-}
 -- | Executes a computation in the 'STT' monad transformer
 runST :: Monad m => (forall s. STT s m a) -> m a
 runST m = let (STT f) = m
diff --git a/STMonadTrans.cabal b/STMonadTrans.cabal
--- a/STMonadTrans.cabal
+++ b/STMonadTrans.cabal
@@ -1,6 +1,6 @@
 name:		STMonadTrans
-version:	0.3.3
-cabal-version:  >= 1.6
+version:	0.3.4
+cabal-version:  >= 1.8
 license:	BSD3
 license-file:	LICENSE
 author:		Josef Svenningsson
@@ -37,3 +37,8 @@
   extensions:	CPP, MagicHash, UnboxedTuples, Rank2Types, FlexibleInstances,
         MultiParamTypeClasses, UndecidableInstances
 
+Test-Suite foo
+  type: detailed-0.9
+  hs-source-dirs: test
+  test-module: Test
+  build-depends: STMonadTrans, base, mtl, array, Cabal
diff --git a/dist/build/fooStub/fooStub-tmp/fooStub.hs b/dist/build/fooStub/fooStub-tmp/fooStub.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/fooStub/fooStub-tmp/fooStub.hs
@@ -0,0 +1,5 @@
+module Main ( main ) where
+import Distribution.Simple.Test.LibV09 ( stubMain )
+import Test ( tests )
+main :: IO ()
+main = stubMain tests
diff --git a/test/Test.hs b/test/Test.hs
new file mode 100644
--- /dev/null
+++ b/test/Test.hs
@@ -0,0 +1,37 @@
+module Test where
+
+import Control.Monad
+import Control.Monad.Trans
+import Control.Monad.ST.Trans
+
+import Data.Array
+
+import Distribution.TestSuite
+
+foo :: Int -> Maybe (Array Int Int)
+foo i = runSTArray $ do
+    arr <- newSTArray (1, 3) 0
+    lift $ guard $ i > 0
+    writeSTArray arr 2 i
+    return arr
+
+ups :: (Maybe (Array Int Int, Array Int Int))
+ups = (,) <$> foo 5 <*> foo 6
+
+main :: IO ()
+main = print ups
+
+tests :: IO [Test]
+tests = return [Test bar]
+  where
+    bar = TestInstance
+        { run = return $ Finished runUps
+        , name = "array creation"
+        , tags = []
+        , options = []
+        , setOption = \_ _ -> Right bar
+        }
+    runUps = case ups of
+      Just (a1,a2) | elems a1 /= elems a2 -> Pass
+                   | otherwise -> Fail "Only created one array."
+      _ -> Error "Got Nothing! Shouldn't happen."
