diff --git a/example/Main-Client.hs b/example/Main-Client.hs
--- a/example/Main-Client.hs
+++ b/example/Main-Client.hs
@@ -51,6 +51,9 @@
   liftIO $ putStrLn "Subscribing Foo..."
   dispatch RPCClient
     { subscription = Foo
+    , onSubscribe = \RPCClientParams{supply,cancel} -> do
+        liftIO $ putStrLn "Supplying Bar..."
+        supply Bar
     , onReply = \RPCClientParams{supply,cancel} Baz -> do
         liftIO $ print Baz
         liftIO $ threadDelay 1000000
diff --git a/src/Network/WebSockets/RPC.hs b/src/Network/WebSockets/RPC.hs
--- a/src/Network/WebSockets/RPC.hs
+++ b/src/Network/WebSockets/RPC.hs
@@ -14,9 +14,9 @@
   , WebSocketRPCException (..)
   ) where
 
-import Network.WebSockets.RPC.Trans.Server ( WebSocketServerRPCT, runWebSocketServerRPCT', getServerEnv, execWebSocketServerRPCT
+import Network.WebSockets.RPC.Trans.Server ( WebSocketServerRPCT, execWebSocketServerRPCT
                                            , registerSubscribeSupply, runSubscribeSupply, unregisterSubscribeSupply)
-import Network.WebSockets.RPC.Trans.Client ( WebSocketClientRPCT, runWebSocketClientRPCT', getClientEnv, execWebSocketClientRPCT
+import Network.WebSockets.RPC.Trans.Client ( WebSocketClientRPCT, execWebSocketClientRPCT
                                            , registerReplyComplete, runReply, runComplete, unregisterReplyComplete
                                            , freshRPCID
                                            )
@@ -31,6 +31,7 @@
 import Control.Monad (forever, void)
 import Control.Monad.IO.Class (liftIO, MonadIO)
 import Control.Monad.Catch (MonadThrow, throwM)
+import Control.Monad.Trans (lift)
 import Control.Concurrent (threadDelay)
 import qualified Control.Concurrent.Async as Async
 
@@ -66,7 +67,6 @@
 
   let runSub :: Subscribe sub -> WebSocketServerRPCT sub sup m ()
       runSub (Subscribe RPCIdentified{_ident,_params}) = do
-        env <- getServerEnv
 
         let reply :: rep -> m ()
             reply rep =
@@ -76,8 +76,7 @@
             complete :: com -> m ()
             complete com =
               let c = Complete RPCIdentified{_ident, _params = com}
-              in  do liftIO (sendDataMessage conn (Text (encode c)))
-                     runWebSocketServerRPCT' env (unregisterSubscribeSupply _ident)
+              in  liftIO (sendDataMessage conn (Text (encode c)))
 
             cont :: Either sub sup -> m ()
             cont = f RPCServerParams{reply,complete}
@@ -122,6 +121,8 @@
 
 data RPCClient sub sup rep com m = RPCClient
   { subscription :: !sub
+  , onSubscribe  :: RPCClientParams sup m
+                 -> m ()
   , onReply      :: RPCClientParams sup m
                  -> rep
                  -> m () -- ^ handle incoming reply
@@ -141,20 +142,19 @@
           => ((RPCClient sub sup rep com m -> WebSocketClientRPCT rep com m ()) -> WebSocketClientRPCT rep com m ())
           -> ClientAppT (WebSocketClientRPCT rep com m) ()
 rpcClient userGo conn =
-  let go RPCClient{subscription,onReply,onComplete} = do
+  let go :: RPCClient sub sup rep com m -> WebSocketClientRPCT rep com m ()
+      go RPCClient{subscription,onSubscribe,onReply,onComplete} = do
         _ident <- freshRPCID
 
         liftIO (sendDataMessage conn (Text (encode (Subscribe RPCIdentified{_ident, _params = subscription}))))
 
-        env <- getClientEnv
-
         let supply :: sup -> m ()
             supply sup = liftIO (sendDataMessage conn (Text (encode (Supply RPCIdentified{_ident, _params = Just sup}))))
 
             cancel :: m ()
-            cancel = do
-              liftIO (sendDataMessage conn (Text (encode (Supply RPCIdentified{_ident, _params = Nothing :: Maybe ()}))))
-              runWebSocketClientRPCT' env (unregisterReplyComplete _ident)
+            cancel = liftIO (sendDataMessage conn (Text (encode (Supply RPCIdentified{_ident, _params = Nothing :: Maybe ()}))))
+
+        lift (onSubscribe RPCClientParams{supply,cancel})
 
         registerReplyComplete _ident (onReply RPCClientParams{supply,cancel}) onComplete
 
diff --git a/websockets-rpc.cabal b/websockets-rpc.cabal
--- a/websockets-rpc.cabal
+++ b/websockets-rpc.cabal
@@ -1,5 +1,5 @@
 Name:                   websockets-rpc
-Version:                0.0.2
+Version:                0.1.0
 Author:                 Athan Clark <athan.clark@gmail.com>
 Maintainer:             Athan Clark <athan.clark@gmail.com>
 License:                BSD3
