diff --git a/apiary-websockets.cabal b/apiary-websockets.cabal
--- a/apiary-websockets.cabal
+++ b/apiary-websockets.cabal
@@ -1,5 +1,5 @@
 name:                apiary-websockets
-version:             0.7.0.0
+version:             0.8.0.0
 synopsis:            websockets supper for apiary web framework.
 description:
   example: <https://github.com/philopon/apiary/blob/master/examples/websockets.hs>
@@ -20,7 +20,7 @@
   exposed-modules:     Web.Apiary.WebSockets
   other-modules:       
   build-depends:       base               >=4.6   && <4.8
-                     , apiary             >=0.7   && <0.8
+                     , apiary             >=0.8   && <0.9
                      , wai-websockets     >=2.1   && <2.2
                      , websockets         >=0.8   && <0.9
 
diff --git a/src/Web/Apiary/WebSockets.hs b/src/Web/Apiary/WebSockets.hs
--- a/src/Web/Apiary/WebSockets.hs
+++ b/src/Web/Apiary/WebSockets.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE NoMonomorphismRestriction #-}
 module Web.Apiary.WebSockets (
-      actionWithWebSockets 
+    webSockets, webSockets'
+    , actionWithWebSockets 
     , actionWithWebSockets'
     -- * Reexport
     -- | PendingConnection,
@@ -24,20 +25,33 @@
     , sendTextData, sendBinaryData, sendClose, sendPing
     )
 
-actionWithWebSockets' :: WS.ConnectionOptions 
+wsToApp :: Monad m => WS.ConnectionOptions 
+        -> Fn xs WS.ServerApp -> SList xs -> ActionT m ()
+wsToApp conn srv args = getRequest >>= \req ->
+    case WS.websocketsApp conn (apply srv args) req of
+        Nothing -> return ()
+        Just r  -> stopWith r
+
+-- | websocket only action. since 0.8.0.0.
+webSockets' :: (Monad n, Functor n) => WS.ConnectionOptions
+            -> Fn xs WS.ServerApp -> ApiaryT xs n m ()
+webSockets' conn srv = action' $ wsToApp conn srv
+
+-- | websocket only action. since 0.8.0.0.
+webSockets :: (Monad n, Functor n)
+           => Fn xs WS.ServerApp -> ApiaryT xs n m ()
+webSockets = webSockets' WS.defaultConnectionOptions
+
+actionWithWebSockets' :: (Monad n, Functor n)
+                      => WS.ConnectionOptions 
                       -> Fn xs WS.ServerApp
-                      -> Fn xs (Action ())
-                      -> Apiary xs ()
-actionWithWebSockets' conn srv m = do
-    actionWithPreAction pa m
-  where
-    pa args = do
-        req <- getRequest
-        case WS.websocketsApp conn (apply srv args) req of
-            Nothing   -> return ()
-            Just resp -> stopWith resp
+                      -> Fn xs (ActionT n ())
+                      -> ApiaryT xs n m ()
+actionWithWebSockets' conn srv m =
+    action' $ \a -> wsToApp conn srv a >> apply m a
 
-actionWithWebSockets :: Fn c WS.ServerApp
-                     -> Fn c (Action ())
-                     -> Apiary c ()
+actionWithWebSockets :: (Functor n, Monad n)
+                     => Fn c WS.ServerApp
+                     -> Fn c (ActionT n ())
+                     -> ApiaryT c n m ()
 actionWithWebSockets = actionWithWebSockets' WS.defaultConnectionOptions
