diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,7 @@
+## 1.1.7.4
+
+* Make test suite slightly more robust
+
 ## 1.1.7.3
 
 * Doc tweak
diff --git a/resourcet.cabal b/resourcet.cabal
--- a/resourcet.cabal
+++ b/resourcet.cabal
@@ -1,5 +1,5 @@
 Name:                resourcet
-Version:             1.1.7.3
+Version:             1.1.7.4
 Synopsis:            Deterministic allocation and freeing of scarce resources.
 description:         Hackage documentation generation is not reliable. For up to date documentation, please see: <http://www.stackage.org/package/resourcet>.
 License:             BSD3
diff --git a/test/main.hs b/test/main.hs
--- a/test/main.hs
+++ b/test/main.hs
@@ -32,9 +32,34 @@
                 runResourceT $ release key
                 y <- liftIO $ readIORef x
                 liftIO $ y `shouldBe` 1
-    describe "forking" $ do
-        forkHelper "resourceForkIO" resourceForkIO
-        --forkHelper "lifted fork" fork
+    describe "resourceForkIO" $ do
+        it "waits for all threads" $ do
+            x <- newEmptyMVar
+            y <- newIORef 0
+            z <- newEmptyMVar
+            w <- newEmptyMVar
+
+            runResourceT $ do
+                _ <- register $ do
+                    writeIORef y 1
+                    putMVar w ()
+                resourceForkIO $ do
+                    () <- liftIO $ takeMVar x
+                    y' <- liftIO $ readIORef y
+                    _ <- register $ putMVar z y'
+                    return ()
+
+            y1 <- readIORef y
+            y1 `shouldBe` 0
+
+            putMVar x ()
+
+            z' <- takeMVar z
+            z' `shouldBe` 0
+
+            takeMVar w
+            y2 <- readIORef y
+            Just y2 `shouldBe` Just 1
     describe "unprotecting" $ do
         it "unprotect keeps resource from being cleared" $ do
             x <- newIORef 0
@@ -104,27 +129,3 @@
 data Dummy = Dummy
     deriving (Show, Typeable)
 instance Exception Dummy
-
-forkHelper s fork' = describe s $ do
-    it "waits for all threads" $ do
-        x <- newEmptyMVar
-        y <- newIORef 0
-        z <- newEmptyMVar
-        runResourceT $ do
-            _ <- register $ writeIORef y 1
-            fork' $ do
-                () <- liftIO $ takeMVar x
-                y' <- liftIO $ readIORef y
-                _ <- register $ putMVar z y'
-                return ()
-
-        y1 <- readIORef y
-        y1 `shouldBe` 0
-
-        putMVar x ()
-
-        z' <- takeMVar z
-        z' `shouldBe` 0
-
-        y2 <- readIORef y
-        Just y2 `shouldBe` Just 1
