diff --git a/apiary-cookie.cabal b/apiary-cookie.cabal
--- a/apiary-cookie.cabal
+++ b/apiary-cookie.cabal
@@ -1,5 +1,5 @@
 name:                apiary-cookie
-version:             0.13.1.1
+version:             0.16.0
 synopsis:            Cookie support for apiary web framework.
 description:
   example: <https://github.com/philopon/apiary/blob/master/examples/auth.hs>
@@ -18,15 +18,14 @@
 
 library
   exposed-modules:     Web.Apiary.Cookie
-                       Web.Apiary.Cookie.Internal
-  other-extensions:    
-  build-depends:       base               >=4.6   && <4.8
-                     , bytestring         >=0.10  && <0.11
-                     , apiary             >=0.13  && <0.16
-                     , cookie             >=0.4   && <0.5
-                     , blaze-builder      >=0.3   && <0.4
-                     , time               >=1.4   && <1.5
-                     , blaze-html         >=0.7   && <0.8
+  build-depends:       base               >=4.6  && <4.8
+                     , apiary             >=0.16 && <0.17
+
+                     , bytestring         >=0.10 && <0.11
+                     , cookie             >=0.4  && <0.5
+                     , time               >=1.4  && <1.5
+                     , blaze-builder      >=0.3  && <0.4
+                     , blaze-html         >=0.7  && <0.8
 
   hs-source-dirs:      src
   ghc-options:         -O2 -Wall
diff --git a/src/Web/Apiary/Cookie.hs b/src/Web/Apiary/Cookie.hs
--- a/src/Web/Apiary/Cookie.hs
+++ b/src/Web/Apiary/Cookie.hs
@@ -1,3 +1,12 @@
+{-# LANGUAGE Rank2Types #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE NoMonomorphismRestriction #-}
+{-# LANGUAGE TupleSections #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE ImplicitParams #-}
+{-# LANGUAGE ConstraintKinds #-}
+
 module Web.Apiary.Cookie 
     ( 
     -- * setter
@@ -5,10 +14,65 @@
     , deleteCookie
     -- * filter
     , cookie
+    , cookie'
     -- * Reexport
     -- | SetCookie(..)
     , module Web.Cookie
     ) where
 
+import Web.Apiary.Wai
+import Web.Apiary
 import Web.Cookie (SetCookie(..))
-import Web.Apiary.Cookie.Internal
+import qualified Web.Cookie as Cookie
+
+import Control.Monad.Apiary.Filter.Internal
+import Control.Monad.Apiary.Filter.Internal.Strategy
+
+import Data.Maybe
+import Data.Time
+import Data.Monoid
+import Data.Apiary.Document
+import Blaze.ByteString.Builder
+import Text.Blaze.Html
+import qualified Data.ByteString as S
+
+cond :: (a -> Bool) -> (a -> b) -> (a -> b) -> a -> b
+cond p t f a = if p a then t a else f a
+
+-- | cookie filter. since 0.5.1.0.
+--
+-- can use like 'query' function.
+--
+-- example:
+--
+-- @
+-- cookie "foo" (pFirst pInt)  -- get first Int parameter from foo.
+-- cookie "bar" (pOption pDouble)  -- get first Double parameter from bar, allows no cookie.
+-- cookie "baz" (pMany (pMaybe pString))  -- get zero or more baz cookies. allows cookie decrypt failure.
+-- cookie "baz" (Proxy :: Proxy (LimitSome [int|100|] ByteString)) -- get raw cookies up to 100 entries.
+-- @
+cookie :: (Strategy w, Query p, Monad actM)
+       => S.ByteString
+       -> w p
+       -> ApiaryT exts (SNext w prms p) actM m ()
+       -> ApiaryT exts prms actM m ()
+cookie k p = function (DocPrecondition $ toHtml (show k) <> " cookie required") $ \l r ->
+    readStrategy (readQuery . Just) ((k ==) . fst) p (cookie' r) l
+
+cookie' :: Request -> [(S.ByteString, S.ByteString)]
+cookie' = 
+    concatMap Cookie.parseCookies .
+    mapMaybe (cond (("cookie" ==) . fst) (Just . snd) (const Nothing)) .
+    requestHeaders
+
+-- | delete cookie. since 0.6.1.0.
+deleteCookie :: Monad m => S.ByteString -> ActionT exts m ()
+deleteCookie k = setCookie def { setCookieName    = k 
+                               , setCookieExpires = Just $ UTCTime (ModifiedJulianDay 0) 0
+                               , setCookieMaxAge  = Just 0
+                               }
+
+-- | set raw cookie header.
+setCookie :: Monad m => SetCookie -> ActionT exts m ()
+setCookie =
+    addHeader "set-cookie" . toByteString . Cookie.renderSetCookie
diff --git a/src/Web/Apiary/Cookie/Internal.hs b/src/Web/Apiary/Cookie/Internal.hs
deleted file mode 100644
--- a/src/Web/Apiary/Cookie/Internal.hs
+++ /dev/null
@@ -1,66 +0,0 @@
-{-# LANGUAGE Rank2Types #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE NoMonomorphismRestriction #-}
-{-# LANGUAGE TupleSections #-}
-{-# LANGUAGE LambdaCase #-}
-{-# LANGUAGE ImplicitParams #-}
-{-# LANGUAGE ConstraintKinds #-}
-
-module Web.Apiary.Cookie.Internal where
-
-import Web.Apiary.Wai
-import Web.Apiary
-import Web.Cookie
-
-import Control.Monad.Apiary.Filter.Internal
-import Control.Monad.Apiary.Filter.Internal.Strategy
-
-import Data.Maybe
-import Data.Time
-import Data.Monoid
-import Data.Apiary.Document
-import Blaze.ByteString.Builder
-import Text.Blaze.Html
-import qualified Data.ByteString as S
-
-cond :: (a -> Bool) -> (a -> b) -> (a -> b) -> a -> b
-cond p t f a = if p a then t a else f a
-
--- | cookie filter. since 0.5.1.0.
---
--- can use like 'query' function.
---
--- example:
---
--- @
--- cookie "foo" (pFirst pInt)  -- get first Int parameter from foo.
--- cookie "bar" (pOption pDouble)  -- get first Double parameter from bar, allows no cookie.
--- cookie "baz" (pMany (pMaybe pString))  -- get zero or more baz cookies. allows cookie decrypt failure.
--- cookie "baz" (Proxy :: Proxy (LimitSome [int|100|] ByteString)) -- get raw cookies up to 100 entries.
--- @
-cookie :: (Strategy w, Query a, Functor n, Monad n)
-       => S.ByteString
-       -> proxy (w a)
-       -> ApiaryT (SNext w as a) n m b
-       -> ApiaryT as n m b
-cookie k p = function (DocPrecondition $ toHtml (show k) <> " cookie required") $ \l r ->
-    readStrategy (readQuery . Just) ((k ==) . fst) p (cookie' r) l
-
-cookie' :: Request -> [(S.ByteString, S.ByteString)]
-cookie' = 
-    concatMap parseCookies .
-    mapMaybe (cond (("cookie" ==) . fst) (Just . snd) (const Nothing)) .
-    requestHeaders
-
--- | delete cookie. since 0.6.1.0.
-deleteCookie :: Monad m => S.ByteString -> ActionT m ()
-deleteCookie k = setCookie def { setCookieName    = k 
-                               , setCookieExpires = Just $ UTCTime (ModifiedJulianDay 0) 0
-                               , setCookieMaxAge  = Just 0
-                               }
-
--- | set raw cookie header.
-setCookie :: Monad m => SetCookie -> ActionT m ()
-setCookie =
-    addHeader "set-cookie" . toByteString . renderSetCookie
