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:             1.1.0
+version:             1.2.0
 synopsis:            Cookie support for apiary web framework.
 description:
   example: <https://github.com/philopon/apiary/blob/master/examples/auth.hs>
@@ -19,7 +19,8 @@
 library
   exposed-modules:     Web.Apiary.Cookie
   build-depends:       base               >=4.6  && <4.8
-                     , apiary             >=1.1  && <1.2
+                     , apiary             >=1.1  && <1.3
+                     , wai                >=3.0  && <3.1
 
                      , bytestring         >=0.10 && <0.11
                      , cookie             >=0.4  && <0.5
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,10 +1,5 @@
-{-# LANGUAGE Rank2Types #-}
-{-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE NoMonomorphismRestriction #-}
-{-# LANGUAGE TupleSections #-}
-{-# LANGUAGE LambdaCase #-}
-{-# LANGUAGE ImplicitParams #-}
+{-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE ConstraintKinds #-}
 {-# LANGUAGE TypeFamilies #-}
 
@@ -12,6 +7,8 @@
     ( -- * setter
       setCookie
     , deleteCookie
+    -- * getter
+    , getCookies
     -- * filter
     , cookie
     , cookie'
@@ -20,25 +17,32 @@
     , module Web.Cookie
     ) where
 
-import Web.Apiary.Wai
-import Web.Apiary
+import Control.Applicative((<$>))
+
+import qualified Network.Wai as Wai
+
 import Web.Cookie (SetCookie(..))
 import qualified Web.Cookie as Cookie
 
-import Data.Apiary.Param
+import Control.Monad.Apiary(ApiaryT)
+import Control.Monad.Apiary.Action(ActionT, getHeaders, addHeader)
 import Control.Monad.Apiary.Filter
 
-import Data.Maybe
-import Data.Time
-import Data.Monoid
-import Data.Apiary.Compat
-import Blaze.ByteString.Builder
-import Text.Blaze.Html
+import Data.Apiary.Compat(KnownSymbol, symbolVal)
+import Data.Apiary.Dict(NotMember)
+import Data.Apiary.Param(Strategy(..))
+
+import Data.Maybe(mapMaybe)
+import Data.Time(UTCTime(UTCTime), Day(ModifiedJulianDay))
+import Data.Monoid((<>))
+import Blaze.ByteString.Builder(toByteString)
+import Text.Blaze.Html(toHtml)
 import qualified Data.ByteString as S
 import qualified Data.ByteString.Char8 as SC
 
 cond :: (a -> Bool) -> (a -> b) -> (a -> b) -> a -> b
 cond p t f a = if p a then t a else f a
+{-# INLINE cond #-}
 
 -- | cookie filter. since 0.5.1.0.
 --
@@ -60,18 +64,25 @@
 cookie k p = function (DocPrecondition $ toHtml (symbolVal k) <> " cookie required") $ \l r ->
     strategy p k (map (Just . snd) . filter ((SC.pack (symbolVal k) ==) . fst) $ cookie' r) l
 
-cookie' :: Request -> [(S.ByteString, S.ByteString)]
+cookie' :: Wai.Request -> [(S.ByteString, S.ByteString)]
 cookie' = 
     concatMap Cookie.parseCookies .
     mapMaybe (cond (("cookie" ==) . fst) (Just . snd) (const Nothing)) .
-    requestHeaders
+    Wai.requestHeaders
 
+getCookies :: Monad m => ActionT exts prms m [(S.ByteString, S.ByteString)]
+getCookies =
+    concatMap (Cookie.parseCookies . snd) .
+    filter (("cookie" ==) . fst) <$>
+    getHeaders
+
 -- | delete cookie. since 0.6.1.0.
 deleteCookie :: Monad m => S.ByteString -> ActionT exts prms m ()
-deleteCookie k = setCookie def { setCookieName    = k 
-                               , setCookieExpires = Just $ UTCTime (ModifiedJulianDay 0) 0
-                               , setCookieMaxAge  = Just 0
-                               }
+deleteCookie k = setCookie Cookie.def
+    { setCookieName    = k 
+    , setCookieExpires = Just $ UTCTime (ModifiedJulianDay 0) 0
+    , setCookieMaxAge  = Just 0
+    }
 
 -- | set raw cookie header.
 setCookie :: Monad m => SetCookie -> ActionT exts prms m ()
