diff --git a/Network/Wai/Router.hs b/Network/Wai/Router.hs
--- a/Network/Wai/Router.hs
+++ b/Network/Wai/Router.hs
@@ -2,22 +2,30 @@
 import Control.Monad
 import Network.Wai
 import Control.Applicative
+import Data.List
 
-type Router = Request -> IO (Maybe Response)
+type RouteResponder = ((Maybe Response) -> IO ResponseReceived)
+type AppResponder = (Response -> IO ResponseReceived)
+type Router = Request -> RouteResponder -> IO ResponseReceived
 
-runRouter :: Application -> Router -> Application
-runRouter d r req = do
-    maybe <$> (d req) <*> pure id <*> r req
+runRouter :: Router -> Application
+runRouter r req res = do
+    r req myRes
+  where
+    myRes (Just resp) = res resp
 
 fromApplication :: Application -> Router
-fromApplication app req = return <$> app req
-
-route :: [Router] -> Router
-route rs req = do
-    msum <$> mapM ($req) rs
-
-respond :: Response -> IO (Maybe Response)
-respond = return . return
+fromApplication app req res = app req (res . pure)
 
-pass :: IO (Maybe Response)
-pass = return Nothing
+route :: Router -> [Router] -> Router
+route d rs req res = do
+    r req $ cont d req $ res
+  where
+    r = foldl' build d rs
+    build :: Router -> Router -> Router
+    build r b req' res' = b req' (cont r req' res')
+    cont :: Router -> Request -> RouteResponder -> RouteResponder
+    cont b req resp response@(Just _) =
+      resp response
+    cont b req resp (Nothing) =
+      b req resp
diff --git a/network-wai-router.cabal b/network-wai-router.cabal
--- a/network-wai-router.cabal
+++ b/network-wai-router.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                network-wai-router
-version:             0.1.2.0
+version:             0.3.0.1
 synopsis:            A routing library for wai
 -- description:         
 license:             MIT
@@ -18,8 +18,8 @@
 library
   exposed-modules:     Network.Wai.Router
   -- other-modules:       
-  -- other-extensions:    
-  build-depends:       base >=4 && <5, wai >=2.1 && <2.2
+  other-extensions:    BangPatterns
+  build-depends:       base >=4 && <5, wai >=3.0 && <3.1
   -- hs-source-dirs:      
   default-language:    Haskell2010
   ghc-options:         -Wall -O2
