diff --git a/Network/Wai/Handler/WebSockets.hs b/Network/Wai/Handler/WebSockets.hs
--- a/Network/Wai/Handler/WebSockets.hs
+++ b/Network/Wai/Handler/WebSockets.hs
@@ -10,13 +10,10 @@
 import              Data.ByteString                 (ByteString)
 import qualified    Data.ByteString.Char8           as BC
 import qualified    Data.CaseInsensitive            as CI
-import              Data.Conduit
-import              Data.IORef                      (newIORef, readIORef, writeIORef)
 import              Network.HTTP.Types              (status500)
 import qualified    Network.Wai                     as Wai
 import qualified    Network.WebSockets              as WS
 import qualified    Network.WebSockets.Connection   as WS
-import              System.IO.Streams               (InputStream, OutputStream)
 import qualified    System.IO.Streams               as Streams
 
 --------------------------------------------------------------------------------
@@ -29,10 +26,10 @@
              -> WS.ServerApp
              -> Wai.Application
              -> Wai.Application
-websocketsOr opts app backup req =
+websocketsOr opts app backup req sendResponse =
     case websocketsApp opts app req of
-        Nothing -> backup req
-        Just res -> return res
+        Nothing -> backup req sendResponse
+        Just res -> sendResponse res
 
 --------------------------------------------------------------------------------
 websocketsApp :: WS.ConnectionOptions
@@ -61,13 +58,15 @@
 runWebSockets :: WS.ConnectionOptions
               -> WS.RequestHead
               -> (WS.PendingConnection -> IO a)
-              -> Source IO ByteString
-              -> Sink ByteString IO ()
+              -> IO ByteString
+              -> (ByteString -> IO ())
               -> IO a
 runWebSockets opts req app src sink = do
 
-    is <- srcToInput src
-    os <- sinkToOutput sink >>= Streams.builderStream
+    is <- Streams.makeInputStream $ do
+        bs <- src
+        return $ if BC.null bs then Nothing else Just bs
+    os <- Streams.makeOutputStream (maybe (return ()) sink) >>= Streams.builderStream
 
     let pc = WS.PendingConnection
                 { WS.pendingOptions     = opts
@@ -78,20 +77,3 @@
                 }
 
     app pc
-
-srcToInput :: Source IO ByteString -> IO (InputStream ByteString)
-srcToInput src0 = do
-    (rsrc0, ()) <- src0 $$+ return ()
-    ref <- newIORef rsrc0
-    Streams.makeInputStream $ do
-        rsrc <- readIORef ref
-        (rsrc', mbs) <- rsrc $$++ await
-        writeIORef ref rsrc'
-        return mbs
-
-sinkToOutput :: Sink ByteString IO () -> IO (OutputStream ByteString)
-sinkToOutput sink =
-    Streams.makeOutputStream output
-  where
-    output Nothing = return ()
-    output (Just bs) = yield bs $$ sink
diff --git a/wai-websockets.cabal b/wai-websockets.cabal
--- a/wai-websockets.cabal
+++ b/wai-websockets.cabal
@@ -1,5 +1,5 @@
 Name:                wai-websockets
-Version:             2.1.0.2
+Version:             3.0.0
 Synopsis:            Provide a bridge betweeen WAI and the websockets package.
 License:             MIT
 License-file:        LICENSE
@@ -19,8 +19,7 @@
 Library
   Build-Depends:     base               >= 3        && < 5
                    , bytestring         >= 0.9.1.4
-                   , conduit            >= 0.5      && < 1.2
-                   , wai                >= 2.1      && < 2.2
+                   , wai                >= 3.0      && < 3.1
                    , blaze-builder      >= 0.2.1.4  && < 0.4
                    , case-insensitive   >= 0.2
                    , network            >= 2.2.1.5
@@ -35,7 +34,6 @@
   if flag(example)
     buildable: True
     Build-Depends:   base               >= 3 && < 5
-                   , conduit
                    , wai-websockets
                    , websockets
                    , warp
