diff --git a/src/compression.c b/src/compression.c
index 2abe904..eb74661 100644
--- a/src/compression.c
+++ b/src/compression.c
@@ -343,11 +343,11 @@
 	in_len = comp_ctx->direct_len;
 
 	if (comp_ctx->queued) {
-		in_ptr = comp_ctx->queued->p;
-		in_len = comp_ctx->queued->i;
+		in_ptr = b_head(comp_ctx->queued);
+		in_len = b_data(comp_ctx->queued);
 	}
 
-	out_len = out->i;
+	out_len = b_data(out);
 
 	if (in_ptr)
 		b_add(out, slz_encode(strm, b_tail(out), in_ptr, in_len, !finish));
@@ -355,7 +355,7 @@
 	if (finish)
 		b_add(out, slz_finish(strm, b_tail(out)));
 
-	out_len = out->i - out_len;
+	out_len = b_data(out) - out_len;
 
 	/* very important, we must wipe the data we've just flushed */
 	comp_ctx->direct_len = 0;
diff --git a/src/flt_http_comp.c b/src/flt_http_comp.c
index 85abb84..4972088 100644
--- a/src/flt_http_comp.c
+++ b/src/flt_http_comp.c
@@ -56,7 +56,7 @@
 					      struct stream *s,
 					      struct http_msg *msg);
 
-static int http_compression_buffer_init(struct buffer *in, struct buffer *out);
+static int http_compression_buffer_init(struct channel *inc, struct buffer *out);
 static int http_compression_buffer_add_data(struct comp_state *st,
 					    struct buffer *in,
 					    struct buffer *out, int sz);
@@ -178,12 +178,11 @@
 {
 	struct comp_state *st = filter->ctx;
 	struct channel    *chn = msg->chn;
-	struct buffer     *buf = chn->buf;
 	unsigned int      *nxt = &flt_rsp_nxt(filter);
 	unsigned int       len;
 	int                ret;
 
-	len = MIN(msg->chunk_len + msg->next, buf->i) - *nxt;
+	len = MIN(msg->chunk_len + msg->next, ci_data(chn)) - *nxt;
 	if (!len)
 		return len;
 
@@ -192,7 +191,7 @@
 
 		b_reset(tmpbuf);
 		c_adv(chn, fwd);
-		ret = http_compression_buffer_init(buf, zbuf);
+		ret = http_compression_buffer_init(chn, zbuf);
 		c_rew(chn, fwd);
 		if (ret < 0) {
 			msg->chn->flags |= CF_WAKE_WRITE;
@@ -209,7 +208,7 @@
 		block = ci_contig_data(chn);
 		memcpy(b_tail(tmpbuf), ci_head(chn), block);
 		if (len > block)
-			memcpy(b_tail(tmpbuf)+block, buf->data, len-block);
+			memcpy(b_tail(tmpbuf)+block, b_orig(chn->buf), len-block);
 		c_rew(chn, *nxt);
 
 		b_add(tmpbuf, len);
@@ -217,7 +216,7 @@
 	}
 	else {
 		c_adv(chn, *nxt);
-		ret = http_compression_buffer_add_data(st, buf, zbuf, len);
+		ret = http_compression_buffer_add_data(st, chn->buf, zbuf, len);
 		c_rew(chn, *nxt);
 		if (ret < 0)
 			return ret;
@@ -243,7 +242,7 @@
 
 			b_reset(tmpbuf);
 			c_adv(chn, fwd);
-			http_compression_buffer_init(chn->buf, zbuf);
+			http_compression_buffer_init(chn, zbuf);
 			c_rew(chn, fwd);
 			st->initialized = 1;
 		}
@@ -348,7 +347,7 @@
 				  struct http_msg *msg)
 {
 	struct http_txn *txn = s->txn;
-	struct buffer *req = msg->chn->buf;
+	struct channel *req = msg->chn;
 	struct hdr_ctx ctx;
 	struct comp_algo *comp_algo = NULL;
 	struct comp_algo *comp_algo_back = NULL;
@@ -358,7 +357,7 @@
 	 * See http://zoompf.com/2012/02/lose-the-wait-http-compression for more details.
 	 */
 	ctx.idx = 0;
-	if (http_find_header2("User-Agent", 10, req->p, &txn->hdr_idx, &ctx) &&
+	if (http_find_header2("User-Agent", 10, ci_head(req), &txn->hdr_idx, &ctx) &&
 	    ctx.vlen >= 9 &&
 	    memcmp(ctx.line + ctx.val, "Mozilla/4", 9) == 0 &&
 	    (ctx.vlen < 31 ||
@@ -376,7 +375,7 @@
 		int best_q = 0;
 
 		ctx.idx = 0;
-		while (http_find_header2("Accept-Encoding", 15, req->p, &txn->hdr_idx, &ctx)) {
+		while (http_find_header2("Accept-Encoding", 15, ci_head(req), &txn->hdr_idx, &ctx)) {
 			const char *qval;
 			int q;
 			int toklen;
@@ -434,7 +433,7 @@
 		    (strm_fe(s)->comp && strm_fe(s)->comp->offload)) {
 			http_remove_header2(msg, &txn->hdr_idx, &ctx);
 			ctx.idx = 0;
-			while (http_find_header2("Accept-Encoding", 15, req->p, &txn->hdr_idx, &ctx)) {
+			while (http_find_header2("Accept-Encoding", 15, ci_head(req), &txn->hdr_idx, &ctx)) {
 				http_remove_header2(msg, &txn->hdr_idx, &ctx);
 			}
 		}
@@ -464,7 +463,7 @@
 select_compression_response_header(struct comp_state *st, struct stream *s, struct http_msg *msg)
 {
 	struct http_txn *txn = s->txn;
-	struct buffer *res = msg->chn->buf;
+	struct channel *c = msg->chn;
 	struct hdr_ctx ctx;
 	struct comp_type *comp_type;
 
@@ -493,12 +492,12 @@
 
 	/* content is already compressed */
 	ctx.idx = 0;
-	if (http_find_header2("Content-Encoding", 16, res->p, &txn->hdr_idx, &ctx))
+	if (http_find_header2("Content-Encoding", 16, ci_head(c), &txn->hdr_idx, &ctx))
 		goto fail;
 
 	/* no compression when Cache-Control: no-transform is present in the message */
 	ctx.idx = 0;
-	while (http_find_header2("Cache-Control", 13, res->p, &txn->hdr_idx, &ctx)) {
+	while (http_find_header2("Cache-Control", 13, ci_head(c), &txn->hdr_idx, &ctx)) {
 		if (word_match(ctx.line + ctx.val, ctx.vlen, "no-transform", 12))
 			goto fail;
 	}
@@ -511,7 +510,7 @@
 	 * the priority.
 	 */
 	ctx.idx = 0;
-	if (http_find_header2("Content-Type", 12, res->p, &txn->hdr_idx, &ctx)) {
+	if (http_find_header2("Content-Type", 12, ci_head(c), &txn->hdr_idx, &ctx)) {
 		if (ctx.vlen >= 9 && strncasecmp("multipart", ctx.line+ctx.val, 9) == 0)
 			goto fail;
 
@@ -549,7 +548,7 @@
 
 	/* remove Content-Length header */
 	ctx.idx = 0;
-	if ((msg->flags & HTTP_MSGF_CNT_LEN) && http_find_header2("Content-Length", 14, res->p, &txn->hdr_idx, &ctx))
+	if ((msg->flags & HTTP_MSGF_CNT_LEN) && http_find_header2("Content-Length", 14, ci_head(c), &txn->hdr_idx, &ctx))
 		http_remove_header2(msg, &txn->hdr_idx, &ctx);
 
 	/* add Transfer-Encoding header */
@@ -602,13 +601,13 @@
  * Init HTTP compression
  */
 static int
-http_compression_buffer_init(struct buffer *in, struct buffer *out)
+http_compression_buffer_init(struct channel *inc, struct buffer *out)
 {
 	/* output stream requires at least 10 bytes for the gzip header, plus
 	 * at least 8 bytes for the gzip trailer (crc+len), plus a possible
 	 * plus at most 5 bytes per 32kB block and 2 bytes to close the stream.
 	 */
-	if (b_room(in) < 20 + 5 * ((in->i + 32767) >> 15))
+	if (c_room(inc) < 20 + 5 * ((ci_data(inc) + 32767) >> 15))
 		return -1;
 
 	/* prepare an empty output buffer in which we reserve enough room for
@@ -617,7 +616,7 @@
 	 * cancel the operation later, it's cheap.
 	 */
 	b_reset(out);
-	out->o = in->o;
+	out->o = co_data(inc);
 	out->p += out->o;
 	out->i = 10;
 	return 0;
@@ -687,7 +686,7 @@
 		return -1; /* flush failed */
 
 #endif /* USE_ZLIB */
-	if (ob->i == 10) {
+	if (b_data(ob) == 0) {
 		/* No data were appended, let's drop the output buffer and
 		 * keep the input buffer unchanged.
 		 */
