diff --git a/include/proto/acl.h b/include/proto/acl.h
index 131d799..493b56e 100644
--- a/include/proto/acl.h
+++ b/include/proto/acl.h
@@ -172,7 +172,7 @@
 
 /* always fake a data retrieval */
 int acl_fetch_nothing(struct proxy *px, struct session *l4, void *l7, int dir,
-                      struct acl_expr *expr, struct sample *smp);
+                      const struct arg *args, struct sample *smp);
 
 /* always return false */
 int acl_match_nothing(struct sample *smp, struct acl_pattern *pattern);
diff --git a/include/types/acl.h b/include/types/acl.h
index db63dfe..564c4bb 100644
--- a/include/types/acl.h
+++ b/include/types/acl.h
@@ -239,7 +239,7 @@
 	const char *kw;
 	int (*parse)(const char **text, struct acl_pattern *pattern, int *opaque);
 	int (*fetch)(struct proxy *px, struct session *l4, void *l7, int dir,
-	             struct acl_expr *expr, struct sample *smp);
+	             const struct arg *args, struct sample *smp);
 	int (*match)(struct sample *smp, struct acl_pattern *pattern);
 	unsigned int requires;   /* bit mask of all ACL_USE_* required to evaluate this keyword */
 	int arg_mask; /* mask describing up to 7 arg types */
diff --git a/src/acl.c b/src/acl.c
index 36b5307..1eda948 100644
--- a/src/acl.c
+++ b/src/acl.c
@@ -66,7 +66,7 @@
 /* force TRUE to be returned at the fetch level */
 static int
 acl_fetch_true(struct proxy *px, struct session *l4, void *l7, int dir,
-               struct acl_expr *expr, struct sample *smp)
+               const struct arg *args, struct sample *smp)
 {
 	smp->type = SMP_T_BOOL;
 	smp->data.uint = 1;
@@ -78,7 +78,7 @@
  */
 static int
 acl_fetch_wait_end(struct proxy *px, struct session *l4, void *l7, int dir,
-                   struct acl_expr *expr, struct sample *smp)
+                   const struct arg *args, struct sample *smp)
 {
 	if (dir & ACL_PARTIAL) {
 		smp->flags |= SMP_F_MAY_CHANGE;
@@ -92,7 +92,7 @@
 /* force FALSE to be returned at the fetch level */
 static int
 acl_fetch_false(struct proxy *px, struct session *l4, void *l7, int dir,
-                struct acl_expr *expr, struct sample *smp)
+                const struct arg *args, struct sample *smp)
 {
 	smp->type = SMP_T_BOOL;
 	smp->data.uint = 0;
@@ -102,7 +102,7 @@
 /* return the number of bytes in the request buffer */
 static int
 acl_fetch_req_len(struct proxy *px, struct session *l4, void *l7, int dir,
-                  struct acl_expr *expr, struct sample *smp)
+                  const struct arg *args, struct sample *smp)
 {
 	if (!l4 || !l4->req)
 		return 0;
@@ -116,7 +116,7 @@
 
 static int
 acl_fetch_ssl_hello_type(struct proxy *px, struct session *l4, void *l7, int dir,
-                         struct acl_expr *expr, struct sample *smp)
+                         const struct arg *args, struct sample *smp)
 {
 	int hs_len;
 	int hs_type, bleft;
@@ -185,7 +185,7 @@
  */
 static int
 acl_fetch_req_ssl_ver(struct proxy *px, struct session *l4, void *l7, int dir,
-                      struct acl_expr *expr, struct sample *smp)
+                      const struct arg *args, struct sample *smp)
 {
 	int version, bleft, msg_len;
 	const unsigned char *data;
@@ -321,7 +321,7 @@
  */
 static int
 acl_fetch_ssl_hello_sni(struct proxy *px, struct session *l4, void *l7, int dir,
-                        struct acl_expr *expr, struct sample *smp)
+                        const struct arg *args, struct sample *smp)
 {
 	int hs_len, ext_len, bleft;
 	struct buffer *b;
@@ -465,7 +465,7 @@
 
 /* always fake a data retrieval */
 int acl_fetch_nothing(struct proxy *px, struct session *l4, void *l7, int dir,
-		      struct acl_expr *expr, struct sample *smp)
+                      const struct arg *args, struct sample *smp)
 {
 	return 1;
 }
@@ -1733,7 +1733,7 @@
 				/* we need to reset context and flags */
 				memset(&smp, 0, sizeof(smp));
 			fetch_next:
-				if (!expr->kw->fetch(px, l4, l7, dir, expr, &smp)) {
+				if (!expr->kw->fetch(px, l4, l7, dir, expr->args, &smp)) {
 					/* maybe we could not fetch because of missing data */
 					if (smp.flags & SMP_F_MAY_CHANGE && dir & ACL_PARTIAL)
 						acl_res |= ACL_PAT_MISS;
diff --git a/src/backend.c b/src/backend.c
index c0c2412..a956707 100644
--- a/src/backend.c
+++ b/src/backend.c
@@ -1375,11 +1375,11 @@
  */
 static int
 acl_fetch_nbsrv(struct proxy *px, struct session *l4, void *l7, int dir,
-                struct acl_expr *expr, struct sample *smp)
+                const struct arg *args, struct sample *smp)
 {
 	smp->flags = SMP_F_VOL_TEST;
 	smp->type = SMP_T_UINT;
-	px = expr->args->data.prx;
+	px = args->data.prx;
 
 	if (px->srv_act)
 		smp->data.uint = px->srv_act;
@@ -1398,9 +1398,9 @@
  */
 static int
 acl_fetch_srv_is_up(struct proxy *px, struct session *l4, void *l7, int dir,
-		    struct acl_expr *expr, struct sample *smp)
+                    const struct arg *args, struct sample *smp)
 {
-	struct server *srv = expr->args->data.srv;
+	struct server *srv = args->data.srv;
 
 	smp->flags = SMP_F_VOL_TEST;
 	smp->type = SMP_T_BOOL;
@@ -1418,7 +1418,7 @@
  */
 static int
 acl_fetch_connslots(struct proxy *px, struct session *l4, void *l7, int dir,
-		    struct acl_expr *expr, struct sample *smp)
+                    const struct arg *args, struct sample *smp)
 {
 	struct server *iterator;
 
@@ -1426,7 +1426,7 @@
 	smp->type = SMP_T_UINT;
 	smp->data.uint = 0;
 
-	for (iterator = expr->args->data.prx->srv; iterator; iterator = iterator->next) {
+	for (iterator = args->data.prx->srv; iterator; iterator = iterator->next) {
 		if ((iterator->state & SRV_RUNNING) == 0)
 			continue;
 
@@ -1446,7 +1446,7 @@
 /* set temp integer to the id of the backend */
 static int
 acl_fetch_be_id(struct proxy *px, struct session *l4, void *l7, int dir,
-                struct acl_expr *expr, struct sample *smp)
+                const struct arg *args, struct sample *smp)
 {
 	smp->flags = SMP_F_VOL_TXN;
 	smp->type = SMP_T_UINT;
@@ -1457,7 +1457,7 @@
 /* set temp integer to the id of the server */
 static int
 acl_fetch_srv_id(struct proxy *px, struct session *l4, void *l7, int dir,
-                struct acl_expr *expr, struct sample *smp)
+                 const struct arg *args, struct sample *smp)
 {
 	if (!target_srv(&l4->target))
 		return 0;
@@ -1474,11 +1474,11 @@
  */
 static int
 acl_fetch_be_sess_rate(struct proxy *px, struct session *l4, void *l7, int dir,
-                       struct acl_expr *expr, struct sample *smp)
+                       const struct arg *args, struct sample *smp)
 {
 	smp->flags = SMP_F_VOL_TEST;
 	smp->type = SMP_T_UINT;
-	smp->data.uint = read_freq_ctr(&expr->args->data.prx->be_sess_per_sec);
+	smp->data.uint = read_freq_ctr(&args->data.prx->be_sess_per_sec);
 	return 1;
 }
 
@@ -1488,11 +1488,11 @@
  */
 static int
 acl_fetch_be_conn(struct proxy *px, struct session *l4, void *l7, int dir,
-		  struct acl_expr *expr, struct sample *smp)
+                  const struct arg *args, struct sample *smp)
 {
 	smp->flags = SMP_F_VOL_TEST;
 	smp->type = SMP_T_UINT;
-	smp->data.uint = expr->args->data.prx->beconn;
+	smp->data.uint = args->data.prx->beconn;
 	return 1;
 }
 
@@ -1502,11 +1502,11 @@
  */
 static int
 acl_fetch_queue_size(struct proxy *px, struct session *l4, void *l7, int dir,
-		   struct acl_expr *expr, struct sample *smp)
+                     const struct arg *args, struct sample *smp)
 {
 	smp->flags = SMP_F_VOL_TEST;
 	smp->type = SMP_T_UINT;
-	smp->data.uint = expr->args->data.prx->totpend;
+	smp->data.uint = args->data.prx->totpend;
 	return 1;
 }
 
@@ -1520,13 +1520,13 @@
  */
 static int
 acl_fetch_avg_queue_size(struct proxy *px, struct session *l4, void *l7, int dir,
-		   struct acl_expr *expr, struct sample *smp)
+                         const struct arg *args, struct sample *smp)
 {
 	int nbsrv;
 
 	smp->flags = SMP_F_VOL_TEST;
 	smp->type = SMP_T_UINT;
-	px = expr->args->data.prx;
+	px = args->data.prx;
 
 	if (px->srv_act)
 		nbsrv = px->srv_act;
@@ -1549,11 +1549,11 @@
  */
 static int
 acl_fetch_srv_conn(struct proxy *px, struct session *l4, void *l7, int dir,
-		  struct acl_expr *expr, struct sample *smp)
+                   const struct arg *args, struct sample *smp)
 {
 	smp->flags = SMP_F_VOL_TEST;
 	smp->type = SMP_T_UINT;
-	smp->data.uint = expr->args->data.srv->cur_sess;
+	smp->data.uint = args->data.srv->cur_sess;
 	return 1;
 }
 
diff --git a/src/frontend.c b/src/frontend.c
index c44cd92..8cd9de7 100644
--- a/src/frontend.c
+++ b/src/frontend.c
@@ -500,7 +500,7 @@
 /* set temp integer to the id of the frontend */
 static int
 acl_fetch_fe_id(struct proxy *px, struct session *l4, void *l7, int dir,
-                struct acl_expr *expr, struct sample *smp)
+                const struct arg *args, struct sample *smp)
 {
 	smp->flags = SMP_F_VOL_SESS;
 	smp->type = SMP_T_UINT;
@@ -514,11 +514,11 @@
  */
 static int
 acl_fetch_fe_sess_rate(struct proxy *px, struct session *l4, void *l7, int dir,
-                       struct acl_expr *expr, struct sample *smp)
+                       const struct arg *args, struct sample *smp)
 {
 	smp->flags = SMP_F_VOL_TEST;
 	smp->type = SMP_T_UINT;
-	smp->data.uint = read_freq_ctr(&expr->args->data.prx->fe_sess_per_sec);
+	smp->data.uint = read_freq_ctr(&args->data.prx->fe_sess_per_sec);
 	return 1;
 }
 
@@ -528,11 +528,11 @@
  */
 static int
 acl_fetch_fe_conn(struct proxy *px, struct session *l4, void *l7, int dir,
-		  struct acl_expr *expr, struct sample *smp)
+                  const struct arg *args, struct sample *smp)
 {
 	smp->flags = SMP_F_VOL_TEST;
 	smp->type = SMP_T_UINT;
-	smp->data.uint = expr->args->data.prx->feconn;
+	smp->data.uint = args->data.prx->feconn;
 	return 1;
 }
 
diff --git a/src/proto_http.c b/src/proto_http.c
index 933351a..7421688 100644
--- a/src/proto_http.c
+++ b/src/proto_http.c
@@ -7532,7 +7532,8 @@
 /* This function ensures that the prerequisites for an L7 fetch are ready,
  * which means that a request or response is ready. If some data is missing,
  * a parsing attempt is made. This is useful in TCP-based ACLs which are able
- * to extract data from L7.
+ * to extract data from L7. If <req_vol> is non-null during a request prefetch,
+ * another test is made to ensure the required information is not gone.
  *
  * The function returns :
  *   0 if some data is missing or if the requested data cannot be fetched
@@ -7541,7 +7542,7 @@
  */
 static int
 acl_prefetch_http(struct proxy *px, struct session *s, void *l7, int dir,
-		  struct acl_expr *expr, struct sample *smp)
+                  const struct arg *args, struct sample *smp, int req_vol)
 {
 	struct http_txn *txn = l7;
 	struct http_msg *msg = &txn->req;
@@ -7556,7 +7557,7 @@
 	/* Check for a dependency on a request */
 	smp->type = SMP_T_BOOL;
 
-	if (expr->kw->requires & ACL_USE_L7REQ_ANY) {
+	if ((dir & ACL_DIR_MASK) == ACL_DIR_REQ) {
 		if (unlikely(!s->req))
 			return 0;
 
@@ -7595,15 +7596,13 @@
 			}
 		}
 
-		if ((expr->kw->requires & ACL_USE_L7REQ_VOLATILE) &&
-		    txn->rsp.msg_state != HTTP_MSG_RPBEFORE)
+		if (req_vol && txn->rsp.msg_state != HTTP_MSG_RPBEFORE)
 			return 0;  /* data might have moved and indexes changed */
 
 		/* otherwise everything's ready for the request */
 	}
-
-	/* Check for a dependency on a response */
-	if (expr->kw->requires & ACL_USE_L7RTR_ANY) {
+	else {
+		/* Check for a dependency on a response */
 		if (txn->rsp.msg_state < HTTP_MSG_BODY)
 			return 0;
 	}
@@ -7613,8 +7612,11 @@
 }
 
 #define CHECK_HTTP_MESSAGE_FIRST() \
-	do { int r = acl_prefetch_http(px, l4, l7, dir, expr, smp); if (r <= 0) return r; } while (0)
+	do { int r = acl_prefetch_http(px, l4, l7, dir, args, smp, 1); if (r <= 0) return r; } while (0)
 
+#define CHECK_HTTP_MESSAGE_FIRST_PERM() \
+	do { int r = acl_prefetch_http(px, l4, l7, dir, args, smp, 0); if (r <= 0) return r; } while (0)
+
 
 /* 1. Check on METHOD
  * We use the pre-parsed method if it is known, and store its number as an
@@ -7647,12 +7649,12 @@
  */
 static int
 acl_fetch_meth(struct proxy *px, struct session *l4, void *l7, int dir,
-               struct acl_expr *expr, struct sample *smp)
+               const struct arg *args, struct sample *smp)
 {
 	int meth;
 	struct http_txn *txn = l7;
 
-	CHECK_HTTP_MESSAGE_FIRST();
+	CHECK_HTTP_MESSAGE_FIRST_PERM();
 
 	meth = txn->meth;
 	smp->type = SMP_T_UINT;
@@ -7711,7 +7713,7 @@
 
 static int
 acl_fetch_rqver(struct proxy *px, struct session *l4, void *l7, int dir,
-                struct acl_expr *expr, struct sample *smp)
+                const struct arg *args, struct sample *smp)
 {
 	struct http_txn *txn = l7;
 	char *ptr;
@@ -7736,7 +7738,7 @@
 
 static int
 acl_fetch_stver(struct proxy *px, struct session *l4, void *l7, int dir,
-                struct acl_expr *expr, struct sample *smp)
+                const struct arg *args, struct sample *smp)
 {
 	struct http_txn *txn = l7;
 	char *ptr;
@@ -7762,7 +7764,7 @@
 /* 3. Check on Status Code. We manipulate integers here. */
 static int
 acl_fetch_stcode(struct proxy *px, struct session *l4, void *l7, int dir,
-                 struct acl_expr *expr, struct sample *smp)
+                 const struct arg *args, struct sample *smp)
 {
 	struct http_txn *txn = l7;
 	char *ptr;
@@ -7782,7 +7784,7 @@
 /* 4. Check on URL/URI. A pointer to the URI is stored. */
 static int
 acl_fetch_url(struct proxy *px, struct session *l4, void *l7, int dir,
-              struct acl_expr *expr, struct sample *smp)
+              const struct arg *args, struct sample *smp)
 {
 	struct http_txn *txn = l7;
 
@@ -7797,7 +7799,7 @@
 
 static int
 acl_fetch_url_ip(struct proxy *px, struct session *l4, void *l7, int dir,
-		 struct acl_expr *expr, struct sample *smp)
+                 const struct arg *args, struct sample *smp)
 {
 	struct http_txn *txn = l7;
 
@@ -7823,7 +7825,7 @@
 
 static int
 acl_fetch_url_port(struct proxy *px, struct session *l4, void *l7, int dir,
-		   struct acl_expr *expr, struct sample *smp)
+                   const struct arg *args, struct sample *smp)
 {
 	struct http_txn *txn = l7;
 
@@ -7846,14 +7848,14 @@
  */
 static int
 acl_fetch_hdr(struct proxy *px, struct session *l4, void *l7, int dir,
-              struct acl_expr *expr, struct sample *smp)
+              const struct arg *args, struct sample *smp)
 {
 	struct http_txn *txn = l7;
 	struct hdr_idx *idx = &txn->hdr_idx;
 	struct hdr_ctx *ctx = (struct hdr_ctx *)smp->ctx.a;
 	const struct http_msg *msg = ((dir & ACL_DIR_MASK) == ACL_DIR_REQ) ? &txn->req : &txn->rsp;
 
-	if (!expr->args || expr->args->type != ARGT_STR)
+	if (!args || args->type != ARGT_STR)
 		return 0;
 
 	CHECK_HTTP_MESSAGE_FIRST();
@@ -7862,7 +7864,7 @@
 		/* search for header from the beginning */
 		ctx->idx = 0;
 
-	if (http_find_header2(expr->args->data.str.str, expr->args->data.str.len, msg->buf->p + msg->sol, idx, ctx)) {
+	if (http_find_header2(args->data.str.str, args->data.str.len, msg->buf->p + msg->sol, idx, ctx)) {
 		smp->flags |= SMP_F_NOT_LAST;
 		smp->flags |= SMP_F_VOL_HDR;
 		smp->type = SMP_T_CSTR;
@@ -7882,7 +7884,7 @@
  */
 static int
 acl_fetch_hdr_cnt(struct proxy *px, struct session *l4, void *l7, int dir,
-                  struct acl_expr *expr, struct sample *smp)
+                  const struct arg *args, struct sample *smp)
 {
 	struct http_txn *txn = l7;
 	struct hdr_idx *idx = &txn->hdr_idx;
@@ -7890,14 +7892,14 @@
 	const struct http_msg *msg = ((dir & ACL_DIR_MASK) == ACL_DIR_REQ) ? &txn->req : &txn->rsp;
 	int cnt;
 
-	if (!expr->args || expr->args->type != ARGT_STR)
+	if (!args || args->type != ARGT_STR)
 		return 0;
 
 	CHECK_HTTP_MESSAGE_FIRST();
 
 	ctx.idx = 0;
 	cnt = 0;
-	while (http_find_header2(expr->args->data.str.str, expr->args->data.str.len, msg->buf->p + msg->sol, idx, &ctx))
+	while (http_find_header2(args->data.str.str, args->data.str.len, msg->buf->p + msg->sol, idx, &ctx))
 		cnt++;
 
 	smp->type = SMP_T_UINT;
@@ -7911,9 +7913,9 @@
  */
 static int
 acl_fetch_hdr_val(struct proxy *px, struct session *l4, void *l7, int dir,
-                  struct acl_expr *expr, struct sample *smp)
+                  const struct arg *args, struct sample *smp)
 {
-	int ret = acl_fetch_hdr(px, l4, l7, dir, expr, smp);
+	int ret = acl_fetch_hdr(px, l4, l7, dir, args, smp);
 
 	if (ret > 0) {
 		smp->type = SMP_T_UINT;
@@ -7927,11 +7929,11 @@
  */
 static int
 acl_fetch_hdr_ip(struct proxy *px, struct session *l4, void *l7, int dir,
-                  struct acl_expr *expr, struct sample *smp)
+                 const struct arg *args, struct sample *smp)
 {
 	int ret;
 
-	while ((ret = acl_fetch_hdr(px, l4, l7, dir, expr, smp)) > 0) {
+	while ((ret = acl_fetch_hdr(px, l4, l7, dir, args, smp)) > 0) {
 		smp->type = SMP_T_IPV4;
 		if (url2ipv4((char *)smp->data.str.str, &smp->data.ipv4))
 			break;
@@ -7945,7 +7947,7 @@
  */
 static int
 acl_fetch_path(struct proxy *px, struct session *l4, void *l7, int dir,
-               struct acl_expr *expr, struct sample *smp)
+               const struct arg *args, struct sample *smp)
 {
 	struct http_txn *txn = l7;
 	char *ptr, *end;
@@ -7971,13 +7973,13 @@
 
 static int
 acl_fetch_proto_http(struct proxy *px, struct session *l4, void *l7, int dir,
-		     struct acl_expr *expr, struct sample *smp)
+                     const struct arg *args, struct sample *smp)
 {
 	/* Note: hdr_idx.v cannot be NULL in this ACL because the ACL is tagged
 	 * as a layer7 ACL, which involves automatic allocation of hdr_idx.
 	 */
 
-	CHECK_HTTP_MESSAGE_FIRST();
+	CHECK_HTTP_MESSAGE_FIRST_PERM();
 
 	smp->type = SMP_T_BOOL;
 	smp->data.uint = 1;
@@ -7987,7 +7989,7 @@
 /* return a valid test if the current request is the first one on the connection */
 static int
 acl_fetch_http_first_req(struct proxy *px, struct session *s, void *l7, int dir,
-		     struct acl_expr *expr, struct sample *smp)
+                         const struct arg *args, struct sample *smp)
 {
 	if (!s)
 		return 0;
@@ -8000,10 +8002,10 @@
 /* Accepts exactly 1 argument of type userlist */
 static int
 acl_fetch_http_auth(struct proxy *px, struct session *l4, void *l7, int dir,
-		    struct acl_expr *expr, struct sample *smp)
+                    const struct arg *args, struct sample *smp)
 {
 
-	if (!expr->args || expr->args->type != ARGT_USR)
+	if (!args || args->type != ARGT_USR)
 		return 0;
 
 	CHECK_HTTP_MESSAGE_FIRST();
@@ -8012,7 +8014,7 @@
 		return 0;
 
 	smp->type = SMP_T_BOOL;
-	smp->data.uint = check_user(expr->args->data.usr, 0, l4->txn.auth.user, l4->txn.auth.pass);
+	smp->data.uint = check_user(args->data.usr, 0, l4->txn.auth.user, l4->txn.auth.pass);
 	return 1;
 }
 
@@ -8115,12 +8117,12 @@
  * smp->ctx.a[0] for the in-header position, smp->ctx.a[1] for the
  * end-of-header-value, and smp->ctx.a[2] for the hdr_idx. Depending on
  * the direction, multiple cookies may be parsed on the same line or not.
- * The cookie name is in expr->arg and the name length in expr->args->data.str.len.
+ * The cookie name is in args and the name length in args->data.str.len.
  * Accepts exactly 1 argument of type string.
  */
 static int
 acl_fetch_cookie_value(struct proxy *px, struct session *l4, void *l7, int dir,
-		       struct acl_expr *expr, struct sample *smp)
+                       const struct arg *args, struct sample *smp)
 {
 	struct http_txn *txn = l7;
 	struct hdr_idx *idx = &txn->hdr_idx;
@@ -8130,7 +8132,7 @@
 	int hdr_name_len;
 	char *sol;
 
-	if (!expr->args || expr->args->type != ARGT_STR)
+	if (!args || args->type != ARGT_STR)
 		return 0;
 
 	CHECK_HTTP_MESSAGE_FIRST();
@@ -8160,7 +8162,7 @@
 			if (!http_find_header2(hdr_name, hdr_name_len, sol, idx, ctx))
 				goto out;
 
-			if (ctx->vlen < expr->args->data.str.len + 1)
+			if (ctx->vlen < args->data.str.len + 1)
 				continue;
 
 			smp->ctx.a[0] = ctx->line + ctx->val;
@@ -8169,7 +8171,7 @@
 
 		smp->type = SMP_T_CSTR;
 		smp->ctx.a[0] = extract_cookie_value(smp->ctx.a[0], smp->ctx.a[1],
-						 expr->args->data.str.str, expr->args->data.str.len,
+						 args->data.str.str, args->data.str.len,
 						 (dir & ACL_DIR_MASK) == ACL_DIR_REQ,
 						 &smp->data.str.str,
 						 &smp->data.str.len);
@@ -8188,13 +8190,13 @@
 }
 
 /* Iterate over all cookies present in a request to count how many occurrences
- * match the name in expr->arg and expr->args->data.str.len. If <multi> is non-null, then
+ * match the name in args and args->data.str.len. If <multi> is non-null, then
  * multiple cookies may be parsed on the same line.
  * Accepts exactly 1 argument of type string.
  */
 static int
 acl_fetch_cookie_cnt(struct proxy *px, struct session *l4, void *l7, int dir,
-		     struct acl_expr *expr, struct sample *smp)
+                     const struct arg *args, struct sample *smp)
 {
 	struct http_txn *txn = l7;
 	struct hdr_idx *idx = &txn->hdr_idx;
@@ -8206,7 +8208,7 @@
 	char *val_beg, *val_end;
 	char *sol;
 
-	if (!expr->args || expr->args->type != ARGT_STR)
+	if (!args || args->type != ARGT_STR)
 		return 0;
 
 	CHECK_HTTP_MESSAGE_FIRST();
@@ -8232,7 +8234,7 @@
 			if (!http_find_header2(hdr_name, hdr_name_len, sol, idx, &ctx))
 				break;
 
-			if (ctx.vlen < expr->args->data.str.len + 1)
+			if (ctx.vlen < args->data.str.len + 1)
 				continue;
 
 			val_beg = ctx.line + ctx.val;
@@ -8241,7 +8243,7 @@
 
 		smp->type = SMP_T_CSTR;
 		while ((val_beg = extract_cookie_value(val_beg, val_end,
-						       expr->args->data.str.str, expr->args->data.str.len,
+						       args->data.str.str, args->data.str.len,
 						       (dir & ACL_DIR_MASK) == ACL_DIR_REQ,
 						       &smp->data.str.str,
 						       &smp->data.str.len))) {
diff --git a/src/proto_tcp.c b/src/proto_tcp.c
index 317a5f3..7cb45e6 100644
--- a/src/proto_tcp.c
+++ b/src/proto_tcp.c
@@ -1363,19 +1363,19 @@
 
 static int
 acl_fetch_rdp_cookie(struct proxy *px, struct session *l4, void *l7, int dir,
-                     struct acl_expr *expr, struct sample *smp)
+                     const struct arg *args, struct sample *smp)
 {
-	return smp_fetch_rdp_cookie(px, l4, l7, dir, expr->args, smp);
+	return smp_fetch_rdp_cookie(px, l4, l7, dir, args, smp);
 }
 
 /* returns either 1 or 0 depending on whether an RDP cookie is found or not */
 static int
 acl_fetch_rdp_cookie_cnt(struct proxy *px, struct session *l4, void *l7, int dir,
-                         struct acl_expr *expr, struct sample *smp)
+                         const struct arg *args, struct sample *smp)
 {
 	int ret;
 
-	ret = smp_fetch_rdp_cookie(px, l4, l7, dir, expr->args, smp);
+	ret = smp_fetch_rdp_cookie(px, l4, l7, dir, args, smp);
 
 	if (smp->flags & SMP_F_MAY_CHANGE)
 		return 0;
@@ -1390,7 +1390,7 @@
 /* copy the source IPv4/v6 address into temp_pattern */
 static int
 acl_fetch_src(struct proxy *px, struct session *l4, void *l7, int dir,
-              struct acl_expr *expr, struct sample *smp)
+              const struct arg *args, struct sample *smp)
 {
 	switch (l4->si[0].addr.from.ss_family) {
 	case AF_INET:
@@ -1438,7 +1438,7 @@
 /* set temp integer to the connection's source port */
 static int
 acl_fetch_sport(struct proxy *px, struct session *l4, void *l7, int dir,
-                struct acl_expr *expr, struct sample *smp)
+                const struct arg *args, struct sample *smp)
 {
 	smp->type = SMP_T_UINT;
 	if (!(smp->data.uint = get_host_port(&l4->si[0].addr.from)))
@@ -1452,7 +1452,7 @@
 /* set test->ptr to point to the frontend's IPv4/IPv6 address and test->i to the family */
 static int
 acl_fetch_dst(struct proxy *px, struct session *l4, void *l7, int dir,
-              struct acl_expr *expr, struct sample *smp)
+              const struct arg *args, struct sample *smp)
 {
 	stream_sock_get_to_addr(&l4->si[0]);
 
@@ -1507,7 +1507,7 @@
 /* set temp integer to the frontend connexion's destination port */
 static int
 acl_fetch_dport(struct proxy *px, struct session *l4, void *l7, int dir,
-                struct acl_expr *expr, struct sample *smp)
+                const struct arg *args, struct sample *smp)
 {
 	stream_sock_get_to_addr(&l4->si[0]);
 
diff --git a/src/protocols.c b/src/protocols.c
index 52ddbcc..8a95c2d 100644
--- a/src/protocols.c
+++ b/src/protocols.c
@@ -326,7 +326,7 @@
 /* set temp integer to the number of connexions to the same listening socket */
 static int
 acl_fetch_dconn(struct proxy *px, struct session *l4, void *l7, int dir,
-                struct acl_expr *expr, struct sample *smp)
+                const struct arg *args, struct sample *smp)
 {
 	smp->type = SMP_T_UINT;
 	smp->data.uint = l4->listener->nbconn;
@@ -336,7 +336,7 @@
 /* set temp integer to the id of the socket (listener) */
 static int
 acl_fetch_so_id(struct proxy *px, struct session *l4, void *l7, int dir,
-                struct acl_expr *expr, struct sample *smp)
+                const struct arg *args, struct sample *smp)
 {
 	smp->type = SMP_T_UINT;
 	smp->data.uint = l4->listener->luid;
diff --git a/src/session.c b/src/session.c
index b4c0a82..f381f9e 100644
--- a/src/session.c
+++ b/src/session.c
@@ -2327,7 +2327,7 @@
  */
 static int
 acl_fetch_sc1_get_gpc0(struct proxy *px, struct session *l4, void *l7, int dir,
-                       struct acl_expr *expr, struct sample *smp)
+                       const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr1_entry)
 		return 0;
@@ -2339,7 +2339,7 @@
  */
 static int
 acl_fetch_sc2_get_gpc0(struct proxy *px, struct session *l4, void *l7, int dir,
-                       struct acl_expr *expr, struct sample *smp)
+                       const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr2_entry)
 		return 0;
@@ -2352,7 +2352,7 @@
  */
 static int
 acl_fetch_src_get_gpc0(struct proxy *px, struct session *l4, void *l7, int dir,
-		       struct acl_expr *expr, struct sample *smp)
+                       const struct arg *args, struct sample *smp)
 {
 	struct stktable_key *key;
 
@@ -2360,7 +2360,7 @@
 	if (!key)
 		return 0;
 
-	px = expr->args->data.prx;
+	px = args->data.prx;
 	return acl_fetch_get_gpc0(&px->table, smp, stktable_lookup_key(&px->table, key));
 }
 
@@ -2387,7 +2387,7 @@
  */
 static int
 acl_fetch_sc1_inc_gpc0(struct proxy *px, struct session *l4, void *l7, int dir,
-                       struct acl_expr *expr, struct sample *smp)
+                       const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr1_entry)
 		return 0;
@@ -2399,7 +2399,7 @@
  */
 static int
 acl_fetch_sc2_inc_gpc0(struct proxy *px, struct session *l4, void *l7, int dir,
-                       struct acl_expr *expr, struct sample *smp)
+                       const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr2_entry)
 		return 0;
@@ -2412,7 +2412,7 @@
  */
 static int
 acl_fetch_src_inc_gpc0(struct proxy *px, struct session *l4, void *l7, int dir,
-		       struct acl_expr *expr, struct sample *smp)
+                       const struct arg *args, struct sample *smp)
 {
 	struct stktable_key *key;
 
@@ -2420,7 +2420,7 @@
 	if (!key)
 		return 0;
 
-	px = expr->args->data.prx;
+	px = args->data.prx;
 	return acl_fetch_inc_gpc0(&px->table, smp, stktable_update_key(&px->table, key));
 }
 
@@ -2448,7 +2448,7 @@
  */
 static int
 acl_fetch_sc1_clr_gpc0(struct proxy *px, struct session *l4, void *l7, int dir,
-                       struct acl_expr *expr, struct sample *smp)
+                       const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr1_entry)
 		return 0;
@@ -2460,7 +2460,7 @@
  */
 static int
 acl_fetch_sc2_clr_gpc0(struct proxy *px, struct session *l4, void *l7, int dir,
-                       struct acl_expr *expr, struct sample *smp)
+                       const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr2_entry)
 		return 0;
@@ -2473,7 +2473,7 @@
  */
 static int
 acl_fetch_src_clr_gpc0(struct proxy *px, struct session *l4, void *l7, int dir,
-		       struct acl_expr *expr, struct sample *smp)
+                       const struct arg *args, struct sample *smp)
 {
 	struct stktable_key *key;
 
@@ -2481,7 +2481,7 @@
 	if (!key)
 		return 0;
 
-	px = expr->args->data.prx;
+	px = args->data.prx;
 	return acl_fetch_clr_gpc0(&px->table, smp, stktable_update_key(&px->table, key));
 }
 
@@ -2504,7 +2504,7 @@
 /* set temp integer to the cumulated number of connections from the session's tracked FE counters */
 static int
 acl_fetch_sc1_conn_cnt(struct proxy *px, struct session *l4, void *l7, int dir,
-                       struct acl_expr *expr, struct sample *smp)
+                       const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr1_entry)
 		return 0;
@@ -2515,7 +2515,7 @@
 /* set temp integer to the cumulated number of connections from the session's tracked BE counters */
 static int
 acl_fetch_sc2_conn_cnt(struct proxy *px, struct session *l4, void *l7, int dir,
-                       struct acl_expr *expr, struct sample *smp)
+                       const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr2_entry)
 		return 0;
@@ -2529,7 +2529,7 @@
  */
 static int
 acl_fetch_src_conn_cnt(struct proxy *px, struct session *l4, void *l7, int dir,
-		       struct acl_expr *expr, struct sample *smp)
+                       const struct arg *args, struct sample *smp)
 {
 	struct stktable_key *key;
 
@@ -2537,7 +2537,7 @@
 	if (!key)
 		return 0;
 
-	px = expr->args->data.prx;
+	px = args->data.prx;
 	return acl_fetch_conn_cnt(&px->table, smp, stktable_lookup_key(&px->table, key));
 }
 
@@ -2563,7 +2563,7 @@
  */
 static int
 acl_fetch_sc1_conn_rate(struct proxy *px, struct session *l4, void *l7, int dir,
-                        struct acl_expr *expr, struct sample *smp)
+                        const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr1_entry)
 		return 0;
@@ -2576,7 +2576,7 @@
  */
 static int
 acl_fetch_sc2_conn_rate(struct proxy *px, struct session *l4, void *l7, int dir,
-                        struct acl_expr *expr, struct sample *smp)
+                        const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr2_entry)
 		return 0;
@@ -2590,7 +2590,7 @@
  */
 static int
 acl_fetch_src_conn_rate(struct proxy *px, struct session *l4, void *l7, int dir,
-			struct acl_expr *expr, struct sample *smp)
+                        const struct arg *args, struct sample *smp)
 {
 	struct stktable_key *key;
 
@@ -2598,7 +2598,7 @@
 	if (!key)
 		return 0;
 
-	px = expr->args->data.prx;
+	px = args->data.prx;
 	return acl_fetch_conn_rate(&px->table, smp, stktable_lookup_key(&px->table, key));
 }
 
@@ -2608,7 +2608,7 @@
  */
 static int
 acl_fetch_src_updt_conn_cnt(struct proxy *px, struct session *l4, void *l7, int dir,
-			    struct acl_expr *expr, struct sample *smp)
+                            const struct arg *args, struct sample *smp)
 {
 	struct stksess *ts;
 	struct stktable_key *key;
@@ -2618,7 +2618,7 @@
 	if (!key)
 		return 0;
 
-	px = expr->args->data.prx;
+	px = args->data.prx;
 
 	if ((ts = stktable_update_key(&px->table, key)) == NULL)
 		/* entry does not exist and could not be created */
@@ -2654,7 +2654,7 @@
 /* set temp integer to the number of concurrent connections from the session's tracked FE counters */
 static int
 acl_fetch_sc1_conn_cur(struct proxy *px, struct session *l4, void *l7, int dir,
-                       struct acl_expr *expr, struct sample *smp)
+                       const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr1_entry)
 		return 0;
@@ -2665,7 +2665,7 @@
 /* set temp integer to the number of concurrent connections from the session's tracked BE counters */
 static int
 acl_fetch_sc2_conn_cur(struct proxy *px, struct session *l4, void *l7, int dir,
-                       struct acl_expr *expr, struct sample *smp)
+                       const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr2_entry)
 		return 0;
@@ -2679,7 +2679,7 @@
  */
 static int
 acl_fetch_src_conn_cur(struct proxy *px, struct session *l4, void *l7, int dir,
-                       struct acl_expr *expr, struct sample *smp)
+                       const struct arg *args, struct sample *smp)
 {
 	struct stktable_key *key;
 
@@ -2687,7 +2687,7 @@
 	if (!key)
 		return 0;
 
-	px = expr->args->data.prx;
+	px = args->data.prx;
 	return acl_fetch_conn_cur(&px->table, smp, stktable_lookup_key(&px->table, key));
 }
 
@@ -2710,7 +2710,7 @@
 /* set temp integer to the cumulated number of sessions from the session's tracked FE counters */
 static int
 acl_fetch_sc1_sess_cnt(struct proxy *px, struct session *l4, void *l7, int dir,
-                       struct acl_expr *expr, struct sample *smp)
+                       const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr1_entry)
 		return 0;
@@ -2721,7 +2721,7 @@
 /* set temp integer to the cumulated number of sessions from the session's tracked BE counters */
 static int
 acl_fetch_sc2_sess_cnt(struct proxy *px, struct session *l4, void *l7, int dir,
-                       struct acl_expr *expr, struct sample *smp)
+                       const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr2_entry)
 		return 0;
@@ -2735,7 +2735,7 @@
  */
 static int
 acl_fetch_src_sess_cnt(struct proxy *px, struct session *l4, void *l7, int dir,
-		       struct acl_expr *expr, struct sample *smp)
+                       const struct arg *args, struct sample *smp)
 {
 	struct stktable_key *key;
 
@@ -2743,7 +2743,7 @@
 	if (!key)
 		return 0;
 
-	px = expr->args->data.prx;
+	px = args->data.prx;
 	return acl_fetch_sess_cnt(&px->table, smp, stktable_lookup_key(&px->table, key));
 }
 
@@ -2769,7 +2769,7 @@
  */
 static int
 acl_fetch_sc1_sess_rate(struct proxy *px, struct session *l4, void *l7, int dir,
-                        struct acl_expr *expr, struct sample *smp)
+                        const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr1_entry)
 		return 0;
@@ -2782,7 +2782,7 @@
  */
 static int
 acl_fetch_sc2_sess_rate(struct proxy *px, struct session *l4, void *l7, int dir,
-                        struct acl_expr *expr, struct sample *smp)
+                        const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr2_entry)
 		return 0;
@@ -2796,7 +2796,7 @@
  */
 static int
 acl_fetch_src_sess_rate(struct proxy *px, struct session *l4, void *l7, int dir,
-			struct acl_expr *expr, struct sample *smp)
+                        const struct arg *args, struct sample *smp)
 {
 	struct stktable_key *key;
 
@@ -2804,7 +2804,7 @@
 	if (!key)
 		return 0;
 
-	px = expr->args->data.prx;
+	px = args->data.prx;
 	return acl_fetch_sess_rate(&px->table, smp, stktable_lookup_key(&px->table, key));
 }
 
@@ -2827,7 +2827,7 @@
 /* set temp integer to the cumulated number of sessions from the session's tracked FE counters */
 static int
 acl_fetch_sc1_http_req_cnt(struct proxy *px, struct session *l4, void *l7, int dir,
-                           struct acl_expr *expr, struct sample *smp)
+                           const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr1_entry)
 		return 0;
@@ -2838,7 +2838,7 @@
 /* set temp integer to the cumulated number of sessions from the session's tracked BE counters */
 static int
 acl_fetch_sc2_http_req_cnt(struct proxy *px, struct session *l4, void *l7, int dir,
-                           struct acl_expr *expr, struct sample *smp)
+                           const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr2_entry)
 		return 0;
@@ -2852,7 +2852,7 @@
  */
 static int
 acl_fetch_src_http_req_cnt(struct proxy *px, struct session *l4, void *l7, int dir,
-                           struct acl_expr *expr, struct sample *smp)
+                           const struct arg *args, struct sample *smp)
 {
 	struct stktable_key *key;
 
@@ -2860,7 +2860,7 @@
 	if (!key)
 		return 0;
 
-	px = expr->args->data.prx;
+	px = args->data.prx;
 	return acl_fetch_http_req_cnt(&px->table, smp, stktable_lookup_key(&px->table, key));
 }
 
@@ -2886,7 +2886,7 @@
  */
 static int
 acl_fetch_sc1_http_req_rate(struct proxy *px, struct session *l4, void *l7, int dir,
-                            struct acl_expr *expr, struct sample *smp)
+                            const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr1_entry)
 		return 0;
@@ -2899,7 +2899,7 @@
  */
 static int
 acl_fetch_sc2_http_req_rate(struct proxy *px, struct session *l4, void *l7, int dir,
-                            struct acl_expr *expr, struct sample *smp)
+                            const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr2_entry)
 		return 0;
@@ -2913,7 +2913,7 @@
  */
 static int
 acl_fetch_src_http_req_rate(struct proxy *px, struct session *l4, void *l7, int dir,
-                            struct acl_expr *expr, struct sample *smp)
+                            const struct arg *args, struct sample *smp)
 {
 	struct stktable_key *key;
 
@@ -2921,7 +2921,7 @@
 	if (!key)
 		return 0;
 
-	px = expr->args->data.prx;
+	px = args->data.prx;
 	return acl_fetch_http_req_rate(&px->table, smp, stktable_lookup_key(&px->table, key));
 }
 
@@ -2944,7 +2944,7 @@
 /* set temp integer to the cumulated number of sessions from the session's tracked FE counters */
 static int
 acl_fetch_sc1_http_err_cnt(struct proxy *px, struct session *l4, void *l7, int dir,
-                           struct acl_expr *expr, struct sample *smp)
+                           const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr1_entry)
 		return 0;
@@ -2955,7 +2955,7 @@
 /* set temp integer to the cumulated number of sessions from the session's tracked BE counters */
 static int
 acl_fetch_sc2_http_err_cnt(struct proxy *px, struct session *l4, void *l7, int dir,
-                           struct acl_expr *expr, struct sample *smp)
+                           const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr2_entry)
 		return 0;
@@ -2969,7 +2969,7 @@
  */
 static int
 acl_fetch_src_http_err_cnt(struct proxy *px, struct session *l4, void *l7, int dir,
-                           struct acl_expr *expr, struct sample *smp)
+                           const struct arg *args, struct sample *smp)
 {
 	struct stktable_key *key;
 
@@ -2977,7 +2977,7 @@
 	if (!key)
 		return 0;
 
-	px = expr->args->data.prx;
+	px = args->data.prx;
 	return acl_fetch_http_err_cnt(&px->table, smp, stktable_lookup_key(&px->table, key));
 }
 
@@ -3003,7 +3003,7 @@
  */
 static int
 acl_fetch_sc1_http_err_rate(struct proxy *px, struct session *l4, void *l7, int dir,
-                            struct acl_expr *expr, struct sample *smp)
+                            const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr1_entry)
 		return 0;
@@ -3016,7 +3016,7 @@
  */
 static int
 acl_fetch_sc2_http_err_rate(struct proxy *px, struct session *l4, void *l7, int dir,
-                            struct acl_expr *expr, struct sample *smp)
+                            const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr2_entry)
 		return 0;
@@ -3030,7 +3030,7 @@
  */
 static int
 acl_fetch_src_http_err_rate(struct proxy *px, struct session *l4, void *l7, int dir,
-			struct acl_expr *expr, struct sample *smp)
+                            const struct arg *args, struct sample *smp)
 {
 	struct stktable_key *key;
 
@@ -3038,7 +3038,7 @@
 	if (!key)
 		return 0;
 
-	px = expr->args->data.prx;
+	px = args->data.prx;
 	return acl_fetch_http_err_rate(&px->table, smp, stktable_lookup_key(&px->table, key));
 }
 
@@ -3064,7 +3064,7 @@
  */
 static int
 acl_fetch_sc1_kbytes_in(struct proxy *px, struct session *l4, void *l7, int dir,
-                        struct acl_expr *expr, struct sample *smp)
+                        const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr1_entry)
 		return 0;
@@ -3077,7 +3077,7 @@
  */
 static int
 acl_fetch_sc2_kbytes_in(struct proxy *px, struct session *l4, void *l7, int dir,
-                        struct acl_expr *expr, struct sample *smp)
+                        const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr2_entry)
 		return 0;
@@ -3091,7 +3091,7 @@
  */
 static int
 acl_fetch_src_kbytes_in(struct proxy *px, struct session *l4, void *l7, int dir,
-			struct acl_expr *expr, struct sample *smp)
+                       const struct arg *args, struct sample *smp)
 {
 	struct stktable_key *key;
 
@@ -3099,7 +3099,7 @@
 	if (!key)
 		return 0;
 
-	px = expr->args->data.prx;
+	px = args->data.prx;
 	return acl_fetch_kbytes_in(&px->table, smp, stktable_lookup_key(&px->table, key));
 }
 
@@ -3127,7 +3127,7 @@
  */
 static int
 acl_fetch_sc1_bytes_in_rate(struct proxy *px, struct session *l4, void *l7, int dir,
-                            struct acl_expr *expr, struct sample *smp)
+                            const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr1_entry)
 		return 0;
@@ -3140,7 +3140,7 @@
  */
 static int
 acl_fetch_sc2_bytes_in_rate(struct proxy *px, struct session *l4, void *l7, int dir,
-                            struct acl_expr *expr, struct sample *smp)
+                            const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr2_entry)
 		return 0;
@@ -3154,7 +3154,7 @@
  */
 static int
 acl_fetch_src_bytes_in_rate(struct proxy *px, struct session *l4, void *l7, int dir,
-                            struct acl_expr *expr, struct sample *smp)
+                            const struct arg *args, struct sample *smp)
 {
 	struct stktable_key *key;
 
@@ -3162,7 +3162,7 @@
 	if (!key)
 		return 0;
 
-	px = expr->args->data.prx;
+	px = args->data.prx;
 	return acl_fetch_bytes_in_rate(&px->table, smp, stktable_lookup_key(&px->table, key));
 }
 
@@ -3188,7 +3188,7 @@
  */
 static int
 acl_fetch_sc1_kbytes_out(struct proxy *px, struct session *l4, void *l7, int dir,
-                         struct acl_expr *expr, struct sample *smp)
+                         const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr1_entry)
 		return 0;
@@ -3201,7 +3201,7 @@
  */
 static int
 acl_fetch_sc2_kbytes_out(struct proxy *px, struct session *l4, void *l7, int dir,
-                         struct acl_expr *expr, struct sample *smp)
+                         const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr2_entry)
 		return 0;
@@ -3215,7 +3215,7 @@
  */
 static int
 acl_fetch_src_kbytes_out(struct proxy *px, struct session *l4, void *l7, int dir,
-			 struct acl_expr *expr, struct sample *smp)
+                         const struct arg *args, struct sample *smp)
 {
 	struct stktable_key *key;
 
@@ -3223,7 +3223,7 @@
 	if (!key)
 		return 0;
 
-	px = expr->args->data.prx;
+	px = args->data.prx;
 	return acl_fetch_kbytes_out(&px->table, smp, stktable_lookup_key(&px->table, key));
 }
 
@@ -3251,7 +3251,7 @@
  */
 static int
 acl_fetch_sc1_bytes_out_rate(struct proxy *px, struct session *l4, void *l7, int dir,
-                             struct acl_expr *expr, struct sample *smp)
+                             const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr1_entry)
 		return 0;
@@ -3264,7 +3264,7 @@
  */
 static int
 acl_fetch_sc2_bytes_out_rate(struct proxy *px, struct session *l4, void *l7, int dir,
-                             struct acl_expr *expr, struct sample *smp)
+                             const struct arg *args, struct sample *smp)
 {
 	if (!l4->stkctr2_entry)
 		return 0;
@@ -3278,7 +3278,7 @@
  */
 static int
 acl_fetch_src_bytes_out_rate(struct proxy *px, struct session *l4, void *l7, int dir,
-                             struct acl_expr *expr, struct sample *smp)
+                             const struct arg *args, struct sample *smp)
 {
 	struct stktable_key *key;
 
@@ -3286,7 +3286,7 @@
 	if (!key)
 		return 0;
 
-	px = expr->args->data.prx;
+	px = args->data.prx;
 	return acl_fetch_bytes_out_rate(&px->table, smp, stktable_lookup_key(&px->table, key));
 }
 
@@ -3295,11 +3295,11 @@
  */
 static int
 acl_fetch_table_cnt(struct proxy *px, struct session *l4, void *l7, int dir,
-                    struct acl_expr *expr, struct sample *smp)
+                    const struct arg *args, struct sample *smp)
 {
 	smp->flags = SMP_F_VOL_TEST;
 	smp->type = SMP_T_UINT;
-	smp->data.uint = expr->args->data.prx->table.current;
+	smp->data.uint = args->data.prx->table.current;
 	return 1;
 }
 
@@ -3308,9 +3308,9 @@
  */
 static int
 acl_fetch_table_avl(struct proxy *px, struct session *l4, void *l7, int dir,
-                    struct acl_expr *expr, struct sample *smp)
+                    const struct arg *args, struct sample *smp)
 {
-	px = expr->args->data.prx;
+	px = args->data.prx;
 	smp->flags = SMP_F_VOL_TEST;
 	smp->type = SMP_T_UINT;
 	smp->data.uint = px->table.size - px->table.current;
