diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Revision history for essence-of-live-coding-warp
 
+## 0.2.4
+
+* Tweak performance
+
 ## 0.2.2
 
 * Made backend nonblocking
diff --git a/essence-of-live-coding-warp.cabal b/essence-of-live-coding-warp.cabal
--- a/essence-of-live-coding-warp.cabal
+++ b/essence-of-live-coding-warp.cabal
@@ -1,5 +1,5 @@
 name:                essence-of-live-coding-warp
-version:             0.2.3
+version:             0.2.4
 synopsis: General purpose live coding framework
 description:
   essence-of-live-coding is a general purpose and type safe live coding framework.
@@ -44,7 +44,7 @@
     , http-types >= 0.12.3
     , wai >= 3.2.2.1
     , warp >= 3.3.13
-    , essence-of-live-coding >= 0.2.3
+    , essence-of-live-coding >= 0.2.4
   hs-source-dirs:      src
   default-language:    Haskell2010
   default-extensions:  StrictData
@@ -56,6 +56,6 @@
   build-depends:
       base >= 4.11 && < 5
     , http-client >= 0.7.1
-    , essence-of-live-coding >= 0.2.3
+    , essence-of-live-coding >= 0.2.4
     , essence-of-live-coding-warp
   default-language:    Haskell2010
diff --git a/src/LiveCoding/Warp.hs b/src/LiveCoding/Warp.hs
--- a/src/LiveCoding/Warp.hs
+++ b/src/LiveCoding/Warp.hs
@@ -29,6 +29,8 @@
   , appThread   :: ThreadId
   }
 
+-- I believe there is a bug here where a request is missed if the app blocks because the requestVar isn't emptied, or the response not filled.
+
 waiHandle :: Port -> Handle IO WaiHandle
 waiHandle port = Handle
   { create = do
@@ -63,7 +65,9 @@
       (b, response) <- liftCell cell  -< (a, request)
       arrM $ liftIO . uncurry putMVar -< (responseVar, response)
       returnA                         -< Just b
-    Nothing -> returnA -< Nothing
+    Nothing -> do
+      arrM $ liftIO . threadDelay     -< 1000 -- Prevent too much CPU load
+      returnA                         -< Nothing
 
 runWarpC_
   :: Port
