diff --git a/src/Network/WebSockets/RPC/ACKable.hs b/src/Network/WebSockets/RPC/ACKable.hs
--- a/src/Network/WebSockets/RPC/ACKable.hs
+++ b/src/Network/WebSockets/RPC/ACKable.hs
@@ -21,7 +21,7 @@
 import Data.Aeson (FromJSON (..), ToJSON (..), (.:), (.=), object)
 import Data.Aeson.Types (typeMismatch, Value (Object))
 import Control.Applicative ((<|>))
-import Control.Monad (when)
+import Control.Monad (when, forever)
 import Control.Monad.IO.Class (MonadIO, liftIO)
 import Control.Concurrent (threadDelay)
 import Control.Concurrent.Async (async)
@@ -230,7 +230,7 @@
           -> IO (Async.Async a)
 mkBackoff op x = do
   spentWaiting <- newIORef (0 :: Int)
-  async $ do
+  async $ forever $ do
     toWait <- readIORef spentWaiting
     writeIORef spentWaiting (toWait + 1)
     let toWait' = 2 ^ toWait
diff --git a/websockets-rpc.cabal b/websockets-rpc.cabal
--- a/websockets-rpc.cabal
+++ b/websockets-rpc.cabal
@@ -1,5 +1,5 @@
 Name:                   websockets-rpc
-Version:                0.3.0
+Version:                0.3.1
 Author:                 Athan Clark <athan.clark@gmail.com>
 Maintainer:             Athan Clark <athan.clark@gmail.com>
 License:                BSD3
