diff --git a/Network/Wai/Handler/Warp.hs b/Network/Wai/Handler/Warp.hs
--- a/Network/Wai/Handler/Warp.hs
+++ b/Network/Wai/Handler/Warp.hs
@@ -402,11 +402,16 @@
 iterSocket th sock =
     E.continue step
   where
-    step E.EOF = E.yield () E.EOF
+    -- We pause timeouts before passing control back to user code. This ensures
+    -- that a timeout will only ever be executed when Warp is in control. We
+    -- also make sure to resume the timeout after the completion of user code
+    -- so that we can kill idle connections.
+    step E.EOF = liftIO (T.resume th) >> E.yield () E.EOF
     step (E.Chunks []) = E.continue step
     step (E.Chunks xs) = do
+        liftIO $ T.resume th
         liftIO $ Sock.sendMany sock xs
-        liftIO $ T.tickle th
+        liftIO $ T.pause th
         E.continue step
 
 data Settings = Settings
diff --git a/warp.cabal b/warp.cabal
--- a/warp.cabal
+++ b/warp.cabal
@@ -1,5 +1,5 @@
 Name:                warp
-Version:             0.3.2.1
+Version:             0.3.2.2
 Synopsis:            A fast, light-weight web server for WAI applications.
 License:             BSD3
 License-file:        LICENSE
@@ -25,7 +25,6 @@
                    , enumerator                    >= 0.4.5    && < 0.5
                    , blaze-builder                 >= 0.2.1.4  && < 0.3
                    , sendfile                      >= 0.7.2    && < 0.8
-                   , network-enumerator            >= 0.1.1    && < 0.2
   if flag(network-bytestring)
       build-depends: network               >= 2.2.1   && < 2.2.3
                    , network-bytestring    >= 0.1.3   && < 0.1.4
