diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+### 0.1.2.0
+
+* New functions `unsafeReceiveResponse` and `unsafeReceiveResponseRaw` that do not automatically skip to end-of-stream
+
 ### 0.1.1.0
 
 * New alternative connection-setup API (`ConnectionAddress` et al.)
diff --git a/http-io-streams.cabal b/http-io-streams.cabal
--- a/http-io-streams.cabal
+++ b/http-io-streams.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.2
 name:                http-io-streams
-version:             0.1.1.0
+version:             0.1.2.0
 
 synopsis:            HTTP client based on io-streams
 description:
@@ -19,7 +19,8 @@
 
 license:             BSD-3-Clause
 license-file:        LICENCE
-author:              Andrew Cowie <andrew@operationaldynamics.com>
+author:              Andrew Cowie <andrew@operationaldynamics.com>,
+                     Herbert Valerio Riedel <hvr@gnu.org>
 maintainer:          Herbert Valerio Riedel <hvr@gnu.org>
 copyright:           © 2012-2018 Operational Dynamics Consulting, Pty Ltd and Others
 category:            Web, IO-Streams
diff --git a/http-streams/lib/Network/Http/Client.hs b/http-streams/lib/Network/Http/Client.hs
--- a/http-streams/lib/Network/Http/Client.hs
+++ b/http-streams/lib/Network/Http/Client.hs
@@ -132,6 +132,8 @@
     -- * Processing HTTP response
     receiveResponse,
     receiveResponseRaw,
+    unsafeReceiveResponse,
+    unsafeReceiveResponseRaw,
     UnexpectedCompression,
     StatusCode,
     getStatusCode,
diff --git a/http-streams/lib/Network/Http/Connection.hs b/http-streams/lib/Network/Http/Connection.hs
--- a/http-streams/lib/Network/Http/Connection.hs
+++ b/http-streams/lib/Network/Http/Connection.hs
@@ -29,6 +29,8 @@
     sendRequest,
     receiveResponse,
     receiveResponseRaw,
+    unsafeReceiveResponse,
+    unsafeReceiveResponseRaw,
     UnexpectedCompression,
     emptyBody,
     fileBody,
@@ -491,6 +493,35 @@
   where
     i = cIn c
 
+--
+-- | Handle the response coming back from the server. This function
+-- is the same as receiveResponse, but it does not consume the body for
+-- you after the handler is done.  This means that it can only be safely used
+-- if the handler will fully consume the body, there is no body, or when
+-- the connection is not being reused (no pipelining).
+--
+-- @since 0.1.2.0
+unsafeReceiveResponse :: Connection -> (Response -> InputStream ByteString -> IO β) -> IO β
+unsafeReceiveResponse c handler = do
+    p  <- readResponseHeader i
+    i' <- readResponseBody p i
+
+    handler p i'
+  where
+    i = cIn c
+
+
+-- | Variant of 'unsafeReceiveResponse' in the spirit of 'receiveResponseRaw'
+--
+-- @since 0.1.2.0
+unsafeReceiveResponseRaw :: Connection -> (Response -> InputStream ByteString -> IO β) -> IO β
+unsafeReceiveResponseRaw c handler = do
+    p  <- readResponseHeader i
+    i' <- readResponseBody p { pContentEncoding = Identity } i
+
+    handler p i'
+  where
+    i = cIn c
 
 --
 -- | Use this for the common case of the HTTP methods that only send
