diff --git a/include/common/buf.h b/include/common/buf.h
index c38d65d..a7bbb1f 100644
--- a/include/common/buf.h
+++ b/include/common/buf.h
@@ -447,6 +447,53 @@
 	b->head = b_size(b) - output;
 }
 
+/* b_putchar() : tries to append char <c> at the end of buffer <b>. Supports
+ * wrapping. Data are truncated if buffer is full.
+ */
+static inline void b_putchr(struct buffer *b, char c)
+{
+	if (b_full(b))
+		return;
+	*b_tail(b) = c;
+	b->len++;
+}
+
+/* b_putblk() : tries to append block <blk> at the end of buffer <b>. Supports
+ * wrapping. Data are truncated if buffer is too short. It returns the number
+ * of bytes copied.
+ */
+static inline size_t b_putblk(struct buffer *b, const char *blk, size_t len)
+{
+	size_t half;
+
+	if (len > b_room(b))
+		len = b_room(b);
+	if (!len)
+		return 0;
+
+	half = b_contig_space(b);
+	if (half > len)
+		half = len;
+
+	memcpy(b_tail(b), blk, half);
+	b->len += half;
+	if (len > half) {
+		memcpy(b_tail(b), blk + half, len - half);
+		b->len += len - half;
+	}
+	return len;
+}
+
+/* b_putstr() : tries to copy string <str> into output data at buffer <b>.
+ * Supports wrapping. Data are truncated if buffer is too short. It returns the
+ * number of bytes copied.
+ */
+static inline size_t b_putstr(struct buffer *b, const char *str)
+{
+	return b_putblk(b, str, strlen(str));
+}
+
+
 #endif /* _COMMON_BUF_H */
 
 /*
diff --git a/include/common/buffer.h b/include/common/buffer.h
index d7bfb96..d76bc01 100644
--- a/include/common/buffer.h
+++ b/include/common/buffer.h
@@ -116,116 +116,6 @@
 	return buffer_replace2(b, pos, end, str, strlen(str));
 }
 
-/* Tries to append char <c> at the end of buffer <b>. Supports wrapping. Data
- * are truncated if buffer is full.
- */
-static inline void bo_putchr(struct buffer *b, char c)
-{
-	if (b_data(b) == b->size)
-		return;
-	*b_tail(b) = c;
-	b->len++;
-}
-
-/* Tries to append block <blk> at the end of buffer <b>. Supports wrapping.
- * Data are truncated if buffer is too short. It returns the number of bytes
- * copied.
- */
-static inline unsigned int bo_putblk(struct buffer *b, const char *blk, unsigned int len)
-{
-	unsigned int half;
-
-	if (len > b_room(b))
-		len = b_room(b);
-	if (!len)
-		return 0;
-
-	half = b_contig_space(b);
-	if (half > len)
-		half = len;
-
-	memcpy(b_tail(b), blk, half);
-	b->len += half;
-	if (len > half) {
-		memcpy(b_tail(b), blk + half, len - half);
-		b->len += len - half;
-	}
-	return len;
-}
-
-/* Tries to copy string <str> into output data at buffer <b>. Supports wrapping.
- * Data are truncated if buffer is too short. It returns the number of bytes
- * copied.
- */
-static inline int bo_putstr(struct buffer *b, const char *str)
-{
-	return bo_putblk(b, str, strlen(str));
-}
-
-/* Tries to copy chunk <chk> into output data at buffer <b>. Supports wrapping.
- * Data are truncated if buffer is too short. It returns the number of bytes
- * copied.
- */
-static inline int bo_putchk(struct buffer *b, const struct chunk *chk)
-{
-	return bo_putblk(b, chk->str, chk->len);
-}
-
-/* Tries to write char <c> into input data at buffer <b>. Supports wrapping.
- * Data are truncated if buffer is full.
- */
-static inline void bi_putchr(struct buffer *b, char c)
-{
-	if (b_data(b) == b->size)
-		return;
-	*b_tail(b) = c;
-	b->len++;
-}
-
-/* Tries to append block <blk> at the end of buffer <b>. Supports wrapping.
- * Data are truncated if buffer is too short. It returns the number of bytes
- * copied.
- */
-static inline unsigned int bi_putblk(struct buffer *b, const char *blk, unsigned int len)
-{
-	int half;
-
-	if (len > b_room(b))
-		len = b_room(b);
-	if (!len)
-		return 0;
-
-	half = b_contig_space(b);
-	if (half > len)
-		half = len;
-
-	memcpy(b_tail(b), blk, half);
-	b->len += half;
-	if (len > half) {
-		memcpy(b_tail(b), blk + half, len - half);
-		b->len += len - half;
-	}
-	return len;
-}
-
-/* Tries to copy string <str> into input data at buffer <b>. Supports wrapping.
- * Data are truncated if buffer is too short. It returns the number of bytes
- * copied.
- */
-static inline int bi_putstr(struct buffer *b, const char *str)
-{
-	return bi_putblk(b, str, strlen(str));
-}
-
-/* Tries to copy chunk <chk> into input data at buffer <b>. Supports wrapping.
- * Data are truncated if buffer is too short. It returns the number of bytes
- * copied.
- */
-static inline int bi_putchk(struct buffer *b, const struct chunk *chk)
-{
-	return bi_putblk(b, chk->str, chk->len);
-}
-
 /* Allocates a buffer and replaces *buf with this buffer. If no memory is
  * available, &buf_wanted is used instead. No control is made to check if *buf
  * already pointed to another buffer. The allocated buffer is returned, or
diff --git a/src/checks.c b/src/checks.c
index e9b5318..d2c4035 100644
--- a/src/checks.c
+++ b/src/checks.c
@@ -1518,7 +1518,7 @@
 	 * its own strings.
 	 */
 	if (check->type && check->type != PR_O2_TCPCHK_CHK && !(check->state & CHK_ST_AGENT)) {
-		bo_putblk(check->bo, s->proxy->check_req, s->proxy->check_len);
+		b_putblk(check->bo, s->proxy->check_req, s->proxy->check_len);
 
 		/* we want to check if this host replies to HTTP or SSLv3 requests
 		 * so we'll send the request, and won't wake the checker up now.
@@ -1530,17 +1530,17 @@
 		}
 		else if ((check->type) == PR_O2_HTTP_CHK) {
 			if (s->proxy->options2 & PR_O2_CHK_SNDST)
-				bo_putblk(check->bo, trash.str, httpchk_build_status_header(s, trash.str, trash.size));
+				b_putblk(check->bo, trash.str, httpchk_build_status_header(s, trash.str, trash.size));
 			/* prevent HTTP keep-alive when "http-check expect" is used */
 			if (s->proxy->options2 & PR_O2_EXP_TYPE)
-				bo_putstr(check->bo, "Connection: close\r\n");
-			bo_putstr(check->bo, "\r\n");
+				b_putstr(check->bo, "Connection: close\r\n");
+			b_putstr(check->bo, "\r\n");
 			*b_tail(check->bo) = '\0'; /* to make gdb output easier to read */
 		}
 	}
 
 	if ((check->type & PR_O2_LB_AGENT_CHK) && check->send_string_len) {
-		bo_putblk(check->bo, check->send_string, check->send_string_len);
+		b_putblk(check->bo, check->send_string, check->send_string_len);
 	}
 
 	/* for tcp-checks, the initial connection setup is handled separately as
@@ -2868,7 +2868,7 @@
 			if (check->current_step->string_len >= b_room(check->bo))
 				continue;
 
-			bo_putblk(check->bo, check->current_step->string, check->current_step->string_len);
+			b_putblk(check->bo, check->current_step->string, check->current_step->string_len);
 			*b_tail(check->bo) = '\0'; /* to make gdb output easier to read */
 
 			/* go to next rule and try to send */
diff --git a/src/mux_h2.c b/src/mux_h2.c
index 46d69bb..d748eaa 100644
--- a/src/mux_h2.c
+++ b/src/mux_h2.c
@@ -2838,7 +2838,7 @@
 		do {
 			*--beg = hextab[chksz & 0xF];
 		} while (chksz >>= 4);
-		bi_putblk(buf, beg, str + sizeof(str) - beg);
+		b_putblk(buf, beg, str + sizeof(str) - beg);
 	}
 
 	/* Block1 is the length of the first block before the buffer wraps,
@@ -2850,14 +2850,14 @@
 	block2 = flen - block1;
 
 	if (block1)
-		bi_putblk(buf, b_head(h2c->dbuf), block1);
+		b_putblk(buf, b_head(h2c->dbuf), block1);
 
 	if (block2)
-		bi_putblk(buf, b_peek(h2c->dbuf, block1), block2);
+		b_putblk(buf, b_peek(h2c->dbuf, block1), block2);
 
 	if (h2s->flags & H2_SF_DATA_CHNK) {
 		/* emit the CRLF */
-		bi_putblk(buf, "\r\n", 2);
+		b_putblk(buf, "\r\n", 2);
 	}
 
 	/* now mark the input data as consumed (will be deleted from the buffer
@@ -2883,7 +2883,7 @@
 		if (count < 5)
 			goto more;
 		chklen += 5;
-		bi_putblk(buf, "0\r\n\r\n", 5);
+		b_putblk(buf, "0\r\n\r\n", 5);
 	}
 
 	h2c->rcvd_c += h2c->dpl;
