diff --git a/Acme/Missiles.hs b/Acme/Missiles.hs
--- a/Acme/Missiles.hs
+++ b/Acme/Missiles.hs
@@ -35,7 +35,11 @@
                 (\_ -> action)
     where
         doLaunching = forever $ do
-            atomically $ takeTMVar missileCommand
+            atomically $ do
+                n <- readTVar missileCommand
+                if n > 0
+                    then writeTVar missileCommand (n - 1)
+                    else retry
             launchMissiles
 
 -- | Launch missiles within an 'STM' computation.  Even if the memory
@@ -59,8 +63,10 @@
 -- >            else return ()
 -- >    threadDelay 100000
 launchMissilesSTM :: STM ()
-launchMissilesSTM = putTMVar missileCommand ()
+launchMissilesSTM = do
+    n <- readTVar missileCommand
+    writeTVar missileCommand $! n + 1
 
-missileCommand :: TMVar ()
+missileCommand :: TVar Integer
 {-# NOINLINE missileCommand #-}
-missileCommand = unsafePerformIO newEmptyTMVarIO
+missileCommand = unsafePerformIO (newTVarIO 0)
diff --git a/acme-missiles.cabal b/acme-missiles.cabal
--- a/acme-missiles.cabal
+++ b/acme-missiles.cabal
@@ -1,5 +1,5 @@
 name:                acme-missiles
-version:             0.2
+version:             0.2.1
 synopsis:            Cause serious international side effects.
 description:
     The highly effectful 'launchMissiles' action, as mentioned in /Beautiful concurrency/,
