diff --git a/apiary.cabal b/apiary.cabal
--- a/apiary.cabal
+++ b/apiary.cabal
@@ -1,5 +1,5 @@
 name:                apiary
-version:             0.11.0
+version:             0.11.1
 synopsis:            Simple web framework inspired by scotty.
 description:
   Simple web framework inspired by scotty.
@@ -95,6 +95,7 @@
                      , http-types        >=0.8 && <0.9
                      , mime-types        >=0.1 && <0.2
                      , exceptions        >=0.6 && <0.7
+                     , aeson             >=0.7 && <0.8
 
   if impl(ghc < 7.8)
     build-depends:     tagged             >=0.7 && <0.8
diff --git a/src/Control/Monad/Apiary/Filter.hs b/src/Control/Monad/Apiary/Filter.hs
--- a/src/Control/Monad/Apiary/Filter.hs
+++ b/src/Control/Monad/Apiary/Filter.hs
@@ -18,6 +18,7 @@
     , root
     , capture
     , Capture.path
+    , Capture.endPath
     , Capture.fetch
 
     -- ** query matcher
@@ -112,10 +113,10 @@
 -- query "key" (Proxy :: Proxy ('Option' (Maybe Int)) -- get first \'key\' query parameter as Int. allow without param or value.
 -- query "key" (Proxy :: Proxy ('Many' String) -- get all \'key\' query parameter as String.
 -- @
-query :: forall a as w n m b. 
+query :: forall a as w n m b proxy. 
       (ReqParam a, Strategy.Strategy w, Functor n, MonadIO n)
       => S.ByteString
-      -> Proxy (w a)
+      -> proxy (w a)
       -> ApiaryT (Strategy.SNext w as a) n m b
       -> ApiaryT as n m b
 query key p = focus $ \l -> do
@@ -131,7 +132,7 @@
 -- @
 -- "key" =: pInt == query "key" (pFirst pInt) == query "key" (Proxy :: Proxy (First Int))
 -- @
-(=:) :: (Functor n, MonadIO n, ReqParam a) => S.ByteString -> Proxy a 
+(=:) :: (Functor n, MonadIO n, ReqParam a) => S.ByteString -> proxy a 
      -> ApiaryT (Snoc as a) n m b -> ApiaryT as n m b
 k =: t = query k (pFirst t)
 
@@ -142,7 +143,7 @@
 -- @
 -- "key" =: pInt == query "key" (pOne pInt) == query "key" (Proxy :: Proxy (One Int))
 -- @
-(=!:) :: (Functor n, MonadIO n, ReqParam a) => S.ByteString -> Proxy a 
+(=!:) :: (Functor n, MonadIO n, ReqParam a) => S.ByteString -> proxy a 
       -> ApiaryT (Snoc as a) n m b -> ApiaryT as n m b
 k =!: t = query k (pOne t)
 
@@ -153,7 +154,7 @@
 -- @
 -- "key" =: pInt == query "key" (pOption pInt) == query "key" (Proxy :: Proxy (Option Int))
 -- @
-(=?:) :: (Functor n, MonadIO n, ReqParam a) => S.ByteString -> Proxy a 
+(=?:) :: (Functor n, MonadIO n, ReqParam a) => S.ByteString -> proxy a 
       -> ApiaryT (Snoc as (Maybe a)) n m b -> ApiaryT as n m b
 k =?: t = query k (pOption t)
 
@@ -164,7 +165,7 @@
 -- @
 -- "key" =: pInt == query "key" (pCheck pInt) == query "key" (Proxy :: Proxy (Check Int))
 -- @
-(?:) :: (Functor n, MonadIO n, ReqParam a) => S.ByteString -> Proxy a 
+(?:) :: (Functor n, MonadIO n, ReqParam a) => S.ByteString -> proxy a 
      -> ApiaryT as n m b -> ApiaryT as n m b
 k ?: t = query k (pCheck t)
 
@@ -173,7 +174,7 @@
 -- @
 -- "key" =: pInt == query "key" (pMany pInt) == query "key" (Proxy :: Proxy (Many Int))
 -- @
-(=*:) :: (Functor n, MonadIO n, ReqParam a) => S.ByteString -> Proxy a 
+(=*:) :: (Functor n, MonadIO n, ReqParam a) => S.ByteString -> proxy a 
       -> ApiaryT (Snoc as [a]) n m b -> ApiaryT as n m b
 k =*: t = query k (pMany t)
 
@@ -182,7 +183,7 @@
 -- @
 -- "key" =: pInt == query "key" (pSome pInt) == query "key" (Proxy :: Proxy (Some Int))
 -- @
-(=+:) :: (Functor n, MonadIO n, ReqParam a) => S.ByteString -> Proxy a 
+(=+:) :: (Functor n, MonadIO n, ReqParam a) => S.ByteString -> proxy a 
       -> ApiaryT (Snoc as [a]) n m b -> ApiaryT as n m b
 k =+: t = query k (pSome t)
 
diff --git a/src/Control/Monad/Apiary/Filter/Internal/Capture.hs b/src/Control/Monad/Apiary/Filter/Internal/Capture.hs
--- a/src/Control/Monad/Apiary/Filter/Internal/Capture.hs
+++ b/src/Control/Monad/Apiary/Filter/Internal/Capture.hs
@@ -26,11 +26,19 @@
 -- | check first path and drill down. since v0.11.0.
 path :: (Functor n, Monad n) 
      => T.Text -> ApiaryT c n m a -> ApiaryT c n m a
-path p = focus $ \l -> path' >> return l
+path p = focus $ \l -> l <$ path'
   where
     path' = liftM actionPathInfo getState >>= \case
         c:_ | c == p -> modifyState (\s -> s {actionPathInfo = tail $ actionPathInfo s})
         _            -> empty
+
+-- | check consumed pathes. since v0.11.1.
+endPath :: (Functor n, Monad n) => ApiaryT c n m a -> ApiaryT c n m a
+endPath = focus $ \l -> l <$ end
+  where
+    end = liftM actionPathInfo getState >>= \case
+        [] -> return ()
+        _  -> empty
 
 -- | get first path and drill down. since v0.11.0.
 fetch :: (Path a, Functor n, Monad n)
diff --git a/src/Control/Monad/Apiary/Filter/Internal/Capture/TH.hs b/src/Control/Monad/Apiary/Filter/Internal/Capture/TH.hs
--- a/src/Control/Monad/Apiary/Filter/Internal/Capture/TH.hs
+++ b/src/Control/Monad/Apiary/Filter/Internal/Capture/TH.hs
@@ -18,7 +18,7 @@
 splitPath = map T.unpack . T.splitOn "/" . T.pack
 
 mkCap :: [String] -> ExpQ
-mkCap [] = [|id|]
+mkCap [] = [|Capture.endPath|]
 mkCap ((':':tyStr):as) = do
     -- ty <- lookupTypeName tyStr >>= maybe (fail "") return
     let ty = mkName tyStr
diff --git a/src/Control/Monad/Apiary/Filter/Internal/Strategy.hs b/src/Control/Monad/Apiary/Filter/Internal/Strategy.hs
--- a/src/Control/Monad/Apiary/Filter/Internal/Strategy.hs
+++ b/src/Control/Monad/Apiary/Filter/Internal/Strategy.hs
@@ -116,25 +116,25 @@
                _  -> Just l
 
 -- | construct Option proxy. since 0.5.1.0.
-pOption :: Proxy a -> Proxy (Option a)
+pOption :: proxy a -> Proxy (Option a)
 pOption _ = Proxy
 
 -- | construct First proxy. since 0.5.1.0.
-pFirst :: Proxy a -> Proxy (First a)
+pFirst :: proxy a -> Proxy (First a)
 pFirst _ = Proxy
 
 -- | construct One proxy. since 0.5.1.0.
-pOne :: Proxy a -> Proxy (One a)
+pOne :: proxy a -> Proxy (One a)
 pOne _ = Proxy
 
 -- | construct Many proxy. since 0.5.1.0.
-pMany :: Proxy a -> Proxy (Many a)
+pMany :: proxy a -> Proxy (Many a)
 pMany _ = Proxy
 
 -- | construct Some proxy. since 0.5.1.0.
-pSome :: Proxy a -> Proxy (Some a)
+pSome :: proxy a -> Proxy (Some a)
 pSome _ = Proxy
 
 -- | construct Check proxy. since 0.5.1.0.
-pCheck :: Proxy a -> Proxy (Check a)
+pCheck :: proxy a -> Proxy (Check a)
 pCheck _ = Proxy
diff --git a/src/Data/Apiary/Param.hs b/src/Data/Apiary/Param.hs
--- a/src/Data/Apiary/Param.hs
+++ b/src/Data/Apiary/Param.hs
@@ -154,7 +154,7 @@
 pVoid :: Proxy ()
 pVoid = Proxy
 
-pMaybe :: Proxy a -> Proxy (Maybe a)
+pMaybe :: proxy a -> Proxy (Maybe a)
 pMaybe _ = Proxy
 
 pFile :: Proxy (File L.ByteString)
diff --git a/test/main.hs b/test/main.hs
--- a/test/main.hs
+++ b/test/main.hs
@@ -124,7 +124,8 @@
     , testReq "POST /12"  $ assertPlain200 "Double 12.0" captureApp
     , testReq "GET /bar"  $ assertPlain200 "fall bar" captureApp
     , testReq "GET /baz"  $ assertPlain200 "fall baz" captureApp
-    , testReq "GET /bar/nyan/12" $ assertPlain200 "nyan 12" captureApp
+    , testReq "GET /bar/nyan/12"       $ assertPlain200 "nyan 12" captureApp
+    , testReq "GET /bar/nyan/12/other" $ assert404 captureApp
     ]
 
 --------------------------------------------------------------------------------
