diff --git a/miku.cabal b/miku.cabal
--- a/miku.cabal
+++ b/miku.cabal
@@ -1,5 +1,5 @@
 Name:                 miku
-Version:              2011.6.12
+Version:              2011.6.15
 Build-type:           Simple
 Synopsis:             A minimum web dev DSL in Haskell
 Description:
@@ -20,7 +20,7 @@
   build-depends:      base > 4 && <= 5
                     , data-default
                     , hack2 >= 2011.6.10
-                    , hack2-contrib >= 2011.6.10
+                    , hack2-contrib >= 2011.6.11
                     , utf8-string
                     , air >= 2011.6.11
                     , mtl
diff --git a/readme.md b/readme.md
--- a/readme.md
+++ b/readme.md
@@ -32,7 +32,9 @@
 ## Routes
 
 ### Verbs
-
+    
+    {-# LANGUAGE OverloadedStrings #-}
+    
     -- use - instead of $ for clarity
     import Air.Light ((-))
     import Prelude hiding ((-))
@@ -105,7 +107,6 @@
 * When inspecting the request, use `ask` defined in `ReaderT` monad to get the `Hack2.Environment`, then use helper method defined in `Hack2.Contrib.Request` to query it.
 * `Response` is in `StateT`, `html` and `text` are simply helper methods that update the state, i.e. setting the response body, content-type, etc.
 * You do need to understand monad transformers to reach the full power of `miku`.
-* For mac users, use `GHC 6.12.1` if you have trouble running the server.
     
 ## Reference
 
diff --git a/src/Network/Miku/DSL.hs b/src/Network/Miku/DSL.hs
--- a/src/Network/Miku/DSL.hs
+++ b/src/Network/Miku/DSL.hs
@@ -35,7 +35,7 @@
 
 add_route :: RequestMethod -> ByteString -> AppMonad -> MikuMonad
 add_route route_method route_string app_monad = do
-  middleware - miku_router route_method route_string app_monad
+  modM __router - insert_last - miku_router route_method route_string app_monad
       
 before :: (Env -> IO Env) -> MikuMonad
 before = ioconfig > middleware
diff --git a/src/Network/Miku/Engine.hs b/src/Network/Miku/Engine.hs
--- a/src/Network/Miku/Engine.hs
+++ b/src/Network/Miku/Engine.hs
@@ -26,21 +26,20 @@
 
 
 miku :: MikuMonad -> Application
-miku miku_monad = miku_middleware miku_monad not_found_app
-  where
-    not_found_app = not_found dummy_app
+miku miku_monad = miku_middleware miku_monad (not_found dummy_app)
 
     
 miku_middleware :: MikuMonad -> Middleware
 miku_middleware miku_monad = 
   
-  let miku_state                  = execState miku_monad def
-      mime_filter                 = user_mime (miku_state.mimes)
-      miku_middlewares            = miku_state.middlewares.use
-      pre_installed_middleware    = pre_installed_middlewares.use
+  let miku_state                      = execState miku_monad def
+      mime_filter                     = user_mime (miku_state.mimes)
+      miku_middleware_stack           = use - miku_state.middlewares
+      miku_router_middleware          = use - miku_state.router
+      pre_installed_middleware_stack  = use - pre_installed_middlewares
   in
   
-  use [pre_installed_middleware, mime_filter, miku_middlewares]
+  use [pre_installed_middleware_stack, mime_filter, miku_middleware_stack, miku_router_middleware]
   
 
 miku_router :: RequestMethod -> ByteString -> AppMonad -> Middleware
@@ -50,7 +49,7 @@
       case env.path_info.parse_params route_string of
         Nothing -> app env
         Just (_, params) -> 
-          let miku_app = run_app - local (put_namespace miku_captures params) app_monad 
+          let miku_app = run_app_monad - local (put_namespace miku_captures params) app_monad 
           in
           miku_app env
     
@@ -60,8 +59,8 @@
   
   where
     
-    run_app :: AppMonad -> Application
-    run_app app_monad = \env -> runReaderT app_monad env .flip execStateT def {status = 200}
+    run_app_monad :: AppMonad -> Application
+    run_app_monad app_monad = \env -> runReaderT app_monad env .flip execStateT def {status = 200}
     
 
 parse_params :: ByteString -> ByteString -> Maybe (ByteString, [(ByteString, ByteString)])
diff --git a/src/Network/Miku/Type.hs b/src/Network/Miku/Type.hs
--- a/src/Network/Miku/Type.hs
+++ b/src/Network/Miku/Type.hs
@@ -20,6 +20,7 @@
 data MikuState = MikuState
   {
     middlewares     :: [Middleware]
+  , router          :: [Middleware]
   , mimes           :: [(ByteString, ByteString)]
   }
 
@@ -27,7 +28,8 @@
 instance Default MikuState where
   def = MikuState 
     {
-      middlewares = [dummy_middleware]
+      middlewares = def
+    , router = def
     , mimes = def
     }
 
