diff --git a/http-monad.cabal b/http-monad.cabal
--- a/http-monad.cabal
+++ b/http-monad.cabal
@@ -1,5 +1,5 @@
 Name:               http-monad
-Version:            0.1.0.3
+Version:            0.1.1
 Cabal-Version:      >= 1.6
 Build-type:         Simple
 License:            BSD3
@@ -29,7 +29,7 @@
 Source-Repository this
   type:     darcs
   location: http://code.haskell.org/~thielema/http-monad/
-  tag:      0.1.0.3
+  tag:      0.1.1
 
 Flag splitBase
   description: Old, monolithic base
@@ -61,7 +61,7 @@
   Build-depends: transformers >=0.2 && <0.4
   Build-depends: explicit-exception >=0.1.4 && <0.2
   Build-depends: utility-ht >=0.0.4 && <0.1
-  Build-depends: lazyio >=0.0.2 && <0.1
+  Build-depends: lazyio >=0.1 && <0.2
 
   If flag(splitBase)
     Build-depends: base < 3
diff --git a/src/Network/Monad/Transfer.hs b/src/Network/Monad/Transfer.hs
--- a/src/Network/Monad/Transfer.hs
+++ b/src/Network/Monad/Transfer.hs
@@ -42,18 +42,26 @@
    }
 
 
+liftSync :: Monad m =>
+   m (Stream.Result a) -> SyncExceptional m a
+liftSync = Sync.fromEitherT
+
+liftAsync :: (Monad m, Monoid a) =>
+   m (Stream.Result a) -> AsyncExceptional m a
+liftAsync =
+   Async.mapExceptionalT unwrapMonad .
+   Async.fromSynchronousMonoidT .
+   Sync.mapExceptionalT WrapMonad .
+   liftSync
+
+
 liftIOSync :: MonadIO io =>
    IO (Stream.Result a) -> SyncExceptional io a
-liftIOSync m =
-   Sync.fromEitherT $ liftIO m
+liftIOSync = liftSync . liftIO
 
 liftIOAsync :: (MonadIO io, Monoid a) =>
    IO (Stream.Result a) -> AsyncExceptional io a
-liftIOAsync =
-   Async.mapExceptionalT unwrapMonad .
-   Async.fromSynchronousMonoidT .
-   Sync.mapExceptionalT WrapMonad .
-   liftIOSync
+liftIOAsync = liftAsync . liftIO
 {-
 liftIOAsync =
    Async.ExceptionalT .
diff --git a/src/Network/Monad/Transfer/ChunkyLazyIO.hs b/src/Network/Monad/Transfer/ChunkyLazyIO.hs
--- a/src/Network/Monad/Transfer/ChunkyLazyIO.hs
+++ b/src/Network/Monad/Transfer/ChunkyLazyIO.hs
@@ -51,9 +51,12 @@
    Transfer.T LazyIO.T body
 transfer chunkSize h =
    Transfer.Cons {
-      Transfer.readLine   =         Transfer.liftIOAsync $ TCP.readLine h,
-      Transfer.readBlock  = \n   -> readBlockChunky chunkSize h n,
-      Transfer.writeBlock = \str -> Transfer.liftIOSync  $ TCP.writeBlock h str
+      Transfer.readLine   =
+         Transfer.liftAsync $ LazyIO.interleave $ TCP.readLine h,
+      Transfer.readBlock  = \n   ->
+         readBlockChunky chunkSize h n,
+      Transfer.writeBlock = \str ->
+         Transfer.liftSync  $ LazyIO.interleave $ TCP.writeBlock h str
    }
 
 run :: (TCP.HStream body, Body body) =>
@@ -66,15 +69,20 @@
 
 
 readBlockChunky :: (TCP.HStream body, Body body) =>
-   Int -> TCP.HandleStream body -> Int -> Transfer.AsyncExceptional LazyIO.T body
+   Int -> TCP.HandleStream body ->
+   Int -> Transfer.AsyncExceptional LazyIO.T body
 readBlockChunky chunkSize h =
    let go todo =
          if todo>0
-           then -- we cannot use 'mappend' because 'length str' is needed
-                do (Transfer.liftIOAsync $
-                    TCP.readBlock h (min chunkSize todo))
-                   `Async.bindT`
-                   (\str ->
-                       fmap (mappend str) $ go (max 0 (todo - length str)))
+           then
+              {-
+              We must use `bindT` instead of 'mappend'
+              because we need 'length str'.
+              -}
+              (Transfer.liftAsync $ LazyIO.interleave $
+               TCP.readBlock h (min chunkSize todo))
+              `Async.bindT`
+              (\str ->
+                  fmap (mappend str) $ go (max 0 (todo - length str)))
            else mempty
    in  go
