diff --git a/src/Network/Wai/EventSource.hs b/src/Network/Wai/EventSource.hs
--- a/src/Network/Wai/EventSource.hs
+++ b/src/Network/Wai/EventSource.hs
@@ -1,14 +1,19 @@
 {-# LANGUAGE OverloadedStrings #-}
 module Network.Wai.EventSource (
     ServerEvent(..),
-    eventSourceApp
+    eventSourceApp,
+    eventSourceAppChan,
+    eventSourceAppSource,
+    eventSourceAppIO
     ) where
 
 import           Blaze.ByteString.Builder (Builder)
 import           Control.Concurrent.Chan (Chan, dupChan, readChan)
 import           Control.Monad.IO.Class (liftIO)
+import           Data.Conduit (($=))
 import qualified Data.Conduit as C
-import           Network.HTTP.Types (statusOK)
+import qualified Data.Conduit.List as CL
+import           Network.HTTP.Types (status200)
 import           Network.Wai (Application, Response(..))
 
 import Network.Wai.EventSource.EventStream
@@ -16,15 +21,31 @@
 -- | Make a new WAI EventSource application reading events from
 -- the given channel.
 eventSourceApp :: Chan ServerEvent -> Application
-eventSourceApp chan _ = do
+eventSourceApp = eventSourceAppChan
+{-# DEPRECATED eventSourceApp "Use evnetSourceAppChan instead." #-}
+
+-- | Make a new WAI EventSource application reading events from
+-- the given channel.
+eventSourceAppChan :: Chan ServerEvent -> Application
+eventSourceAppChan chan _ = do
   chan' <- liftIO $ dupChan chan
-  return $ res chan'
+  return $ response chanToSource chan'
 
-res :: Chan ServerEvent -> Response
-res chan = ResponseSource statusOK [("Content-Type", "text/event-stream")] $ resE chan
+-- | Make a new WAI EventSource application reading events from
+-- the given source.
+eventSourceAppSource :: C.Source IO ServerEvent -> Application
+eventSourceAppSource src _ = return $ response sourceToSource src
 
-resE :: Chan ServerEvent -> C.Source IO (C.Flush Builder)
-resE chan =
+-- | Make a new WAI EventSource application reading events from
+-- the given IO action.
+eventSourceAppIO :: IO ServerEvent -> Application
+eventSourceAppIO act _ = return $ response ioToSource act
+
+response :: (a -> C.Source IO (C.Flush Builder)) -> a -> Response
+response f a = ResponseSource status200 [("Content-Type", "text/event-stream")] $ f a
+
+chanToSource :: Chan ServerEvent -> C.Source IO (C.Flush Builder)
+chanToSource chan =
     C.sourceState Nothing pull
   where
     pull Nothing = do
@@ -33,3 +54,22 @@
             Nothing -> C.StateClosed
             Just y -> C.StateOpen (Just C.Flush) (C.Chunk y)
     pull (Just x) = return $ C.StateOpen Nothing x
+
+ioToSource :: IO ServerEvent -> C.Source IO (C.Flush Builder)
+ioToSource act =
+    C.sourceState Nothing pull
+  where
+    pull Nothing = do
+        x <- liftIO act
+        return $ case eventToBuilder x of
+            Nothing -> C.StateClosed
+            Just y -> C.StateOpen (Just C.Flush) (C.Chunk y)
+    pull (Just x) = return $ C.StateOpen Nothing x
+
+sourceToSource :: C.Source IO ServerEvent -> C.Source IO (C.Flush Builder)
+sourceToSource src = src $= CL.concatMap eventToFlushBuilder
+  where
+    eventToFlushBuilder event =
+        case eventToBuilder event of
+            Nothing -> []
+            Just x -> [C.Chunk x, C.Flush]
diff --git a/wai-eventsource.cabal b/wai-eventsource.cabal
--- a/wai-eventsource.cabal
+++ b/wai-eventsource.cabal
@@ -1,5 +1,5 @@
 Name:                wai-eventsource
-Version:             1.1.0
+Version:             1.1.0.1
 Synopsis:            WAI support for server-sent events
 Description:         WAI support for server-sent events
 License:             BSD3
@@ -17,7 +17,7 @@
       base                      >= 4.3 && < 5
     , bytestring                >= 0.9.1.4  && < 0.10
     , blaze-builder             >= 0.3 && < 0.4
-    , conduit                   >= 0.2
+    , conduit                   >= 0.2      && < 0.3
     , http-types                >= 0.6      && < 0.7
     , wai                       >= 1.1
     , warp                      >= 1.1
