diff --git a/contrib/hpack/decode.c b/contrib/hpack/decode.c
index 6f575eb..006c909 100644
--- a/contrib/hpack/decode.c
+++ b/contrib/hpack/decode.c
@@ -29,8 +29,8 @@
 char trash_buf[MAX_RQ_SIZE];
 char tmp_buf[MAX_RQ_SIZE];
 
-struct chunk trash = { .area = trash_buf, .data = 0, .size = sizeof(trash_buf) };
-struct chunk tmp   = { .area = tmp_buf,   .data = 0, .size = sizeof(tmp_buf)   };
+struct buffer trash = { .area = trash_buf, .data = 0, .size = sizeof(trash_buf) };
+struct buffer tmp   = { .area = tmp_buf,   .data = 0, .size = sizeof(tmp_buf)   };
 
 /* displays a <len> long memory block at <buf>, assuming first byte of <buf>
  * has address <baseaddr>. String <pfx> may be placed as a prefix in front of
diff --git a/contrib/mod_defender/defender.c b/contrib/mod_defender/defender.c
index 789db71..03f12a2 100644
--- a/contrib/mod_defender/defender.c
+++ b/contrib/mod_defender/defender.c
@@ -75,7 +75,7 @@
 
 struct apr_bucket_defender {
 	apr_bucket_refcount refcount;
-	struct chunk buf;
+	struct buffer buf;
 };
 
 static apr_status_t defender_bucket_read(apr_bucket *b, const char **str,
@@ -97,7 +97,8 @@
 		apr_bucket_free(d);
 }
 
-static apr_bucket *defender_bucket_make(apr_bucket *b, const struct chunk *buf)
+static apr_bucket *defender_bucket_make(apr_bucket *b,
+					const struct buffer *buf)
 {
 	struct apr_bucket_defender *d;
 
@@ -112,7 +113,7 @@
 	return b;
 }
 
-static apr_bucket *defender_bucket_create(const struct chunk *buf,
+static apr_bucket *defender_bucket_create(const struct buffer *buf,
                                           apr_bucket_alloc_t *list)
 {
 	apr_bucket *b = apr_bucket_alloc(sizeof(*b), list);
@@ -458,11 +459,11 @@
 	struct apr_bucket_brigade *bb = NULL;
 	struct apr_bucket *d = NULL, *e = NULL;
 
-	struct chunk *method;
-	struct chunk *path;
-	struct chunk *query;
-	struct chunk *version;
-	struct chunk *body;
+	struct buffer *method;
+	struct buffer *path;
+	struct buffer *query;
+	struct buffer *version;
+	struct buffer *body;
 
 	struct defender_header hdr;
 	char *hdr_ptr, *hdr_end;
diff --git a/doc/internals/filters.txt b/doc/internals/filters.txt
index 75c640c..7b5144a 100644
--- a/doc/internals/filters.txt
+++ b/doc/internals/filters.txt
@@ -229,7 +229,7 @@
                                     struct http_msg *msg);
         void (*http_reply)         (struct stream *s, struct filter *f,
                                     short status,
-                                    const struct chunk *msg);
+                                    const struct buffer *msg);
 
         /*
          * TCP callbacks
diff --git a/include/common/chunk.h b/include/common/chunk.h
index b9c1d20..a127f9a 100644
--- a/include/common/chunk.h
+++ b/include/common/chunk.h
@@ -25,75 +25,73 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include <common/buf.h>
 #include <common/config.h>
 #include <common/memory.h>
 
 
-/* describes a chunk of string */
-struct chunk {
-	char *area;                 /* points to <size> bytes */
-	size_t size;              /* buffer size in bytes */
-	size_t data;              /* amount of data after head including wrapping */
-};
-
 struct pool_head *pool_head_trash;
 
 /* function prototypes */
 
-int chunk_printf(struct chunk *chk, const char *fmt, ...)
+int chunk_printf(struct buffer *chk, const char *fmt, ...)
 	__attribute__ ((format(printf, 2, 3)));
 
-int chunk_appendf(struct chunk *chk, const char *fmt, ...)
+int chunk_appendf(struct buffer *chk, const char *fmt, ...)
 	__attribute__ ((format(printf, 2, 3)));
 
-int chunk_htmlencode(struct chunk *dst, struct chunk *src);
-int chunk_asciiencode(struct chunk *dst, struct chunk *src, char qc);
-int chunk_strcmp(const struct chunk *chk, const char *str);
-int chunk_strcasecmp(const struct chunk *chk, const char *str);
-struct chunk *get_trash_chunk(void);
-struct chunk *alloc_trash_chunk(void);
+int chunk_htmlencode(struct buffer *dst, struct buffer *src);
+int chunk_asciiencode(struct buffer *dst, struct buffer *src, char qc);
+int chunk_strcmp(const struct buffer *chk, const char *str);
+int chunk_strcasecmp(const struct buffer *chk, const char *str);
+struct buffer *get_trash_chunk(void);
+struct buffer *alloc_trash_chunk(void);
 int init_trash_buffers(int first);
 void deinit_trash_buffers(void);
 
 /*
  * free a trash chunk allocated by alloc_trash_chunk(). NOP on NULL.
  */
-static inline void free_trash_chunk(struct chunk *chunk)
+static inline void free_trash_chunk(struct buffer *chunk)
 {
 	pool_free(pool_head_trash, chunk);
 }
 
 
-static inline void chunk_reset(struct chunk *chk)
+static inline void chunk_reset(struct buffer *chk)
 {
 	chk->data  = 0;
 }
 
-static inline void chunk_init(struct chunk *chk, char *str, size_t size)
+static inline void chunk_init(struct buffer *chk, char *str, size_t size)
 {
-	chk->area  = str;
-	chk->data  = 0;
+	chk->area = str;
+	chk->head = 0;
+	chk->data = 0;
 	chk->size = size;
 }
 
 /* report 0 in case of error, 1 if OK. */
-static inline int chunk_initlen(struct chunk *chk, char *str, size_t size, int len)
+static inline int chunk_initlen(struct buffer *chk, char *str, size_t size,
+				int len)
 {
 
 	if (len < 0 || (size && len > size))
 		return 0;
 
-	chk->area  = str;
-	chk->data  = len;
+	chk->area = str;
+	chk->head = 0;
+	chk->data = len;
 	chk->size = size;
 
 	return 1;
 }
 
 /* this is only for temporary manipulation, the chunk is read-only */
-static inline void chunk_initstr(struct chunk *chk, const char *str)
+static inline void chunk_initstr(struct buffer *chk, const char *str)
 {
 	chk->area = (char *)str;
+	chk->head = 0;
 	chk->data = strlen(str);
 	chk->size = 0;			/* mark it read-only */
 }
@@ -101,7 +99,8 @@
 /* copies memory area <src> into <chk> for <len> bytes. Returns 0 in
  * case of failure. No trailing zero is added.
  */
-static inline int chunk_memcpy(struct chunk *chk, const char *src, size_t len)
+static inline int chunk_memcpy(struct buffer *chk, const char *src,
+			       size_t len)
 {
 	if (unlikely(len >= chk->size))
 		return 0;
@@ -115,7 +114,8 @@
 /* appends memory area <src> after <chk> for <len> bytes. Returns 0 in
  * case of failure. No trailing zero is added.
  */
-static inline int chunk_memcat(struct chunk *chk, const char *src, size_t len)
+static inline int chunk_memcat(struct buffer *chk, const char *src,
+			       size_t len)
 {
 	if (unlikely(chk->data < 0 || chk->data + len >= chk->size))
 		return 0;
@@ -128,7 +128,7 @@
 /* copies str into <chk> followed by a trailing zero. Returns 0 in
  * case of failure.
  */
-static inline int chunk_strcpy(struct chunk *chk, const char *str)
+static inline int chunk_strcpy(struct buffer *chk, const char *str)
 {
 	size_t len;
 
@@ -146,7 +146,7 @@
 /* appends str after <chk> followed by a trailing zero. Returns 0 in
  * case of failure.
  */
-static inline int chunk_strcat(struct chunk *chk, const char *str)
+static inline int chunk_strcat(struct buffer *chk, const char *str)
 {
 	size_t len;
 
@@ -163,7 +163,7 @@
 /* appends <nb> characters from str after <chk>.
  * Returns 0 in case of failure.
  */
-static inline int chunk_strncat(struct chunk *chk, const char *str, int nb)
+static inline int chunk_strncat(struct buffer *chk, const char *str, int nb)
 {
 	if (unlikely(chk->data < 0 || chk->data + nb >= chk->size))
 		return 0;
@@ -185,7 +185,7 @@
  *   chunk_appendf(&trash, "%s", gethosname());
  *   printf("hostname=<%s>, pid=<%d>\n", name, pid);
  */
-static inline char *chunk_newstr(struct chunk *chk)
+static inline char *chunk_newstr(struct buffer *chk)
 {
 	if (chk->data < 0 || chk->data + 1 >= chk->size)
 		return NULL;
@@ -194,14 +194,14 @@
 	return chk->area + chk->data;
 }
 
-static inline void chunk_drop(struct chunk *chk)
+static inline void chunk_drop(struct buffer *chk)
 {
 	chk->area  = NULL;
 	chk->data  = -1;
 	chk->size = 0;
 }
 
-static inline void chunk_destroy(struct chunk *chk)
+static inline void chunk_destroy(struct buffer *chk)
 {
 	if (!chk->size)
 		return;
@@ -217,13 +217,14 @@
  * the destination string is returned, or NULL if the allocation fails or if
  * any pointer is NULL.
  */
-static inline char *chunk_dup(struct chunk *dst, const struct chunk *src)
+static inline char *chunk_dup(struct buffer *dst, const struct buffer *src)
 {
 	if (!dst || !src || src->data < 0 || !src->area)
 		return NULL;
 
 	if (dst->size)
 		free(dst->area);
+	dst->head = src->head;
 	dst->data = src->data;
 	dst->size = src->data;
 	if (dst->size < src->size || !src->size)
@@ -231,6 +232,7 @@
 
 	dst->area = (char *)malloc(dst->size);
 	if (!dst->area) {
+		dst->head = 0;
 		dst->data = 0;
 		dst->size = 0;
 		return NULL;
diff --git a/include/common/hpack-dec.h b/include/common/hpack-dec.h
index b03398a..71039d3 100644
--- a/include/common/hpack-dec.h
+++ b/include/common/hpack-dec.h
@@ -34,6 +34,7 @@
 #include <common/hpack-tbl.h>
 
 int hpack_decode_frame(struct hpack_dht *dht, const uint8_t *raw, uint32_t len,
-                       struct http_hdr *list, int list_size, struct chunk *tmp);
+                       struct http_hdr *list, int list_size,
+                       struct buffer *tmp);
 
 #endif /* _COMMON_HPACK_DEC_H */
diff --git a/include/common/hpack-enc.h b/include/common/hpack-enc.h
index 0a44dfc..5246b83 100644
--- a/include/common/hpack-enc.h
+++ b/include/common/hpack-enc.h
@@ -33,6 +33,7 @@
 #include <common/config.h>
 #include <common/ist.h>
 
-int hpack_encode_header(struct chunk *out, const struct ist n, const struct ist v);
+int hpack_encode_header(struct buffer *out, const struct ist n,
+			const struct ist v);
 
 #endif /* _COMMON_HPACK_ENC_H */
diff --git a/include/common/standard.h b/include/common/standard.h
index 6542759..0a956e0 100644
--- a/include/common/standard.h
+++ b/include/common/standard.h
@@ -486,7 +486,7 @@
  */
 char *encode_chunk(char *start, char *stop,
                    const char escape, const fd_set *map,
-                   const struct chunk *chunk);
+                   const struct buffer *chunk);
 
 /*
  * Tries to prefix characters tagged in the <map> with the <escape>
@@ -509,7 +509,7 @@
  */
 char *escape_chunk(char *start, char *stop,
                    const char escape, const fd_set *map,
-                   const struct chunk *chunk);
+                   const struct buffer *chunk);
 
 
 /* Check a string for using it in a CSV output format. If the string contains
@@ -539,10 +539,11 @@
  * This function appends the encoding to the existing output chunk. Please
  * use csv_enc() instead if you want to replace the output chunk.
  */
-const char *csv_enc_append(const char *str, int quote, struct chunk *output);
+const char *csv_enc_append(const char *str, int quote, struct buffer *output);
 
 /* same as above but the output chunk is reset first */
-static inline const char *csv_enc(const char *str, int quote, struct chunk *output)
+static inline const char *csv_enc(const char *str, int quote,
+				  struct buffer *output)
 {
 	chunk_reset(output);
 	return csv_enc_append(str, quote, output);
@@ -1317,9 +1318,9 @@
 struct list;
 int list_append_word(struct list *li, const char *str, char **err);
 
-int dump_text(struct chunk *out, const char *buf, int bsize);
-int dump_binary(struct chunk *out, const char *buf, int bsize);
-int dump_text_line(struct chunk *out, const char *buf, int bsize, int len,
+int dump_text(struct buffer *out, const char *buf, int bsize);
+int dump_binary(struct buffer *out, const char *buf, int bsize);
+int dump_text_line(struct buffer *out, const char *buf, int bsize, int len,
                    int *line, int ptr);
 
 /* same as realloc() except that ptr is also freed upon failure */
diff --git a/include/proto/action.h b/include/proto/action.h
index dcfdeac..19312db 100644
--- a/include/proto/action.h
+++ b/include/proto/action.h
@@ -44,7 +44,8 @@
 	return NULL;
 }
 
-static inline void action_build_list(struct list *keywords, struct chunk *chk)
+static inline void action_build_list(struct list *keywords,
+				     struct buffer *chk)
 {
 	struct action_kw_list *kw_list;
 	int i;
diff --git a/include/proto/channel.h b/include/proto/channel.h
index 10e3602..5a1a36e 100644
--- a/include/proto/channel.h
+++ b/include/proto/channel.h
@@ -784,7 +784,7 @@
  * Channel flag READ_PARTIAL is updated if some data can be transferred. The
  * chunk's length is updated with the number of bytes sent.
  */
-static inline int ci_putchk(struct channel *chn, struct chunk *chunk)
+static inline int ci_putchk(struct channel *chn, struct buffer *chunk)
 {
 	int ret;
 
diff --git a/include/proto/filters.h b/include/proto/filters.h
index 1be1637..d16f706 100644
--- a/include/proto/filters.h
+++ b/include/proto/filters.h
@@ -111,7 +111,7 @@
 int  flt_http_forward_data(struct stream *s, struct http_msg *msg, unsigned int len);
 
 void flt_http_reset(struct stream *s, struct http_msg *msg);
-void flt_http_reply(struct stream *s, short status, const struct chunk *msg);
+void flt_http_reply(struct stream *s, short status, const struct buffer *msg);
 
 int  flt_start_analyze(struct stream *s, struct channel *chn, unsigned int an_bit);
 int  flt_pre_analyze(struct stream *s, struct channel *chn, unsigned int an_bit);
diff --git a/include/proto/proto_http.h b/include/proto/proto_http.h
index d3b1f43..49cb501 100644
--- a/include/proto/proto_http.h
+++ b/include/proto/proto_http.h
@@ -45,7 +45,7 @@
  */
 
 extern const int http_err_codes[HTTP_ERR_SIZE];
-extern struct chunk http_err_chunks[HTTP_ERR_SIZE];
+extern struct buffer http_err_chunks[HTTP_ERR_SIZE];
 extern const char *HTTP_302;
 extern const char *HTTP_303;
 
@@ -119,8 +119,8 @@
 struct act_rule *parse_http_res_cond(const char **args, const char *file, int linenum, struct proxy *proxy);
 void free_http_req_rules(struct list *r);
 void free_http_res_rules(struct list *r);
-void http_reply_and_close(struct stream *s, short status, struct chunk *msg);
-struct chunk *http_error_message(struct stream *s);
+void http_reply_and_close(struct stream *s, short status, struct buffer *msg);
+struct buffer *http_error_message(struct stream *s);
 struct redirect_rule *http_parse_redirect_rule(const char *file, int linenum, struct proxy *curproxy,
                                                const char **args, char **errmsg, int use_fmt, int dir);
 int smp_fetch_cookie(const struct arg *args, struct sample *smp, const char *kw, void *private);
diff --git a/include/proto/server.h b/include/proto/server.h
index 14f4926..3378c2b 100644
--- a/include/proto/server.h
+++ b/include/proto/server.h
@@ -150,7 +150,8 @@
  */
 void srv_shutdown_backup_streams(struct proxy *px, int why);
 
-void srv_append_status(struct chunk *msg, struct server *s, struct check *, int xferred, int forced);
+void srv_append_status(struct buffer *msg, struct server *s, struct check *,
+		       int xferred, int forced);
 
 void srv_set_stopped(struct server *s, const char *reason, struct check *check);
 void srv_set_running(struct server *s, const char *reason, struct check *check);
diff --git a/include/proto/spoe.h b/include/proto/spoe.h
index 299836b..b6c4ee2 100644
--- a/include/proto/spoe.h
+++ b/include/proto/spoe.h
@@ -164,7 +164,7 @@
 
 		case SMP_T_STR:
 		case SMP_T_BIN: {
-			struct chunk *chk = &smp->data.u.str;
+			struct buffer *chk = &smp->data.u.str;
 
 			/* Here, we need to know if the sample has already been
 			 * partially encoded. If yes, we only need to encode the
@@ -175,7 +175,7 @@
 				 * type (string or binary), the buffer length
 				 * (as a varint) and at least 1 byte of the
 				 * buffer. */
-				struct chunk *chk = &smp->data.u.str;
+				struct buffer *chk = &smp->data.u.str;
 
 				*p++ = (smp->data.type == SMP_T_STR)
 					? SPOE_DATA_T_STR
diff --git a/include/proto/ssl_sock.h b/include/proto/ssl_sock.h
index c6075eb..f04317a 100644
--- a/include/proto/ssl_sock.h
+++ b/include/proto/ssl_sock.h
@@ -57,15 +57,17 @@
 void ssl_sock_set_servername(struct connection *conn, const char *hostname);
 int ssl_sock_get_cert_used_sess(struct connection *conn);
 int ssl_sock_get_cert_used_conn(struct connection *conn);
-int ssl_sock_get_remote_common_name(struct connection *conn, struct chunk *out);
-int ssl_sock_get_pkey_algo(struct connection *conn, struct chunk *out);
+int ssl_sock_get_remote_common_name(struct connection *conn,
+				    struct buffer *out);
+int ssl_sock_get_pkey_algo(struct connection *conn, struct buffer *out);
 unsigned int ssl_sock_get_verify_result(struct connection *conn);
 #if (defined SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB && !defined OPENSSL_NO_OCSP)
-int ssl_sock_update_ocsp_response(struct chunk *ocsp_response, char **err);
+int ssl_sock_update_ocsp_response(struct buffer *ocsp_response, char **err);
 #endif
 #if (defined SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB && TLS_TICKETS_NO > 0)
-void ssl_sock_update_tlskey_ref(struct tls_keys_ref *ref, struct chunk *tlskey);
-int ssl_sock_update_tlskey(char *filename, struct chunk *tlskey, char **err);
+void ssl_sock_update_tlskey_ref(struct tls_keys_ref *ref,
+				struct buffer *tlskey);
+int ssl_sock_update_tlskey(char *filename, struct buffer *tlskey, char **err);
 struct tls_keys_ref *tlskeys_ref_lookup(const char *filename);
 struct tls_keys_ref *tlskeys_ref_lookupid(int unique_id);
 #endif
diff --git a/include/proto/stats.h b/include/proto/stats.h
index ac893b8..02a3506 100644
--- a/include/proto/stats.h
+++ b/include/proto/stats.h
@@ -101,9 +101,10 @@
 extern struct applet http_stats_applet;
 
 void stats_io_handler(struct stream_interface *si);
-int stats_emit_raw_data_field(struct chunk *out, const struct field *f);
-int stats_emit_typed_data_field(struct chunk *out, const struct field *f);
-int stats_emit_field_tags(struct chunk *out, const struct field *f, char delim);
+int stats_emit_raw_data_field(struct buffer *out, const struct field *f);
+int stats_emit_typed_data_field(struct buffer *out, const struct field *f);
+int stats_emit_field_tags(struct buffer *out, const struct field *f,
+			  char delim);
 
 #endif /* _PROTO_STATS_H */
 
diff --git a/include/proto/stream_interface.h b/include/proto/stream_interface.h
index 03756ba..7fcd4c8 100644
--- a/include/proto/stream_interface.h
+++ b/include/proto/stream_interface.h
@@ -36,7 +36,8 @@
 /* main event functions used to move data between sockets and buffers */
 int stream_int_check_timeouts(struct stream_interface *si);
 void stream_int_report_error(struct stream_interface *si);
-void stream_int_retnclose(struct stream_interface *si, const struct chunk *msg);
+void stream_int_retnclose(struct stream_interface *si,
+			  const struct buffer *msg);
 int conn_si_send_proxy(struct connection *conn, unsigned int flag);
 void stream_sock_read0(struct stream_interface *si);
 
diff --git a/include/types/applet.h b/include/types/applet.h
index 8b7c28f..d4172bd 100644
--- a/include/types/applet.h
+++ b/include/types/applet.h
@@ -57,7 +57,7 @@
 	unsigned short state;      /* Internal appctx state */
 	unsigned int st0;          /* CLI state for stats, session state for peers */
 	unsigned int st1;          /* prompt/payload (bitwise OR of APPCTX_CLI_ST1_*) for stats, session error for peers */
-	struct chunk *chunk;       /* used to store unfinished commands */
+	struct buffer *chunk;       /* used to store unfinished commands */
 	unsigned int st2;          /* output state for stats, unused by peers  */
 	struct applet *applet;     /* applet this context refers to */
 	void *owner;               /* pointer to upper layer's entity (eg: stream interface) */
@@ -150,7 +150,7 @@
 			struct pat_ref *ref;
 			struct bref bref;	/* back-reference from the pat_ref_elt being dumped */
 			struct pattern_expr *expr;
-			struct chunk chunk;
+			struct buffer chunk;
 		} map;
 		struct {
 			struct hlua *hlua;
diff --git a/include/types/arg.h b/include/types/arg.h
index c3b09de..96974ba 100644
--- a/include/types/arg.h
+++ b/include/types/arg.h
@@ -92,7 +92,7 @@
 
 union arg_data {
 	long long int sint;
-	struct chunk str;
+	struct buffer str;
 	struct in_addr ipv4;
 	struct in6_addr ipv6;
 	struct proxy *prx; /* used for fe, be, tables */
diff --git a/include/types/connection.h b/include/types/connection.h
index 624e01e..ad406ac 100644
--- a/include/types/connection.h
+++ b/include/types/connection.h
@@ -311,7 +311,7 @@
 
 	struct conn_stream *(*attach)(struct connection *); /* Create and attach a conn_stream to an outgoing connection */
 	void (*detach)(struct conn_stream *); /* Detach a conn_stream from an outgoing connection, when the request is done */
-	void (*show_fd)(struct chunk *, struct connection *); /* append some data about connection into chunk for "show fd" */
+	void (*show_fd)(struct buffer *, struct connection *); /* append some data about connection into chunk for "show fd" */
 	unsigned int flags;                           /* some flags characterizing the mux's capabilities (MX_FL_*) */
 	char name[8];                                 /* mux layer name, zero-terminated */
 };
diff --git a/include/types/filters.h b/include/types/filters.h
index 488a97f..714cee9 100644
--- a/include/types/filters.h
+++ b/include/types/filters.h
@@ -189,7 +189,7 @@
 
 	void (*http_reset)         (struct stream *s, struct filter *f, struct http_msg *msg);
 	void (*http_reply)         (struct stream *s, struct filter *f, short status,
-				    const struct chunk *msg);
+				    const struct buffer *msg);
 
 	/*
 	 * TCP callbacks
diff --git a/include/types/global.h b/include/types/global.h
index 2ab124b..a684ea6 100644
--- a/include/types/global.h
+++ b/include/types/global.h
@@ -127,7 +127,7 @@
 	char *chroot;
 	char *pidfile;
 	char *node, *desc;		/* node name & description */
-	struct chunk log_tag;           /* name for syslog */
+	struct buffer log_tag;           /* name for syslog */
 	struct list logsrvs;
 	char *log_send_hostname;   /* set hostname in syslog header */
 	char *server_state_base;   /* path to a directory where server state files can be found */
@@ -207,7 +207,7 @@
 extern int  actconn;            /* # of active sessions */
 extern int  listeners;
 extern int  jobs;               /* # of active jobs (listeners, sessions, open devices) */
-extern THREAD_LOCAL struct chunk trash;
+extern THREAD_LOCAL struct buffer trash;
 extern int nb_oldpids;          /* contains the number of old pids found */
 extern const int zero;
 extern const int one;
diff --git a/include/types/proto_http.h b/include/types/proto_http.h
index 5a6cc93..9c39056 100644
--- a/include/types/proto_http.h
+++ b/include/types/proto_http.h
@@ -301,7 +301,7 @@
 struct http_auth_data {
 	enum ht_auth_m method;                /* one of HTTP_AUTH_* */
 	/* 7 bytes unused here */
-	struct chunk method_data;             /* points to the creditial part from 'Authorization:' header */
+	struct buffer method_data;             /* points to the creditial part from 'Authorization:' header */
 	char *user, *pass;                    /* extracted username & password */
 };
 
diff --git a/include/types/proxy.h b/include/types/proxy.h
index 16c13a1..ec95286 100644
--- a/include/types/proxy.h
+++ b/include/types/proxy.h
@@ -356,7 +356,7 @@
 	struct list logsrvs;
 	struct list logformat; 			/* log_format linked list */
 	struct list logformat_sd;		/* log_format linked list for the RFC5424 structured-data part */
-	struct chunk log_tag;                   /* override default syslog tag */
+	struct buffer log_tag;                   /* override default syslog tag */
 	char *header_unique_id; 		/* unique-id header */
 	struct list format_unique_id;		/* unique-id format */
 	int to_log;				/* things to be logged (LW_*) */
@@ -384,7 +384,7 @@
 	char *check_path;			/* PATH environment to use for external agent checks */
 	char *expect_str;			/* http-check expected content : string or text version of the regex */
 	struct my_regex *expect_regex;		/* http-check expected content */
-	struct chunk errmsg[HTTP_ERR_SIZE];	/* default or customized error messages for known errors */
+	struct buffer errmsg[HTTP_ERR_SIZE];	/* default or customized error messages for known errors */
 	int uuid;				/* universally unique proxy ID, used for SNMP */
 	unsigned int backlog;			/* force the frontend's listen backlog */
 	unsigned long bind_proc;		/* bitmask of processes using this proxy */
diff --git a/include/types/sample.h b/include/types/sample.h
index cf0528e..987a099 100644
--- a/include/types/sample.h
+++ b/include/types/sample.h
@@ -244,14 +244,14 @@
  */
 struct meth {
 	enum http_meth_t meth;
-	struct chunk str;
+	struct buffer str;
 };
 
 union sample_value {
 	long long int   sint;  /* used for signed 64bits integers */
 	struct in_addr  ipv4;  /* used for ipv4 addresses */
 	struct in6_addr ipv6;  /* used for ipv6 addresses */
-	struct chunk    str;   /* used for char strings or buffers */
+	struct buffer    str;   /* used for char strings or buffers */
 	struct meth     meth;  /* used for http method */
 };
 
diff --git a/src/51d.c b/src/51d.c
index 4ad82fe..687528e 100644
--- a/src/51d.c
+++ b/src/51d.c
@@ -27,7 +27,7 @@
 	struct list property_names; /* list of properties to load into the data set. this is taken from 51degrees-property-name-list from config. */
 	char *data_file_path;
 	int header_count; /* number of HTTP headers related to device detection. */
-	struct chunk *header_names; /* array of HTTP header names. */
+	struct buffer *header_names; /* array of HTTP header names. */
 	fiftyoneDegreesDataSet data_set; /* data set used with the pattern and trie detection methods. */
 #ifdef FIFTYONEDEGREES_H_PATTERN_INCLUDED
 	fiftyoneDegreesWorksetPool *pool; /* pool of worksets to avoid creating a new one for each request. */
@@ -155,7 +155,7 @@
 #ifdef FIFTYONEDEGREES_H_PATTERN_INCLUDED
 static void _51d_lru_free(void *cache_entry)
 {
-	struct chunk *ptr = cache_entry;
+	struct buffer *ptr = cache_entry;
 
 	if (!ptr)
 		return;
@@ -184,7 +184,7 @@
  */
 static void _51d_insert_cache_entry(struct sample *smp, struct lru64 *lru, void* domain)
 {
-	struct chunk *cache_entry = _51d_malloc(sizeof(*cache_entry));
+	struct buffer *cache_entry = _51d_malloc(sizeof(*cache_entry));
 
 	if (!cache_entry)
 		return;
@@ -205,7 +205,7 @@
  */
 static void _51d_retrieve_cache_entry(struct sample *smp, struct lru64 *lru)
 {
-	struct chunk *cache_entry = lru->data;
+	struct buffer *cache_entry = lru->data;
 	smp->data.u.str.area = cache_entry->area;
 	smp->data.u.str.data = cache_entry->data;
 }
@@ -300,7 +300,7 @@
 #endif
 
 	char no_data[] = "NoData";  /* response when no data could be found */
-	struct chunk *temp = get_trash_chunk();
+	struct buffer *temp = get_trash_chunk();
 	int j, i = 0, found;
 	const char* property_name;
 
@@ -503,7 +503,7 @@
 	const fiftyoneDegreesAsciiString *headerName;
 	fiftyoneDegreesDataSet *ds = &global_51degrees.data_set;
 	global_51degrees.header_count = ds->httpHeadersCount;
-	global_51degrees.header_names = malloc(global_51degrees.header_count * sizeof(struct chunk));
+	global_51degrees.header_names = malloc(global_51degrees.header_count * sizeof(struct buffer));
 	for (index = 0; index < global_51degrees.header_count; index++) {
 		headerName = fiftyoneDegreesGetString(ds, ds->httpHeaders[index].headerNameOffset);
 		(global_51degrees.header_names + index)->area = (char*)&headerName->firstByte;
@@ -521,7 +521,7 @@
 	global_51degrees.header_count = fiftyoneDegreesGetHttpHeaderCount(ds);
 	global_51degrees.device_offsets.firstOffset = malloc(
 		global_51degrees.header_count * sizeof(fiftyoneDegreesDeviceOffset));
-	global_51degrees.header_names = malloc(global_51degrees.header_count * sizeof(struct chunk));
+	global_51degrees.header_names = malloc(global_51degrees.header_count * sizeof(struct buffer));
 	global_51degrees.header_offsets = malloc(global_51degrees.header_count * sizeof(int32_t));
 	for (index = 0; index < global_51degrees.header_count; index++) {
 		global_51degrees.header_offsets[index] = fiftyoneDegreesGetHttpHeaderNameOffset(ds, index);
@@ -538,7 +538,7 @@
 static int init_51degrees(void)
 {
 	int i = 0;
-	struct chunk *temp;
+	struct buffer *temp;
 	struct _51d_property_names *name;
 	char **_51d_property_list = NULL;
 	fiftyoneDegreesDataSetInitStatus _51d_dataset_status = DATA_SET_INIT_STATUS_NOT_SET;
diff --git a/src/cache.c b/src/cache.c
index 4143edc..f58c3cc 100644
--- a/src/cache.c
+++ b/src/cache.c
@@ -345,7 +345,7 @@
 
 		value = directive_value(directive, ctx.vlen, "s-maxage", 8);
 		if (value) {
-			struct chunk *chk = get_trash_chunk();
+			struct buffer *chk = get_trash_chunk();
 
 			chunk_strncat(chk, value, ctx.vlen - 8 + 1);
 			chunk_strncat(chk, "", 1);
@@ -354,7 +354,7 @@
 
 		value = directive_value(ctx.line + ctx.val, ctx.vlen, "max-age", 7);
 		if (value) {
-			struct chunk *chk = get_trash_chunk();
+			struct buffer *chk = get_trash_chunk();
 
 			chunk_strncat(chk, value, ctx.vlen - 7 + 1);
 			chunk_strncat(chk, "", 1);
@@ -637,7 +637,7 @@
 	struct hdr_ctx ctx;
 
 	blk_SHA_CTX sha1_ctx;
-	struct chunk *trash;
+	struct buffer *trash;
 	char *path;
 	char *end;
 	trash = get_trash_chunk();
diff --git a/src/checks.c b/src/checks.c
index 5100c7e..c7b5c30 100644
--- a/src/checks.c
+++ b/src/checks.c
@@ -587,7 +587,7 @@
 	struct conn_stream *cs = check->cs;
 	struct connection *conn = cs_conn(cs);
 	const char *err_msg;
-	struct chunk *chk;
+	struct buffer *chk;
 	int step;
 	char *comment;
 
@@ -1103,7 +1103,7 @@
 			 * ERR first, then WARN.
 			 */
 			const char *msg = cmd;
-			struct chunk *t;
+			struct buffer *t;
 
 			if (!*msg || status == HCHK_STATUS_L7OKD) {
 				if (err && *err)
diff --git a/src/chunk.c b/src/chunk.c
index f655277..56070e2 100644
--- a/src/chunk.c
+++ b/src/chunk.c
@@ -22,9 +22,9 @@
 #include <types/global.h>
 
 /* trash chunks used for various conversions */
-static THREAD_LOCAL struct chunk *trash_chunk;
-static THREAD_LOCAL struct chunk trash_chunk1;
-static THREAD_LOCAL struct chunk trash_chunk2;
+static THREAD_LOCAL struct buffer *trash_chunk;
+static THREAD_LOCAL struct buffer trash_chunk1;
+static THREAD_LOCAL struct buffer trash_chunk2;
 
 /* trash buffers used for various conversions */
 static int trash_size;
@@ -35,7 +35,7 @@
 struct pool_head *pool_head_trash = NULL;
 
 /* this is used to drain data, and as a temporary buffer for sprintf()... */
-THREAD_LOCAL struct chunk trash = { };
+THREAD_LOCAL struct buffer trash = { };
 
 /*
 * Returns a pre-allocated and initialized trash chunk that can be used for any
@@ -46,7 +46,7 @@
 * a zero is always emitted at the beginning of the string so that it may be
 * used as an empty string as well.
 */
-struct chunk *get_trash_chunk(void)
+struct buffer *get_trash_chunk(void)
 {
 	char *trash_buf;
 
@@ -97,7 +97,9 @@
 		hap_register_per_thread_deinit(deinit_trash_buffers_per_thread);
 	}
 	pool_destroy(pool_head_trash);
-	pool_head_trash = create_pool("trash", sizeof(struct chunk) + global.tune.bufsize, MEM_F_EXACT);
+	pool_head_trash = create_pool("trash",
+				      sizeof(struct buffer) + global.tune.bufsize,
+				      MEM_F_EXACT);
 	if (!pool_head_trash || !alloc_trash_buffers(global.tune.bufsize))
 		return 0;
 	return 1;
@@ -117,15 +119,16 @@
  * call may fail and the caller is responsible for checking that the returned
  * pointer is not NULL.
  */
-struct chunk *alloc_trash_chunk(void)
+struct buffer *alloc_trash_chunk(void)
 {
-	struct chunk *chunk;
+	struct buffer *chunk;
 
 	chunk = pool_alloc(pool_head_trash);
 	if (chunk) {
-		char *buf = (char *)chunk + sizeof(struct chunk);
+		char *buf = (char *)chunk + sizeof(struct buffer);
 		*buf = 0;
-		chunk_init(chunk, buf, pool_head_trash->size - sizeof(struct chunk));
+		chunk_init(chunk, buf,
+			   pool_head_trash->size - sizeof(struct buffer));
 	}
 	return chunk;
 }
@@ -135,7 +138,7 @@
  * at most chk->size chars. If the chk->len is over, nothing is added. Returns
  * the new chunk size, or < 0 in case of failure.
  */
-int chunk_printf(struct chunk *chk, const char *fmt, ...)
+int chunk_printf(struct buffer *chk, const char *fmt, ...)
 {
 	va_list argp;
 	int ret;
@@ -160,7 +163,7 @@
  * at most chk->size chars. If the chk->len is over, nothing is added. Returns
  * the new chunk size.
  */
-int chunk_appendf(struct chunk *chk, const char *fmt, ...)
+int chunk_appendf(struct buffer *chk, const char *fmt, ...)
 {
 	va_list argp;
 	int ret;
@@ -185,7 +188,7 @@
  * chk->size chars. Replace non-printable or special chracters with "&#%d;".
  * If the chk->len is over, nothing is added. Returns the new chunk size.
  */
-int chunk_htmlencode(struct chunk *dst, struct chunk *src)
+int chunk_htmlencode(struct buffer *dst, struct buffer *src)
 {
 	int i, l;
 	int olen, free;
@@ -230,7 +233,7 @@
  * chk->size chars. Replace non-printable or char passed in qc with "<%02X>".
  * If the chk->len is over, nothing is added. Returns the new chunk size.
  */
-int chunk_asciiencode(struct chunk *dst, struct chunk *src, char qc)
+int chunk_asciiencode(struct buffer *dst, struct buffer *src, char qc)
 {
 	int i, l;
 	int olen, free;
@@ -274,7 +277,7 @@
  * zero-terminated. Return is the same as with strcmp(). Neither is allowed
  * to be null.
  */
-int chunk_strcmp(const struct chunk *chk, const char *str)
+int chunk_strcmp(const struct buffer *chk, const char *str)
 {
 	const char *s1 = chk->area;
 	int len = chk->data;
@@ -294,7 +297,7 @@
  * <str> which must be zero-terminated. Return is the same as with strcmp().
  * Neither is allowed to be null.
  */
-int chunk_strcasecmp(const struct chunk *chk, const char *str)
+int chunk_strcasecmp(const struct buffer *chk, const char *str)
 {
 	const char *s1 = chk->area;
 	int len = chk->data;
diff --git a/src/cli.c b/src/cli.c
index 4440f25..0d3c95c 100644
--- a/src/cli.c
+++ b/src/cli.c
@@ -96,8 +96,8 @@
 {
 	struct cli_kw_list *kw_list;
 	struct cli_kw *kw;
-	struct chunk *tmp = get_trash_chunk();
-	struct chunk out;
+	struct buffer *tmp = get_trash_chunk();
+	struct buffer out;
 
 	free(dynamic_usage_msg);
 	dynamic_usage_msg = NULL;
@@ -474,7 +474,7 @@
 /* prepends then outputs the argument msg with a syslog-type severity depending on severity_output value */
 static int cli_output_msg(struct channel *chn, const char *msg, int severity, int severity_output)
 {
-	struct chunk *tmp;
+	struct buffer *tmp;
 
 	if (likely(severity_output == CLI_SEVERITY_NONE))
 		return ci_putblk(chn, msg, strlen(msg));
diff --git a/src/connection.c b/src/connection.c
index ca9a8ca..db869fb 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -1096,7 +1096,7 @@
 					tlv->client |= PP2_CLIENT_CERT_CONN;
 			}
 			if (srv->pp_opts & SRV_PP_V2_SSL_CN) {
-				struct chunk *cn_trash = get_trash_chunk();
+				struct buffer *cn_trash = get_trash_chunk();
 				if (ssl_sock_get_remote_common_name(remote, cn_trash) > 0) {
 					ssl_tlv_len += make_tlv(&buf[ret+ssl_tlv_len], (buf_len - ret - ssl_tlv_len), PP2_SUBTYPE_SSL_CN,
 								cn_trash->data,
@@ -1104,7 +1104,7 @@
 				}
 			}
 			if (srv->pp_opts & SRV_PP_V2_SSL_KEY_ALG) {
-				struct chunk *pkey_trash = get_trash_chunk();
+				struct buffer *pkey_trash = get_trash_chunk();
 				if (ssl_sock_get_pkey_algo(remote, pkey_trash) > 0) {
 					ssl_tlv_len += make_tlv(&buf[ret+ssl_tlv_len], (buf_len - ret - ssl_tlv_len), PP2_SUBTYPE_SSL_KEY_ALG,
 								pkey_trash->data,
diff --git a/src/da.c b/src/da.c
index b21159c..23da04a 100644
--- a/src/da.c
+++ b/src/da.c
@@ -183,7 +183,7 @@
 
 static int da_haproxy(const struct arg *args, struct sample *smp, da_deviceinfo_t *devinfo)
 {
-	struct chunk *tmp;
+	struct buffer *tmp;
 	da_propid_t prop, *pprop;
 	da_status_t status;
 	da_type_t proptype;
diff --git a/src/filters.c b/src/filters.c
index a4005ed..3956667 100644
--- a/src/filters.c
+++ b/src/filters.c
@@ -667,7 +667,7 @@
  * decides to stop the HTTP message processing.
  */
 void
-flt_http_reply(struct stream *s, short status, const struct chunk *msg)
+flt_http_reply(struct stream *s, short status, const struct buffer *msg)
 {
 	struct filter *filter;
 
diff --git a/src/flt_spoe.c b/src/flt_spoe.c
index 06125e2..63482f5 100644
--- a/src/flt_spoe.c
+++ b/src/flt_spoe.c
@@ -387,7 +387,7 @@
 static int
 spoe_prepare_hahello_frame(struct appctx *appctx, char *frame, size_t size)
 {
-	struct chunk      *chk;
+	struct buffer      *chk;
 	struct spoe_agent *agent = SPOE_APPCTX(appctx)->agent;
 	char              *p, *end;
 	unsigned int       flags = SPOE_FRM_FL_FIN;
diff --git a/src/flt_trace.c b/src/flt_trace.c
index 5d24a41..6b65fe9 100644
--- a/src/flt_trace.c
+++ b/src/flt_trace.c
@@ -440,7 +440,7 @@
 
 static void
 trace_http_reply(struct stream *s, struct filter *filter, short status,
-		 const struct chunk *msg)
+		 const struct buffer *msg)
 {
 	struct trace_config *conf = FLT_CONF(filter);
 
diff --git a/src/hlua.c b/src/hlua.c
index 9e43593..4d42b1f 100644
--- a/src/hlua.c
+++ b/src/hlua.c
@@ -291,7 +291,7 @@
 {
 	lua_Debug ar;
 	int level = 0;
-	struct chunk *msg = get_trash_chunk();
+	struct buffer *msg = get_trash_chunk();
 	int filled = 0;
 
 	while (lua_getstack(L, level++, &ar)) {
@@ -4466,7 +4466,7 @@
 
 __LJMP static int hlua_applet_http_start_response(lua_State *L)
 {
-	struct chunk *tmp = get_trash_chunk();
+	struct buffer *tmp = get_trash_chunk();
 	struct hlua_appctx *appctx = MAY_LJMP(hlua_checkapplet_http(L, 1));
 	const char *name;
 	size_t name_len;
@@ -5847,7 +5847,7 @@
 	struct hlua_function *fcn = private;
 	struct stream *stream = smp->strm;
 	const char *error;
-	const struct chunk msg = { };
+	const struct buffer msg = { };
 
 	if (!stream)
 		return 0;
@@ -6116,7 +6116,7 @@
 	unsigned int analyzer;
 	int dir;
 	const char *error;
-	const struct chunk msg = { };
+	const struct buffer msg = { };
 
 	switch (rule->from) {
 	case ACT_F_TCP_REQ_CNT: analyzer = AN_REQ_INSPECT_FE     ; dir = SMP_OPT_DIR_REQ; break;
diff --git a/src/hlua_fcn.c b/src/hlua_fcn.c
index bc32401..cebce22 100644
--- a/src/hlua_fcn.c
+++ b/src/hlua_fcn.c
@@ -1191,7 +1191,7 @@
 	struct my_regex *regex;
 	const char *str;
 	size_t len;
-	struct chunk *tmp;
+	struct buffer *tmp;
 
 	regex = hlua_check_regex(L, 1);
 	str = luaL_checklstring(L, 2, &len);
@@ -1219,7 +1219,7 @@
 	regmatch_t pmatch[20];
 	int ret;
 	int i;
-	struct chunk *tmp;
+	struct buffer *tmp;
 
 	regex = hlua_check_regex(L, 1);
 	str = luaL_checklstring(L, 2, &len);
diff --git a/src/hpack-dec.c b/src/hpack-dec.c
index 7c4147b..16a722f 100644
--- a/src/hpack-dec.c
+++ b/src/hpack-dec.c
@@ -114,7 +114,8 @@
  * allocated there. In case of allocation failure, returns a string whose
  * pointer is NULL.
  */
-static inline struct ist hpack_alloc_string(struct chunk *store, int idx, struct ist in)
+static inline struct ist hpack_alloc_string(struct buffer *store, int idx,
+					    struct ist in)
 {
 	struct ist out;
 
@@ -148,7 +149,8 @@
  * can use list[].n.len == 0 as a marker for the end of list.
  */
 int hpack_decode_frame(struct hpack_dht *dht, const uint8_t *raw, uint32_t len,
-                       struct http_hdr *list, int list_size, struct chunk *tmp)
+                       struct http_hdr *list, int list_size,
+                       struct buffer *tmp)
 {
 	uint32_t idx;
 	uint32_t nlen;
diff --git a/src/hpack-enc.c b/src/hpack-enc.c
index c6bfce7..70d2b12 100644
--- a/src/hpack-enc.c
+++ b/src/hpack-enc.c
@@ -76,7 +76,8 @@
 /* Tries to encode header whose name is <n> and value <v> into the chunk <out>.
  * Returns non-zero on success, 0 on failure (buffer full).
  */
-int hpack_encode_header(struct chunk *out, const struct ist n, const struct ist v)
+int hpack_encode_header(struct buffer *out, const struct ist n,
+			const struct ist v)
 {
 	int len = out->data;
 	int size = out->size;
diff --git a/src/log.c b/src/log.c
index 899266c..e2ced80 100644
--- a/src/log.c
+++ b/src/log.c
@@ -48,8 +48,8 @@
 struct log_fmt {
 	char *name;
 	struct {
-		struct chunk sep1; /* first pid separator */
-		struct chunk sep2; /* second pid separator */
+		struct buffer sep1; /* first pid separator */
+		struct buffer sep2; /* second pid separator */
 	} pid;
 };
 
@@ -1006,7 +1006,7 @@
  */
 static char *lf_encode_chunk(char *start, char *stop,
                              const char escape, const fd_set *map,
-                             const struct chunk *chunk,
+                             const struct buffer *chunk,
                              struct logformat_node *node)
 {
 	char *str, *end;
@@ -1158,7 +1158,7 @@
 {
 	static THREAD_LOCAL long tvsec;
 	static THREAD_LOCAL char *dataptr = NULL; /* backup of last end of header, NULL first time */
-	static THREAD_LOCAL struct chunk host = { };
+	static THREAD_LOCAL struct buffer host = { };
 	static THREAD_LOCAL int sep = 0;
 
 	if (unlikely(time != tvsec || dataptr == NULL)) {
@@ -1280,10 +1280,10 @@
 	char *hdr, *hdr_ptr;
 	size_t hdr_size;
 	time_t time = date.tv_sec;
-	struct chunk *tag = &global.log_tag;
+	struct buffer *tag = &global.log_tag;
 	static THREAD_LOCAL int curr_pid;
 	static THREAD_LOCAL char pidstr[100];
-	static THREAD_LOCAL struct chunk pid;
+	static THREAD_LOCAL struct buffer pid;
 
 	msghdr.msg_iov = iovec;
 
@@ -1574,7 +1574,7 @@
 	struct proxy *fe = sess->fe;
 	struct proxy *be = s->be;
 	struct http_txn *txn = s->txn;
-	struct chunk chunk;
+	struct buffer chunk;
 	char *uri;
 	char *spc;
 	char *qmark;
@@ -1606,7 +1606,7 @@
 		struct connection *conn;
 		const char *src = NULL;
 		struct sample *key;
-		const struct chunk empty = { };
+		const struct buffer empty = { };
 
 		switch (tmp->type) {
 			case LOG_FMT_SEPARATOR:
diff --git a/src/map.c b/src/map.c
index 64f2388..5c10735 100644
--- a/src/map.c
+++ b/src/map.c
@@ -172,7 +172,7 @@
 {
 	struct map_descriptor *desc;
 	struct pattern *pat;
-	struct chunk *str;
+	struct buffer *str;
 
 	/* get config */
 	desc = arg_p[0].data.map;
diff --git a/src/mux_h2.c b/src/mux_h2.c
index 92f5090..e252083 100644
--- a/src/mux_h2.c
+++ b/src/mux_h2.c
@@ -670,7 +670,7 @@
 {
 	struct buffer *res;
 	char buf_data[100]; // enough for 15 settings
-	struct chunk buf;
+	struct buffer buf;
 	int ret;
 
 	if (h2c_mux_busy(h2c, NULL)) {
@@ -2617,9 +2617,9 @@
 {
 	struct h2c *h2c = h2s->h2c;
 	const uint8_t *hdrs = (uint8_t *)b_head(&h2c->dbuf);
-	struct chunk *tmp = get_trash_chunk();
+	struct buffer *tmp = get_trash_chunk();
 	struct http_hdr list[MAX_HTTP_HDR * 2];
-	struct chunk *copy = NULL;
+	struct buffer *copy = NULL;
 	unsigned int msgf;
 	int flen = h2c->dfl;
 	int outlen = 0;
@@ -2954,7 +2954,7 @@
 	struct http_hdr list[MAX_HTTP_HDR];
 	struct h2c *h2c = h2s->h2c;
 	struct h1m *h1m = &h2s->res;
-	struct chunk outbuf;
+	struct buffer outbuf;
 	int es_now = 0;
 	int ret = 0;
 	int hdr;
@@ -3125,7 +3125,7 @@
 {
 	struct h2c *h2c = h2s->h2c;
 	struct h1m *h1m = &h2s->res;
-	struct chunk outbuf;
+	struct buffer outbuf;
 	int ret = 0;
 	size_t total = 0;
 	int es_now = 0;
@@ -3447,7 +3447,7 @@
 }
 
 /* for debugging with CLI's "show fd" command */
-static void h2_show_fd(struct chunk *msg, struct connection *conn)
+static void h2_show_fd(struct buffer *msg, struct connection *conn)
 {
 	struct h2c *h2c = conn->mux_ctx;
 	struct h2s *h2s;
diff --git a/src/pattern.c b/src/pattern.c
index 2975afa..261a0b4 100644
--- a/src/pattern.c
+++ b/src/pattern.c
@@ -221,7 +221,7 @@
 /* Parse a binary written in hexa. It is allocated. */
 int pat_parse_bin(const char *text, struct pattern *pattern, int mflags, char **err)
 {
-	struct chunk *trash;
+	struct buffer *trash;
 
 	pattern->type = SMP_T_BIN;
 	trash = get_trash_chunk();
diff --git a/src/peers.c b/src/peers.c
index 08a29a6..f26c3df 100644
--- a/src/peers.c
+++ b/src/peers.c
@@ -387,7 +387,7 @@
 {
 	int len;
 	unsigned short datalen;
-	struct chunk *chunk;
+	struct buffer *chunk;
 	char *cursor, *datamsg, *chunkp, *chunkq;
 	uint64_t data = 0;
 	unsigned int data_type;
diff --git a/src/proto_http.c b/src/proto_http.c
index ea10b91..117d274 100644
--- a/src/proto_http.c
+++ b/src/proto_http.c
@@ -78,7 +78,7 @@
 const char HTTP_100[] =
 	"HTTP/1.1 100 Continue\r\n\r\n";
 
-const struct chunk http_100_chunk = {
+const struct buffer http_100_chunk = {
 	.area = (char *)&HTTP_100,
 	.data = sizeof(HTTP_100)-1
 };
@@ -275,7 +275,7 @@
 /* We must put the messages here since GCC cannot initialize consts depending
  * on strlen().
  */
-struct chunk http_err_chunks[HTTP_ERR_SIZE];
+struct buffer http_err_chunks[HTTP_ERR_SIZE];
 
 /* this struct is used between calls to smp_fetch_hdr() or smp_fetch_cookie() */
 static THREAD_LOCAL struct hdr_ctx static_hdr_ctx;
@@ -917,7 +917,7 @@
  * in this buffer will be lost.
  */
 static void http_server_error(struct stream *s, struct stream_interface *si,
-			      int err, int finst, const struct chunk *msg)
+			      int err, int finst, const struct buffer *msg)
 {
 	FLT_STRM_CB(s, flt_http_reply(s, s->txn->status, msg));
 	channel_auto_read(si_oc(si));
@@ -938,7 +938,7 @@
  * and message.
  */
 
-struct chunk *http_error_message(struct stream *s)
+struct buffer *http_error_message(struct stream *s)
 {
 	const int msgnum = http_get_status_idx(s->txn->status);
 
@@ -951,7 +951,7 @@
 }
 
 void
-http_reply_and_close(struct stream *s, short status, struct chunk *msg)
+http_reply_and_close(struct stream *s, short status, struct buffer *msg)
 {
 	s->txn->flags &= ~TX_WAIT_NEXT_RQ;
 	FLT_STRM_CB(s, flt_http_reply(s, status, msg));
@@ -1264,7 +1264,7 @@
 {
 
 	struct http_txn *txn = s->txn;
-	struct chunk auth_method;
+	struct buffer auth_method;
 	struct hdr_ctx ctx;
 	char *h, *p;
 	int len;
@@ -1304,7 +1304,7 @@
 	chunk_initlen(&txn->auth.method_data, p + 1, 0, ctx.vlen - len - 1);
 
 	if (!strncasecmp("Basic", auth_method.area, auth_method.data)) {
-		struct chunk *http_auth = get_trash_chunk();
+		struct buffer *http_auth = get_trash_chunk();
 
 		len = base64dec(txn->auth.method_data.area,
 				txn->auth.method_data.data,
@@ -2403,7 +2403,7 @@
 	struct hdr_idx *idx = &s->txn->hdr_idx;
 	int (*http_find_hdr_func)(const char *name, int len, char *sol,
 	                          struct hdr_idx *idx, struct hdr_ctx *ctx);
-	struct chunk *output = get_trash_chunk();
+	struct buffer *output = get_trash_chunk();
 
 	ctx.idx = 0;
 
@@ -2451,7 +2451,7 @@
                                  struct list *fmt, struct my_regex *re,
                                  int action)
 {
-	struct chunk *replace;
+	struct buffer *replace;
 	int ret = -1;
 
 	replace = alloc_trash_chunk();
@@ -2607,7 +2607,7 @@
 			 * buffer, we build first the header value using build_logline, and
 			 * after we store the header name.
 			 */
-			struct chunk *replace;
+			struct buffer *replace;
 
 			replace = alloc_trash_chunk();
 			if (!replace)
@@ -2655,7 +2655,7 @@
 		case ACT_HTTP_DEL_ACL:
 		case ACT_HTTP_DEL_MAP: {
 			struct pat_ref *ref;
-			struct chunk *key;
+			struct buffer *key;
 
 			/* collect reference */
 			ref = pat_ref_lookup(rule->arg.map.ref);
@@ -2684,7 +2684,7 @@
 
 		case ACT_HTTP_ADD_ACL: {
 			struct pat_ref *ref;
-			struct chunk *key;
+			struct buffer *key;
 
 			/* collect reference */
 			ref = pat_ref_lookup(rule->arg.map.ref);
@@ -2714,7 +2714,7 @@
 
 		case ACT_HTTP_SET_MAP: {
 			struct pat_ref *ref;
-			struct chunk *key, *value;
+			struct buffer *key, *value;
 
 			/* collect reference */
 			ref = pat_ref_lookup(rule->arg.map.ref);
@@ -2929,7 +2929,7 @@
 
 		case ACT_HTTP_SET_HDR:
 		case ACT_HTTP_ADD_HDR: {
-			struct chunk *replace;
+			struct buffer *replace;
 
 			replace = alloc_trash_chunk();
 			if (!replace)
@@ -2980,7 +2980,7 @@
 		case ACT_HTTP_DEL_ACL:
 		case ACT_HTTP_DEL_MAP: {
 			struct pat_ref *ref;
-			struct chunk *key;
+			struct buffer *key;
 
 			/* collect reference */
 			ref = pat_ref_lookup(rule->arg.map.ref);
@@ -3009,7 +3009,7 @@
 
 		case ACT_HTTP_ADD_ACL: {
 			struct pat_ref *ref;
-			struct chunk *key;
+			struct buffer *key;
 
 			/* collect reference */
 			ref = pat_ref_lookup(rule->arg.map.ref);
@@ -3037,7 +3037,7 @@
 
 		case ACT_HTTP_SET_MAP: {
 			struct pat_ref *ref;
-			struct chunk *key, *value;
+			struct buffer *key, *value;
 
 			/* collect reference */
 			ref = pat_ref_lookup(rule->arg.map.ref);
@@ -3185,7 +3185,7 @@
 	struct http_msg *req = &txn->req;
 	struct http_msg *res = &txn->rsp;
 	const char *msg_fmt;
-	struct chunk *chunk;
+	struct buffer *chunk;
 	int ret = 0;
 
 	chunk = alloc_trash_chunk();
@@ -9870,7 +9870,7 @@
 smp_fetch_hdrs_bin(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
 	struct http_msg *msg;
-	struct chunk *temp;
+	struct buffer *temp;
 	struct hdr_idx *idx;
 	const char *cur_ptr, *cur_next, *p;
 	int old_idx, cur_idx;
@@ -9973,7 +9973,7 @@
 	unsigned long len;
 	unsigned long block1;
 	char *body;
-	struct chunk *temp;
+	struct buffer *temp;
 
 	CHECK_HTTP_MESSAGE_FIRST();
 
@@ -10213,7 +10213,7 @@
 	struct hdr_idx *idx;
 	struct hdr_ctx ctx;
 	const struct http_msg *msg;
-	struct chunk *temp;
+	struct buffer *temp;
 	char del = ',';
 
 	if (args && args->type == ARGT_STR)
@@ -10367,7 +10367,7 @@
 			smp->data.type = SMP_T_IPV4;
 			break;
 		} else {
-			struct chunk *temp = get_trash_chunk();
+			struct buffer *temp = get_trash_chunk();
 			if (smp->data.u.str.data < temp->size - 1) {
 				memcpy(temp->area, smp->data.u.str.area,
 				       smp->data.u.str.data);
@@ -10428,7 +10428,7 @@
 	struct http_txn *txn;
 	char *ptr, *end, *beg;
 	struct hdr_ctx ctx;
-	struct chunk *temp;
+	struct buffer *temp;
 
 	CHECK_HTTP_MESSAGE_FIRST();
 
@@ -10521,7 +10521,7 @@
 static int
 smp_fetch_base32_src(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
-	struct chunk *temp;
+	struct buffer *temp;
 	struct connection *cli_conn = objt_conn(smp->sess->origin);
 
 	if (!cli_conn)
@@ -10807,7 +10807,7 @@
 static int
 smp_fetch_capture_req_method(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
-	struct chunk *temp;
+	struct buffer *temp;
 	struct http_txn *txn = smp->strm->txn;
 	char *ptr;
 
@@ -10834,7 +10834,7 @@
 static int
 smp_fetch_capture_req_uri(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
-	struct chunk *temp;
+	struct buffer *temp;
 	struct http_txn *txn = smp->strm->txn;
 	char *ptr;
 
@@ -11334,7 +11334,7 @@
 smp_fetch_param(char delim, const char *name, int name_len, const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
 	const char *vstart, *vend;
-	struct chunk *temp;
+	struct buffer *temp;
 	const char **chunks = (const char **)smp->ctx.a;
 
 	if (!find_next_url_param(chunks,
@@ -11571,7 +11571,7 @@
 static int
 smp_fetch_url32_src(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
-	struct chunk *temp;
+	struct buffer *temp;
 	struct connection *cli_conn = objt_conn(smp->sess->origin);
 
 	if (!cli_conn)
@@ -11631,7 +11631,7 @@
 {
 	const char day[7][4] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
 	const char mon[12][4] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
-	struct chunk *temp;
+	struct buffer *temp;
 	struct tm *tm;
 	/* With high numbers, the date returned can be negative, the 55 bits mask prevent this. */
 	time_t curr_date = smp->data.u.sint & 0x007fffffffffffffLL;
@@ -11836,7 +11836,7 @@
 	  * before decoding.
 	 */
 	if (smp->flags & SMP_F_CONST || smp->data.u.str.size <= smp->data.u.str.data) {
-		struct chunk *str = get_trash_chunk();
+		struct buffer *str = get_trash_chunk();
 		memcpy(str->area, smp->data.u.str.area, smp->data.u.str.data);
 		smp->data.u.str.area = str->area;
 		smp->data.u.str.size = str->size;
@@ -12079,7 +12079,7 @@
 enum act_return http_action_set_req_line(struct act_rule *rule, struct proxy *px,
                                          struct session *sess, struct stream *s, int flags)
 {
-	struct chunk *replace;
+	struct buffer *replace;
 	enum act_return ret = ACT_RET_ERR;
 
 	replace = alloc_trash_chunk();
diff --git a/src/proxy.c b/src/proxy.c
index c262966..bf87a2f 100644
--- a/src/proxy.c
+++ b/src/proxy.c
@@ -1421,7 +1421,7 @@
  * It uses the proxy pointer from cli.p0, the proxy's id from cli.i0 and the server's
  * pointer from cli.p1.
  */
-static int dump_servers_state(struct stream_interface *si, struct chunk *buf)
+static int dump_servers_state(struct stream_interface *si, struct buffer *buf)
 {
 	struct appctx *appctx = __objt_appctx(si->end);
 	struct proxy *px = appctx->ctx.cli.p0;
diff --git a/src/sample.c b/src/sample.c
index 9ccfe7d..e3dea1b 100644
--- a/src/sample.c
+++ b/src/sample.c
@@ -508,7 +508,7 @@
 
 static int c_ip2str(struct sample *smp)
 {
-	struct chunk *trash = get_trash_chunk();
+	struct buffer *trash = get_trash_chunk();
 
 	if (!inet_ntop(AF_INET, (void *)&smp->data.u.ipv4, trash->area, trash->size))
 		return 0;
@@ -538,7 +538,7 @@
 
 static int c_ipv62str(struct sample *smp)
 {
-	struct chunk *trash = get_trash_chunk();
+	struct buffer *trash = get_trash_chunk();
 
 	if (!inet_ntop(AF_INET6, (void *)&smp->data.u.ipv6, trash->area, trash->size))
 		return 0;
@@ -623,7 +623,7 @@
 
 static int c_int2str(struct sample *smp)
 {
-	struct chunk *trash = get_trash_chunk();
+	struct buffer *trash = get_trash_chunk();
 	char *pos;
 
 	pos = lltoa_r(smp->data.u.sint, trash->area, trash->size);
@@ -647,7 +647,7 @@
  */
 int smp_dup(struct sample *smp)
 {
-	struct chunk *trash;
+	struct buffer *trash;
 
 	switch (smp->data.type) {
 	case SMP_T_BOOL:
@@ -763,7 +763,7 @@
 
 static int c_addr2bin(struct sample *smp)
 {
-	struct chunk *chk = get_trash_chunk();
+	struct buffer *chk = get_trash_chunk();
 
 	if (smp->data.type == SMP_T_IPV4) {
 		chk->data = 4;
@@ -783,7 +783,7 @@
 
 static int c_int2bin(struct sample *smp)
 {
-	struct chunk *chk = get_trash_chunk();
+	struct buffer *chk = get_trash_chunk();
 
 	*(unsigned long long int *) chk->area = my_htonll(smp->data.u.sint);
 	chk->data = 8;
@@ -1474,7 +1474,7 @@
 
 static int sample_conv_base642bin(const struct arg *arg_p, struct sample *smp, void *private)
 {
-	struct chunk *trash = get_trash_chunk();
+	struct buffer *trash = get_trash_chunk();
 	int bin_len;
 
 	trash->data = 0;
@@ -1492,7 +1492,7 @@
 
 static int sample_conv_bin2base64(const struct arg *arg_p, struct sample *smp, void *private)
 {
-	struct chunk *trash = get_trash_chunk();
+	struct buffer *trash = get_trash_chunk();
 	int b64_len;
 
 	trash->data = 0;
@@ -1511,7 +1511,7 @@
 static int sample_conv_sha1(const struct arg *arg_p, struct sample *smp, void *private)
 {
 	blk_SHA_CTX ctx;
-	struct chunk *trash = get_trash_chunk();
+	struct buffer *trash = get_trash_chunk();
 
 	memset(&ctx, 0, sizeof(ctx));
 
@@ -1528,7 +1528,7 @@
 
 static int sample_conv_bin2hex(const struct arg *arg_p, struct sample *smp, void *private)
 {
-	struct chunk *trash = get_trash_chunk();
+	struct buffer *trash = get_trash_chunk();
 	unsigned char c;
 	int ptr = 0;
 
@@ -1640,7 +1640,7 @@
  */
 static int sample_conv_ltime(const struct arg *args, struct sample *smp, void *private)
 {
-	struct chunk *temp;
+	struct buffer *temp;
 	/* With high numbers, the date returned can be negative, the 55 bits mask prevent this. */
 	time_t curr_date = smp->data.u.sint & 0x007fffffffffffffLL;
 	struct tm *tm;
@@ -1677,7 +1677,7 @@
  */
 static int sample_conv_utime(const struct arg *args, struct sample *smp, void *private)
 {
-	struct chunk *temp;
+	struct buffer *temp;
 	/* With high numbers, the date returned can be negative, the 55 bits mask prevent this. */
 	time_t curr_date = smp->data.u.sint & 0x007fffffffffffffLL;
 	struct tm *tm;
@@ -1840,7 +1840,7 @@
 
 static int sample_conv_json(const struct arg *arg_p, struct sample *smp, void *private)
 {
-	struct chunk *temp;
+	struct buffer *temp;
 	char _str[7]; /* \u + 4 hex digit + null char for sprintf. */
 	const char *str;
 	int len;
@@ -2227,7 +2227,7 @@
 	char *start, *end;
 	struct my_regex *reg = arg_p[0].data.reg;
 	regmatch_t pmatch[MAX_MATCH];
-	struct chunk *trash = get_trash_chunk();
+	struct buffer *trash = get_trash_chunk();
 	int flag, max;
 	int found;
 
@@ -2629,7 +2629,7 @@
  */
 static int sample_conv_concat(const struct arg *arg_p, struct sample *smp, void *private)
 {
-	struct chunk *trash;
+	struct buffer *trash;
 	struct sample tmp;
 	int max;
 
diff --git a/src/server.c b/src/server.c
index 422f8bf..d96edc7 100644
--- a/src/server.c
+++ b/src/server.c
@@ -844,7 +844,8 @@
  * If <xferred> is non-negative, some information about requeued sessions are
  * provided.
  */
-void srv_append_status(struct chunk *msg, struct server *s, struct check *check, int xferred, int forced)
+void srv_append_status(struct buffer *msg, struct server *s,
+		       struct check *check, int xferred, int forced)
 {
 	short status = s->op_st_chg.status;
 	short code = s->op_st_chg.code;
@@ -865,7 +866,7 @@
 			chunk_appendf(msg, ", code: %d", code);
 
 		if (desc && *desc) {
-			struct chunk src;
+			struct buffer src;
 
 			chunk_appendf(msg, ", info: \"");
 
@@ -2686,7 +2687,7 @@
 static void srv_update_state(struct server *srv, int version, char **params)
 {
 	char *p;
-	struct chunk *msg;
+	struct buffer *msg;
 
 	/* fields since version 1
 	 * and common to all other upcoming versions
@@ -3415,7 +3416,7 @@
 	int ret, port_change_required;
 	char current_addr[INET6_ADDRSTRLEN];
 	uint16_t current_port, new_port;
-	struct chunk *msg;
+	struct buffer *msg;
 	int changed = 0;
 
 	msg = get_trash_chunk();
@@ -3674,7 +3675,7 @@
 	void *serverip, *firstip;
 	short server_sin_family, firstip_sin_family;
 	int ret;
-	struct chunk *chk = get_trash_chunk();
+	struct buffer *chk = get_trash_chunk();
 	int has_no_ip = 0;
 
 	s = objt_server(requester->owner);
@@ -4035,7 +4036,7 @@
 const char *update_server_fqdn(struct server *server, const char *fqdn, const char *updater, int dns_locked)
 {
 
-	struct chunk *msg;
+	struct buffer *msg;
 
 	msg = get_trash_chunk();
 	chunk_reset(msg);
@@ -4524,7 +4525,7 @@
 	int prev_srv_count = s->proxy->srv_bck + s->proxy->srv_act;
 	int srv_was_stopping = (s->cur_state == SRV_ST_STOPPING) || (s->cur_admin & SRV_ADMF_DRAIN);
 	int log_level;
-	struct chunk *tmptrash = NULL;
+	struct buffer *tmptrash = NULL;
 
 
 	/* If currently main is not set we try to apply pending state changes */
diff --git a/src/session.c b/src/session.c
index 6cea612..635aee5 100644
--- a/src/session.c
+++ b/src/session.c
@@ -281,7 +281,7 @@
 	listener_release(l);
 	if (ret < 0 && l->bind_conf->xprt == xprt_get(XPRT_RAW) && p->mode == PR_MODE_HTTP) {
 		/* critical error, no more memory, try to emit a 500 response */
-		struct chunk *err_msg = &p->errmsg[HTTP_ERR_500];
+		struct buffer *err_msg = &p->errmsg[HTTP_ERR_500];
 		if (!err_msg->area)
 			err_msg = &http_err_chunks[HTTP_ERR_500];
 		send(cfd, err_msg->area, err_msg->data,
diff --git a/src/ssl_sock.c b/src/ssl_sock.c
index b0b7d25..5689820 100644
--- a/src/ssl_sock.c
+++ b/src/ssl_sock.c
@@ -368,7 +368,7 @@
 struct certificate_ocsp {
 	struct ebmb_node key;
 	unsigned char key_data[OCSP_MAX_CERTID_ASN1_LENGTH];
-	struct chunk response;
+	struct buffer response;
 	long expire;
 };
 
@@ -644,7 +644,9 @@
  *
  * Returns 0 on success, 1 in error case.
  */
-static int ssl_sock_load_ocsp_response(struct chunk *ocsp_response, struct certificate_ocsp *ocsp, OCSP_CERTID *cid, char **err)
+static int ssl_sock_load_ocsp_response(struct buffer *ocsp_response,
+				       struct certificate_ocsp *ocsp,
+				       OCSP_CERTID *cid, char **err)
 {
 	OCSP_RESPONSE *resp;
 	OCSP_BASICRESP *bs = NULL;
@@ -766,7 +768,7 @@
  *
  * Returns 0 on success, 1 in error case.
  */
-int ssl_sock_update_ocsp_response(struct chunk *ocsp_response, char **err)
+int ssl_sock_update_ocsp_response(struct buffer *ocsp_response, char **err)
 {
 	return ssl_sock_load_ocsp_response(ocsp_response, NULL, NULL, err);
 }
@@ -886,7 +888,8 @@
         return NULL;
 }
 
-void ssl_sock_update_tlskey_ref(struct tls_keys_ref *ref, struct chunk *tlskey)
+void ssl_sock_update_tlskey_ref(struct tls_keys_ref *ref,
+				struct buffer *tlskey)
 {
 	HA_RWLOCK_WRLOCK(TLSKEYS_REF_LOCK, &ref->lock);
 	memcpy((char *) (ref->tlskeys + ((ref->tls_ticket_enc_index + 2) % TLS_TICKETS_NO)),
@@ -895,7 +898,7 @@
 	HA_RWLOCK_WRUNLOCK(TLSKEYS_REF_LOCK, &ref->lock);
 }
 
-int ssl_sock_update_tlskey(char *filename, struct chunk *tlskey, char **err)
+int ssl_sock_update_tlskey(char *filename, struct buffer *tlskey, char **err)
 {
 	struct tls_keys_ref *ref = tlskeys_ref_lookup(filename);
 
@@ -1267,7 +1270,7 @@
  * makes only basic test if the data seems like SCTL. No signature validation
  * is performed.
  */
-static int ssl_sock_parse_sctl(struct chunk *sctl)
+static int ssl_sock_parse_sctl(struct buffer *sctl)
 {
 	int ret = 1;
 	int len, pos, sct_len;
@@ -1301,7 +1304,8 @@
 	return ret;
 }
 
-static int ssl_sock_load_sctl_from_file(const char *sctl_path, struct chunk **sctl)
+static int ssl_sock_load_sctl_from_file(const char *sctl_path,
+					struct buffer **sctl)
 {
 	int fd = -1;
 	int r = 0;
@@ -1348,7 +1352,7 @@
 
 int ssl_sock_sctl_add_cbk(SSL *ssl, unsigned ext_type, const unsigned char **out, size_t *outlen, int *al, void *add_arg)
 {
-	struct chunk *sctl = add_arg;
+	struct buffer *sctl = add_arg;
 
 	*out = (unsigned char *) sctl->area;
 	*outlen = sctl->data;
@@ -1366,7 +1370,7 @@
 	char sctl_path[MAXPATHLEN+1];
 	int ret = -1;
 	struct stat st;
-	struct chunk *sctl = NULL;
+	struct buffer *sctl = NULL;
 
 	snprintf(sctl_path, MAXPATHLEN+1, "%s.sctl", cert_path);
 
@@ -5708,7 +5712,7 @@
 }
 
 /* used for ppv2 pkey alog (can be used for logging) */
-int ssl_sock_get_pkey_algo(struct connection *conn, struct chunk *out)
+int ssl_sock_get_pkey_algo(struct connection *conn, struct buffer *out)
 {
 	struct pkey_info *pkinfo;
 	int bits = 0;
@@ -5815,7 +5819,7 @@
  * -1 if output is not large enough.
  */
 static int
-ssl_sock_get_serial(X509 *crt, struct chunk *out)
+ssl_sock_get_serial(X509 *crt, struct buffer *out)
 {
 	ASN1_INTEGER *serial;
 
@@ -5836,7 +5840,7 @@
  * -1 if output is not large enough.
  */
 static int
-ssl_sock_crt2der(X509 *crt, struct chunk *out)
+ssl_sock_crt2der(X509 *crt, struct buffer *out)
 {
 	int len;
 	unsigned char *p = (unsigned char *) out->area;;
@@ -5854,12 +5858,12 @@
 }
 
 
-/* Copy Date in ASN1_UTCTIME format in struct chunk out.
+/* Copy Date in ASN1_UTCTIME format in struct buffer out.
  * Returns 1 if serial is found and copied, 0 if no valid time found
  * and -1 if output is not large enough.
  */
 static int
-ssl_sock_get_time(ASN1_TIME *tm, struct chunk *out)
+ssl_sock_get_time(ASN1_TIME *tm, struct buffer *out)
 {
 	if (tm->type == V_ASN1_GENERALIZEDTIME) {
 		ASN1_GENERALIZEDTIME *gentm = (ASN1_GENERALIZEDTIME *)tm;
@@ -5897,7 +5901,8 @@
  * Returns 1 if entry found, 0 if entry not found, or -1 if output not large enough.
  */
 static int
-ssl_sock_get_dn_entry(X509_NAME *a, const struct chunk *entry, int pos, struct chunk *out)
+ssl_sock_get_dn_entry(X509_NAME *a, const struct buffer *entry, int pos,
+		      struct buffer *out)
 {
 	X509_NAME_ENTRY *ne;
 	ASN1_OBJECT *obj;
@@ -5957,7 +5962,7 @@
  * Returns 1 if dn entries exits, 0 if no dn entry found or -1 if output is not large enough.
  */
 static int
-ssl_sock_get_dn_oneline(X509_NAME *a, struct chunk *out)
+ssl_sock_get_dn_oneline(X509_NAME *a, struct buffer *out)
 {
 	X509_NAME_ENTRY *ne;
 	ASN1_OBJECT *obj;
@@ -6039,12 +6044,13 @@
  *  or 0 if no CN found in DN
  *  or -1 on error case (i.e. no peer certificate)
  */
-int ssl_sock_get_remote_common_name(struct connection *conn, struct chunk *dest)
+int ssl_sock_get_remote_common_name(struct connection *conn,
+				    struct buffer *dest)
 {
 	X509 *crt = NULL;
 	X509_NAME *name;
 	const char find_cn[] = "CN";
-	const struct chunk find_cn_chunk = {
+	const struct buffer find_cn_chunk = {
 		.area = (char *)&find_cn,
 		.data = sizeof(find_cn)-1
 	};
@@ -6182,7 +6188,7 @@
 	int cert_peer = (kw[4] == 'c') ? 1 : 0;
 	X509 *crt = NULL;
 	int ret = 0;
-	struct chunk *smp_trash;
+	struct buffer *smp_trash;
 	struct connection *conn;
 
 	conn = objt_conn(smp->sess->origin);
@@ -6226,7 +6232,7 @@
 	int cert_peer = (kw[4] == 'c') ? 1 : 0;
 	X509 *crt = NULL;
 	int ret = 0;
-	struct chunk *smp_trash;
+	struct buffer *smp_trash;
 	struct connection *conn;
 
 	conn = objt_conn(smp->sess->origin);
@@ -6271,7 +6277,7 @@
 	X509 *crt = NULL;
 	const EVP_MD *digest;
 	int ret = 0;
-	struct chunk *smp_trash;
+	struct buffer *smp_trash;
 	struct connection *conn;
 
 	conn = objt_conn(smp->sess->origin);
@@ -6315,7 +6321,7 @@
 	int cert_peer = (kw[4] == 'c') ? 1 : 0;
 	X509 *crt = NULL;
 	int ret = 0;
-	struct chunk *smp_trash;
+	struct buffer *smp_trash;
 	struct connection *conn;
 
 	conn = objt_conn(smp->sess->origin);
@@ -6359,7 +6365,7 @@
 	X509 *crt = NULL;
 	X509_NAME *name;
 	int ret = 0;
-	struct chunk *smp_trash;
+	struct buffer *smp_trash;
 	struct connection *conn;
 
 	conn = objt_conn(smp->sess->origin);
@@ -6415,7 +6421,7 @@
 	int cert_peer = (kw[4] == 'c') ? 1 : 0;
 	X509 *crt = NULL;
 	int ret = 0;
-	struct chunk *smp_trash;
+	struct buffer *smp_trash;
 	struct connection *conn;
 
 	conn = objt_conn(smp->sess->origin);
@@ -6459,7 +6465,7 @@
 	X509 *crt = NULL;
 	X509_NAME *name;
 	int ret = 0;
-	struct chunk *smp_trash;
+	struct buffer *smp_trash;
 	struct connection *conn;
 
 	conn = objt_conn(smp->sess->origin);
@@ -6904,7 +6910,7 @@
 	struct connection *conn = (kw[4] != 'b') ? objt_conn(smp->sess->origin) :
 	                                    smp->strm ? cs_conn(objt_cs(smp->strm->si[1].end)) : NULL;
 	SSL_SESSION *ssl_sess;
-	struct chunk *data;
+	struct buffer *data;
 
 	if (!conn || !conn->xprt_ctx || conn->xprt != &ssl_sock)
 		return 0;
@@ -6974,7 +6980,7 @@
 static int
 smp_fetch_ssl_fc_cl_hex(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
-	struct chunk *data;
+	struct buffer *data;
 
 	if (!smp_fetch_ssl_fc_cl_bin(args, smp, kw, private))
 		return 0;
@@ -7009,7 +7015,7 @@
 smp_fetch_ssl_fc_cl_str(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
 #if (OPENSSL_VERSION_NUMBER >= 0x1000200fL) && !defined(LIBRESSL_VERSION_NUMBER)
-	struct chunk *data;
+	struct buffer *data;
 	int i;
 
 	if (!smp_fetch_ssl_fc_cl_bin(args, smp, kw, private))
@@ -7048,7 +7054,7 @@
 	struct connection *conn = (kw[4] != 'b') ? objt_conn(smp->sess->origin) :
 	                                    smp->strm ? cs_conn(objt_cs(smp->strm->si[1].end)) : NULL;
 	int finished_len;
-	struct chunk *finished_trash;
+	struct buffer *finished_trash;
 
 	smp->flags = 0;
 	if (!conn || !conn->xprt_ctx || conn->xprt != &ssl_sock)
@@ -8487,7 +8493,7 @@
 				HA_RWLOCK_RDLOCK(TLSKEYS_REF_LOCK, &ref->lock);
 				head = ref->tls_ticket_enc_index;
 				while (appctx->ctx.cli.i1 < TLS_TICKETS_NO) {
-					struct chunk *t2 = get_trash_chunk();
+					struct buffer *t2 = get_trash_chunk();
 
 					chunk_reset(t2);
 					/* should never fail here because we dump only a key in the t2 buffer */
diff --git a/src/standard.c b/src/standard.c
index 86827db..732932e 100644
--- a/src/standard.c
+++ b/src/standard.c
@@ -1555,7 +1555,7 @@
  */
 char *encode_chunk(char *start, char *stop,
 		    const char escape, const fd_set *map,
-		    const struct chunk *chunk)
+		    const struct buffer *chunk)
 {
 	char *str = chunk->area;
 	char *end = chunk->area + chunk->data;
@@ -1618,7 +1618,7 @@
  */
 char *escape_chunk(char *start, char *stop,
 		   const char escape, const fd_set *map,
-		   const struct chunk *chunk)
+		   const struct buffer *chunk)
 {
 	char *str = chunk->area;
 	char *end = chunk->area + chunk->data;
@@ -1656,7 +1656,7 @@
  * If <quote> is 1, the converter puts the quotes only if any reserved character
  * is present. If <quote> is 2, the converter always puts the quotes.
  *
- * <output> is a struct chunk used for storing the output string.
+ * <output> is a struct buffer used for storing the output string.
  *
  * The function returns the converted string on its output. If an error
  * occurs, the function returns an empty string. This type of output is useful
@@ -1670,7 +1670,7 @@
  * the chunk. Please use csv_enc() instead if you want to replace the output
  * chunk.
  */
-const char *csv_enc_append(const char *str, int quote, struct chunk *output)
+const char *csv_enc_append(const char *str, int quote, struct buffer *output)
 {
 	char *end = output->area + output->size;
 	char *out = output->area + output->data;
@@ -3825,7 +3825,7 @@
  * Other non-printable chars are encoded "\xHH". Space, '\', and '=' are also escaped.
  * Print stopped if null char or <bsize> is reached, or if no more place in the chunk.
  */
-int dump_text(struct chunk *out, const char *buf, int bsize)
+int dump_text(struct buffer *out, const char *buf, int bsize)
 {
 	unsigned char c;
 	int ptr = 0;
@@ -3869,7 +3869,7 @@
 /* print a buffer in hexa.
  * Print stopped if <bsize> is reached, or if no more place in the chunk.
  */
-int dump_binary(struct chunk *out, const char *buf, int bsize)
+int dump_binary(struct buffer *out, const char *buf, int bsize)
 {
 	unsigned char c;
 	int ptr = 0;
@@ -3895,7 +3895,7 @@
  * continuation of a previous truncated line begin with "+" instead of " "
  * after the offset. The new pointer is returned.
  */
-int dump_text_line(struct chunk *out, const char *buf, int bsize, int len,
+int dump_text_line(struct buffer *out, const char *buf, int bsize, int len,
                    int *line, int ptr)
 {
 	int end;
diff --git a/src/stats.c b/src/stats.c
index 88d665e..2632ef7 100644
--- a/src/stats.c
+++ b/src/stats.c
@@ -267,7 +267,7 @@
 /* Emits a stats field without any surrounding element and properly encoded to
  * resist CSV output. Returns non-zero on success, 0 if the buffer is full.
  */
-int stats_emit_raw_data_field(struct chunk *out, const struct field *f)
+int stats_emit_raw_data_field(struct buffer *out, const struct field *f)
 {
 	switch (field_format(f, 0)) {
 	case FF_EMPTY: return 1;
@@ -284,7 +284,7 @@
  * output is supposed to be used on its own line. Returns non-zero on success, 0
  * if the buffer is full.
  */
-int stats_emit_typed_data_field(struct chunk *out, const struct field *f)
+int stats_emit_typed_data_field(struct buffer *out, const struct field *f)
 {
 	switch (field_format(f, 0)) {
 	case FF_EMPTY: return 1;
@@ -306,7 +306,7 @@
 /* Emits a stats field value and its type in JSON.
  * Returns non-zero on success, 0 on error.
  */
-int stats_emit_json_data_field(struct chunk *out, const struct field *f)
+int stats_emit_json_data_field(struct buffer *out, const struct field *f)
 {
 	int old_len;
 	char buf[20];
@@ -352,7 +352,8 @@
 /* Emits an encoding of the field type on 3 characters followed by a delimiter.
  * Returns non-zero on success, 0 if the buffer is full.
  */
-int stats_emit_field_tags(struct chunk *out, const struct field *f, char delim)
+int stats_emit_field_tags(struct buffer *out, const struct field *f,
+			  char delim)
 {
 	char origin, nature, scope;
 
@@ -395,7 +396,7 @@
 /* Emits an encoding of the field type as JSON.
   * Returns non-zero on success, 0 if the buffer is full.
   */
-int stats_emit_json_field_tags(struct chunk *out, const struct field *f)
+int stats_emit_json_field_tags(struct buffer *out, const struct field *f)
 {
 	const char *origin, *nature, *scope;
 	int old_len;
@@ -443,7 +444,8 @@
 }
 
 /* Dump all fields from <stats> into <out> using CSV format */
-static int stats_dump_fields_csv(struct chunk *out, const struct field *stats)
+static int stats_dump_fields_csv(struct buffer *out,
+				 const struct field *stats)
 {
 	int field;
 
@@ -458,7 +460,8 @@
 }
 
 /* Dump all fields from <stats> into <out> using a typed "field:desc:type:value" format */
-static int stats_dump_fields_typed(struct chunk *out, const struct field *stats)
+static int stats_dump_fields_typed(struct buffer *out,
+				   const struct field *stats)
 {
 	int field;
 
@@ -486,7 +489,7 @@
 }
 
 /* Dump all fields from <stats> into <out> using the "show info json" format */
-static int stats_dump_json_info_fields(struct chunk *out,
+static int stats_dump_json_info_fields(struct buffer *out,
 				       const struct field *info)
 {
 	int field;
@@ -535,7 +538,8 @@
 }
 
 /* Dump all fields from <stats> into <out> using a typed "field:desc:type:value" format */
-static int stats_dump_fields_json(struct chunk *out, const struct field *stats,
+static int stats_dump_fields_json(struct buffer *out,
+				  const struct field *stats,
 				  int first_stat)
 {
 	int field;
@@ -606,9 +610,11 @@
  * reserved for the checkbox is ST_SHOWADMIN is set in <flags>. Some extra info
  * are provided if ST_SHLGNDS is present in <flags>.
  */
-static int stats_dump_fields_html(struct chunk *out, const struct field *stats, unsigned int flags)
+static int stats_dump_fields_html(struct buffer *out,
+				  const struct field *stats,
+				  unsigned int flags)
 {
-	struct chunk src;
+	struct buffer src;
 
 	if (stats[ST_F_TYPE].u.u32 == STATS_TYPE_FE) {
 		chunk_appendf(out,
@@ -1366,7 +1372,7 @@
 int stats_fill_li_stats(struct proxy *px, struct listener *l, int flags,
                         struct field *stats, int len)
 {
-	struct chunk *out = get_trash_chunk();
+	struct buffer *out = get_trash_chunk();
 
 	if (len < ST_F_TOTAL_FIELDS)
 		return 0;
@@ -1483,7 +1489,7 @@
 {
 	struct server *via, *ref;
 	char str[INET6_ADDRSTRLEN];
-	struct chunk *out = get_trash_chunk();
+	struct buffer *out = get_trash_chunk();
 	enum srv_stats_state state;
 	char *fld_status;
 
@@ -2638,7 +2644,7 @@
 	char *st_cur_param = NULL;
 	char *st_next_param = NULL;
 
-	struct chunk *temp;
+	struct buffer *temp;
 	int reql;
 
 	temp = get_trash_chunk();
@@ -3146,7 +3152,8 @@
 }
 
 /* Dump all fields from <info> into <out> using the "show info" format (name: value) */
-static int stats_dump_info_fields(struct chunk *out, const struct field *info)
+static int stats_dump_info_fields(struct buffer *out,
+				  const struct field *info)
 {
 	int field;
 
@@ -3165,7 +3172,8 @@
 }
 
 /* Dump all fields from <info> into <out> using the "show info typed" format */
-static int stats_dump_typed_info_fields(struct chunk *out, const struct field *info)
+static int stats_dump_typed_info_fields(struct buffer *out,
+					const struct field *info)
 {
 	int field;
 
@@ -3193,7 +3201,7 @@
 int stats_fill_info(struct field *info, int len)
 {
 	unsigned int up = (now.tv_sec - start_date.tv_sec);
-	struct chunk *out = get_trash_chunk();
+	struct buffer *out = get_trash_chunk();
 
 #ifdef USE_OPENSSL
 	int ssl_sess_rate = read_freq_ctr(&global.ssl_per_sec);
@@ -3315,7 +3323,7 @@
  * Integer values bouned to the range [-(2**53)+1, (2**53)-1] as
  * per the recommendation for interoperable integers in section 6 of RFC 7159.
  */
-static void stats_dump_json_schema(struct chunk *out)
+static void stats_dump_json_schema(struct buffer *out)
 {
 
 	int old_len = out->data;
diff --git a/src/stick_table.c b/src/stick_table.c
index f688740..e8d4f3a 100644
--- a/src/stick_table.c
+++ b/src/stick_table.c
@@ -3030,7 +3030,8 @@
  * read buffer. It returns 0 if the output buffer is full
  * and needs to be called again, otherwise non-zero.
  */
-static int table_dump_head_to_buffer(struct chunk *msg, struct stream_interface *si,
+static int table_dump_head_to_buffer(struct buffer *msg,
+                                     struct stream_interface *si,
                                      struct proxy *proxy, struct proxy *target)
 {
 	struct stream *s = si_strm(si);
@@ -3055,7 +3056,8 @@
  * read buffer. It returns 0 if the output buffer is full
  * and needs to be called again, otherwise non-zero.
  */
-static int table_dump_entry_to_buffer(struct chunk *msg, struct stream_interface *si,
+static int table_dump_entry_to_buffer(struct buffer *msg,
+                                      struct stream_interface *si,
                                       struct proxy *proxy, struct stksess *entry)
 {
 	int dt;
diff --git a/src/stream.c b/src/stream.c
index 6c7bd5b..3687bd0 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -1226,7 +1226,7 @@
 				struct proxy *backend = NULL;
 
 				if (rule->dynamic) {
-					struct chunk *tmp;
+					struct buffer *tmp;
 
 					tmp = alloc_trash_chunk();
 					if (!tmp)
diff --git a/src/stream_interface.c b/src/stream_interface.c
index 245f680..2fecb94 100644
--- a/src/stream_interface.c
+++ b/src/stream_interface.c
@@ -132,7 +132,8 @@
  * not need to be empty before this, and its contents will not be overwritten.
  * The primary goal of this function is to return error messages to a client.
  */
-void stream_int_retnclose(struct stream_interface *si, const struct chunk *msg)
+void stream_int_retnclose(struct stream_interface *si,
+			  const struct buffer *msg)
 {
 	struct channel *ic = si_ic(si);
 	struct channel *oc = si_oc(si);
diff --git a/src/wurfl.c b/src/wurfl.c
index 9d2dfa6..f7ac9b6 100644
--- a/src/wurfl.c
+++ b/src/wurfl.c
@@ -520,7 +520,7 @@
 static int ha_wurfl_get_all(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
 	wurfl_device_handle dHandle;
-	struct chunk *temp;
+	struct buffer *temp;
 	wurfl_information_t *wi;
 	ha_wurfl_header_t wh;
 
@@ -584,7 +584,7 @@
 static int ha_wurfl_get(const struct arg *args, struct sample *smp, const char *kw, void *private)
 {
 	wurfl_device_handle dHandle;
-	struct chunk *temp;
+	struct buffer *temp;
 	wurfl_data_t *wn = NULL;
 	struct ebmb_node *node;
 	ha_wurfl_header_t wh;
