diff --git a/src/flt_http_comp.c b/src/flt_http_comp.c
index 4873056..ddcdce6 100644
--- a/src/flt_http_comp.c
+++ b/src/flt_http_comp.c
@@ -51,7 +51,6 @@
 
 static THREAD_LOCAL struct buffer tmpbuf;
 static THREAD_LOCAL struct buffer zbuf;
-static THREAD_LOCAL unsigned int buf_output;
 
 static int select_compression_request_header(struct comp_state *st,
 					     struct stream *s,
@@ -68,14 +67,14 @@
 					    struct buffer *out);
 static int htx_compression_buffer_end(struct comp_state *st, struct buffer *out, int end);
 
-static int http_compression_buffer_init(struct channel *inc, struct buffer *out, unsigned int *out_len);
+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,
 					    int in_out,
 					    struct buffer *out, int sz);
 static int http_compression_buffer_end(struct comp_state *st, struct stream *s,
 				       struct channel *chn, struct buffer *out,
-				       unsigned int *out_len, int end);
+				       int end);
 
 /***********************************************************************/
 static int
@@ -312,7 +311,7 @@
 
 		b_reset(&tmpbuf);
 		c_adv(chn, fwd);
-		ret = http_compression_buffer_init(chn, &zbuf, &buf_output);
+		ret = http_compression_buffer_init(chn, &zbuf);
 		c_rew(chn, fwd);
 		if (ret < 0) {
 			msg->chn->flags |= CF_WAKE_WRITE;
@@ -363,7 +362,7 @@
 
 			b_reset(&tmpbuf);
 			c_adv(chn, fwd);
-			http_compression_buffer_init(chn, &zbuf, &buf_output);
+			http_compression_buffer_init(chn, &zbuf);
 			c_rew(chn, fwd);
 			st->initialized = 1;
 		}
@@ -428,7 +427,7 @@
 
 	st->consumed = len - st->hdrs_len - st->tlrs_len;
 	c_adv(msg->chn, flt_rsp_fwd(filter) + st->hdrs_len);
-	ret = http_compression_buffer_end(st, s, msg->chn, &zbuf, &buf_output, msg->msg_state >= HTTP_MSG_TRAILERS);
+	ret = http_compression_buffer_end(st, s, msg->chn, &zbuf, msg->msg_state >= HTTP_MSG_TRAILERS);
 	c_rew(msg->chn, flt_rsp_fwd(filter) + st->hdrs_len);
 	if (ret < 0)
 		return ret;
@@ -1015,7 +1014,7 @@
  * Init HTTP compression
  */
 static int
-http_compression_buffer_init(struct channel *inc, struct buffer *out, unsigned int *out_len)
+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
@@ -1030,8 +1029,7 @@
 	 * cancel the operation later, it's cheap.
 	 */
 	b_reset(out);
-	*out_len = co_data(inc);
-	out->head += *out_len + 10;
+	out->head += co_data(inc) + 10;
 	return 0;
 }
 
@@ -1100,12 +1098,11 @@
 static int
 http_compression_buffer_end(struct comp_state *st, struct stream *s,
 			    struct channel *chn, struct buffer *out,
-			    unsigned int *buf_out, int end)
+			    int end)
 {
 	struct buffer tmp_buf;
 	char *tail;
 	int   to_forward, left;
-	unsigned int tmp_out;
 
 #if defined(USE_SLZ) || defined(USE_ZLIB)
 	int ret;
@@ -1150,12 +1147,12 @@
 	 */
 	left = http_emit_chunk_size(b_head(out), b_data(out));
 	b_add(out, left);
-	out->head -= *buf_out + (left);
+	out->head -= co_data(chn) + (left);
 	/* Copy previous data from chn into out */
 	if (co_data(chn) > 0) {
 		left = b_contig_data(&chn->buf, 0);
-		if (left > *buf_out)
-			left = *buf_out;
+		if (left > co_data(chn))
+			left = co_data(chn);
 
 		memcpy(b_head(out), co_head(chn), left);
 		b_add(out, left);
@@ -1189,7 +1186,7 @@
 	}
 
 	b_add(out, tail - b_tail(out));
-	to_forward = b_data(out) - *buf_out;
+	to_forward = b_data(out) - co_data(chn);
 
 	/* update input rate */
 	if (st->comp_ctx && st->comp_ctx->cur_lvl > 0) {
@@ -1212,17 +1209,13 @@
 			b_add(out, b_data(&chn->buf) - left);
 		}
 	}
+	c_rew(chn, st->consumed);
+
 	/* swap the buffers */
 	tmp_buf = chn->buf;
 	chn->buf = *out;
 	*out = tmp_buf;
 
-	tmp_out = chn->output;
-	chn->output = *buf_out;
-	*buf_out = tmp_out;
-
-
-
 	if (st->comp_ctx && st->comp_ctx->cur_lvl > 0) {
 		update_freq_ctr(&global.comp_bps_out, to_forward);
 		HA_ATOMIC_ADD(&strm_fe(s)->fe_counters.comp_out, to_forward);
