diff --git a/src/cache.c b/src/cache.c
index ccbbe52..9cef0ca 100644
--- a/src/cache.c
+++ b/src/cache.c
@@ -963,7 +963,7 @@
   error:
 	/* Sent and HTTP error 500 */
 	b_reset(&res->buf);
-	errmsg = &htx_err_chunks[HTTP_ERR_500];
+	errmsg = &http_err_chunks[HTTP_ERR_500];
 	res->buf.data = b_data(errmsg);
 	memcpy(res->buf.area, b_head(errmsg), b_data(errmsg));
 	res_htx = htx_from_buf(&res->buf);
diff --git a/src/cfgparse-listen.c b/src/cfgparse-listen.c
index 1101a98..cf3cb56 100644
--- a/src/cfgparse-listen.c
+++ b/src/cfgparse-listen.c
@@ -20,6 +20,7 @@
 #include <proto/acl.h>
 #include <proto/checks.h>
 #include <proto/connection.h>
+#include <proto/http_htx.h>
 #include <proto/http_rules.h>
 #include <proto/listener.h>
 #include <proto/protocol.h>
@@ -3832,8 +3833,17 @@
 
 		for (rc = 0; rc < HTTP_ERR_SIZE; rc++) {
 			if (http_err_codes[rc] == errnum) {
+				struct buffer chk;
+
+				if (!http_str_to_htx(&chk, ist2(err, errlen))) {
+					ha_alert("parsing [%s:%d] : unable to convert message in HTX for HTTP return code %d.\n",
+						 file, linenum, http_err_codes[rc]);
+					err_code |= ERR_ALERT | ERR_FATAL;
+					free(err);
+					goto out;
+				}
 				chunk_destroy(&curproxy->errmsg[rc]);
-				chunk_initlen(&curproxy->errmsg[rc], err, errlen, errlen);
+				curproxy->errmsg[rc] = chk;
 				break;
 			}
 		}
@@ -3892,8 +3902,17 @@
 		errnum = atol(args[1]);
 		for (rc = 0; rc < HTTP_ERR_SIZE; rc++) {
 			if (http_err_codes[rc] == errnum) {
+				struct buffer chk;
+
+				if (!http_str_to_htx(&chk, ist2(err, errlen))) {
+					ha_alert("parsing [%s:%d] : unable to convert message in HTX for HTTP return code %d.\n",
+						 file, linenum, http_err_codes[rc]);
+					err_code |= ERR_ALERT | ERR_FATAL;
+					free(err);
+					goto out;
+				}
 				chunk_destroy(&curproxy->errmsg[rc]);
-				chunk_initlen(&curproxy->errmsg[rc], err, errlen, errlen);
+				curproxy->errmsg[rc] = chk;
 				break;
 			}
 		}
diff --git a/src/haproxy.c b/src/haproxy.c
index 2525613..dfd2819 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -1383,13 +1383,6 @@
 	if (init_acl() != 0)
 		exit(1);
 
-	/* warning, we init buffers later */
-	if (!init_http(&err_msg)) {
-		ha_alert("%s. Aborting.\n", err_msg);
-		free(err_msg);
-		abort();
-	}
-
 	/* Initialise lua. */
 	hlua_init();
 
diff --git a/src/hlua.c b/src/hlua.c
index aca3cc9..fe67f04 100644
--- a/src/hlua.c
+++ b/src/hlua.c
@@ -6724,7 +6724,7 @@
 	 * just close the connection.
 	 */
 	if (!(ctx->ctx.hlua_apphttp.flags & APPLET_HDR_SENT)) {
-		struct buffer *err = &htx_err_chunks[HTTP_ERR_500];
+		struct buffer *err = &http_err_chunks[HTTP_ERR_500];
 
 		channel_erase(res);
 		res->buf.data = b_data(err);
diff --git a/src/http.c b/src/http.c
index 66a4282..c77f8c8 100644
--- a/src/http.c
+++ b/src/http.c
@@ -155,11 +155,6 @@
 	[127] = HTTP_FLG_CTL,
 };
 
-/* We must put the messages here since GCC cannot initialize consts depending
- * on strlen().
- */
-struct buffer http_err_chunks[HTTP_ERR_SIZE];
-
 const struct ist HTTP_100 = IST("HTTP/1.1 100 Continue\r\n\r\n");
 
 const struct ist HTTP_103 = IST("HTTP/1.1 103 Early Hints\r\n");
@@ -985,23 +980,3 @@
 
         return 1;
 }
-
-
-/* post-initializes the HTTP parts. Returns zero on error, with <err>
- * pointing to the error message.
- */
-int init_http(char **err)
-{
-	int msg;
-
-	for (msg = 0; msg < HTTP_ERR_SIZE; msg++) {
-		if (!http_err_msgs[msg]) {
-			memprintf(err, "Internal error: no message defined for HTTP return code %d", msg);
-			return 0;
-		}
-
-		http_err_chunks[msg].area = (char *)http_err_msgs[msg];
-		http_err_chunks[msg].data = strlen(http_err_msgs[msg]);
-	}
-	return 1;
-}
diff --git a/src/http_ana.c b/src/http_ana.c
index 9e876cd..ac3412b 100644
--- a/src/http_ana.c
+++ b/src/http_ana.c
@@ -4904,7 +4904,7 @@
 	else if (strm_fe(s)->errmsg[msgnum].area)
 		return &strm_fe(s)->errmsg[msgnum];
 	else
-		return &htx_err_chunks[msgnum];
+		return &http_err_chunks[msgnum];
 }
 
 /* Return the error message corresponding to si->err_type. It is assumed
diff --git a/src/http_htx.c b/src/http_htx.c
index 3382811..07ff191 100644
--- a/src/http_htx.c
+++ b/src/http_htx.c
@@ -19,7 +19,7 @@
 
 #include <proto/http_htx.h>
 
-struct buffer htx_err_chunks[HTTP_ERR_SIZE];
+struct buffer http_err_chunks[HTTP_ERR_SIZE];
 
 /* Returns the next unporocessed start line in the HTX message. It returns NULL
  * if the start-line is undefined (first == -1). Otherwise, it returns the
@@ -600,7 +600,7 @@
 	return 1;
 }
 
-static struct htx *http_str_to_htx(struct buffer *buf, struct ist raw)
+struct htx *http_str_to_htx(struct buffer *buf, struct ist raw)
 {
 	struct htx *htx;
 	struct htx_sl *sl;
@@ -673,28 +673,11 @@
 
 static int http_htx_init(void)
 {
-	struct proxy *px;
 	struct buffer chk;
 	struct ist raw;
 	int rc;
 	int err_code = 0;
 
-	for (px = proxies_list; px; px = px->next) {
-		for (rc = 0; rc < HTTP_ERR_SIZE; rc++) {
-			if (!b_data(&px->errmsg[rc]))
-				continue;
-
-			raw = ist2(b_head(&px->errmsg[rc]), b_data(&px->errmsg[rc]));
-			if (!http_str_to_htx(&chk, raw)) {
-				ha_alert("config: %s '%s': Unable to convert message in HTX for HTTP return code %d.\n",
-					 proxy_type_str(px), px->id, http_err_codes[rc]);
-				err_code |= ERR_ALERT | ERR_FATAL;
-			}
-			chunk_destroy(&px->errmsg[rc]);
-			px->errmsg[rc] = chk;
-		}
-	}
-
 	for (rc = 0; rc < HTTP_ERR_SIZE; rc++) {
 		if (!http_err_msgs[rc]) {
 			ha_alert("Internal error: no message defined for HTTP return code %d", rc);
@@ -708,7 +691,7 @@
 				 http_err_codes[rc]);
 			err_code |= ERR_ALERT | ERR_FATAL;
 		}
-		htx_err_chunks[rc] = chk;
+		http_err_chunks[rc] = chk;
 	}
 end:
 	return err_code;
