diff --git a/io-streams-http.cabal b/io-streams-http.cabal
--- a/io-streams-http.cabal
+++ b/io-streams-http.cabal
@@ -1,5 +1,5 @@
 name:                io-streams-http
-version:             0.1.0.2
+version:             0.2.0.0
 synopsis:            http-client for io-streams
 description:         Thin io-streams wrapper for http-client
 license:             BSD3
diff --git a/src/System/IO/Streams/HTTP.hs b/src/System/IO/Streams/HTTP.hs
--- a/src/System/IO/Streams/HTTP.hs
+++ b/src/System/IO/Streams/HTTP.hs
@@ -111,18 +111,20 @@
 
 ------------------------------------------------------------------------------
 -- | Stream body of request
-to :: InputStream ByteString -> (IO ByteString -> IO ()) -> IO ()
-to is f = f $ maybe B.empty id <$> Streams.read is
+to :: IO (InputStream ByteString) -> (IO ByteString -> IO ()) -> IO ()
+to m f = do
+  is <- m
+  f $ maybe B.empty id <$> Streams.read is
 
 ------------------------------------------------------------------------------
 -- | Stream body of request
-stream :: InputStream ByteString -> RequestBody
+stream :: IO (InputStream ByteString) -> RequestBody
 stream p = RequestBodyStreamChunked (to p)
 {-# INLINABLE stream #-}
 
 ------------------------------------------------------------------------------
 -- | Stream with N bytes exactly
-streamN :: Int64 -> InputStream ByteString -> RequestBody
+streamN :: Int64 -> IO (InputStream ByteString) -> RequestBody
 streamN n p = RequestBodyStream n (to p)
 {-# INLINABLE streamN #-}
 
