diff --git a/src/acl.c b/src/acl.c
index 655f9f4..193788c 100644
--- a/src/acl.c
+++ b/src/acl.c
@@ -49,7 +49,7 @@
  */
 void acl_register_keywords(struct acl_kw_list *kwl)
 {
-	LIST_ADDQ(&acl_keywords.list, &kwl->list);
+	LIST_APPEND(&acl_keywords.list, &kwl->list);
 }
 
 /*
@@ -57,7 +57,7 @@
  */
 void acl_unregister_keywords(struct acl_kw_list *kwl)
 {
-	LIST_DEL(&kwl->list);
+	LIST_DELETE(&kwl->list);
 	LIST_INIT(&kwl->list);
 }
 
@@ -278,7 +278,7 @@
 			if (!conv_expr)
 				goto out_free_smp;
 
-			LIST_ADDQ(&(smp->conv_exprs), &(conv_expr->list));
+			LIST_APPEND(&(smp->conv_exprs), &(conv_expr->list));
 			conv_expr->conv = conv;
 			acl_conv_found = 1;
 
@@ -653,7 +653,7 @@
 	free(acl->name);
 
 	list_for_each_entry_safe(expr, exprb, &acl->expr, list) {
-		LIST_DEL(&expr->list);
+		LIST_DELETE(&expr->list);
 		prune_acl_expr(expr);
 		free(expr);
 	}
@@ -721,7 +721,7 @@
 		}
 
 		LIST_INIT(&cur_acl->expr);
-		LIST_ADDQ(known_acl, &cur_acl->list);
+		LIST_APPEND(known_acl, &cur_acl->list);
 		cur_acl->name = name;
 	}
 
@@ -731,7 +731,7 @@
 	 */
 	cur_acl->use |= acl_expr->smp->fetch->use;
 	cur_acl->val |= acl_expr->smp->fetch->val;
-	LIST_ADDQ(&cur_acl->expr, &acl_expr->list);
+	LIST_APPEND(&cur_acl->expr, &acl_expr->list);
 	return cur_acl;
 
  out_free_name:
@@ -824,9 +824,9 @@
 	cur_acl->use |= acl_expr->smp->fetch->use;
 	cur_acl->val |= acl_expr->smp->fetch->val;
 	LIST_INIT(&cur_acl->expr);
-	LIST_ADDQ(&cur_acl->expr, &acl_expr->list);
+	LIST_APPEND(&cur_acl->expr, &acl_expr->list);
 	if (known_acl)
-		LIST_ADDQ(known_acl, &cur_acl->list);
+		LIST_APPEND(known_acl, &cur_acl->list);
 
 	return cur_acl;
 
@@ -990,9 +990,9 @@
 				goto out_free_term;
 			}
 			LIST_INIT(&cur_suite->terms);
-			LIST_ADDQ(&cond->suites, &cur_suite->list);
+			LIST_APPEND(&cond->suites, &cur_suite->list);
 		}
-		LIST_ADDQ(&cur_suite->terms, &cur_term->list);
+		LIST_APPEND(&cur_suite->terms, &cur_term->list);
 		neg = 0;
 	}
 
@@ -1313,10 +1313,10 @@
 
 	list_for_each_entry_safe(suite, suiteb, &cond->suites, list) {
 		list_for_each_entry_safe(term, termb, &suite->terms, list) {
-			LIST_DEL(&term->list);
+			LIST_DELETE(&term->list);
 			free(term);
 		}
-		LIST_DEL(&suite->list);
+		LIST_DELETE(&suite->list);
 		free(suite);
 	}
 
diff --git a/src/action.c b/src/action.c
index b9d12c0..5e430f2 100644
--- a/src/action.c
+++ b/src/action.c
@@ -289,7 +289,7 @@
 	struct act_rule *rule, *ruleb;
 
 	list_for_each_entry_safe(rule, ruleb, rules, list) {
-		LIST_DEL(&rule->list);
+		LIST_DELETE(&rule->list);
 		free_acl_cond(rule->cond);
 		if (rule->release_ptr)
 			rule->release_ptr(rule);
diff --git a/src/arg.c b/src/arg.c
index 31e7e02..8b3dccf 100644
--- a/src/arg.c
+++ b/src/arg.c
@@ -78,7 +78,7 @@
 	if (new) {
 		new->arg = arg;
 		new->arg_pos = pos;
-		LIST_ADDQ(&orig->list, &new->list);
+		LIST_APPEND(&orig->list, &new->list);
 	}
 	return new;
 }
diff --git a/src/backend.c b/src/backend.c
index fe9bda5..8b06ddb 100644
--- a/src/backend.c
+++ b/src/backend.c
@@ -1472,7 +1472,7 @@
 				if (tokill_conn) {
 					/* We got one, put it into the concerned thread's to kill list, and wake it's kill task */
 
-					MT_LIST_ADDQ(&idle_conns[i].toremove_conns,
+					MT_LIST_APPEND(&idle_conns[i].toremove_conns,
 					    (struct mt_list *)&tokill_conn->toremove_list);
 					task_wakeup(idle_conns[i].cleanup_task, TASK_WOKEN_OTHER);
 					break;
diff --git a/src/cache.c b/src/cache.c
index 0eb6a88..b9080d4 100644
--- a/src/cache.c
+++ b/src/cache.c
@@ -1581,7 +1581,7 @@
 	fconf->id = cache_store_flt_id;
 	fconf->conf = cconf;
 	fconf->ops  = &cache_ops;
-	LIST_ADDQ(&proxy->filter_configs, &fconf->list);
+	LIST_APPEND(&proxy->filter_configs, &fconf->list);
 
 	rule->arg.act.p[0] = cconf;
 	return 1;
@@ -2052,7 +2052,7 @@
 		/* add to the list of cache to init and reinit tmp_cache_config
 		 * for next cache section, if any.
 		 */
-		LIST_ADDQ(&caches_config, &tmp_cache_config->list);
+		LIST_APPEND(&caches_config, &tmp_cache_config->list);
 		tmp_cache_config = NULL;
 		return err_code;
 	}
@@ -2091,8 +2091,8 @@
 		memcpy(shctx->data, cache_config, sizeof(struct cache));
 		cache = (struct cache *)shctx->data;
 		cache->entries = EB_ROOT;
-		LIST_ADDQ(&caches, &cache->list);
-		LIST_DEL(&cache_config->list);
+		LIST_APPEND(&caches, &cache->list);
+		LIST_DELETE(&cache_config->list);
 		free(cache_config);
 
 		/* Find all references for this cache in the existing filters
@@ -2511,7 +2511,7 @@
 		}
 
 		/* Remove the implicit filter. <cconf> is kept for the explicit one */
-		LIST_DEL(&f->list);
+		LIST_DELETE(&f->list);
 		free(f);
 		free(name);
 		break;
diff --git a/src/cfgparse-listen.c b/src/cfgparse-listen.c
index b2c81da..8a81b44 100644
--- a/src/cfgparse-listen.c
+++ b/src/cfgparse-listen.c
@@ -1216,7 +1216,7 @@
 	                                          (curproxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR,
 	                                          file, linenum);
 
-		LIST_ADDQ(&curproxy->http_req_rules, &rule->list);
+		LIST_APPEND(&curproxy->http_req_rules, &rule->list);
 	}
 	else if (strcmp(args[0], "http-response") == 0) {	/* response access control */
 		struct act_rule *rule;
@@ -1246,7 +1246,7 @@
 	                                          (curproxy->cap & PR_CAP_BE) ? SMP_VAL_BE_HRS_HDR : SMP_VAL_FE_HRS_HDR,
 	                                          file, linenum);
 
-		LIST_ADDQ(&curproxy->http_res_rules, &rule->list);
+		LIST_APPEND(&curproxy->http_res_rules, &rule->list);
 	}
 	else if (strcmp(args[0], "http-after-response") == 0) {
 		struct act_rule *rule;
@@ -1276,7 +1276,7 @@
 	                                          (curproxy->cap & PR_CAP_BE) ? SMP_VAL_BE_HRS_HDR : SMP_VAL_FE_HRS_HDR,
 	                                          file, linenum);
 
-		LIST_ADDQ(&curproxy->http_after_res_rules, &rule->list);
+		LIST_APPEND(&curproxy->http_after_res_rules, &rule->list);
 	}
 	else if (strcmp(args[0], "http-send-name-header") == 0) { /* send server name in request header */
 		/* set the header name and length into the proxy structure */
@@ -1320,7 +1320,7 @@
 			goto out;
 		}
 
-		LIST_ADDQ(&curproxy->redirect_rules, &rule->list);
+		LIST_APPEND(&curproxy->redirect_rules, &rule->list);
 		err_code |= warnif_misplaced_redirect(curproxy, file, linenum, args[0]);
 		err_code |= warnif_cond_conflicts(rule->cond,
 	                                          (curproxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR,
@@ -1381,7 +1381,7 @@
 			goto alloc_error;
 		}
 		LIST_INIT(&rule->list);
-		LIST_ADDQ(&curproxy->switching_rules, &rule->list);
+		LIST_APPEND(&curproxy->switching_rules, &rule->list);
 	}
 	else if (strcmp(args[0], "use-server") == 0) {
 		struct server_rule *rule;
@@ -1437,7 +1437,7 @@
 			goto alloc_error;
 		}
 		LIST_INIT(&rule->list);
-		LIST_ADDQ(&curproxy->server_rules, &rule->list);
+		LIST_APPEND(&curproxy->server_rules, &rule->list);
 		curproxy->be_req_ana |= AN_REQ_SRV_RULES;
 	}
 	else if ((strcmp(args[0], "force-persist") == 0) ||
@@ -1486,7 +1486,7 @@
 			rule->type = PERSIST_TYPE_IGNORE;
 		}
 		LIST_INIT(&rule->list);
-		LIST_ADDQ(&curproxy->persist_rules, &rule->list);
+		LIST_APPEND(&curproxy->persist_rules, &rule->list);
 	}
 	else if (strcmp(args[0], "stick-table") == 0) {
 		struct stktable *other;
@@ -1653,9 +1653,9 @@
 		rule->table.name = name ? strdup(name) : NULL;
 		LIST_INIT(&rule->list);
 		if (flags & STK_ON_RSP)
-			LIST_ADDQ(&curproxy->storersp_rules, &rule->list);
+			LIST_APPEND(&curproxy->storersp_rules, &rule->list);
 		else
-			LIST_ADDQ(&curproxy->sticking_rules, &rule->list);
+			LIST_APPEND(&curproxy->sticking_rules, &rule->list);
 	}
 	else if (strcmp(args[0], "stats") == 0) {
 		if (!(curproxy->cap & PR_CAP_DEF) && curproxy->uri_auth == curr_defproxy->uri_auth)
@@ -1701,7 +1701,7 @@
 			}
 			rule->cond = cond;
 			LIST_INIT(&rule->list);
-			LIST_ADDQ(&curproxy->uri_auth->admin_rules, &rule->list);
+			LIST_APPEND(&curproxy->uri_auth->admin_rules, &rule->list);
 		} else if (strcmp(args[1], "uri") == 0) {
 			if (*(args[2]) == 0) {
 				ha_alert("parsing [%s:%d] : 'uri' needs an URI prefix.\n", file, linenum);
@@ -1768,7 +1768,7 @@
 			err_code |= warnif_cond_conflicts(rule->cond,
 			                                  (curproxy->cap & PR_CAP_FE) ? SMP_VAL_FE_HRQ_HDR : SMP_VAL_BE_HRQ_HDR,
 			                                  file, linenum);
-			LIST_ADDQ(&curproxy->uri_auth->http_req_rules, &rule->list);
+			LIST_APPEND(&curproxy->uri_auth->http_req_rules, &rule->list);
 
 		} else if (strcmp(args[1], "auth") == 0) {
 			if (*(args[2]) == 0) {
@@ -2418,7 +2418,7 @@
 				err_code |= ERR_ALERT | ERR_FATAL;
 				goto out;
 			}
-			LIST_ADDQ(&curproxy->mon_fail_cond, &cond->list);
+			LIST_APPEND(&curproxy->mon_fail_cond, &cond->list);
 		}
 		else {
 			ha_alert("parsing [%s:%d] : '%s' only supports 'fail'.\n", file, linenum, args[0]);
diff --git a/src/cfgparse-ssl.c b/src/cfgparse-ssl.c
index 7d14fa0..0a90da7 100644
--- a/src/cfgparse-ssl.c
+++ b/src/cfgparse-ssl.c
@@ -1181,7 +1181,7 @@
 	HA_RWLOCK_INIT(&keys_ref->lock);
 	conf->keys_ref = keys_ref;
 
-	LIST_ADD(&tlskeys_reference, &keys_ref->list);
+	LIST_INSERT(&tlskeys_reference, &keys_ref->list);
 
 	return 0;
 
diff --git a/src/cfgparse.c b/src/cfgparse.c
index 47f04e5..c6a93ee 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -2372,7 +2372,7 @@
 				/* Only one element in the list, a simple string: free the expression and
 				 * fall back to static rule
 				 */
-				LIST_DEL(&node->list);
+				LIST_DELETE(&node->list);
 				free(node->arg);
 				free(node);
 			}
@@ -2437,7 +2437,7 @@
 				/* Only one element in the list, a simple string: free the expression and
 				 * fall back to static rule
 				 */
-				LIST_DEL(&node->list);
+				LIST_DELETE(&node->list);
 				free(node->arg);
 				free(node);
 			}
@@ -2643,7 +2643,7 @@
 				break;
 			}
 
-			LIST_ADDQ(&curproxy->uri_auth->http_req_rules, &rule->list);
+			LIST_APPEND(&curproxy->uri_auth->http_req_rules, &rule->list);
 
 			if (curproxy->uri_auth->auth_realm) {
 				ha_free(&curproxy->uri_auth->auth_realm);
@@ -3766,7 +3766,7 @@
  */
 void cfg_register_keywords(struct cfg_kw_list *kwl)
 {
-	LIST_ADDQ(&cfg_keywords.list, &kwl->list);
+	LIST_APPEND(&cfg_keywords.list, &kwl->list);
 }
 
 /*
@@ -3774,7 +3774,7 @@
  */
 void cfg_unregister_keywords(struct cfg_kw_list *kwl)
 {
-	LIST_DEL(&kwl->list);
+	LIST_DELETE(&kwl->list);
 	LIST_INIT(&kwl->list);
 }
 
@@ -3806,7 +3806,7 @@
 	cs->section_parser = section_parser;
 	cs->post_section_parser = post_section_parser;
 
-	LIST_ADDQ(&sections, &cs->list);
+	LIST_APPEND(&sections, &cs->list);
 
 	return 1;
 }
@@ -3827,7 +3827,7 @@
 	cp->name = name;
 	cp->func = func;
 
-	LIST_ADDQ(&postparsers, &cp->list);
+	LIST_APPEND(&postparsers, &cp->list);
 
 	return 1;
 }
@@ -3840,7 +3840,7 @@
 	struct cfg_section *cs, *ics;
 
 	list_for_each_entry_safe(cs, ics, &sections, list) {
-		LIST_DEL(&cs->list);
+		LIST_DELETE(&cs->list);
 		free(cs);
 	}
 }
@@ -3850,8 +3850,8 @@
 	struct cfg_section *cs, *ics;
 
 	list_for_each_entry_safe(cs, ics, &sections, list) {
-		LIST_DEL(&cs->list);
-		LIST_ADDQ(backup_sections, &cs->list);
+		LIST_DELETE(&cs->list);
+		LIST_APPEND(backup_sections, &cs->list);
 	}
 }
 
@@ -3860,8 +3860,8 @@
 	struct cfg_section *cs, *ics;
 
 	list_for_each_entry_safe(cs, ics, backup_sections, list) {
-		LIST_DEL(&cs->list);
-		LIST_ADDQ(&sections, &cs->list);
+		LIST_DELETE(&cs->list);
+		LIST_APPEND(&sections, &cs->list);
 	}
 }
 
diff --git a/src/check.c b/src/check.c
index e3778ea..ee225a2 100644
--- a/src/check.c
+++ b/src/check.c
@@ -1273,11 +1273,11 @@
 {
 	struct buffer *buf = NULL;
 
-	if (likely(!LIST_ADDED(&check->buf_wait.list)) &&
+	if (likely(!LIST_INLIST(&check->buf_wait.list)) &&
 	    unlikely((buf = b_alloc(bptr)) == NULL)) {
 		check->buf_wait.target = check;
 		check->buf_wait.wakeup_cb = check_buf_available;
-		LIST_ADDQ(&ti->buffer_wq, &check->buf_wait.list);
+		LIST_APPEND(&ti->buffer_wq, &check->buf_wait.list);
 	}
 	return buf;
 }
@@ -1701,7 +1701,7 @@
 		}
 		chk->action = TCPCHK_ACT_CONNECT;
 		chk->connect.options = (TCPCHK_OPT_DEFAULT_CONNECT|TCPCHK_OPT_IMPLICIT);
-		LIST_ADD(srv->agent.tcpcheck_rules->list, &chk->list);
+		LIST_INSERT(srv->agent.tcpcheck_rules->list, &chk->list);
 	}
 
 
@@ -1874,7 +1874,7 @@
 		goto error;
 	}
 	chk->index = 0;
-	LIST_ADDQ(&rs->rules, &chk->list);
+	LIST_APPEND(&rs->rules, &chk->list);
 
 	chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "custom", ""},
 		                    1, curpx, &rs->rules, TCPCHK_RULES_AGENT_CHK,
@@ -1885,7 +1885,7 @@
 	}
 	chk->expect.custom = tcpcheck_agent_expect_reply;
 	chk->index = 1;
-	LIST_ADDQ(&rs->rules, &chk->list);
+	LIST_APPEND(&rs->rules, &chk->list);
 
   ruleset_found:
 	rules->list = &rs->rules;
@@ -1986,7 +1986,7 @@
 	var->data.u.str.area = str;
 	var->data.u.str.data = strlen(str);
 	LIST_INIT(&var->list);
-	LIST_ADDQ(&rules->preset_vars, &var->list);
+	LIST_APPEND(&rules->preset_vars, &var->list);
 
 	return 1;
 
diff --git a/src/cli.c b/src/cli.c
index 13603df..162daa6 100644
--- a/src/cli.c
+++ b/src/cli.c
@@ -338,7 +338,7 @@
 
 void cli_register_kw(struct cli_kw_list *kw_list)
 {
-	LIST_ADDQ(&cli_keywords.list, &kw_list->list);
+	LIST_APPEND(&cli_keywords.list, &kw_list->list);
 }
 
 
diff --git a/src/dns.c b/src/dns.c
index 5e991fe..a6b8fa7 100644
--- a/src/dns.c
+++ b/src/dns.c
@@ -206,13 +206,13 @@
 					 * so we can add if to free_sess list
 					 * to receive a new request
 					*/
-					LIST_ADD(&ds->dss->free_sess, &ds->list);
+					LIST_INSERT(&ds->dss->free_sess, &ds->list);
 				}
 				else {
 					/* there is no more pipelined requests
 					 * into this session, so we move it
 					 * to idle_sess list */
-					LIST_ADD(&ds->dss->idle_sess, &ds->list);
+					LIST_INSERT(&ds->dss->idle_sess, &ds->list);
 
 					/* update the counter of idle sessions */
 					ds->dss->idle_conns++;
@@ -548,7 +548,7 @@
 						 * to destroy the task */
 						task_queue(ds->task_exp);
 					}
-					LIST_ADDQ(&ds->queries, &query->list);
+					LIST_APPEND(&ds->queries, &query->list);
 					eb32_insert(&ds->query_ids, &query->qid);
 					ds->onfly_queries++;
 				}
@@ -613,7 +613,7 @@
 	if (ret) {
 		/* let's be woken up once new request to write arrived */
 		HA_RWLOCK_WRLOCK(DNS_LOCK, &ring->lock);
-		LIST_ADDQ(&ring->waiters, &appctx->wait_entry);
+		LIST_APPEND(&ring->waiters, &appctx->wait_entry);
 		HA_RWLOCK_WRUNLOCK(DNS_LOCK, &ring->lock);
 		si_rx_endp_done(si);
 	}
@@ -626,7 +626,7 @@
 	 * delete from the list
 	 */
 	__ha_barrier_load();
-	if (!LIST_ADDED(&ds->waiter)) {
+	if (!LIST_INLIST(&ds->waiter)) {
 		while (1) {
 			uint16_t query_id;
 			struct eb32_node *eb;
@@ -697,7 +697,7 @@
 
 			/* remove query ids mapping from pending queries list/tree */
 			eb32_delete(&query->qid);
-			LIST_DEL(&query->list);
+			LIST_DELETE(&query->list);
 			pool_free(dns_query_pool, query);
 			ds->onfly_queries--;
 
@@ -708,7 +708,7 @@
 			 * wait_sess list where the task processing
 			 * response will pop available responses
 			 */
-			LIST_ADDQ(&ds->dss->wait_sess, &ds->waiter);
+			LIST_APPEND(&ds->dss->wait_sess, &ds->waiter);
 
 			/* lock the dns_stream_server containing lists heads */
 			HA_SPIN_UNLOCK(DNS_LOCK, &ds->dss->lock);
@@ -719,7 +719,7 @@
 			break;
 		}
 
-		if (!LIST_ADDED(&ds->waiter)) {
+		if (!LIST_INLIST(&ds->waiter)) {
 			/* there is no more pending data to read and the con was closed by the server side */
 			if (!co_data(si_oc(si)) && (si_oc(si)->flags & CF_SHUTW)) {
 				goto close;
@@ -742,7 +742,7 @@
 
 	list_for_each_entry_safe(query, queryb, &ds->queries, list) {
 		eb32_delete(&query->qid);
-		LIST_DEL(&query->list);
+		LIST_DELETE(&query->list);
 		pool_free(dns_query_pool, query);
 	}
 }
@@ -824,7 +824,7 @@
 	 * message offsets if the session
 	 * was closed with an incomplete pending response
 	 */
-	if (!LIST_ADDED(&ds->waiter))
+	if (!LIST_INLIST(&ds->waiter))
 		ds->rx_msg.len = ds->rx_msg.offset = 0;
 
 	/* we flush pending sent queries because we never
@@ -850,7 +850,7 @@
 	}
 
 	if (ds->nb_queries < DNS_STREAM_MAX_PIPELINED_REQ)
-		LIST_ADD(&ds->dss->free_sess, &ds->list);
+		LIST_INSERT(&ds->dss->free_sess, &ds->list);
 
 	HA_SPIN_UNLOCK(DNS_LOCK, &dss->lock);
 }
@@ -912,7 +912,7 @@
 
 	/* Error unrolling */
  out_free_strm:
-	LIST_DEL(&s->list);
+	LIST_DELETE(&s->list);
 	pool_free(pool_head_stream, s);
  out_free_sess:
 	session_free(sess);
@@ -935,7 +935,7 @@
 	list_for_each_entry_safe(query, queryb, &ds->queries, list) {
 		if (tick_is_expired(query->expire, now_ms)) {
 			eb32_delete(&query->qid);
-			LIST_DEL(&query->list);
+			LIST_DELETE(&query->list);
 			pool_free(dns_query_pool, query);
 			ds->onfly_queries--;
 		}
@@ -1130,7 +1130,7 @@
 				 * it may be close to be full so we put it at the end
 				 * of free conn list */
 				LIST_DEL_INIT(&ds->list);
-				LIST_ADDQ(&dss->free_sess, &ds->list);
+				LIST_APPEND(&dss->free_sess, &ds->list);
 			}
 		}
 
@@ -1154,7 +1154,7 @@
 				 * this request, this request may be large and fill
 				 * the ring buffer so we prefer to put at the end of free
 				 * list. */
-				LIST_ADDQ(&dss->free_sess, &ds->list);
+				LIST_APPEND(&dss->free_sess, &ds->list);
 				ads = ds;
 			}
 		}
@@ -1167,7 +1167,7 @@
 				/* ring is empty so this ring_write should never fail */
 				ring_write(&ads->ring, DNS_TCP_MSG_MAX_SIZE, NULL, 0, &myist, 1);
 				ads->nb_queries++;
-				LIST_ADD(&dss->free_sess, &ads->list);
+				LIST_INSERT(&dss->free_sess, &ads->list);
 			}
 			else
 				ns->counters->snd_error++;
diff --git a/src/extcheck.c b/src/extcheck.c
index 808b4bb..aa342fc 100644
--- a/src/extcheck.c
+++ b/src/extcheck.c
@@ -124,7 +124,7 @@
 	LIST_INIT(&elem->list);
 
 	HA_SPIN_LOCK(PID_LIST_LOCK, &pid_list_lock);
-	LIST_ADD(&pid_list, &elem->list);
+	LIST_INSERT(&pid_list, &elem->list);
 	HA_SPIN_UNLOCK(PID_LIST_LOCK, &pid_list_lock);
 
 	return elem;
@@ -138,7 +138,7 @@
 		return;
 
 	HA_SPIN_LOCK(PID_LIST_LOCK, &pid_list_lock);
-	LIST_DEL(&elem->list);
+	LIST_DELETE(&elem->list);
 	HA_SPIN_UNLOCK(PID_LIST_LOCK, &pid_list_lock);
 
 	if (!elem->exited)
diff --git a/src/fcgi-app.c b/src/fcgi-app.c
index 2398709..6dca3ec 100644
--- a/src/fcgi-app.c
+++ b/src/fcgi-app.c
@@ -141,7 +141,7 @@
 		struct logformat_node *lf, *lfb;
 
 		list_for_each_entry_safe(lf, lfb, &rule->value, list) {
-			LIST_DEL(&lf->list);
+			LIST_DELETE(&lf->list);
 			release_sample_expr(lf->expr);
 			free(lf->arg);
 			free(lf);
@@ -205,12 +205,12 @@
 	free(fcgi_conf->name);
 
 	list_for_each_entry_safe(rule, back, &fcgi_conf->param_rules, list) {
-		LIST_DEL(&rule->list);
+		LIST_DELETE(&rule->list);
 		fcgi_release_rule(rule);
 	}
 
 	list_for_each_entry_safe(rule, back, &fcgi_conf->hdr_rules, list) {
-		LIST_DEL(&rule->list);
+		LIST_DELETE(&rule->list);
 		fcgi_release_rule(rule);
 	}
 
@@ -270,9 +270,9 @@
 		}
 
 		if (rule->type == FCGI_RULE_SET_PARAM || rule->type == FCGI_RULE_UNSET_PARAM)
-			LIST_ADDQ(&fcgi_conf->param_rules, &rule->list);
+			LIST_APPEND(&fcgi_conf->param_rules, &rule->list);
 		else /* FCGI_RULE_PASS_HDR/FCGI_RULE_HIDE_HDR */
-			LIST_ADDQ(&fcgi_conf->hdr_rules, &rule->list);
+			LIST_APPEND(&fcgi_conf->hdr_rules, &rule->list);
 		rule = NULL;
 	}
 	return 0;
@@ -549,7 +549,7 @@
 		}
 
 		/* Place the filter at its right position */
-		LIST_DEL(&f->list);
+		LIST_DELETE(&f->list);
 		free(f);
 		ha_free(&name);
 		break;
@@ -627,7 +627,7 @@
 	fconf->id = fcgi_flt_id;
 	fconf->conf = fcgi_conf;
 	fconf->ops  = &fcgi_flt_ops;
-	LIST_ADDQ(&curpx->filter_configs, &fconf->list);
+	LIST_APPEND(&curpx->filter_configs, &fconf->list);
 
   end:
 	return retval;
@@ -743,7 +743,7 @@
 			goto err;
 	}
 	rule->cond = cond;
-	LIST_ADDQ(&curapp->conf.rules, &rule->list);
+	LIST_APPEND(&curapp->conf.rules, &rule->list);
 	return 1;
 
   err:
@@ -1090,12 +1090,12 @@
 		free(curapp->conf.file);
 
 		list_for_each_entry_safe(log, logb, &curapp->logsrvs, list) {
-			LIST_DEL(&log->list);
+			LIST_DELETE(&log->list);
 			free(log);
 		}
 
 		list_for_each_entry_safe(rule, back, &curapp->conf.rules, list) {
-			LIST_DEL(&rule->list);
+			LIST_DELETE(&rule->list);
 			fcgi_release_rule_conf(rule);
 		}
 
diff --git a/src/filters.c b/src/filters.c
index 859092b..2075bee 100644
--- a/src/filters.c
+++ b/src/filters.c
@@ -89,7 +89,7 @@
 void
 flt_register_keywords(struct flt_kw_list *kwl)
 {
-	LIST_ADDQ(&flt_keywords.list, &kwl->list);
+	LIST_APPEND(&flt_keywords.list, &kwl->list);
 }
 
 /*
@@ -238,7 +238,7 @@
 			goto error;
 		}
 
-		LIST_ADDQ(&curpx->filter_configs, &fconf->list);
+		LIST_APPEND(&curpx->filter_configs, &fconf->list);
 	}
 	return 0;
 
@@ -358,7 +358,7 @@
 	list_for_each_entry_safe(fconf, back, &proxy->filter_configs, list) {
 		if (fconf->ops->deinit)
 			fconf->ops->deinit(proxy, fconf);
-		LIST_DEL(&fconf->list);
+		LIST_DELETE(&fconf->list);
 		free(fconf);
 	}
 }
@@ -412,7 +412,7 @@
 		}
 	}
 
-	LIST_ADDQ(&strm_flt(s)->filters, &f->list);
+	LIST_APPEND(&strm_flt(s)->filters, &f->list);
 	strm_flt(s)->flags |= STRM_FLT_FL_HAS_FILTERS;
 	return 0;
 }
@@ -450,7 +450,7 @@
 		if (!only_backend || (filter->flags & FLT_FL_IS_BACKEND_FILTER)) {
 			if (FLT_OPS(filter)->detach)
 				FLT_OPS(filter)->detach(s, filter);
-			LIST_DEL(&filter->list);
+			LIST_DELETE(&filter->list);
 			pool_free(pool_head_filter, filter);
 		}
 	}
diff --git a/src/flt_http_comp.c b/src/flt_http_comp.c
index 99718e3..c212b9c 100644
--- a/src/flt_http_comp.c
+++ b/src/flt_http_comp.c
@@ -753,7 +753,7 @@
 	fconf->id   = http_comp_flt_id;
 	fconf->conf = NULL;
 	fconf->ops  = &comp_ops;
-	LIST_ADDQ(&proxy->filter_configs, &fconf->list);
+	LIST_APPEND(&proxy->filter_configs, &fconf->list);
  end:
 	return err;
 }
diff --git a/src/flt_spoe.c b/src/flt_spoe.c
index ce55483..7749cc9 100644
--- a/src/flt_spoe.c
+++ b/src/flt_spoe.c
@@ -128,11 +128,11 @@
 	list_for_each_entry_safe(arg, argback, &msg->args, list) {
 		release_sample_expr(arg->expr);
 		free(arg->name);
-		LIST_DEL(&arg->list);
+		LIST_DELETE(&arg->list);
 		free(arg);
 	}
 	list_for_each_entry_safe(acl, aclback, &msg->acls, list) {
-		LIST_DEL(&acl->list);
+		LIST_DELETE(&acl->list);
 		prune_acl(acl);
 		free(acl);
 	}
@@ -169,11 +169,11 @@
 	free(agent->var_t_process);
 	free(agent->var_t_total);
 	list_for_each_entry_safe(msg, msgback, &agent->messages, list) {
-		LIST_DEL(&msg->list);
+		LIST_DELETE(&msg->list);
 		spoe_release_message(msg);
 	}
 	list_for_each_entry_safe(grp, grpback, &agent->groups, list) {
-		LIST_DEL(&grp->list);
+		LIST_DELETE(&grp->list);
 		spoe_release_group(grp);
 	}
 	if (agent->rt) {
@@ -1233,7 +1233,7 @@
 	_HA_ATOMIC_DEC(&agent->counters.applets);
 	HA_SPIN_LOCK(SPOE_APPLET_LOCK, &agent->rt[tid].lock);
 	if (!LIST_ISEMPTY(&spoe_appctx->list)) {
-		LIST_DEL(&spoe_appctx->list);
+		LIST_DELETE(&spoe_appctx->list);
 		LIST_INIT(&spoe_appctx->list);
 	}
 	HA_SPIN_UNLOCK(SPOE_APPLET_LOCK, &agent->rt[tid].lock);
@@ -1259,7 +1259,7 @@
 
 	/* Notify all waiting streams */
 	list_for_each_entry_safe(ctx, back, &spoe_appctx->waiting_queue, list) {
-		LIST_DEL(&ctx->list);
+		LIST_DELETE(&ctx->list);
 		LIST_INIT(&ctx->list);
 		_HA_ATOMIC_DEC(&agent->counters.nb_waiting);
 		spoe_update_stat_time(&ctx->stats.tv_wait, &ctx->stats.t_waiting);
@@ -1289,7 +1289,7 @@
 
 	/* If this was the last running applet, notify all waiting streams */
 	list_for_each_entry_safe(ctx, back, &agent->rt[tid].sending_queue, list) {
-		LIST_DEL(&ctx->list);
+		LIST_DELETE(&ctx->list);
 		LIST_INIT(&ctx->list);
 		_HA_ATOMIC_DEC(&agent->counters.nb_sending);
 		spoe_update_stat_time(&ctx->stats.tv_queue, &ctx->stats.t_queue);
@@ -1299,7 +1299,7 @@
 		task_wakeup(ctx->strm->task, TASK_WOKEN_MSG);
 	}
 	list_for_each_entry_safe(ctx, back, &agent->rt[tid].waiting_queue, list) {
-		LIST_DEL(&ctx->list);
+		LIST_DELETE(&ctx->list);
 		LIST_INIT(&ctx->list);
 		_HA_ATOMIC_DEC(&agent->counters.nb_waiting);
 		spoe_update_stat_time(&ctx->stats.tv_wait, &ctx->stats.t_waiting);
@@ -1500,7 +1500,7 @@
 				goto abort_frag_frame;
 
 			spoe_release_buffer(&ctx->buffer, &ctx->buffer_wait);
-			LIST_DEL(&ctx->list);
+			LIST_DELETE(&ctx->list);
 			LIST_INIT(&ctx->list);
 			_HA_ATOMIC_DEC(&agent->counters.nb_sending);
 			spoe_update_stat_time(&ctx->stats.tv_queue, &ctx->stats.t_queue);
@@ -1520,7 +1520,7 @@
 				goto abort_frag_frame;
 
 			spoe_release_buffer(&ctx->buffer, &ctx->buffer_wait);
-			LIST_DEL(&ctx->list);
+			LIST_DELETE(&ctx->list);
 			LIST_INIT(&ctx->list);
 			_HA_ATOMIC_DEC(&agent->counters.nb_sending);
 			spoe_update_stat_time(&ctx->stats.tv_queue, &ctx->stats.t_queue);
@@ -1546,16 +1546,16 @@
   no_frag_frame_sent:
 	if (SPOE_APPCTX(appctx)->flags & SPOE_APPCTX_FL_ASYNC) {
 		appctx->st0 = SPOE_APPCTX_ST_PROCESSING;
-		LIST_ADDQ(&agent->rt[tid].waiting_queue, &ctx->list);
+		LIST_APPEND(&agent->rt[tid].waiting_queue, &ctx->list);
 	}
 	else if (SPOE_APPCTX(appctx)->flags & SPOE_APPCTX_FL_PIPELINING) {
 		appctx->st0 = SPOE_APPCTX_ST_PROCESSING;
-		LIST_ADDQ(&SPOE_APPCTX(appctx)->waiting_queue, &ctx->list);
+		LIST_APPEND(&SPOE_APPCTX(appctx)->waiting_queue, &ctx->list);
 	}
 	else {
 		appctx->st0 = SPOE_APPCTX_ST_WAITING_SYNC_ACK;
 		*skip = 1;
-		LIST_ADDQ(&SPOE_APPCTX(appctx)->waiting_queue, &ctx->list);
+		LIST_APPEND(&SPOE_APPCTX(appctx)->waiting_queue, &ctx->list);
 	}
 	_HA_ATOMIC_INC(&agent->counters.nb_waiting);
 	ctx->stats.tv_wait = now;
@@ -1611,7 +1611,7 @@
 			break;
 
 		default:
-			LIST_DEL(&ctx->list);
+			LIST_DELETE(&ctx->list);
 			LIST_INIT(&ctx->list);
 			_HA_ATOMIC_DEC(&agent->counters.nb_waiting);
 			spoe_update_stat_time(&ctx->stats.tv_wait, &ctx->stats.t_waiting);
@@ -2008,7 +2008,7 @@
 	strm->res.flags |= CF_READ_DONTWAIT;
 
 	HA_SPIN_LOCK(SPOE_APPLET_LOCK, &conf->agent->rt[tid].lock);
-	LIST_ADDQ(&conf->agent->rt[tid].applets, &SPOE_APPCTX(appctx)->list);
+	LIST_APPEND(&conf->agent->rt[tid].applets, &SPOE_APPCTX(appctx)->list);
 	HA_SPIN_UNLOCK(SPOE_APPLET_LOCK, &conf->agent->rt[tid].lock);
 	_HA_ATOMIC_INC(&conf->agent->counters.applets);
 
@@ -2101,7 +2101,7 @@
 	ctx->stats.tv_queue = now;
 	if (ctx->spoe_appctx)
 		return 1;
-	LIST_ADDQ(&agent->rt[tid].sending_queue, &ctx->list);
+	LIST_APPEND(&agent->rt[tid].sending_queue, &ctx->list);
 
 	SPOE_PRINTF(stderr, "%d.%06d [SPOE/%-15s] %s: stream=%p"
 		    " - Add stream in sending queue"
@@ -2624,7 +2624,7 @@
 		else
 			_HA_ATOMIC_DEC(&agent->counters.nb_waiting);
 
-		LIST_DEL(&ctx->list);
+		LIST_DELETE(&ctx->list);
 		LIST_INIT(&ctx->list);
 	}
 }
@@ -2833,20 +2833,20 @@
 	if (buf->size)
 		return 1;
 
-	if (LIST_ADDED(&buffer_wait->list))
+	if (LIST_INLIST(&buffer_wait->list))
 		LIST_DEL_INIT(&buffer_wait->list);
 
 	if (b_alloc(buf))
 		return 1;
 
-	LIST_ADDQ(&ti->buffer_wq, &buffer_wait->list);
+	LIST_APPEND(&ti->buffer_wq, &buffer_wait->list);
 	return 0;
 }
 
 static void
 spoe_release_buffer(struct buffer *buf, struct buffer_wait *buffer_wait)
 {
-	if (LIST_ADDED(&buffer_wait->list))
+	if (LIST_INLIST(&buffer_wait->list))
 		LIST_DEL_INIT(&buffer_wait->list);
 
 	/* Release the buffer if needed */
@@ -3439,7 +3439,7 @@
 				goto out;
 			}
 			ph->id = strdup(args[cur_arg]);
-			LIST_ADDQ(&curmphs, &ph->list);
+			LIST_APPEND(&curmphs, &ph->list);
 			cur_arg++;
 		}
 	}
@@ -3463,7 +3463,7 @@
 				goto out;
 			}
 			ph->id = strdup(args[cur_arg]);
-			LIST_ADDQ(&curgphs, &ph->list);
+			LIST_APPEND(&curgphs, &ph->list);
 			cur_arg++;
 		}
 	}
@@ -3766,7 +3766,7 @@
 				err_code |= ERR_ALERT | ERR_ABORT;
 				goto out;
 			}
-			LIST_ADDQ(&curvars, &vph->list);
+			LIST_APPEND(&curvars, &vph->list);
 			cur_arg++;
 		}
 	}
@@ -3841,7 +3841,7 @@
 		curgrp->conf.line = linenum;
 		LIST_INIT(&curgrp->phs);
 		LIST_INIT(&curgrp->messages);
-		LIST_ADDQ(&curgrps, &curgrp->list);
+		LIST_APPEND(&curgrps, &curgrp->list);
 	}
 	else if (strcmp(args[0], "messages") == 0) {
 		int cur_arg = 1;
@@ -3863,7 +3863,7 @@
 				goto out;
 			}
 			ph->id = strdup(args[cur_arg]);
-			LIST_ADDQ(&curgrp->phs, &ph->list);
+			LIST_APPEND(&curgrp->phs, &ph->list);
 			cur_arg++;
 		}
 	}
@@ -3937,7 +3937,7 @@
 		LIST_INIT(&curmsg->acls);
 		LIST_INIT(&curmsg->by_evt);
 		LIST_INIT(&curmsg->by_grp);
-		LIST_ADDQ(&curmsgs, &curmsg->list);
+		LIST_APPEND(&curmsgs, &curmsg->list);
 	}
 	else if (strcmp(args[0], "args") == 0) {
 		int cur_arg = 1;
@@ -3976,7 +3976,7 @@
 				goto out;
 			}
 			curmsg->nargs++;
-			LIST_ADDQ(&curmsg->args, &arg->list);
+			LIST_APPEND(&curmsg->args, &arg->list);
 			cur_arg++;
 		}
 		curproxy->conf.args.file = NULL;
@@ -4342,7 +4342,7 @@
 				}
 
 				msg->agent = curagent;
-				LIST_ADDQ(&curagent->events[msg->event], &msg->by_evt);
+				LIST_APPEND(&curagent->events[msg->event], &msg->by_evt);
 				goto next_mph;
 			}
 		}
@@ -4359,8 +4359,8 @@
 		list_for_each_entry_safe(grp, grpback, &curgrps, list) {
 			if (strcmp(grp->id, ph->id) == 0) {
 				grp->agent = curagent;
-				LIST_DEL(&grp->list);
-				LIST_ADDQ(&curagent->groups, &grp->list);
+				LIST_DELETE(&grp->list);
+				LIST_APPEND(&curagent->groups, &grp->list);
 				goto next_aph;
 			}
 		}
@@ -4390,8 +4390,8 @@
 					 * them only if a rule use the corresponding SPOE group. */
 					msg->agent = curagent;
 					msg->group = grp;
-					LIST_DEL(&ph->list);
-					LIST_ADDQ(&grp->messages, &msg->by_grp);
+					LIST_DELETE(&ph->list);
+					LIST_APPEND(&grp->messages, &msg->by_grp);
 					goto next_mph_grp;
 				}
 			}
@@ -4423,16 +4423,16 @@
 	conf->agent_fe.options2 |= curpxopts2;
 
 	list_for_each_entry_safe(logsrv, logsrvback, &curlogsrvs, list) {
-		LIST_DEL(&logsrv->list);
-		LIST_ADDQ(&conf->agent_fe.logsrvs, &logsrv->list);
+		LIST_DELETE(&logsrv->list);
+		LIST_APPEND(&conf->agent_fe.logsrvs, &logsrv->list);
 	}
 
 	list_for_each_entry_safe(ph, phback, &curmphs, list) {
-		LIST_DEL(&ph->list);
+		LIST_DELETE(&ph->list);
 		spoe_release_placeholder(ph);
 	}
 	list_for_each_entry_safe(ph, phback, &curgphs, list) {
-		LIST_DEL(&ph->list);
+		LIST_DELETE(&ph->list);
 		spoe_release_placeholder(ph);
 	}
 	list_for_each_entry_safe(vph, vphback, &curvars, list) {
@@ -4451,12 +4451,12 @@
 			goto error;
 		}
 
-		LIST_DEL(&vph->list);
+		LIST_DELETE(&vph->list);
 		free(vph->name);
 		free(vph);
 	}
 	list_for_each_entry_safe(grp, grpback, &curgrps, list) {
-		LIST_DEL(&grp->list);
+		LIST_DELETE(&grp->list);
 		spoe_release_group(grp);
 	}
 	*cur_arg    = pos;
@@ -4468,28 +4468,28 @@
  error:
 	spoe_release_agent(curagent);
 	list_for_each_entry_safe(ph, phback, &curmphs, list) {
-		LIST_DEL(&ph->list);
+		LIST_DELETE(&ph->list);
 		spoe_release_placeholder(ph);
 	}
 	list_for_each_entry_safe(ph, phback, &curgphs, list) {
-		LIST_DEL(&ph->list);
+		LIST_DELETE(&ph->list);
 		spoe_release_placeholder(ph);
 	}
 	list_for_each_entry_safe(vph, vphback, &curvars, list) {
-		LIST_DEL(&vph->list);
+		LIST_DELETE(&vph->list);
 		free(vph->name);
 		free(vph);
 	}
 	list_for_each_entry_safe(grp, grpback, &curgrps, list) {
-		LIST_DEL(&grp->list);
+		LIST_DELETE(&grp->list);
 		spoe_release_group(grp);
 	}
 	list_for_each_entry_safe(msg, msgback, &curmsgs, list) {
-		LIST_DEL(&msg->list);
+		LIST_DELETE(&msg->list);
 		spoe_release_message(msg);
 	}
 	list_for_each_entry_safe(logsrv, logsrvback, &curlogsrvs, list) {
-		LIST_DEL(&logsrv->list);
+		LIST_DELETE(&logsrv->list);
 		free(logsrv);
 	}
 	free(conf);
diff --git a/src/haproxy.c b/src/haproxy.c
index 27ac49e..0e86586 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -282,7 +282,7 @@
 	}
 	b->str = str;
 	b->must_free = must_free;
-	LIST_ADDQ(&build_opts_list, &b->list);
+	LIST_APPEND(&build_opts_list, &b->list);
 }
 
 static void display_version()
@@ -880,7 +880,7 @@
 
 		/* remove the current directory (wl) from cfg_cfgfiles */
 		free(wl->s);
-		LIST_DEL(&wl->list);
+		LIST_DELETE(&wl->list);
 		free(wl);
 	}
 
@@ -1463,7 +1463,7 @@
 					ha_alert("Cannot allocate memory\n");
 					exit(EXIT_FAILURE);
 				}
-				LIST_ADD(&mworker_cli_conf, &c->list);
+				LIST_INSERT(&mworker_cli_conf, &c->list);
 
 				argv++;
 				argc--;
@@ -1654,7 +1654,7 @@
 
 			proc_self = tmproc;
 
-			LIST_ADDQ(&proc_list, &tmproc->list);
+			LIST_APPEND(&proc_list, &tmproc->list);
 		}
 
 		for (proc = 0; proc < global.nbproc; proc++) {
@@ -1677,7 +1677,7 @@
 				exit(EXIT_FAILURE);
 			}
 
-			LIST_ADDQ(&proc_list, &tmproc->list);
+			LIST_APPEND(&proc_list, &tmproc->list);
 		}
 	}
 	if (global.mode & (MODE_MWORKER|MODE_MWORKER_WAIT)) {
@@ -1699,7 +1699,7 @@
 					ha_alert("Can't create the master's CLI.\n");
 					exit(EXIT_FAILURE);
 				}
-				LIST_DEL(&c->list);
+				LIST_DELETE(&c->list);
 				free(c->s);
 				free(c);
 			}
@@ -2277,69 +2277,69 @@
 	idle_conn_task = NULL;
 
 	list_for_each_entry_safe(log, logb, &global.logsrvs, list) {
-			LIST_DEL(&log->list);
+			LIST_DELETE(&log->list);
 			free(log);
 		}
 	list_for_each_entry_safe(wl, wlb, &cfg_cfgfiles, list) {
 		free(wl->s);
-		LIST_DEL(&wl->list);
+		LIST_DELETE(&wl->list);
 		free(wl);
 	}
 
 	list_for_each_entry_safe(bol, bolb, &build_opts_list, list) {
 		if (bol->must_free)
 			free((void *)bol->str);
-		LIST_DEL(&bol->list);
+		LIST_DELETE(&bol->list);
 		free(bol);
 	}
 
 	list_for_each_entry_safe(pxdf, pxdfb, &proxy_deinit_list, list) {
-		LIST_DEL(&pxdf->list);
+		LIST_DELETE(&pxdf->list);
 		free(pxdf);
 	}
 
 	list_for_each_entry_safe(pdf, pdfb, &post_deinit_list, list) {
-		LIST_DEL(&pdf->list);
+		LIST_DELETE(&pdf->list);
 		free(pdf);
 	}
 
 	list_for_each_entry_safe(srvdf, srvdfb, &server_deinit_list, list) {
-		LIST_DEL(&srvdf->list);
+		LIST_DELETE(&srvdf->list);
 		free(srvdf);
 	}
 
 	list_for_each_entry_safe(pcf, pcfb, &post_check_list, list) {
-		LIST_DEL(&pcf->list);
+		LIST_DELETE(&pcf->list);
 		free(pcf);
 	}
 
 	list_for_each_entry_safe(pscf, pscfb, &post_server_check_list, list) {
-		LIST_DEL(&pscf->list);
+		LIST_DELETE(&pscf->list);
 		free(pscf);
 	}
 
 	list_for_each_entry_safe(ppcf, ppcfb, &post_proxy_check_list, list) {
-		LIST_DEL(&ppcf->list);
+		LIST_DELETE(&ppcf->list);
 		free(ppcf);
 	}
 
 	list_for_each_entry_safe(tif, tifb, &per_thread_init_list, list) {
-		LIST_DEL(&tif->list);
+		LIST_DELETE(&tif->list);
 		free(tif);
 	}
 
 	list_for_each_entry_safe(tdf, tdfb, &per_thread_deinit_list, list) {
-		LIST_DEL(&tdf->list);
+		LIST_DELETE(&tdf->list);
 		free(tdf);
 	}
 
 	list_for_each_entry_safe(taf, tafb, &per_thread_alloc_list, list) {
-		LIST_DEL(&taf->list);
+		LIST_DELETE(&taf->list);
 		free(taf);
 	}
 
 	list_for_each_entry_safe(tff, tffb, &per_thread_free_list, list) {
-		LIST_DEL(&tff->list);
+		LIST_DELETE(&tff->list);
 		free(tff);
 	}
 
@@ -3004,7 +3004,7 @@
 					proc_self = child;
 					continue;
 				}
-				LIST_DEL(&child->list);
+				LIST_DELETE(&child->list);
 				mworker_free_child(child);
 				child = NULL;
 			}
diff --git a/src/hlua.c b/src/hlua.c
index 5a67f02..f227609 100644
--- a/src/hlua.c
+++ b/src/hlua.c
@@ -312,7 +312,7 @@
 	fcn = calloc(1, sizeof(*fcn));
 	if (!fcn)
 		return NULL;
-	LIST_ADDQ(&referenced_functions, &fcn->l);
+	LIST_APPEND(&referenced_functions, &fcn->l);
 	for (i = 0; i < MAX_THREADS + 1; i++)
 		fcn->function_ref[i] = -1;
 	return fcn;
@@ -324,7 +324,7 @@
 		return;
 	if (fcn->name)
 		ha_free(&fcn->name);
-	LIST_DEL(&fcn->l);
+	LIST_DELETE(&fcn->l);
 	ha_free(&fcn);
 }
 
@@ -6387,7 +6387,7 @@
 		WILL_LJMP(luaL_error(L, "Lua out of memory error."));
 
 	init->function_ref = ref;
-	LIST_ADDQ(&hlua_init_functions[hlua_state_id], &init->l);
+	LIST_APPEND(&hlua_init_functions[hlua_state_id], &init->l);
 	return 0;
 }
 
@@ -8499,7 +8499,7 @@
 		memprintf(err, "memory allocation failed");
 		goto err2;
 	}
-	LIST_ADDQ(&prepend_path_list, &p->l);
+	LIST_APPEND(&prepend_path_list, &p->l);
 
 	hlua_prepend_path(hlua_states[0], type, path);
 	hlua_prepend_path(hlua_states[1], type, path);
diff --git a/src/http_act.c b/src/http_act.c
index aeb940f..5da2d7d 100644
--- a/src/http_act.c
+++ b/src/http_act.c
@@ -51,7 +51,7 @@
 	if (rule->arg.http.re)
 		regex_free(rule->arg.http.re);
 	list_for_each_entry_safe(lf, lfb, &rule->arg.http.fmt, list) {
-		LIST_DEL(&lf->list);
+		LIST_DELETE(&lf->list);
 		release_sample_expr(lf->expr);
 		free(lf->arg);
 		free(lf);
@@ -1744,7 +1744,7 @@
 	struct redirect_rule *redir;
 
 	redir = rule->arg.redir;
-	LIST_DEL(&redir->list);
+	LIST_DELETE(&redir->list);
 	if (redir->cond) {
 		prune_acl_cond(redir->cond);
 		free(redir->cond);
@@ -1752,7 +1752,7 @@
 	free(redir->rdr_str);
 	free(redir->cookie_str);
 	list_for_each_entry_safe(lf, lfb, &redir->rdr_fmt, list) {
-		LIST_DEL(&lf->list);
+		LIST_DELETE(&lf->list);
 		free(lf);
 	}
 	free(redir);
@@ -1876,14 +1876,14 @@
 
 	free(rule->arg.map.ref);
 	list_for_each_entry_safe(lf, lfb, &rule->arg.map.key, list) {
-		LIST_DEL(&lf->list);
+		LIST_DELETE(&lf->list);
 		release_sample_expr(lf->expr);
 		free(lf->arg);
 		free(lf);
 	}
 	if (rule->action == 1) {
 		list_for_each_entry_safe(lf, lfb, &rule->arg.map.value, list) {
-			LIST_DEL(&lf->list);
+			LIST_DELETE(&lf->list);
 			release_sample_expr(lf->expr);
 			free(lf->arg);
 			free(lf);
diff --git a/src/http_htx.c b/src/http_htx.c
index 2ddc50e..c3422d4 100644
--- a/src/http_htx.c
+++ b/src/http_htx.c
@@ -1009,9 +1009,9 @@
 
 	ha_free(&http_reply->ctype);
 	list_for_each_entry_safe(hdr, hdrb, &http_reply->hdrs, list) {
-		LIST_DEL(&hdr->list);
+		LIST_DELETE(&hdr->list);
 		list_for_each_entry_safe(lf, lfb, &hdr->value, list) {
-			LIST_DEL(&lf->list);
+			LIST_DELETE(&lf->list);
 			release_sample_expr(lf->expr);
 			free(lf->arg);
 			free(lf);
@@ -1027,7 +1027,7 @@
 		chunk_destroy(&http_reply->body.obj);
 	else if (http_reply->type == HTTP_REPLY_LOGFMT) {
 		list_for_each_entry_safe(lf, lfb, &http_reply->body.fmt, list) {
-			LIST_DEL(&lf->list);
+			LIST_DELETE(&lf->list);
 			release_sample_expr(lf->expr);
 			free(lf->arg);
 			free(lf);
@@ -1100,12 +1100,12 @@
 		free(http_errs->id);
 		for (rc = 0; rc < HTTP_ERR_SIZE; rc++)
 			release_http_reply(http_errs->replies[rc]);
-		LIST_DEL(&http_errs->list);
+		LIST_DELETE(&http_errs->list);
 		free(http_errs);
 	}
 
 	list_for_each_entry_safe(http_rep, http_repb, &http_replies_list, list) {
-		LIST_DEL(&http_rep->list);
+		LIST_DELETE(&http_rep->list);
 		release_http_reply(http_rep);
 	}
 }
@@ -1598,7 +1598,7 @@
 				memprintf(errmsg, "'%s' : out of memory", args[cur_arg-1]);
 				goto error;
 			}
-			LIST_ADDQ(&reply->hdrs, &hdr->list);
+			LIST_APPEND(&reply->hdrs, &hdr->list);
 			LIST_INIT(&hdr->value);
 			hdr->name = ist(strdup(args[cur_arg]));
 			if (!isttest(hdr->name)) {
@@ -1654,9 +1654,9 @@
 				   "with an erorrfile.\n",
 				   px->conf.args.file, px->conf.args.line);
 			list_for_each_entry_safe(hdr, hdrb, &reply->hdrs, list) {
-				LIST_DEL(&hdr->list);
+				LIST_DELETE(&hdr->list);
 				list_for_each_entry_safe(lf, lfb, &hdr->value, list) {
-					LIST_DEL(&lf->list);
+					LIST_DELETE(&lf->list);
 					release_sample_expr(lf->expr);
 					free(lf->arg);
 					free(lf);
@@ -1759,7 +1759,7 @@
 	reply->ctype = NULL;
 	LIST_INIT(&reply->hdrs);
 	reply->body.errmsg = msg;
-	LIST_ADDQ(&http_replies_list, &reply->list);
+	LIST_APPEND(&http_replies_list, &reply->list);
 
 	conf_err = calloc(1, sizeof(*conf_err));
 	if (!conf_err) {
@@ -1774,7 +1774,7 @@
 
 	conf_err->file = strdup(file);
 	conf_err->line = line;
-	LIST_ADDQ(&curpx->conf.errors, &conf_err->list);
+	LIST_APPEND(&curpx->conf.errors, &conf_err->list);
 
 	/* handle warning message */
 	if (*errmsg)
@@ -1825,7 +1825,7 @@
 	reply->ctype = NULL;
 	LIST_INIT(&reply->hdrs);
 	reply->body.errmsg = msg;
-	LIST_ADDQ(&http_replies_list, &reply->list);
+	LIST_APPEND(&http_replies_list, &reply->list);
 
 	conf_err = calloc(1, sizeof(*conf_err));
 	if (!conf_err) {
@@ -1839,7 +1839,7 @@
 	conf_err->info.errorfile.reply = reply;
 	conf_err->file = strdup(file);
 	conf_err->line = line;
-	LIST_ADDQ(&curpx->conf.errors, &conf_err->list);
+	LIST_APPEND(&curpx->conf.errors, &conf_err->list);
 
 	/* handle warning message */
 	if (*errmsg)
@@ -1901,7 +1901,7 @@
 	}
 	conf_err->file = strdup(file);
 	conf_err->line = line;
-	LIST_ADDQ(&curpx->conf.errors, &conf_err->list);
+	LIST_APPEND(&curpx->conf.errors, &conf_err->list);
   out:
 	return ret;
 
@@ -1970,11 +1970,11 @@
 		conf_err->type = 1;
 		conf_err->info.errorfile.status = reply->status;
 		conf_err->info.errorfile.reply = reply;
-		LIST_ADDQ(&http_replies_list, &reply->list);
+		LIST_APPEND(&http_replies_list, &reply->list);
 	}
 	conf_err->file = strdup(file);
 	conf_err->line = line;
-	LIST_ADDQ(&curpx->conf.errors, &conf_err->list);
+	LIST_APPEND(&curpx->conf.errors, &conf_err->list);
 
 	/* handle warning message */
 	if (*errmsg)
@@ -2036,7 +2036,7 @@
 			}
 		}
 	  next:
-		LIST_DEL(&conf_err->list);
+		LIST_DELETE(&conf_err->list);
 		free(conf_err->file);
 		free(conf_err);
 	}
@@ -2099,7 +2099,7 @@
 		}
 		new_conf_err->file = strdup(conf_err->file);
 		new_conf_err->line = conf_err->line;
-		LIST_ADDQ(&curpx->conf.errors, &new_conf_err->list);
+		LIST_APPEND(&curpx->conf.errors, &new_conf_err->list);
 		new_conf_err = NULL;
 	}
 	ret = 1;
@@ -2116,7 +2116,7 @@
 	list_for_each_entry_safe(conf_err, conf_err_back, &px->conf.errors, list) {
 		if (conf_err->type == 0)
 			free(conf_err->info.errorfiles.name);
-		LIST_DEL(&conf_err->list);
+		LIST_DELETE(&conf_err->list);
 		free(conf_err->file);
 		free(conf_err);
 	}
@@ -2168,7 +2168,7 @@
 			goto out;
 		}
 
-		LIST_ADDQ(&http_errors_list, &curr_errs->list);
+		LIST_APPEND(&http_errors_list, &curr_errs->list);
 		curr_errs->id = strdup(args[1]);
 		curr_errs->conf.file = strdup(file);
 		curr_errs->conf.line = linenum;
diff --git a/src/init.c b/src/init.c
index e94f51f..ad80662 100644
--- a/src/init.c
+++ b/src/init.c
@@ -84,7 +84,7 @@
 		exit(1);
 	}
 	b->fct = fct;
-	LIST_ADDQ(&post_check_list, &b->list);
+	LIST_APPEND(&post_check_list, &b->list);
 }
 
 /* used to register some initialization functions to call for each proxy after
@@ -100,7 +100,7 @@
 		exit(1);
 	}
 	b->fct = fct;
-	LIST_ADDQ(&post_proxy_check_list, &b->list);
+	LIST_APPEND(&post_proxy_check_list, &b->list);
 }
 
 /* used to register some initialization functions to call for each server after
@@ -116,7 +116,7 @@
 		exit(1);
 	}
 	b->fct = fct;
-	LIST_ADDQ(&post_server_check_list, &b->list);
+	LIST_APPEND(&post_server_check_list, &b->list);
 }
 
 /* used to register some de-initialization functions to call after everything
@@ -132,7 +132,7 @@
 		exit(1);
 	}
 	b->fct = fct;
-	LIST_ADDQ(&post_deinit_list, &b->list);
+	LIST_APPEND(&post_deinit_list, &b->list);
 }
 
 /* used to register some per proxy de-initialization functions to call after
@@ -148,7 +148,7 @@
 		exit(1);
 	}
 	b->fct = fct;
-	LIST_ADDQ(&proxy_deinit_list, &b->list);
+	LIST_APPEND(&proxy_deinit_list, &b->list);
 }
 
 /* used to register some per server de-initialization functions to call after
@@ -164,7 +164,7 @@
 		exit(1);
 	}
 	b->fct = fct;
-	LIST_ADDQ(&server_deinit_list, &b->list);
+	LIST_APPEND(&server_deinit_list, &b->list);
 }
 
 /* used to register some allocation functions to call for each thread. */
@@ -178,7 +178,7 @@
 		exit(1);
 	}
 	b->fct = fct;
-	LIST_ADDQ(&per_thread_alloc_list, &b->list);
+	LIST_APPEND(&per_thread_alloc_list, &b->list);
 }
 
 /* used to register some initialization functions to call for each thread. */
@@ -192,7 +192,7 @@
 		exit(1);
 	}
 	b->fct = fct;
-	LIST_ADDQ(&per_thread_init_list, &b->list);
+	LIST_APPEND(&per_thread_init_list, &b->list);
 }
 
 /* used to register some de-initialization functions to call for each thread. */
@@ -206,7 +206,7 @@
 		exit(1);
 	}
 	b->fct = fct;
-	LIST_ADDQ(&per_thread_deinit_list, &b->list);
+	LIST_APPEND(&per_thread_deinit_list, &b->list);
 }
 
 /* used to register some free functions to call for each thread. */
@@ -220,5 +220,5 @@
 		exit(1);
 	}
 	b->fct = fct;
-	LIST_ADDQ(&per_thread_free_list, &b->list);
+	LIST_APPEND(&per_thread_free_list, &b->list);
 }
diff --git a/src/listener.c b/src/listener.c
index fe0fd24..226b629 100644
--- a/src/listener.c
+++ b/src/listener.c
@@ -353,7 +353,7 @@
 		return;
 	listener_set_state(listener, LI_ASSIGNED);
 	listener->rx.proto = proto;
-	LIST_ADDQ(&proto->receivers, &listener->rx.proto_list);
+	LIST_APPEND(&proto->receivers, &listener->rx.proto_list);
 	proto->nb_receivers++;
 }
 
@@ -440,7 +440,7 @@
 	if (l->rx.proto->suspend)
 		ret = l->rx.proto->suspend(l);
 
-	MT_LIST_DEL(&l->wait_queue);
+	MT_LIST_DELETE(&l->wait_queue);
 
 	listener_set_state(l, LI_PAUSED);
 
@@ -474,7 +474,7 @@
 	/* check that another thread didn't to the job in parallel (e.g. at the
 	 * end of listen_accept() while we'd come from dequeue_all_listeners().
 	 */
-	if (MT_LIST_ADDED(&l->wait_queue))
+	if (MT_LIST_INLIST(&l->wait_queue))
 		goto end;
 
 	if ((global.mode & (MODE_DAEMON | MODE_MWORKER)) &&
@@ -513,7 +513,7 @@
 {
 	HA_SPIN_LOCK(LISTENER_LOCK, &l->lock);
 	if (l->state >= LI_READY) {
-		MT_LIST_DEL(&l->wait_queue);
+		MT_LIST_DELETE(&l->wait_queue);
 		if (l->state != LI_FULL) {
 			l->rx.proto->disable(l);
 			listener_set_state(l, LI_FULL);
@@ -529,7 +529,7 @@
 {
 	HA_SPIN_LOCK(LISTENER_LOCK, &l->lock);
 	if (l->state == LI_READY) {
-		MT_LIST_TRY_ADDQ(list, &l->wait_queue);
+		MT_LIST_TRY_APPEND(list, &l->wait_queue);
 		l->rx.proto->disable(l);
 		listener_set_state(l, LI_LIMITED);
 	}
@@ -597,7 +597,7 @@
  */
 void do_unbind_listener(struct listener *listener)
 {
-	MT_LIST_DEL(&listener->wait_queue);
+	MT_LIST_DELETE(&listener->wait_queue);
 
 	if (listener->rx.proto->unbind)
 		listener->rx.proto->unbind(listener);
@@ -641,8 +641,8 @@
 			return 0;
 		}
 		l->obj_type = OBJ_TYPE_LISTENER;
-		LIST_ADDQ(&bc->frontend->conf.listeners, &l->by_fe);
-		LIST_ADDQ(&bc->listeners, &l->by_bind);
+		LIST_APPEND(&bc->frontend->conf.listeners, &l->by_fe);
+		LIST_APPEND(&bc->listeners, &l->by_bind);
 		l->bind_conf = bc;
 		l->rx.settings = &bc->settings;
 		l->rx.owner = l;
@@ -681,7 +681,7 @@
 {
 	if (listener->state == LI_ASSIGNED) {
 		listener_set_state(listener, LI_INIT);
-		LIST_DEL(&listener->rx.proto_list);
+		LIST_DELETE(&listener->rx.proto_list);
 		listener->rx.proto->nb_receivers--;
 		_HA_ATOMIC_DEC(&jobs);
 		_HA_ATOMIC_DEC(&listeners);
@@ -1199,7 +1199,7 @@
  */
 void bind_register_keywords(struct bind_kw_list *kwl)
 {
-	LIST_ADDQ(&bind_keywords.list, &kwl->list);
+	LIST_APPEND(&bind_keywords.list, &kwl->list);
 }
 
 /* Return a pointer to the bind keyword <kw>, or NULL if not found. If the
diff --git a/src/log.c b/src/log.c
index c3437b5..fe0e3a2 100644
--- a/src/log.c
+++ b/src/log.c
@@ -393,7 +393,7 @@
 						goto error_free;
 					}
 					curproxy->to_log |= logformat_keywords[j].lw;
-					LIST_ADDQ(list_format, &node->list);
+					LIST_APPEND(list_format, &node->list);
 				}
 				if (logformat_keywords[j].replace_by)
 					ha_warning("parsing [%s:%d] : deprecated variable '%s' in '%s', please replace it with '%s'.\n",
@@ -447,7 +447,7 @@
 		str[end - start] = '\0';
 		node->arg = str;
 		node->type = LOG_FMT_TEXT; // type string
-		LIST_ADDQ(list_format, &node->list);
+		LIST_APPEND(list_format, &node->list);
 	} else if (type == LF_SEPARATOR) {
 		struct logformat_node *node = calloc(1, sizeof(*node));
 		if (!node) {
@@ -455,7 +455,7 @@
 			return 0;
 		}
 		node->type = LOG_FMT_SEPARATOR;
-		LIST_ADDQ(list_format, &node->list);
+		LIST_APPEND(list_format, &node->list);
 	}
 	return 1;
 }
@@ -528,7 +528,7 @@
 	curpx->to_log |= LW_XPRT;
 	if (curpx->http_needed)
 		curpx->to_log |= LW_REQ;
-	LIST_ADDQ(list_format, &node->list);
+	LIST_APPEND(list_format, &node->list);
 	return 1;
 
   error_free:
@@ -574,7 +574,7 @@
 
 	/* flush the list first. */
 	list_for_each_entry_safe(tmplf, back, list_format, list) {
-		LIST_DEL(&tmplf->list);
+		LIST_DELETE(&tmplf->list);
 		release_sample_expr(tmplf->expr);
 		free(tmplf->arg);
 		free(tmplf);
@@ -831,7 +831,7 @@
 		}
 
 		list_for_each_entry_safe(logsrv, back, logsrvs, list) {
-			LIST_DEL(&logsrv->list);
+			LIST_DELETE(&logsrv->list);
 			free(logsrv);
 		}
 		return 1;
@@ -858,7 +858,7 @@
 			memcpy(node, logsrv, sizeof(struct logsrv));
 			node->ref = logsrv;
 			LIST_INIT(&node->list);
-			LIST_ADDQ(logsrvs, &node->list);
+			LIST_APPEND(logsrvs, &node->list);
 			node->conf.file = strdup(file);
 			node->conf.line = linenum;
 
@@ -1064,7 +1064,7 @@
 	}
 
  done:
-	LIST_ADDQ(logsrvs, &logsrv->list);
+	LIST_APPEND(logsrvs, &logsrv->list);
 	return 1;
 
   error:
diff --git a/src/lru.c b/src/lru.c
index 84442a4..22f15f7 100644
--- a/src/lru.c
+++ b/src/lru.c
@@ -25,8 +25,8 @@
 #include <import/lru.h>
 
 /* Minimal list manipulation macros for lru64_list */
-#define LIST_ADD(lh, el) ({ (el)->n = (lh)->n; (el)->n->p = (lh)->n = (el); (el)->p = (lh); })
-#define LIST_DEL(el)     ({ (el)->n->p = (el)->p; (el)->p->n = (el)->n; })
+#define LIST_INSERT(lh, el) ({ (el)->n = (lh)->n; (el)->n->p = (lh)->n = (el); (el)->p = (lh); })
+#define LIST_DELETE(el)     ({ (el)->n->p = (el)->p; (el)->p->n = (el)->n; })
 
 
 /* Lookup key <key> in LRU cache <lru> for use with domain <domain> whose data's
@@ -46,8 +46,8 @@
 		 * head of the LRU list.
 		 */
 		if (elem->domain == domain && elem->revision == revision) {
-			LIST_DEL(&elem->lru);
-			LIST_ADD(&lru->list, &elem->lru);
+			LIST_DELETE(&elem->lru);
+			LIST_INSERT(&lru->list, &elem->lru);
 			return elem;
 		}
 	}
@@ -87,8 +87,8 @@
 		 * head of the LRU list.
 		 */
 		if (elem->domain == domain && elem->revision == revision) {
-			LIST_DEL(&elem->lru);
-			LIST_ADD(&lru->list, &elem->lru);
+			LIST_DELETE(&elem->lru);
+			LIST_INSERT(&lru->list, &elem->lru);
 			return elem;
 		}
 
@@ -96,7 +96,7 @@
 			return NULL; // currently locked
 
 		/* recycle this entry */
-		LIST_DEL(&elem->lru);
+		LIST_DELETE(&elem->lru);
 	}
 	else {
 		/* New entry inserted, initialize and move to the head of the
@@ -107,7 +107,7 @@
 	}
 
 	elem->domain = NULL;
-	LIST_ADD(&lru->list, &elem->lru);
+	LIST_INSERT(&lru->list, &elem->lru);
 
 	if (lru->cache_usage > lru->cache_size) {
 		/* try to kill oldest entry */
@@ -116,7 +116,7 @@
 		old = container_of(lru->list.p, typeof(*old), lru);
 		if (old->domain) {
 			/* not locked */
-			LIST_DEL(&old->lru);
+			LIST_DELETE(&old->lru);
 			__eb64_delete(&old->node);
 			if (old->data && old->free)
 				old->free(old->data);
@@ -181,7 +181,7 @@
 		next = container_of(elem->lru.p, typeof(*next), lru);
 		if (elem->domain) {
 			/* not locked */
-			LIST_DEL(&elem->lru);
+			LIST_DELETE(&elem->lru);
 			eb64_delete(&elem->node);
 			if (elem->data && elem->free)
 				elem->free(elem->data);
@@ -211,7 +211,7 @@
 		if (!elem->domain)
 			continue; /* locked entry */
 
-		LIST_DEL(&elem->lru);
+		LIST_DELETE(&elem->lru);
 		eb64_delete(&elem->node);
 		if (elem->data && elem->free)
 			elem->free(elem->data);
diff --git a/src/mailers.c b/src/mailers.c
index e614cf0..80dc7d6 100644
--- a/src/mailers.c
+++ b/src/mailers.c
@@ -46,7 +46,7 @@
 
 	if (alert->rules.list) {
 		list_for_each_entry_safe(rule, back, alert->rules.list, list) {
-			LIST_DEL(&rule->list);
+			LIST_DELETE(&rule->list);
 			free_tcpcheck(rule, 1);
 		}
 		free_tcpcheck_vars(&alert->rules.preset_vars);
@@ -74,7 +74,7 @@
 			}
 
 			alert = LIST_NEXT(&q->email_alerts, typeof(alert), list);
-			LIST_DEL(&alert->list);
+			LIST_DELETE(&alert->list);
 			t->expire             = now_ms;
 			check->tcpcheck_rules = &alert->rules;
 			check->status         = HCHK_STATUS_INI;
@@ -189,7 +189,7 @@
 	tcpcheck->action       = TCPCHK_ACT_CONNECT;
 	tcpcheck->comment      = NULL;
 
-	LIST_ADDQ(alert->rules.list, &tcpcheck->list);
+	LIST_APPEND(alert->rules.list, &tcpcheck->list);
 
 	if (!add_tcpcheck_expect_str(&alert->rules, "220 "))
 		goto error;
@@ -269,7 +269,7 @@
 
 	HA_SPIN_LOCK(EMAIL_ALERTS_LOCK, &q->lock);
 	task_wakeup(check->task, TASK_WOKEN_MSG);
-	LIST_ADDQ(&q->email_alerts, &alert->list);
+	LIST_APPEND(&q->email_alerts, &alert->list);
 	HA_SPIN_UNLOCK(EMAIL_ALERTS_LOCK, &q->lock);
 	return 1;
 
diff --git a/src/map.c b/src/map.c
index 6b5502e..041c339 100644
--- a/src/map.c
+++ b/src/map.c
@@ -330,7 +330,7 @@
 		 */
 		if (appctx->st2 == STAT_ST_LIST) {
 			if (!LIST_ISEMPTY(&appctx->ctx.map.bref.users)) {
-				LIST_DEL(&appctx->ctx.map.bref.users);
+				LIST_DELETE(&appctx->ctx.map.bref.users);
 				LIST_INIT(&appctx->ctx.map.bref.users);
 			}
 		}
@@ -359,7 +359,7 @@
 		HA_SPIN_LOCK(PATREF_LOCK, &appctx->ctx.map.ref->lock);
 
 		if (!LIST_ISEMPTY(&appctx->ctx.map.bref.users)) {
-			LIST_DEL(&appctx->ctx.map.bref.users);
+			LIST_DELETE(&appctx->ctx.map.bref.users);
 			LIST_INIT(&appctx->ctx.map.bref.users);
 		}
 
@@ -384,7 +384,7 @@
 				/* let's try again later from this stream. We add ourselves into
 				 * this stream's users so that it can remove us upon termination.
 				 */
-				LIST_ADDQ(&elt->back_refs, &appctx->ctx.map.bref.users);
+				LIST_APPEND(&elt->back_refs, &appctx->ctx.map.bref.users);
 				HA_SPIN_UNLOCK(PATREF_LOCK, &appctx->ctx.map.ref->lock);
 				si_rx_room_blk(si);
 				return 0;
@@ -635,7 +635,7 @@
 	if (appctx->st2 == STAT_ST_LIST) {
 		HA_SPIN_LOCK(PATREF_LOCK, &appctx->ctx.map.ref->lock);
 		if (!LIST_ISEMPTY(&appctx->ctx.map.bref.users))
-			LIST_DEL(&appctx->ctx.map.bref.users);
+			LIST_DELETE(&appctx->ctx.map.bref.users);
 		HA_SPIN_UNLOCK(PATREF_LOCK, &appctx->ctx.map.ref->lock);
 	}
 }
diff --git a/src/mux_fcgi.c b/src/mux_fcgi.c
index f938a57..075a576 100644
--- a/src/mux_fcgi.c
+++ b/src/mux_fcgi.c
@@ -604,11 +604,11 @@
 {
 	struct buffer *buf = NULL;
 
-	if (likely(!LIST_ADDED(&fconn->buf_wait.list)) &&
+	if (likely(!LIST_INLIST(&fconn->buf_wait.list)) &&
 	    unlikely((buf = b_alloc(bptr)) == NULL)) {
 		fconn->buf_wait.target = fconn;
 		fconn->buf_wait.wakeup_cb = fcgi_buf_available;
-		LIST_ADDQ(&ti->buffer_wq, &fconn->buf_wait.list);
+		LIST_APPEND(&ti->buffer_wq, &fconn->buf_wait.list);
 	}
 	return buf;
 }
@@ -845,7 +845,7 @@
 
 		TRACE_DEVEL("freeing fconn", FCGI_EV_FCONN_END, conn);
 
-		if (LIST_ADDED(&fconn->buf_wait.list))
+		if (LIST_INLIST(&fconn->buf_wait.list))
 			LIST_DEL_INIT(&fconn->buf_wait.list);
 
 		fcgi_release_buf(fconn, &fconn->dbuf);
@@ -3641,7 +3641,7 @@
 			}
 			else if (!fconn->conn->hash_node->node.node.leaf_p &&
 				 fcgi_avail_streams(fconn->conn) > 0 && objt_server(fconn->conn->target) &&
-				 !LIST_ADDED(&fconn->conn->session_list)) {
+				 !LIST_INLIST(&fconn->conn->session_list)) {
 				ebmb_insert(&__objt_server(fconn->conn->target)->per_thr[tid].avail_conns,
 				            &fconn->conn->hash_node->node,
 				            sizeof(fconn->conn->hash_node->hash));
@@ -3708,9 +3708,9 @@
 	 * automatically called via the shut_tl tasklet when there's room
 	 * again.
 	 */
-	if (!LIST_ADDED(&fstrm->send_list)) {
+	if (!LIST_INLIST(&fstrm->send_list)) {
 		if (fstrm->flags & (FCGI_SF_BLK_MBUSY|FCGI_SF_BLK_MROOM)) {
-			LIST_ADDQ(&fconn->send_list, &fstrm->send_list);
+			LIST_APPEND(&fconn->send_list, &fstrm->send_list);
 		}
 	}
 	fstrm->flags |= FCGI_SF_WANT_SHUTR;
@@ -3764,9 +3764,9 @@
 	 * automatically called via the shut_tl tasklet when there's room
 	 * again.
 	 */
-	if (!LIST_ADDED(&fstrm->send_list)) {
+	if (!LIST_INLIST(&fstrm->send_list)) {
 		if (fstrm->flags & (FCGI_SF_BLK_MBUSY|FCGI_SF_BLK_MROOM)) {
-			LIST_ADDQ(&fconn->send_list, &fstrm->send_list);
+			LIST_APPEND(&fconn->send_list, &fstrm->send_list);
 		}
 	}
 	fstrm->flags |= FCGI_SF_WANT_SHUTW;
@@ -3859,8 +3859,8 @@
 
 	if (event_type & SUB_RETRY_SEND) {
 		TRACE_DEVEL("unsubscribe(send)", FCGI_EV_STRM_SEND, fconn->conn, fstrm);
-		if (!LIST_ADDED(&fstrm->send_list))
-			LIST_ADDQ(&fconn->send_list, &fstrm->send_list);
+		if (!LIST_INLIST(&fstrm->send_list))
+			LIST_APPEND(&fconn->send_list, &fstrm->send_list);
 	}
 	return 0;
 }
diff --git a/src/mux_h1.c b/src/mux_h1.c
index aa885b8..e8a7d6b 100644
--- a/src/mux_h1.c
+++ b/src/mux_h1.c
@@ -448,11 +448,11 @@
 {
 	struct buffer *buf = NULL;
 
-	if (likely(!LIST_ADDED(&h1c->buf_wait.list)) &&
+	if (likely(!LIST_INLIST(&h1c->buf_wait.list)) &&
 	    unlikely((buf = b_alloc(bptr)) == NULL)) {
 		h1c->buf_wait.target = h1c;
 		h1c->buf_wait.wakeup_cb = h1_buf_available;
-		LIST_ADDQ(&ti->buffer_wq, &h1c->buf_wait.list);
+		LIST_APPEND(&ti->buffer_wq, &h1c->buf_wait.list);
 	}
 	return buf;
 }
@@ -913,7 +913,7 @@
 		}
 
 
-		if (LIST_ADDED(&h1c->buf_wait.list))
+		if (LIST_INLIST(&h1c->buf_wait.list))
 			LIST_DEL_INIT(&h1c->buf_wait.list);
 
 		h1_release_buf(h1c, &h1c->ibuf);
diff --git a/src/mux_h2.c b/src/mux_h2.c
index 7d2c64e..ac80719 100644
--- a/src/mux_h2.c
+++ b/src/mux_h2.c
@@ -806,11 +806,11 @@
 {
 	struct buffer *buf = NULL;
 
-	if (likely(!LIST_ADDED(&h2c->buf_wait.list)) &&
+	if (likely(!LIST_INLIST(&h2c->buf_wait.list)) &&
 	    unlikely((buf = b_alloc(bptr)) == NULL)) {
 		h2c->buf_wait.target = h2c;
 		h2c->buf_wait.wakeup_cb = h2_buf_available;
-		LIST_ADDQ(&ti->buffer_wq, &h2c->buf_wait.list);
+		LIST_APPEND(&ti->buffer_wq, &h2c->buf_wait.list);
 	}
 	return buf;
 }
@@ -1074,7 +1074,7 @@
 		TRACE_DEVEL("freeing h2c", H2_EV_H2C_END, conn);
 		hpack_dht_free(h2c->ddht);
 
-		if (LIST_ADDED(&h2c->buf_wait.list))
+		if (LIST_INLIST(&h2c->buf_wait.list))
 			LIST_DEL_INIT(&h2c->buf_wait.list);
 
 		h2_release_buf(h2c, &h2c->dbuf);
@@ -2125,7 +2125,7 @@
 			LIST_DEL_INIT(&h2s->list);
 			if ((h2s->subs && h2s->subs->events & SUB_RETRY_SEND) ||
 			    h2s->flags & (H2_SF_WANT_SHUTR|H2_SF_WANT_SHUTW))
-				LIST_ADDQ(&h2c->send_list, &h2s->list);
+				LIST_APPEND(&h2c->send_list, &h2s->list);
 		}
 		node = eb32_next(node);
 	}
@@ -2478,7 +2478,7 @@
 			LIST_DEL_INIT(&h2s->list);
 			if ((h2s->subs && h2s->subs->events & SUB_RETRY_SEND) ||
 			    h2s->flags & (H2_SF_WANT_SHUTR|H2_SF_WANT_SHUTW))
-				LIST_ADDQ(&h2c->send_list, &h2s->list);
+				LIST_APPEND(&h2c->send_list, &h2s->list);
 		}
 	}
 	else {
@@ -4274,7 +4274,7 @@
 				}
 				else if (!h2c->conn->hash_node->node.node.leaf_p &&
 					 h2_avail_streams(h2c->conn) > 0 && objt_server(h2c->conn->target) &&
-					 !LIST_ADDED(&h2c->conn->session_list)) {
+					 !LIST_INLIST(&h2c->conn->session_list)) {
 					ebmb_insert(&__objt_server(h2c->conn->target)->per_thr[tid].avail_conns,
 					            &h2c->conn->hash_node->node,
 					            sizeof(h2c->conn->hash_node->hash));
@@ -4361,11 +4361,11 @@
 	 * again.
 	 */
 	h2s->flags |= H2_SF_WANT_SHUTR;
-	if (!LIST_ADDED(&h2s->list)) {
+	if (!LIST_INLIST(&h2s->list)) {
 		if (h2s->flags & H2_SF_BLK_MFCTL)
-			LIST_ADDQ(&h2c->fctl_list, &h2s->list);
+			LIST_APPEND(&h2c->fctl_list, &h2s->list);
 		else if (h2s->flags & (H2_SF_BLK_MBUSY|H2_SF_BLK_MROOM))
-			LIST_ADDQ(&h2c->send_list, &h2s->list);
+			LIST_APPEND(&h2c->send_list, &h2s->list);
 	}
 	TRACE_LEAVE(H2_EV_STRM_SHUT, h2c->conn, h2s);
 	return;
@@ -4436,11 +4436,11 @@
 	 * again.
 	 */
 	h2s->flags |= H2_SF_WANT_SHUTW;
-	if (!LIST_ADDED(&h2s->list)) {
+	if (!LIST_INLIST(&h2s->list)) {
 		if (h2s->flags & H2_SF_BLK_MFCTL)
-			LIST_ADDQ(&h2c->fctl_list, &h2s->list);
+			LIST_APPEND(&h2c->fctl_list, &h2s->list);
 		else if (h2s->flags & (H2_SF_BLK_MBUSY|H2_SF_BLK_MROOM))
-			LIST_ADDQ(&h2c->send_list, &h2s->list);
+			LIST_APPEND(&h2c->send_list, &h2s->list);
 	}
 	TRACE_LEAVE(H2_EV_STRM_SHUT, h2c->conn, h2s);
 	return;
@@ -5765,9 +5765,9 @@
 
 	if (h2s_mws(h2s) <= 0) {
 		h2s->flags |= H2_SF_BLK_SFCTL;
-		if (LIST_ADDED(&h2s->list))
+		if (LIST_INLIST(&h2s->list))
 			LIST_DEL_INIT(&h2s->list);
-		LIST_ADDQ(&h2c->blocked_list, &h2s->list);
+		LIST_APPEND(&h2c->blocked_list, &h2s->list);
 		TRACE_STATE("stream window <=0, flow-controlled", H2_EV_TX_FRAME|H2_EV_TX_DATA|H2_EV_H2S_FCTL, h2c->conn, h2s);
 		goto end;
 	}
@@ -6151,11 +6151,11 @@
 	if (event_type & SUB_RETRY_SEND) {
 		TRACE_DEVEL("subscribe(send)", H2_EV_STRM_SEND, h2c->conn, h2s);
 		if (!(h2s->flags & H2_SF_BLK_SFCTL) &&
-		    !LIST_ADDED(&h2s->list)) {
+		    !LIST_INLIST(&h2s->list)) {
 			if (h2s->flags & H2_SF_BLK_MFCTL)
-				LIST_ADDQ(&h2c->fctl_list, &h2s->list);
+				LIST_APPEND(&h2c->fctl_list, &h2s->list);
 			else
-				LIST_ADDQ(&h2c->send_list, &h2s->list);
+				LIST_APPEND(&h2c->send_list, &h2s->list);
 		}
 	}
 	TRACE_LEAVE(H2_EV_STRM_SEND|H2_EV_STRM_RECV, h2c->conn, h2s);
diff --git a/src/mworker-prog.c b/src/mworker-prog.c
index 4113b7c..8d9ce3a 100644
--- a/src/mworker-prog.c
+++ b/src/mworker-prog.c
@@ -70,7 +70,7 @@
 				}
 
 
-				LIST_DEL(&child->list);
+				LIST_DELETE(&child->list);
 				mworker_free_child(child);
 				child = NULL;
 
@@ -183,7 +183,7 @@
 			goto error;
 		}
 
-		LIST_ADDQ(&proc_list, &ext_child->list);
+		LIST_APPEND(&proc_list, &ext_child->list);
 
 	} else if (strcmp(args[0], "command") == 0) {
 		int arg_nb = 0;
@@ -302,7 +302,7 @@
 
 error:
 	if (ext_child) {
-		LIST_DEL(&ext_child->list);
+		LIST_DELETE(&ext_child->list);
 		if (ext_child->command) {
 			int i;
 
diff --git a/src/mworker.c b/src/mworker.c
index afcada6..e3c579b 100644
--- a/src/mworker.c
+++ b/src/mworker.c
@@ -184,7 +184,7 @@
 			/* this is a process inherited from a reload that should be leaving */
 			child->options |= PROC_O_LEAVING;
 
-			LIST_ADDQ(&proc_list, &child->list);
+			LIST_APPEND(&proc_list, &child->list);
 		} else {
 			mworker_free_child(child);
 		}
@@ -276,7 +276,7 @@
 			if (child->pid != exitpid)
 				continue;
 
-			LIST_DEL(&child->list);
+			LIST_DELETE(&child->list);
 			close(child->ipc_fd[0]);
 			childfound = 1;
 			break;
diff --git a/src/pattern.c b/src/pattern.c
index 252bd35..80ff025 100644
--- a/src/pattern.c
+++ b/src/pattern.c
@@ -1163,7 +1163,7 @@
 	struct pattern_list *pat, *tmp;
 
 	list_for_each_entry_safe(pat, tmp, &expr->patterns, list) {
-		LIST_DEL(&pat->list);
+		LIST_DELETE(&pat->list);
 		pat_unlink_from_head(&pat->pat.ref->list_head, &pat->from_ref);
 		if (pat->pat.sflags & PAT_SF_REGFREE)
 			regex_free(pat->pat.ptr.ptr);
@@ -1200,7 +1200,7 @@
 	memcpy(&patl->pat, pat, sizeof(*pat));
 
 	/* chain pattern in the expression */
-	LIST_ADDQ(&expr->patterns, &patl->list);
+	LIST_APPEND(&expr->patterns, &patl->list);
 	/* and from the reference */
 	patl->from_ref = pat->ref->list_head;
 	pat->ref->list_head = &patl->from_ref;
@@ -1232,7 +1232,7 @@
 	memcpy(patl->pat.ptr.ptr, pat->ptr.ptr, pat->len);
 
 	/* chain pattern in the expression */
-	LIST_ADDQ(&expr->patterns, &patl->list);
+	LIST_APPEND(&expr->patterns, &patl->list);
 	/* and from the reference */
 	patl->from_ref = pat->ref->list_head;
 	pat->ref->list_head = &patl->from_ref;
@@ -1265,7 +1265,7 @@
 	patl->pat.ptr.str[patl->pat.len] = '\0';
 
 	/* chain pattern in the expression */
-	LIST_ADDQ(&expr->patterns, &patl->list);
+	LIST_APPEND(&expr->patterns, &patl->list);
 	/* and from the reference */
 	patl->from_ref = pat->ref->list_head;
 	pat->ref->list_head = &patl->from_ref;
@@ -1298,7 +1298,7 @@
 	}
 
 	/* chain pattern in the expression */
-	LIST_ADDQ(&expr->patterns, &patl->list);
+	LIST_APPEND(&expr->patterns, &patl->list);
 	/* and from the reference */
 	patl->from_ref = pat->ref->list_head;
 	pat->ref->list_head = &patl->from_ref;
@@ -1506,7 +1506,7 @@
 		BUG_ON(pat->pat.ref != elt);
 
 		/* Delete and free entry. */
-		LIST_DEL(&pat->list);
+		LIST_DELETE(&pat->list);
 		if (pat->pat.sflags & PAT_SF_REGFREE)
 			regex_free(pat->pat.ptr.reg);
 		else
@@ -1597,10 +1597,10 @@
 	 * not relink them if this elt was the last one in the list.
 	 */
 	list_for_each_entry_safe(bref, back, &elt->back_refs, users) {
-		LIST_DEL(&bref->users);
+		LIST_DELETE(&bref->users);
 		LIST_INIT(&bref->users);
 		if (elt->list.n != &ref->head)
-			LIST_ADDQ(&LIST_ELEM(elt->list.n, typeof(elt), list)->back_refs, &bref->users);
+			LIST_APPEND(&LIST_ELEM(elt->list.n, typeof(elt), list)->back_refs, &bref->users);
 		bref->ref = elt->list.n;
 	}
 
@@ -1613,7 +1613,7 @@
 	list_for_each_entry(expr, &ref->pat, list)
 		HA_RWLOCK_WRUNLOCK(PATEXP_LOCK, &expr->lock);
 
-	LIST_DEL(&elt->list);
+	LIST_DELETE(&elt->list);
 	free(elt->sample);
 	free(elt->pattern);
 	free(elt);
@@ -1823,7 +1823,7 @@
 	LIST_INIT(&ref->head);
 	LIST_INIT(&ref->pat);
 	HA_SPIN_INIT(&ref->lock);
-	LIST_ADDQ(&pattern_reference, &ref->list);
+	LIST_APPEND(&pattern_reference, &ref->list);
 
 	return ref;
 }
@@ -1859,7 +1859,7 @@
 	LIST_INIT(&ref->head);
 	LIST_INIT(&ref->pat);
 	HA_SPIN_INIT(&ref->lock);
-	LIST_ADDQ(&pattern_reference, &ref->list);
+	LIST_APPEND(&pattern_reference, &ref->list);
 
 	return ref;
 }
@@ -1893,7 +1893,7 @@
 	LIST_INIT(&elt->back_refs);
 	elt->list_head = NULL;
 	elt->tree_head = NULL;
-	LIST_ADDQ(&ref->head, &elt->list);
+	LIST_APPEND(&ref->head, &elt->list);
 	return elt;
  fail:
 	if (elt)
@@ -2052,17 +2052,17 @@
 		 * not relink them if this elt was the last one in the list.
 		 */
 		list_for_each_entry_safe(bref, bref_bck, &elt->back_refs, users) {
-			LIST_DEL(&bref->users);
+			LIST_DELETE(&bref->users);
 			LIST_INIT(&bref->users);
 			if (elt->list.n != &ref->head)
-				LIST_ADDQ(&LIST_ELEM(elt->list.n, typeof(elt), list)->back_refs, &bref->users);
+				LIST_APPEND(&LIST_ELEM(elt->list.n, typeof(elt), list)->back_refs, &bref->users);
 			bref->ref = elt->list.n;
 		}
 
 		/* delete the storage for all representations of this pattern. */
 		pat_delete_gen(ref, elt);
 
-		LIST_DEL(&elt->list);
+		LIST_DELETE(&elt->list);
 		free(elt->pattern);
 		free(elt->sample);
 		free(elt);
@@ -2107,15 +2107,15 @@
 			bref->ref = NULL;
 		}
 		pat_delete_gen(ref, elt);
-		LIST_DEL(&elt->list);
+		LIST_DELETE(&elt->list);
 		free(elt->pattern);
 		free(elt->sample);
 		free(elt);
 	}
 
 	/* switch pat_ret_elt lists */
-	LIST_ADD(&replace->head, &ref->head);
-	LIST_DEL(&replace->head);
+	LIST_INSERT(&replace->head, &ref->head);
+	LIST_DELETE(&replace->head);
 
 	list_for_each_entry(expr, &ref->pat, list) {
 		list_for_each_entry(elt, &ref->head, list) {
@@ -2255,9 +2255,9 @@
 		/* This new pattern expression reference one of his heads. */
 		expr->pat_head = head;
 
-		/* Link with ref, or to self to facilitate LIST_DEL() */
+		/* Link with ref, or to self to facilitate LIST_DELETE() */
 		if (ref)
-			LIST_ADDQ(&ref->pat, &expr->list);
+			LIST_APPEND(&ref->pat, &expr->list);
 		else
 			LIST_INIT(&expr->list);
 
@@ -2281,7 +2281,7 @@
 	list->expr = expr;
 
 	/* Link the list element with the pattern_head. */
-	LIST_ADDQ(&head->head, &list->list);
+	LIST_APPEND(&head->head, &list->list);
 	return expr;
 }
 
@@ -2637,9 +2637,9 @@
 	struct pattern_expr_list *list, *safe;
 
 	list_for_each_entry_safe(list, safe, &head->head, list) {
-		LIST_DEL(&list->list);
+		LIST_DELETE(&list->list);
 		if (list->do_free) {
-			LIST_DEL(&list->expr->list);
+			LIST_DELETE(&list->expr->list);
 			HA_RWLOCK_WRLOCK(PATEXP_LOCK, &list->expr->lock);
 			head->prune(list->expr);
 			HA_RWLOCK_WRUNLOCK(PATEXP_LOCK, &list->expr->lock);
@@ -2754,11 +2754,11 @@
 
 	/* Convert back to linked list */
 	for (i = 0; i < len; i++)
-		LIST_ADDQ(&pr, &arr[i]->list);
+		LIST_APPEND(&pr, &arr[i]->list);
 
 	/* swap root */
-	LIST_ADD(&pr, &pattern_reference);
-	LIST_DEL(&pr);
+	LIST_INSERT(&pr, &pattern_reference);
+	LIST_DELETE(&pr);
 
 	free(arr);
 	return 0;
diff --git a/src/peers.c b/src/peers.c
index 2ebb107..b7ea415 100644
--- a/src/peers.c
+++ b/src/peers.c
@@ -2858,7 +2858,7 @@
 
 	/* Error unrolling */
  out_free_strm:
-	LIST_DEL(&s->list);
+	LIST_DELETE(&s->list);
 	pool_free(pool_head_stream, s);
  out_free_sess:
 	session_free(sess);
diff --git a/src/pool.c b/src/pool.c
index 7009502..2233750 100644
--- a/src/pool.c
+++ b/src/pool.c
@@ -104,7 +104,7 @@
 			strlcpy2(pool->name, name, sizeof(pool->name));
 		pool->size = size;
 		pool->flags = flags;
-		LIST_ADDQ(start, &pool->list);
+		LIST_APPEND(start, &pool->list);
 
 #ifdef CONFIG_HAP_POOLS
 		/* update per-thread pool cache if necessary */
@@ -202,8 +202,8 @@
 		ph->count--;
 		pool_cache_bytes -= pool->size;
 		pool_cache_count--;
-		LIST_DEL(&item->by_pool);
-		LIST_DEL(&item->by_lru);
+		LIST_DELETE(&item->by_pool);
+		LIST_DELETE(&item->by_lru);
 		pool_put_to_shared_cache(pool, item);
 	}
 }
@@ -224,8 +224,8 @@
 		 */
 		ph = LIST_NEXT(&item->by_pool, struct pool_cache_head *, list);
 		pool = container_of(ph - tid, struct pool_head, cache);
-		LIST_DEL(&item->by_pool);
-		LIST_DEL(&item->by_lru);
+		LIST_DELETE(&item->by_pool);
+		LIST_DELETE(&item->by_lru);
 		ph->count--;
 		pool_cache_count--;
 		pool_cache_bytes -= pool->size;
@@ -243,8 +243,8 @@
 	struct pool_cache_item *item = (struct pool_cache_item *)ptr;
 	struct pool_cache_head *ph = &pool->cache[tid];
 
-	LIST_ADD(&ph->list, &item->by_pool);
-	LIST_ADD(&ti->pool_lru_head, &item->by_lru);
+	LIST_INSERT(&ph->list, &item->by_pool);
+	LIST_INSERT(&ti->pool_lru_head, &item->by_lru);
 	ph->count++;
 	pool_cache_count++;
 	pool_cache_bytes += pool->size;
@@ -429,7 +429,7 @@
 			return pool;
 		pool->users--;
 		if (!pool->users) {
-			LIST_DEL(&pool->list);
+			LIST_DELETE(&pool->list);
 #ifndef CONFIG_HAP_LOCKLESS_POOLS
 			HA_SPIN_DESTROY(&pool->lock);
 #endif
diff --git a/src/protocol.c b/src/protocol.c
index cd574f2..767e03a 100644
--- a/src/protocol.c
+++ b/src/protocol.c
@@ -36,7 +36,7 @@
 void protocol_register(struct protocol *proto)
 {
 	HA_SPIN_LOCK(PROTO_LOCK, &proto_lock);
-	LIST_ADDQ(&protocols, &proto->list);
+	LIST_APPEND(&protocols, &proto->list);
 	if (proto->fam->sock_domain >= 0 && proto->fam->sock_domain < AF_CUST_MAX)
 		__protocol_by_family[proto->fam->sock_domain]
 			[proto->sock_type == SOCK_DGRAM]
@@ -50,7 +50,7 @@
 void protocol_unregister(struct protocol *proto)
 {
 	HA_SPIN_LOCK(PROTO_LOCK, &proto_lock);
-	LIST_DEL(&proto->list);
+	LIST_DELETE(&proto->list);
 	LIST_INIT(&proto->list);
 	HA_SPIN_UNLOCK(PROTO_LOCK, &proto_lock);
 }
diff --git a/src/proxy.c b/src/proxy.c
index 80eba92..c3859e6 100644
--- a/src/proxy.c
+++ b/src/proxy.c
@@ -121,7 +121,7 @@
 	struct sticking_rule *rule, *ruleb;
 
 	list_for_each_entry_safe(rule, ruleb, rules, list) {
-		LIST_DEL(&rule->list);
+		LIST_DELETE(&rule->list);
 		free_acl_cond(rule->cond);
 		release_sample_expr(rule->expr);
 		free(rule);
@@ -176,7 +176,7 @@
 	free(p->conf.lfsd_file);
 
 	list_for_each_entry_safe(cond, condb, &p->mon_fail_cond, list) {
-		LIST_DEL(&cond->list);
+		LIST_DELETE(&cond->list);
 		prune_acl_cond(cond);
 		free(cond);
 	}
@@ -185,16 +185,16 @@
 	EXTRA_COUNTERS_FREE(p->extra_counters_be);
 
 	list_for_each_entry_safe(acl, aclb, &p->acl, list) {
-		LIST_DEL(&acl->list);
+		LIST_DELETE(&acl->list);
 		prune_acl(acl);
 		free(acl);
 	}
 
 	list_for_each_entry_safe(srule, sruleb, &p->server_rules, list) {
-		LIST_DEL(&srule->list);
+		LIST_DELETE(&srule->list);
 		prune_acl_cond(srule->cond);
 		list_for_each_entry_safe(lf, lfb, &srule->expr, list) {
-			LIST_DEL(&lf->list);
+			LIST_DELETE(&lf->list);
 			release_sample_expr(lf->expr);
 			free(lf->arg);
 			free(lf);
@@ -205,7 +205,7 @@
 	}
 
 	list_for_each_entry_safe(rule, ruleb, &p->switching_rules, list) {
-		LIST_DEL(&rule->list);
+		LIST_DELETE(&rule->list);
 		if (rule->cond) {
 			prune_acl_cond(rule->cond);
 			free(rule->cond);
@@ -215,40 +215,40 @@
 	}
 
 	list_for_each_entry_safe(rdr, rdrb, &p->redirect_rules, list) {
-		LIST_DEL(&rdr->list);
+		LIST_DELETE(&rdr->list);
 		if (rdr->cond) {
 			prune_acl_cond(rdr->cond);
 			free(rdr->cond);
 		}
 		free(rdr->rdr_str);
 		list_for_each_entry_safe(lf, lfb, &rdr->rdr_fmt, list) {
-			LIST_DEL(&lf->list);
+			LIST_DELETE(&lf->list);
 			free(lf);
 		}
 		free(rdr);
 	}
 
 	list_for_each_entry_safe(log, logb, &p->logsrvs, list) {
-		LIST_DEL(&log->list);
+		LIST_DELETE(&log->list);
 		free(log);
 	}
 
 	list_for_each_entry_safe(lf, lfb, &p->logformat, list) {
-		LIST_DEL(&lf->list);
+		LIST_DELETE(&lf->list);
 		release_sample_expr(lf->expr);
 		free(lf->arg);
 		free(lf);
 	}
 
 	list_for_each_entry_safe(lf, lfb, &p->logformat_sd, list) {
-		LIST_DEL(&lf->list);
+		LIST_DELETE(&lf->list);
 		release_sample_expr(lf->expr);
 		free(lf->arg);
 		free(lf);
 	}
 
 	list_for_each_entry_safe(lf, lfb, &p->format_unique_id, list) {
-		LIST_DEL(&lf->list);
+		LIST_DELETE(&lf->list);
 		release_sample_expr(lf->expr);
 		free(lf->arg);
 		free(lf);
@@ -293,8 +293,8 @@
 	}/* end while(s) */
 
 	list_for_each_entry_safe(l, l_next, &p->conf.listeners, by_fe) {
-		LIST_DEL(&l->by_fe);
-		LIST_DEL(&l->by_bind);
+		LIST_DELETE(&l->by_fe);
+		LIST_DELETE(&l->by_bind);
 		free(l->name);
 		free(l->counters);
 
@@ -308,7 +308,7 @@
 			bind_conf->xprt->destroy_bind_conf(bind_conf);
 		free(bind_conf->file);
 		free(bind_conf->arg);
-		LIST_DEL(&bind_conf->by_fe);
+		LIST_DELETE(&bind_conf->by_fe);
 		free(bind_conf);
 	}
 
@@ -1684,7 +1684,7 @@
 		memcpy(node, tmplogsrv, sizeof(struct logsrv));
 		node->ref = tmplogsrv->ref;
 		LIST_INIT(&node->list);
-		LIST_ADDQ(&curproxy->logsrvs, &node->list);
+		LIST_APPEND(&curproxy->logsrvs, &node->list);
 	}
 
 	curproxy->conf.uniqueid_format_string = defproxy->conf.uniqueid_format_string;
diff --git a/src/quic_sock.c b/src/quic_sock.c
index 8ded828..82d6270 100644
--- a/src/quic_sock.c
+++ b/src/quic_sock.c
@@ -151,7 +151,7 @@
 		goto err;
 
 	qc = pkt->qc;
-	LIST_DEL(&pkt->rx_list);
+	LIST_DELETE(&pkt->rx_list);
 	if (!new_quic_cli_conn(qc, l, &pkt->saddr))
 		goto err;
 
diff --git a/src/resolvers.c b/src/resolvers.c
index 1ba5d66..88e8d76 100644
--- a/src/resolvers.c
+++ b/src/resolvers.c
@@ -210,7 +210,7 @@
 			 proxy_type_str(px), px->id, srv->id);
 		goto err;
 	}
-	LIST_ADDQ(&resolv_srvrq_list, &srvrq->list);
+	LIST_APPEND(&resolv_srvrq_list, &srvrq->list);
 	return srvrq;
 
   err:
@@ -378,8 +378,8 @@
 	}
 
 	/* Push the resolution at the end of the active list */
-	LIST_DEL(&resolution->list);
-	LIST_ADDQ(&resolvers->resolutions.curr, &resolution->list);
+	LIST_DELETE(&resolution->list);
+	LIST_APPEND(&resolvers->resolutions.curr, &resolution->list);
 	return 0;
 }
 
@@ -617,7 +617,7 @@
 			}
 
 		  rm_obselete_item:
-			LIST_DEL(&item->list);
+			LIST_DELETE(&item->list);
 			if (item->ar_item) {
 				pool_free(resolv_answer_item_pool, item->ar_item);
 				item->ar_item = NULL;
@@ -854,7 +854,7 @@
 		if (query_record_id > DNS_MAX_QUERY_RECORDS)
 			goto invalid_resp;
 		query = &resolution->response_query_records[query_record_id];
-		LIST_ADDQ(&r_res->query_list, &query->list);
+		LIST_APPEND(&r_res->query_list, &query->list);
 
 		/* Name is a NULL terminated string in our case, since we have
 		 * one query per response and the first one can't be compressed
@@ -1103,7 +1103,7 @@
 		else {
 			answer_record->last_seen = now_ms;
 			answer_record->ar_item = NULL;
-			LIST_ADDQ(&r_res->answer_list, &answer_record->list);
+			LIST_APPEND(&r_res->answer_list, &answer_record->list);
 			answer_record = NULL;
 		}
 	} /* for i 0 to ancount */
@@ -1496,8 +1496,8 @@
 	list_for_each_entry(record, &r_res->answer_list, list) {
 		/* Move the first record to the end of the list, for internal
 		 * round robin */
-		LIST_DEL(&record->list);
-		LIST_ADDQ(&r_res->answer_list, &record->list);
+		LIST_DELETE(&record->list);
+		LIST_APPEND(&r_res->answer_list, &record->list);
 		break;
 	}
 	return RSLV_UPD_SRVIP_NOT_FOUND;
@@ -1678,7 +1678,7 @@
 		++resolution_uuid;
 
 		/* Move the resolution to the resolvers wait queue */
-		LIST_ADDQ(&resolvers->resolutions.wait, &res->list);
+		LIST_APPEND(&resolvers->resolutions.wait, &res->list);
 	}
 	return res;
 }
@@ -1688,7 +1688,7 @@
 	struct resolv_answer_item *item, *itemback;
 
 	list_for_each_entry_safe(item, itemback, &resolution->response.answer_list, list) {
-		LIST_DEL(&item->list);
+		LIST_DELETE(&item->list);
 		pool_free(resolv_answer_item_pool, item->ar_item);
 		pool_free(resolv_answer_item_pool, item);
 	}
@@ -1705,11 +1705,11 @@
 	resolution->hostname_dn_len = 0;
 
 	list_for_each_entry_safe(req, reqback, &resolution->requesters, list) {
-		LIST_DEL(&req->list);
+		LIST_DELETE(&req->list);
 		req->resolution = NULL;
 	}
 	resolv_purge_resolution_answer_records(resolution);
-	LIST_DEL(&resolution->list);
+	LIST_DELETE(&resolution->list);
 	pool_free(resolv_resolution_pool, resolution);
 }
 
@@ -1814,7 +1814,7 @@
 
 	req->resolution         = res;
 
-	LIST_ADDQ(&res->requesters, &req->list);
+	LIST_APPEND(&res->requesters, &req->list);
 	return 0;
 
   err:
@@ -1838,7 +1838,7 @@
 	res = requester->resolution;
 
 	/* Clean up the requester */
-	LIST_DEL(&requester->list);
+	LIST_DELETE(&requester->list);
 	requester->resolution = NULL;
 
 	/* We need to find another requester linked on this resolution */
@@ -2036,8 +2036,8 @@
 		list_for_each_entry(req, &res->requesters, list)
 			req->requester_error_cb(req, dns_resp);
 		resolv_reset_resolution(res);
-		LIST_DEL(&res->list);
-		LIST_ADDQ(&resolvers->resolutions.wait, &res->list);
+		LIST_DELETE(&res->list);
+		LIST_APPEND(&resolvers->resolutions.wait, &res->list);
 		continue;
 
 	report_res_success:
@@ -2056,8 +2056,8 @@
 		}
 
 		resolv_reset_resolution(res);
-		LIST_DEL(&res->list);
-		LIST_ADDQ(&resolvers->resolutions.wait, &res->list);
+		LIST_DELETE(&res->list);
+		LIST_APPEND(&resolvers->resolutions.wait, &res->list);
 		continue;
 	}
 	resolv_update_resolvers_timeout(resolvers);
@@ -2106,8 +2106,8 @@
 			/* Clean up resolution info and remove it from the
 			 * current list */
 			resolv_reset_resolution(res);
-			LIST_DEL(&res->list);
-			LIST_ADDQ(&resolvers->resolutions.wait, &res->list);
+			LIST_DELETE(&res->list);
+			LIST_APPEND(&resolvers->resolutions.wait, &res->list);
 		}
 		else {
 			/* Otherwise resend the DNS query and requeue the resolution */
@@ -2144,8 +2144,8 @@
 
 		if (resolv_run_resolution(res) != 1) {
 			res->last_resolution = now_ms;
-			LIST_DEL(&res->list);
-			LIST_ADDQ(&resolvers->resolutions.wait, &res->list);
+			LIST_DELETE(&res->list);
+			LIST_APPEND(&resolvers->resolutions.wait, &res->list);
 		}
 	}
 
@@ -2185,14 +2185,14 @@
 					task_destroy(ns->stream->task_rsp);
 				free(ns->stream);
 			}
-			LIST_DEL(&ns->list);
+			LIST_DELETE(&ns->list);
 			EXTRA_COUNTERS_FREE(ns->extra_counters);
 			free(ns);
 		}
 
 		list_for_each_entry_safe(res, resback, &resolvers->resolutions.curr, list) {
 			list_for_each_entry_safe(req, reqback, &res->requesters, list) {
-				LIST_DEL(&req->list);
+				LIST_DELETE(&req->list);
 				pool_free(resolv_requester_pool, req);
 			}
 			resolv_free_resolution(res);
@@ -2200,7 +2200,7 @@
 
 		list_for_each_entry_safe(res, resback, &resolvers->resolutions.wait, list) {
 			list_for_each_entry_safe(req, reqback, &res->requesters, list) {
-				LIST_DEL(&req->list);
+				LIST_DELETE(&req->list);
 				pool_free(resolv_requester_pool, req);
 			}
 			resolv_free_resolution(res);
@@ -2209,14 +2209,14 @@
 		free(resolvers->id);
 		free((char *)resolvers->conf.file);
 		task_destroy(resolvers->t);
-		LIST_DEL(&resolvers->list);
+		LIST_DELETE(&resolvers->list);
 		free(resolvers);
 	}
 
 	list_for_each_entry_safe(srvrq, srvrqback, &resolv_srvrq_list, list) {
 		free(srvrq->name);
 		free(srvrq->hostname_dn);
-		LIST_DEL(&srvrq->list);
+		LIST_DELETE(&srvrq->list);
 		free(srvrq);
 	}
 }
@@ -2945,7 +2945,7 @@
                 curr_resolvers->px = p;
 
 		/* default values */
-		LIST_ADDQ(&sec_resolvers, &curr_resolvers->list);
+		LIST_APPEND(&sec_resolvers, &curr_resolvers->list);
 		curr_resolvers->conf.file = strdup(file);
 		curr_resolvers->conf.line = linenum;
 		curr_resolvers->id = strdup(args[1]);
@@ -3048,7 +3048,7 @@
 		newnameserver->process_responses = resolv_process_responses;
 		newnameserver->conf.line = linenum;
 		/* the nameservers are linked backward first */
-		LIST_ADDQ(&curr_resolvers->nameservers, &newnameserver->list);
+		LIST_APPEND(&curr_resolvers->nameservers, &newnameserver->list);
 	}
 	else if (strcmp(args[0], "parse-resolv-conf") == 0) {
 		struct dns_nameserver *newnameserver = NULL;
@@ -3163,7 +3163,7 @@
 			newnameserver->parent = curr_resolvers;
 			newnameserver->process_responses = resolv_process_responses;
 			newnameserver->conf.line = resolv_linenum;
-			LIST_ADDQ(&curr_resolvers->nameservers, &newnameserver->list);
+			LIST_APPEND(&curr_resolvers->nameservers, &newnameserver->list);
 		}
 
 resolv_out:
diff --git a/src/ring.c b/src/ring.c
index e7664d0..4f1bca2 100644
--- a/src/ring.c
+++ b/src/ring.c
@@ -363,7 +363,7 @@
 		if (!si_oc(si)->output && !(si_oc(si)->flags & CF_SHUTW)) {
 			/* let's be woken up once new data arrive */
 			HA_RWLOCK_WRLOCK(LOGSRV_LOCK, &ring->lock);
-			LIST_ADDQ(&ring->waiters, &appctx->wait_entry);
+			LIST_APPEND(&ring->waiters, &appctx->wait_entry);
 			HA_RWLOCK_WRUNLOCK(LOGSRV_LOCK, &ring->lock);
 			si_rx_endp_done(si);
 			ret = 0;
diff --git a/src/sample.c b/src/sample.c
index ed60631..b48cf71 100644
--- a/src/sample.c
+++ b/src/sample.c
@@ -398,7 +398,7 @@
 			if (sf->use & (1 << bit))
 				sf->val |= fetch_cap[bit];
 	}
-	LIST_ADDQ(&sample_fetches.list, &kwl->list);
+	LIST_APPEND(&sample_fetches.list, &kwl->list);
 }
 
 /*
@@ -407,7 +407,7 @@
  */
 void sample_register_convs(struct sample_conv_kw_list *pckl)
 {
-	LIST_ADDQ(&sample_convs.list, &pckl->list);
+	LIST_APPEND(&sample_convs.list, &pckl->list);
 }
 
 /*
@@ -1018,7 +1018,7 @@
 		if (!conv_expr)
 			goto out_error;
 
-		LIST_ADDQ(&(expr->conv_exprs), &(conv_expr->list));
+		LIST_APPEND(&(expr->conv_exprs), &(conv_expr->list));
 		conv_expr->conv = conv;
 
 		al->kw = expr->fetch->kw;
@@ -1372,7 +1372,7 @@
 
 		}
 
-		LIST_DEL(&cur->list);
+		LIST_DELETE(&cur->list);
 		free(cur);
 	} /* end of args processing */
 
@@ -1455,7 +1455,7 @@
 		return;
 
 	list_for_each_entry_safe(conv_expr, conv_exprb, &expr->conv_exprs, list) {
-		LIST_DEL(&conv_expr->list);
+		LIST_DELETE(&conv_expr->list);
 		release_sample_arg(conv_expr->arg_p);
 		free(conv_expr);
 	}
diff --git a/src/server.c b/src/server.c
index fb7b750..d8fb65a 100644
--- a/src/server.c
+++ b/src/server.c
@@ -233,7 +233,7 @@
  */
 void srv_register_keywords(struct srv_kw_list *kwl)
 {
-	LIST_ADDQ(&srv_keywords.list, &kwl->list);
+	LIST_APPEND(&srv_keywords.list, &kwl->list);
 }
 
 /* Return a pointer to the server keyword <kw>, or NULL if not found. If the
@@ -2151,7 +2151,7 @@
 	srv->obj_type = OBJ_TYPE_SERVER;
 	srv->proxy = proxy;
 	srv->pendconns = EB_ROOT;
-	LIST_ADDQ(&servers_list, &srv->global_list);
+	LIST_APPEND(&servers_list, &srv->global_list);
 
 	srv->next_state = SRV_ST_RUNNING; /* early server setup */
 	srv->last_change = now.tv_sec;
@@ -2204,7 +2204,7 @@
 	}
 	HA_SPIN_DESTROY(&srv->lock);
 
-	LIST_DEL(&srv->global_list);
+	LIST_DELETE(&srv->global_list);
 
 	EXTRA_COUNTERS_FREE(srv->extra_counters);
 
@@ -2313,7 +2313,7 @@
 #endif
 		free_check(&newsrv->agent);
 		free_check(&newsrv->check);
-		LIST_DEL(&newsrv->global_list);
+		LIST_DELETE(&newsrv->global_list);
 	}
 	free(newsrv);
 	return i - srv->tmpl_info.nb_low;
@@ -5045,7 +5045,7 @@
 
 		hash_node = ebmb_entry(node, struct conn_hash_node, node);
 		eb_delete(node);
-		MT_LIST_ADDQ(toremove_list, &hash_node->conn->toremove_list);
+		MT_LIST_APPEND(toremove_list, &hash_node->conn->toremove_list);
 		i++;
 
 		node = next;
diff --git a/src/shctx.c b/src/shctx.c
index f4002a4..1160a1b 100644
--- a/src/shctx.c
+++ b/src/shctx.c
@@ -371,7 +371,7 @@
 		cur_block->len = 0;
 		cur_block->refcount = 0;
 		cur_block->block_count = 1;
-		LIST_ADDQ(&shctx->avail, &cur_block->list);
+		LIST_APPEND(&shctx->avail, &cur_block->list);
 		shctx->nbav++;
 		cur += sizeof(struct shared_block) + blocksize;
 	}
diff --git a/src/signal.c b/src/signal.c
index 946157e..5ec7142 100644
--- a/src/signal.c
+++ b/src/signal.c
@@ -154,7 +154,7 @@
 		if (sig != SIGPROF)
 			signal(sig, SIG_DFL);
 		list_for_each_entry_safe(sh, shb, &signal_state[sig].handlers, list) {
-			LIST_DEL(&sh->list);
+			LIST_DELETE(&sh->list);
 			pool_free(pool_head_sig_handlers, sh);
 		}
 	}
@@ -188,7 +188,7 @@
 	sh->handler = fct;
 	sh->arg = arg;
 	sh->flags = SIG_F_TYPE_FCT;
-	LIST_ADDQ(&signal_state[sig].handlers, &sh->list);
+	LIST_APPEND(&signal_state[sig].handlers, &sh->list);
 	return sh;
 }
 
@@ -220,7 +220,7 @@
 	sh->handler = task;
 	sh->arg = reason & ~TASK_WOKEN_ANY;
 	sh->flags = SIG_F_TYPE_TASK;
-	LIST_ADDQ(&signal_state[sig].handlers, &sh->list);
+	LIST_APPEND(&signal_state[sig].handlers, &sh->list);
 	return sh;
 }
 
@@ -229,7 +229,7 @@
  */
 void signal_unregister_handler(struct sig_handler *handler)
 {
-	LIST_DEL(&handler->list);
+	LIST_DELETE(&handler->list);
 	pool_free(pool_head_sig_handlers, handler);
 }
 
@@ -251,7 +251,7 @@
 
 	list_for_each_entry_safe(sh, shb, &signal_state[sig].handlers, list) {
 		if (sh->handler == target) {
-			LIST_DEL(&sh->list);
+			LIST_DELETE(&sh->list);
 			pool_free(pool_head_sig_handlers, sh);
 			break;
 		}
@@ -271,7 +271,7 @@
 		return;
 
 	list_for_each_entry_safe(sh, shb, &signal_state[sig].handlers, list) {
-		LIST_DEL(&sh->list);
+		LIST_DELETE(&sh->list);
 		pool_free(pool_head_sig_handlers, sh);
 	}
 
diff --git a/src/sink.c b/src/sink.c
index 1c6536a..63d3778 100644
--- a/src/sink.c
+++ b/src/sink.c
@@ -77,7 +77,7 @@
 	sink->ctx.fd = -1;
 	sink->ctx.dropped = 0;
 	HA_RWLOCK_INIT(&sink->ctx.lock);
-	LIST_ADDQ(&sink_list, &sink->sink_list);
+	LIST_APPEND(&sink_list, &sink->sink_list);
  end:
 	return sink;
 
@@ -139,7 +139,7 @@
 
 	sink->ctx.ring = ring_new(size);
 	if (!sink->ctx.ring) {
-		LIST_DEL(&sink->sink_list);
+		LIST_DELETE(&sink->sink_list);
 		free(sink->name);
 		free(sink->desc);
 		free(sink);
@@ -410,7 +410,7 @@
 	if (ret) {
 		/* let's be woken up once new data arrive */
 		HA_RWLOCK_WRLOCK(LOGSRV_LOCK, &ring->lock);
-		LIST_ADDQ(&ring->waiters, &appctx->wait_entry);
+		LIST_APPEND(&ring->waiters, &appctx->wait_entry);
 		HA_RWLOCK_WRUNLOCK(LOGSRV_LOCK, &ring->lock);
 		si_rx_endp_done(si);
 	}
@@ -554,7 +554,7 @@
 	if (ret) {
 		/* let's be woken up once new data arrive */
 		HA_RWLOCK_WRLOCK(LOGSRV_LOCK, &ring->lock);
-		LIST_ADDQ(&ring->waiters, &appctx->wait_entry);
+		LIST_APPEND(&ring->waiters, &appctx->wait_entry);
 		HA_RWLOCK_WRUNLOCK(LOGSRV_LOCK, &ring->lock);
 		si_rx_endp_done(si);
 	}
@@ -680,7 +680,7 @@
 
 	/* Error unrolling */
  out_free_strm:
-	LIST_DEL(&s->list);
+	LIST_DELETE(&s->list);
 	pool_free(pool_head_stream, s);
  out_free_sess:
 	session_free(sess);
@@ -1061,7 +1061,7 @@
 		if (sink->ctx.ring)
 			ring_free(sink->ctx.ring);
 
-		LIST_DEL(&sink->sink_list);
+		LIST_DELETE(&sink->sink_list);
 		free(sink->name);
 		free(sink->desc);
 		free(sink);
@@ -1256,7 +1256,7 @@
 	list_for_each_entry_safe(sink, sb, &sink_list, sink_list) {
 		if (sink->type == SINK_TYPE_BUFFER)
 			ring_free(sink->ctx.ring);
-		LIST_DEL(&sink->sink_list);
+		LIST_DELETE(&sink->sink_list);
 		free(sink->name);
 		free(sink->desc);
 		free(sink);
diff --git a/src/ssl_ckch.c b/src/ssl_ckch.c
index 7c3da05..7504c55 100644
--- a/src/ssl_ckch.c
+++ b/src/ssl_ckch.c
@@ -894,14 +894,14 @@
 
 	list_for_each_entry_safe(sni, sni_s, &inst->sni_ctx, by_ckch_inst) {
 		SSL_CTX_free(sni->ctx);
-		LIST_DEL(&sni->by_ckch_inst);
+		LIST_DELETE(&sni->by_ckch_inst);
 		ebmb_delete(&sni->name);
 		free(sni);
 	}
 	SSL_CTX_free(inst->ctx);
 	inst->ctx = NULL;
-	LIST_DEL(&inst->by_ckchs);
-	LIST_DEL(&inst->by_crtlist_entry);
+	LIST_DELETE(&inst->by_ckchs);
+	LIST_DELETE(&inst->by_crtlist_entry);
 	free(inst);
 }
 
@@ -1359,7 +1359,7 @@
 					/* display one dot per new instance */
 					chunk_appendf(trash, ".");
 					/* link the new ckch_inst to the duplicate */
-					LIST_ADDQ(&new_ckchs->ckch_inst, &new_inst->by_ckchs);
+					LIST_APPEND(&new_ckchs->ckch_inst, &new_inst->by_ckchs);
 					y++;
 				}
 				appctx->st2 = SETCERT_ST_INSERT;
@@ -1385,7 +1385,7 @@
 				/* insert the new ckch_insts in the crtlist_entry */
 				list_for_each_entry(ckchi, &new_ckchs->ckch_inst, by_ckchs) {
 					if (ckchi->crtlist_entry)
-						LIST_ADD(&ckchi->crtlist_entry->ckch_inst, &ckchi->by_crtlist_entry);
+						LIST_INSERT(&ckchi->crtlist_entry->ckch_inst, &ckchi->by_crtlist_entry);
 				}
 
 				/* First, we insert every new SNIs in the trees, also replace the default_ctx */
diff --git a/src/ssl_crtlist.c b/src/ssl_crtlist.c
index e7a8b53..f8f5360 100644
--- a/src/ssl_crtlist.c
+++ b/src/ssl_crtlist.c
@@ -177,8 +177,8 @@
 		return;
 
 	ebpt_delete(&entry->node);
-	LIST_DEL(&entry->by_crtlist);
-	LIST_DEL(&entry->by_ckch_store);
+	LIST_DELETE(&entry->by_crtlist);
+	LIST_DELETE(&entry->by_ckch_store);
 	crtlist_free_filters(entry->filters);
 	ssl_sock_free_ssl_conf(entry->ssl_conf);
 	free(entry->ssl_conf);
@@ -240,7 +240,7 @@
 
 	LIST_INIT(&entry->ckch_inst);
 
-	/* initialize the nodes so we can LIST_DEL in any cases */
+	/* initialize the nodes so we can LIST_DELETE in any cases */
 	LIST_INIT(&entry->by_crtlist);
 	LIST_INIT(&entry->by_ckch_store);
 
@@ -540,8 +540,8 @@
 				entry->node.key = ckchs;
 				entry->crtlist = newlist;
 				ebpt_insert(&newlist->entries, &entry->node);
-				LIST_ADDQ(&newlist->ord_entries, &entry->by_crtlist);
-				LIST_ADDQ(&ckchs->crtlist_entry, &entry->by_ckch_store);
+				LIST_APPEND(&newlist->ord_entries, &entry->by_crtlist);
+				LIST_APPEND(&ckchs->crtlist_entry, &entry->by_ckch_store);
 
 			} else if (global_ssl.extra_files & SSL_GF_BUNDLE) {
 				/* If we didn't find the file, this could be a
@@ -588,8 +588,8 @@
 					entry_dup->node.key = ckchs;
 					entry_dup->crtlist = newlist;
 					ebpt_insert(&newlist->entries, &entry_dup->node);
-					LIST_ADDQ(&newlist->ord_entries, &entry_dup->by_crtlist);
-					LIST_ADDQ(&ckchs->crtlist_entry, &entry_dup->by_ckch_store);
+					LIST_APPEND(&newlist->ord_entries, &entry_dup->by_crtlist);
+					LIST_APPEND(&ckchs->crtlist_entry, &entry_dup->by_ckch_store);
 
 					entry_dup = NULL; /* the entry was used, we need a new one next round */
 				}
@@ -611,8 +611,8 @@
 			entry->node.key = ckchs;
 			entry->crtlist = newlist;
 			ebpt_insert(&newlist->entries, &entry->node);
-			LIST_ADDQ(&newlist->ord_entries, &entry->by_crtlist);
-			LIST_ADDQ(&ckchs->crtlist_entry, &entry->by_ckch_store);
+			LIST_APPEND(&newlist->ord_entries, &entry->by_crtlist);
+			LIST_APPEND(&ckchs->crtlist_entry, &entry->by_ckch_store);
 			found++;
 		}
 		entry = NULL;
@@ -706,8 +706,8 @@
 			}
 			entry->node.key = ckchs;
 			entry->crtlist = dir;
-			LIST_ADDQ(&ckchs->crtlist_entry, &entry->by_ckch_store);
-			LIST_ADDQ(&dir->ord_entries, &entry->by_crtlist);
+			LIST_APPEND(&ckchs->crtlist_entry, &entry->by_ckch_store);
+			LIST_APPEND(&dir->ord_entries, &entry->by_crtlist);
 			ebpt_insert(&dir->entries, &entry->node);
 
 ignore_entry:
@@ -1016,8 +1016,8 @@
 		struct ckch_inst *inst, *inst_s;
 		/* upon error free the ckch_inst and everything inside */
 		ebpt_delete(&entry->node);
-		LIST_DEL(&entry->by_crtlist);
-		LIST_DEL(&entry->by_ckch_store);
+		LIST_DELETE(&entry->by_crtlist);
+		LIST_DELETE(&entry->by_ckch_store);
 
 		list_for_each_entry_safe(inst, inst_s, &entry->ckch_inst, by_ckchs) {
 			ckch_inst_free(inst);
@@ -1102,8 +1102,8 @@
 					/* display one dot for each new instance */
 					chunk_appendf(trash, ".");
 					i++;
-					LIST_ADDQ(&store->ckch_inst, &new_inst->by_ckchs);
-					LIST_ADDQ(&entry->ckch_inst, &new_inst->by_crtlist_entry);
+					LIST_APPEND(&store->ckch_inst, &new_inst->by_ckchs);
+					LIST_APPEND(&entry->ckch_inst, &new_inst->by_crtlist_entry);
 					new_inst->crtlist_entry = entry;
 				}
 				appctx->st2 = SETCERT_ST_INSERT;
@@ -1272,9 +1272,9 @@
 		goto error;
 	}
 
-	LIST_ADDQ(&crtlist->ord_entries, &entry->by_crtlist);
+	LIST_APPEND(&crtlist->ord_entries, &entry->by_crtlist);
 	entry->crtlist = crtlist;
-	LIST_ADDQ(&store->crtlist_entry, &entry->by_ckch_store);
+	LIST_APPEND(&store->crtlist_entry, &entry->by_ckch_store);
 
 	appctx->st2 = SETCERT_ST_INIT;
 	appctx->ctx.cli.p0 = crtlist;
@@ -1402,8 +1402,8 @@
 	/* upon error free the ckch_inst and everything inside */
 
 	ebpt_delete(&entry->node);
-	LIST_DEL(&entry->by_crtlist);
-	LIST_DEL(&entry->by_ckch_store);
+	LIST_DELETE(&entry->by_crtlist);
+	LIST_DELETE(&entry->by_ckch_store);
 
 	list_for_each_entry_safe(inst, inst_s, &entry->ckch_inst, by_crtlist_entry) {
 		struct sni_ctx *sni, *sni_s;
@@ -1411,12 +1411,12 @@
 		HA_RWLOCK_WRLOCK(SNI_LOCK, &inst->bind_conf->sni_lock);
 		list_for_each_entry_safe(sni, sni_s, &inst->sni_ctx, by_ckch_inst) {
 			ebmb_delete(&sni->name);
-			LIST_DEL(&sni->by_ckch_inst);
+			LIST_DELETE(&sni->by_ckch_inst);
 			SSL_CTX_free(sni->ctx);
 			free(sni);
 		}
 		HA_RWLOCK_WRUNLOCK(SNI_LOCK, &inst->bind_conf->sni_lock);
-		LIST_DEL(&inst->by_ckchs);
+		LIST_DELETE(&inst->by_ckchs);
 		free(inst);
 	}
 
diff --git a/src/ssl_sock.c b/src/ssl_sock.c
index d3e5931..fbf23d5 100644
--- a/src/ssl_sock.c
+++ b/src/ssl_sock.c
@@ -590,7 +590,7 @@
 
 	cbk->func = func;
 
-	LIST_ADDQ(&ssl_sock_msg_callbacks, &cbk->list);
+	LIST_APPEND(&ssl_sock_msg_callbacks, &cbk->list);
 
 	return 1;
 }
@@ -625,7 +625,7 @@
 	struct ssl_sock_msg_callback *cbk, *cbkback;
 
 	list_for_each_entry_safe(cbk, cbkback, &ssl_sock_msg_callbacks, list) {
-		LIST_DEL(&cbk->list);
+		LIST_DELETE(&cbk->list);
 		free(cbk);
 	}
 }
@@ -686,7 +686,7 @@
 
 	el = calloc(1, sizeof(*el));
 	el->e = engine;
-	LIST_ADD(&openssl_engines, &el->list);
+	LIST_INSERT(&openssl_engines, &el->list);
 	nb_engines++;
 	if (global_ssl.async)
 		global.ssl_used_async_engines = nb_engines;
@@ -1233,20 +1233,20 @@
 
 	/* This sort the reference list by id. */
 	list_for_each_entry_safe(ref, ref2, &tlskeys_reference, list) {
-		LIST_DEL(&ref->list);
+		LIST_DELETE(&ref->list);
 		list_for_each_entry(ref3, &tkr, list) {
 			if (ref->unique_id < ref3->unique_id) {
-				LIST_ADDQ(&ref3->list, &ref->list);
+				LIST_APPEND(&ref3->list, &ref->list);
 				break;
 			}
 		}
 		if (&ref3->list == &tkr)
-			LIST_ADDQ(&tkr, &ref->list);
+			LIST_APPEND(&tkr, &ref->list);
 	}
 
 	/* swap root */
-	LIST_ADD(&tkr, &tlskeys_reference);
-	LIST_DEL(&tkr);
+	LIST_INSERT(&tkr, &tlskeys_reference);
+	LIST_DELETE(&tkr);
 	return ERR_NONE;
 }
 #endif /* SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB */
@@ -2926,7 +2926,7 @@
 		sc->wild = wild;
 		sc->name.node.leaf_p = NULL;
 		sc->ckch_inst = ckch_inst;
-		LIST_ADDQ(&ckch_inst->sni_ctx, &sc->by_ckch_inst);
+		LIST_APPEND(&ckch_inst->sni_ctx, &sc->by_ckch_inst);
 	}
 	return order;
 }
@@ -2960,7 +2960,7 @@
 			if (sc1->ctx == sc0->ctx && sc1->conf == sc0->conf
 			    && sc1->neg == sc0->neg && sc1->wild == sc0->wild) {
 				/* it's a duplicate, we should remove and free it */
-				LIST_DEL(&sc0->by_ckch_inst);
+				LIST_DELETE(&sc0->by_ckch_inst);
 				SSL_CTX_free(sc0->ctx);
 				ha_free(&sc0);
 				break;
@@ -3526,7 +3526,7 @@
 	ssl_sock_load_cert_sni(*ckch_inst, bind_conf);
 
 	/* succeed, add the instance to the ckch_store's list of instance */
-	LIST_ADDQ(&ckchs->ckch_inst, &((*ckch_inst)->by_ckchs));
+	LIST_APPEND(&ckchs->ckch_inst, &((*ckch_inst)->by_ckchs));
 	return errcode;
 }
 
@@ -3550,7 +3550,7 @@
 	SSL_CTX_up_ref((*ckch_inst)->ctx);
 	server->ssl_ctx.ctx = (*ckch_inst)->ctx;
 	/* succeed, add the instance to the ckch_store's list of instance */
-	LIST_ADDQ(&ckchs->ckch_inst, &((*ckch_inst)->by_ckchs));
+	LIST_APPEND(&ckchs->ckch_inst, &((*ckch_inst)->by_ckchs));
 	return errcode;
 }
 
@@ -3634,7 +3634,7 @@
 			memprintf(err, "error processing line %d in file '%s' : %s", entry->linenum, file, *err);
 			goto error;
 		}
-		LIST_ADDQ(&entry->ckch_inst, &ckch_inst->by_crtlist_entry);
+		LIST_APPEND(&entry->ckch_inst, &ckch_inst->by_crtlist_entry);
 		ckch_inst->crtlist_entry = entry;
 	}
 
@@ -5037,7 +5037,7 @@
 		back = ebmb_next(node);
 		ebmb_delete(node);
 		SSL_CTX_free(sni->ctx);
-		LIST_DEL(&sni->by_ckch_inst);
+		LIST_DELETE(&sni->by_ckch_inst);
 		free(sni);
 		node = back;
 	}
@@ -5048,7 +5048,7 @@
 		back = ebmb_next(node);
 		ebmb_delete(node);
 		SSL_CTX_free(sni->ctx);
-		LIST_DEL(&sni->by_ckch_inst);
+		LIST_DELETE(&sni->by_ckch_inst);
 		free(sni);
 		node = back;
 	}
@@ -5079,7 +5079,7 @@
 	if (bind_conf->keys_ref && !--bind_conf->keys_ref->refcount) {
 		free(bind_conf->keys_ref->filename);
 		free(bind_conf->keys_ref->tlskeys);
-		LIST_DEL(&bind_conf->keys_ref->list);
+		LIST_DELETE(&bind_conf->keys_ref->list);
 		free(bind_conf->keys_ref);
 	}
 	bind_conf->keys_ref = NULL;
@@ -7217,7 +7217,7 @@
 	list_for_each_entry_safe(wl, wlb, &openssl_engines, list) {
 		ENGINE_finish(wl->e);
 		ENGINE_free(wl->e);
-		LIST_DEL(&wl->list);
+		LIST_DELETE(&wl->list);
 		free(wl);
 	}
 }
diff --git a/src/stats.c b/src/stats.c
index bfd05bb..a2741da 100644
--- a/src/stats.c
+++ b/src/stats.c
@@ -4935,7 +4935,7 @@
 {
 	const uint8_t domain = stats_get_domain(m->domain_flags);
 
-	LIST_ADDQ(&stats_module_list[domain], &m->list);
+	LIST_APPEND(&stats_module_list[domain], &m->list);
 	stat_count[domain] += m->stats_count;
 }
 
diff --git a/src/stream.c b/src/stream.c
index 6c60cd4..99552c4 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -548,7 +548,7 @@
 
 	s->tunnel_timeout = TICK_ETERNITY;
 
-	LIST_ADDQ(&ti->streams, &s->list);
+	LIST_APPEND(&ti->streams, &s->list);
 
 	if (flt_stream_init(s) < 0 || flt_stream_start(s) < 0)
 		goto out_fail_accept;
@@ -586,7 +586,7 @@
 	flt_stream_release(s, 0);
 	task_destroy(t);
 	tasklet_free(s->si[1].wait_event.tasklet);
-	LIST_DEL(&s->list);
+	LIST_DELETE(&s->list);
 out_fail_alloc_si1:
 	tasklet_free(s->si[0].wait_event.tasklet);
  out_fail_alloc:
@@ -641,7 +641,7 @@
 		put_pipe(s->res.pipe);
 
 	/* We may still be present in the buffer wait queue */
-	if (LIST_ADDED(&s->buffer_wait.list))
+	if (LIST_INLIST(&s->buffer_wait.list))
 		LIST_DEL_INIT(&s->buffer_wait.list);
 
 	if (s->req.buf.size || s->res.buf.size) {
@@ -721,11 +721,11 @@
 		 */
 		LIST_DEL_INIT(&bref->users);
 		if (s->list.n != &ti->streams)
-			LIST_ADDQ(&LIST_ELEM(s->list.n, struct stream *, list)->back_refs, &bref->users);
+			LIST_APPEND(&LIST_ELEM(s->list.n, struct stream *, list)->back_refs, &bref->users);
 		bref->ref = s->list.n;
 		__ha_barrier_store();
 	}
-	LIST_DEL(&s->list);
+	LIST_DELETE(&s->list);
 
 	/* applets do not release session yet */
 	must_free_sess = objt_appctx(sess->origin) && sess->origin == s->si[0].end;
@@ -772,13 +772,13 @@
  */
 static int stream_alloc_work_buffer(struct stream *s)
 {
-	if (LIST_ADDED(&s->buffer_wait.list))
+	if (LIST_INLIST(&s->buffer_wait.list))
 		LIST_DEL_INIT(&s->buffer_wait.list);
 
 	if (b_alloc(&s->res.buf))
 		return 1;
 
-	LIST_ADDQ(&ti->buffer_wq, &s->buffer_wait.list);
+	LIST_APPEND(&ti->buffer_wq, &s->buffer_wait.list);
 	return 0;
 }
 
@@ -2988,7 +2988,7 @@
 
 void service_keywords_register(struct action_kw_list *kw_list)
 {
-	LIST_ADDQ(&service_keywords, &kw_list->list);
+	LIST_APPEND(&service_keywords, &kw_list->list);
 }
 
 struct action_kw *service_find(const char *kw)
@@ -3074,7 +3074,7 @@
 		chunk_appendf(&trash,
 			     "  flags=0x%x, conn_retries=%d, srv_conn=%p, pend_pos=%p waiting=%d epoch=%#x\n",
 			     strm->flags, strm->si[1].conn_retries, strm->srv_conn, strm->pend_pos,
-			     LIST_ADDED(&strm->buffer_wait.list), strm->stream_epoch);
+			     LIST_INLIST(&strm->buffer_wait.list), strm->stream_epoch);
 
 		chunk_appendf(&trash,
 			     "  frontend=%s (id=%u mode=%s), listener=%s (id=%u)",
@@ -3398,7 +3398,7 @@
 		 */
 		if (appctx->st2 == STAT_ST_LIST) {
 			if (!LIST_ISEMPTY(&appctx->ctx.sess.bref.users)) {
-				LIST_DEL(&appctx->ctx.sess.bref.users);
+				LIST_DELETE(&appctx->ctx.sess.bref.users);
 				LIST_INIT(&appctx->ctx.sess.bref.users);
 			}
 		}
@@ -3424,7 +3424,7 @@
 	case STAT_ST_LIST:
 		/* first, let's detach the back-ref from a possible previous stream */
 		if (!LIST_ISEMPTY(&appctx->ctx.sess.bref.users)) {
-			LIST_DEL(&appctx->ctx.sess.bref.users);
+			LIST_DELETE(&appctx->ctx.sess.bref.users);
 			LIST_INIT(&appctx->ctx.sess.bref.users);
 		}
 
@@ -3455,13 +3455,13 @@
 				if (appctx->ctx.sess.target != (void *)-1 && appctx->ctx.sess.target != curr_strm)
 					goto next_sess;
 
-				LIST_ADDQ(&curr_strm->back_refs, &appctx->ctx.sess.bref.users);
+				LIST_APPEND(&curr_strm->back_refs, &appctx->ctx.sess.bref.users);
 				/* call the proper dump() function and return if we're missing space */
 				if (!stats_dump_full_strm_to_buffer(si, curr_strm))
 					goto full;
 
 				/* stream dump complete */
-				LIST_DEL(&appctx->ctx.sess.bref.users);
+				LIST_DELETE(&appctx->ctx.sess.bref.users);
 				LIST_INIT(&appctx->ctx.sess.bref.users);
 				if (appctx->ctx.sess.target != (void *)-1) {
 					appctx->ctx.sess.target = NULL;
@@ -3583,7 +3583,7 @@
 				/* let's try again later from this stream. We add ourselves into
 				 * this stream's users so that it can remove us upon termination.
 				 */
-				LIST_ADDQ(&curr_strm->back_refs, &appctx->ctx.sess.bref.users);
+				LIST_APPEND(&curr_strm->back_refs, &appctx->ctx.sess.bref.users);
 				goto full;
 			}
 
@@ -3630,7 +3630,7 @@
 		 */
 		thread_isolate();
 		if (!LIST_ISEMPTY(&appctx->ctx.sess.bref.users))
-			LIST_DEL(&appctx->ctx.sess.bref.users);
+			LIST_DELETE(&appctx->ctx.sess.bref.users);
 		thread_release();
 	}
 }
diff --git a/src/task.c b/src/task.c
index ca678d3..6763327 100644
--- a/src/task.c
+++ b/src/task.c
@@ -92,7 +92,7 @@
 			thr = my_ffsl(t->thread_mask) - 1;
 
 			/* Beware: tasks that have never run don't have their ->list empty yet! */
-			MT_LIST_ADDQ(&task_per_thread[thr].shared_tasklet_list,
+			MT_LIST_APPEND(&task_per_thread[thr].shared_tasklet_list,
 			             (struct mt_list *)&((struct tasklet *)t)->list);
 			_HA_ATOMIC_INC(&task_per_thread[thr].rq_total);
 			_HA_ATOMIC_INC(&task_per_thread[thr].tasks_in_list);
@@ -115,30 +115,30 @@
 	if (likely(thr < 0)) {
 		/* this tasklet runs on the caller thread */
 		if (tl->state & TASK_HEAVY) {
-			LIST_ADDQ(&sched->tasklets[TL_HEAVY], &tl->list);
+			LIST_APPEND(&sched->tasklets[TL_HEAVY], &tl->list);
 			sched->tl_class_mask |= 1 << TL_HEAVY;
 		}
 		else if (tl->state & TASK_SELF_WAKING) {
-			LIST_ADDQ(&sched->tasklets[TL_BULK], &tl->list);
+			LIST_APPEND(&sched->tasklets[TL_BULK], &tl->list);
 			sched->tl_class_mask |= 1 << TL_BULK;
 		}
 		else if ((struct task *)tl == sched->current) {
 			_HA_ATOMIC_OR(&tl->state, TASK_SELF_WAKING);
-			LIST_ADDQ(&sched->tasklets[TL_BULK], &tl->list);
+			LIST_APPEND(&sched->tasklets[TL_BULK], &tl->list);
 			sched->tl_class_mask |= 1 << TL_BULK;
 		}
 		else if (sched->current_queue < 0) {
-			LIST_ADDQ(&sched->tasklets[TL_URGENT], &tl->list);
+			LIST_APPEND(&sched->tasklets[TL_URGENT], &tl->list);
 			sched->tl_class_mask |= 1 << TL_URGENT;
 		}
 		else {
-			LIST_ADDQ(&sched->tasklets[sched->current_queue], &tl->list);
+			LIST_APPEND(&sched->tasklets[sched->current_queue], &tl->list);
 			sched->tl_class_mask |= 1 << sched->current_queue;
 		}
 		_HA_ATOMIC_INC(&sched->rq_total);
 	} else {
 		/* this tasklet runs on a specific thread. */
-		MT_LIST_ADDQ(&task_per_thread[thr].shared_tasklet_list, (struct mt_list *)&tl->list);
+		MT_LIST_APPEND(&task_per_thread[thr].shared_tasklet_list, (struct mt_list *)&tl->list);
 		_HA_ATOMIC_INC(&task_per_thread[thr].rq_total);
 		if (sleeping_thread_mask & (1UL << thr)) {
 			_HA_ATOMIC_AND(&sleeping_thread_mask, ~(1UL << thr));
@@ -688,7 +688,7 @@
 	 * 100% due to rounding, this is not a problem. Note that while in
 	 * theory the sum cannot be NULL as we cannot get there without tasklets
 	 * to process, in practice it seldom happens when multiple writers
-	 * conflict and rollback on MT_LIST_TRY_ADDQ(shared_tasklet_list), causing
+	 * conflict and rollback on MT_LIST_TRY_APPEND(shared_tasklet_list), causing
 	 * a first MT_LIST_ISEMPTY() to succeed for thread_has_task() and the
 	 * one above to finally fail. This is extremely rare and not a problem.
 	 */
@@ -766,7 +766,7 @@
 			_HA_ATOMIC_DEC(&niced_tasks);
 
 		/* Add it to the local task list */
-		LIST_ADDQ(&tt->tasklets[TL_NORMAL], &((struct tasklet *)t)->list);
+		LIST_APPEND(&tt->tasklets[TL_NORMAL], &((struct tasklet *)t)->list);
 	}
 
 	/* release the rqueue lock */
diff --git a/src/tcp_rules.c b/src/tcp_rules.c
index bb25e1c..2e1eac4 100644
--- a/src/tcp_rules.c
+++ b/src/tcp_rules.c
@@ -45,22 +45,22 @@
  */
 void tcp_req_conn_keywords_register(struct action_kw_list *kw_list)
 {
-	LIST_ADDQ(&tcp_req_conn_keywords, &kw_list->list);
+	LIST_APPEND(&tcp_req_conn_keywords, &kw_list->list);
 }
 
 void tcp_req_sess_keywords_register(struct action_kw_list *kw_list)
 {
-	LIST_ADDQ(&tcp_req_sess_keywords, &kw_list->list);
+	LIST_APPEND(&tcp_req_sess_keywords, &kw_list->list);
 }
 
 void tcp_req_cont_keywords_register(struct action_kw_list *kw_list)
 {
-	LIST_ADDQ(&tcp_req_cont_keywords, &kw_list->list);
+	LIST_APPEND(&tcp_req_cont_keywords, &kw_list->list);
 }
 
 void tcp_res_cont_keywords_register(struct action_kw_list *kw_list)
 {
-	LIST_ADDQ(&tcp_res_cont_keywords, &kw_list->list);
+	LIST_APPEND(&tcp_res_cont_keywords, &kw_list->list);
 }
 
 /*
@@ -1097,7 +1097,7 @@
 			warn++;
 		}
 
-		LIST_ADDQ(&curpx->tcp_rep.inspect_rules, &rule->list);
+		LIST_APPEND(&curpx->tcp_rep.inspect_rules, &rule->list);
 	}
 	else {
 		memprintf(err,
@@ -1213,7 +1213,7 @@
 
 		/* the following function directly emits the warning */
 		warnif_misplaced_tcp_cont(curpx, file, line, args[0]);
-		LIST_ADDQ(&curpx->tcp_req.inspect_rules, &rule->list);
+		LIST_APPEND(&curpx->tcp_req.inspect_rules, &rule->list);
 	}
 	else if (strcmp(args[1], "connection") == 0) {
 		arg++;
@@ -1258,7 +1258,7 @@
 
 		/* the following function directly emits the warning */
 		warnif_misplaced_tcp_conn(curpx, file, line, args[0]);
-		LIST_ADDQ(&curpx->tcp_req.l4_rules, &rule->list);
+		LIST_APPEND(&curpx->tcp_req.l4_rules, &rule->list);
 	}
 	else if (strcmp(args[1], "session") == 0) {
 		arg++;
@@ -1302,7 +1302,7 @@
 
 		/* the following function directly emits the warning */
 		warnif_misplaced_tcp_sess(curpx, file, line, args[0]);
-		LIST_ADDQ(&curpx->tcp_req.l5_rules, &rule->list);
+		LIST_APPEND(&curpx->tcp_req.l5_rules, &rule->list);
 	}
 	else {
 		if (curpx == defpx)
diff --git a/src/tcpcheck.c b/src/tcpcheck.c
index 5a51471..bc6eb3c 100644
--- a/src/tcpcheck.c
+++ b/src/tcpcheck.c
@@ -79,7 +79,7 @@
 	struct logformat_node *lf, *lfb;
 
 	list_for_each_entry_safe(lf, lfb, fmt, list) {
-		LIST_DEL(&lf->list);
+		LIST_DELETE(&lf->list);
 		release_sample_expr(lf->expr);
 		free(lf->arg);
 		free(lf);
@@ -105,7 +105,7 @@
 	struct tcpcheck_http_hdr *hdr, *bhdr;
 
 	list_for_each_entry_safe(hdr, bhdr, hdrs, list) {
-		LIST_DEL(&hdr->list);
+		LIST_DELETE(&hdr->list);
 		free_tcpcheck_http_hdr(hdr);
 	}
 }
@@ -251,7 +251,7 @@
 	struct tcpcheck_var *var, *back;
 
 	list_for_each_entry_safe(var, back, vars, list) {
-		LIST_DEL(&var->list);
+		LIST_DELETE(&var->list);
 		free_tcpcheck_var(var);
 	}
 }
@@ -281,7 +281,7 @@
 		}
 		else
 			new->data.u = var->data.u;
-		LIST_ADDQ(dst, &new->list);
+		LIST_APPEND(dst, &new->list);
 	}
 	return 1;
 
@@ -337,7 +337,7 @@
 	ebpt_delete(&rs->node);
 	free(rs->node.key);
 	list_for_each_entry_safe(r, rb, &rs->rules, list) {
-		LIST_DEL(&r->list);
+		LIST_DELETE(&r->list);
 		free_tcpcheck(r, 0);
 	}
 	free(rs);
@@ -2772,7 +2772,7 @@
 		ist0(hdrs[i].v);
 		if (!parse_logformat_string(istptr(hdrs[i].v), px, &hdr->value, 0, SMP_VAL_BE_CHK_RUL, errmsg))
 			goto error;
-		LIST_ADDQ(&chk->send.http.hdrs, &hdr->list);
+		LIST_APPEND(&chk->send.http.hdrs, &hdr->list);
 		hdr = NULL;
 	}
 
@@ -3470,8 +3470,8 @@
 		old->send.http.flags |= TCPCHK_SND_HTTP_FL_URI_FMT;
 		LIST_INIT(&old->send.http.uri_fmt);
 		list_for_each_entry_safe(lf, lfb, &new->send.http.uri_fmt, list) {
-			LIST_DEL(&lf->list);
-			LIST_ADDQ(&old->send.http.uri_fmt, &lf->list);
+			LIST_DELETE(&lf->list);
+			LIST_APPEND(&old->send.http.uri_fmt, &lf->list);
 		}
 	}
 
@@ -3483,8 +3483,8 @@
 
 	free_tcpcheck_http_hdrs(&old->send.http.hdrs);
 	list_for_each_entry_safe(hdr, bhdr, &new->send.http.hdrs, list) {
-		LIST_DEL(&hdr->list);
-		LIST_ADDQ(&old->send.http.hdrs, &hdr->list);
+		LIST_DELETE(&hdr->list);
+		LIST_APPEND(&old->send.http.hdrs, &hdr->list);
 	}
 
 	if (!(new->send.http.flags & TCPCHK_SND_HTTP_FL_BODY_FMT) && isttest(new->send.http.body)) {
@@ -3504,8 +3504,8 @@
 		old->send.http.flags |= TCPCHK_SND_HTTP_FL_BODY_FMT;
 		LIST_INIT(&old->send.http.body_fmt);
 		list_for_each_entry_safe(lf, lfb, &new->send.http.body_fmt, list) {
-			LIST_DEL(&lf->list);
-			LIST_ADDQ(&old->send.http.body_fmt, &lf->list);
+			LIST_DELETE(&lf->list);
+			LIST_APPEND(&old->send.http.body_fmt, &lf->list);
 		}
 	}
 }
@@ -3546,11 +3546,11 @@
 		if (r && r->action == TCPCHK_ACT_CONNECT)
 			r = get_next_tcpcheck_rule(rules, r);
 		if (!r || r->action != TCPCHK_ACT_SEND)
-			LIST_ADD(rules->list, &chk->list);
+			LIST_INSERT(rules->list, &chk->list);
 		else if (r->send.http.flags & TCPCHK_SND_HTTP_FROM_OPT) {
-			LIST_DEL(&r->list);
+			LIST_DELETE(&r->list);
 			free_tcpcheck(r, 0);
-			LIST_ADD(rules->list, &chk->list);
+			LIST_INSERT(rules->list, &chk->list);
 		}
 		else {
 			tcpcheck_overwrite_send_http_rule(r, chk);
@@ -3588,12 +3588,12 @@
 			if (r && r->action == TCPCHK_ACT_SEND && (r->send.http.flags & TCPCHK_SND_HTTP_FROM_OPT)) {
 				tcpcheck_overwrite_send_http_rule(r, chk);
 				free_tcpcheck(chk, 0);
-				LIST_DEL(&r->list);
+				LIST_DELETE(&r->list);
 				r->send.http.flags &= ~TCPCHK_SND_HTTP_FROM_OPT;
 				chk = r;
 			}
 		}
-		LIST_ADDQ(rules->list, &chk->list);
+		LIST_APPEND(rules->list, &chk->list);
 	}
 	return 1;
 }
@@ -3632,8 +3632,8 @@
 		if (chk && chk->action == TCPCHK_ACT_SEND && (chk->send.http.flags & TCPCHK_SND_HTTP_FROM_OPT)) {
 			next = get_next_tcpcheck_rule(&px->tcpcheck_rules, chk);
 			if (next && next->action == TCPCHK_ACT_CONNECT) {
-				LIST_DEL(&chk->list);
-				LIST_ADD(&next->list, &chk->list);
+				LIST_DELETE(&chk->list);
+				LIST_INSERT(&next->list, &chk->list);
 				chk->index = next->index;
 			}
 		}
@@ -3654,7 +3654,7 @@
 				ret |= ERR_ALERT | ERR_FATAL;
 				goto out;
 			}
-			LIST_ADDQ(px->tcpcheck_rules.list, &next->list);
+			LIST_APPEND(px->tcpcheck_rules.list, &next->list);
 			next->index = chk->index;
 		}
 	}
@@ -3675,7 +3675,7 @@
 		}
 		chk->action = TCPCHK_ACT_CONNECT;
 		chk->connect.options = (TCPCHK_OPT_DEFAULT_CONNECT|TCPCHK_OPT_IMPLICIT);
-		LIST_ADD(px->tcpcheck_rules.list, &chk->list);
+		LIST_INSERT(px->tcpcheck_rules.list, &chk->list);
 	}
 
 	/* Remove all comment rules. To do so, when a such rule is found, the
@@ -3690,7 +3690,7 @@
 		case TCPCHK_ACT_COMMENT:
 			free(comment);
 			comment = chk->comment;
-			LIST_DEL(&chk->list);
+			LIST_DELETE(&chk->list);
 			free(chk);
 			break;
 		case TCPCHK_ACT_CONNECT:
@@ -3733,7 +3733,7 @@
 		free(node->key);
 		rs = container_of(node, typeof(*rs), node);
 		list_for_each_entry_safe(r, rb, &rs->rules, list) {
-			LIST_DEL(&r->list);
+			LIST_DELETE(&r->list);
 			free_tcpcheck(r, 0);
 		}
 		free(rs);
@@ -3776,7 +3776,7 @@
 		if (prev_check->action != TCPCHK_ACT_COMMENT && prev_check->action != TCPCHK_ACT_ACTION_KW)
 			break;
 	}
-	LIST_ADDQ(rules->list, &tcpcheck->list);
+	LIST_APPEND(rules->list, &tcpcheck->list);
 	return 1;
 }
 
@@ -3809,7 +3809,7 @@
 		for (in = strs[i]; (*dst = *in++); dst++);
 	*dst = 0;
 
-	LIST_ADDQ(rules->list, &tcpcheck->list);
+	LIST_APPEND(rules->list, &tcpcheck->list);
 	return 1;
 }
 
@@ -3877,7 +3877,7 @@
 
 	/* No error: add the tcp-check rule in the list */
 	chk->index = index;
-	LIST_ADDQ(&rs->rules, &chk->list);
+	LIST_APPEND(&rs->rules, &chk->list);
 
 	if ((curpx->options2 & PR_O2_CHK_ANY) == PR_O2_TCPCHK_CHK &&
 	    (curpx->tcpcheck_rules.flags & TCPCHK_RULES_PROTO_CHK) == TCPCHK_RULES_TCP_CHK) {
@@ -3991,7 +3991,7 @@
 	else {
 		/* mark this ruleset as unused for now */
 		curpx->tcpcheck_rules.flags |= TCPCHK_RULES_UNUSED_HTTP_RS;
-		LIST_ADDQ(&rs->rules, &chk->list);
+		LIST_APPEND(&rs->rules, &chk->list);
 	}
 
   out:
@@ -4046,7 +4046,7 @@
 		goto error;
 	}
 	chk->index = 0;
-	LIST_ADDQ(&rs->rules, &chk->list);
+	LIST_APPEND(&rs->rules, &chk->list);
 
 	chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "string", redis_res,
 				               "error-status", "L7STS",
@@ -4059,7 +4059,7 @@
 		goto error;
 	}
 	chk->index = 1;
-	LIST_ADDQ(&rs->rules, &chk->list);
+	LIST_APPEND(&rs->rules, &chk->list);
 
   ruleset_found:
 	rules->list = &rs->rules;
@@ -4147,7 +4147,7 @@
 		goto error;
 	}
 	chk->index = 0;
-	LIST_ADDQ(&rs->rules, &chk->list);
+	LIST_APPEND(&rs->rules, &chk->list);
 
 	chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "rbinary", "^1[56]",
 				                "min-recv", "5", "ok-status", "L6OK",
@@ -4159,7 +4159,7 @@
 		goto error;
 	}
 	chk->index = 1;
-	LIST_ADDQ(&rs->rules, &chk->list);
+	LIST_APPEND(&rs->rules, &chk->list);
 
   ruleset_found:
 	rules->list = &rs->rules;
@@ -4225,7 +4225,7 @@
 	var->data.u.str.area = cmd;
 	var->data.u.str.data = strlen(cmd);
 	LIST_INIT(&var->list);
-	LIST_ADDQ(&rules->preset_vars, &var->list);
+	LIST_APPEND(&rules->preset_vars, &var->list);
 	cmd = NULL;
 	var = NULL;
 
@@ -4246,7 +4246,7 @@
 		goto error;
 	}
 	chk->index = 0;
-	LIST_ADDQ(&rs->rules, &chk->list);
+	LIST_APPEND(&rs->rules, &chk->list);
 
 	chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "rstring", "^[0-9]{3}[ \r]",
 				               "min-recv", "4",
@@ -4259,7 +4259,7 @@
 		goto error;
 	}
 	chk->index = 1;
-	LIST_ADDQ(&rs->rules, &chk->list);
+	LIST_APPEND(&rs->rules, &chk->list);
 
 	chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "rstring", "^2[0-9]{2}[ \r]",
 				               "min-recv", "4",
@@ -4273,7 +4273,7 @@
 		goto error;
 	}
 	chk->index = 2;
-	LIST_ADDQ(&rs->rules, &chk->list);
+	LIST_APPEND(&rs->rules, &chk->list);
 
 	chk = parse_tcpcheck_send((char *[]){"tcp-check", "send-lf", smtp_req, ""},
 				  1, curpx, &rs->rules, file, line, &errmsg);
@@ -4282,7 +4282,7 @@
 		goto error;
 	}
 	chk->index = 3;
-	LIST_ADDQ(&rs->rules, &chk->list);
+	LIST_APPEND(&rs->rules, &chk->list);
 
 	chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "rstring", "^2[0-9]{2}[- \r]",
 				               "min-recv", "4",
@@ -4297,7 +4297,7 @@
 		goto error;
 	}
 	chk->index = 4;
-	LIST_ADDQ(&rs->rules, &chk->list);
+	LIST_APPEND(&rs->rules, &chk->list);
 
   ruleset_found:
 	rules->list = &rs->rules;
@@ -4369,7 +4369,7 @@
 		var->data.u.str.area = user;
 		var->data.u.str.data = strlen(user);
 		LIST_INIT(&var->list);
-		LIST_ADDQ(&rules->preset_vars, &var->list);
+		LIST_APPEND(&rules->preset_vars, &var->list);
 		user = NULL;
 		var = NULL;
 
@@ -4381,7 +4381,7 @@
 		var->data.type = SMP_T_SINT;
 		var->data.u.sint = packetlen;
 		LIST_INIT(&var->list);
-		LIST_ADDQ(&rules->preset_vars, &var->list);
+		LIST_APPEND(&rules->preset_vars, &var->list);
 		var = NULL;
 	}
 	else {
@@ -4407,7 +4407,7 @@
 		goto error;
 	}
 	chk->index = 0;
-	LIST_ADDQ(&rs->rules, &chk->list);
+	LIST_APPEND(&rs->rules, &chk->list);
 
 	chk = parse_tcpcheck_send((char *[]){"tcp-check", "send-binary-lf", pgsql_req, ""},
 				  1, curpx, &rs->rules, file, line, &errmsg);
@@ -4416,7 +4416,7 @@
 		goto error;
 	}
 	chk->index = 1;
-	LIST_ADDQ(&rs->rules, &chk->list);
+	LIST_APPEND(&rs->rules, &chk->list);
 
 	chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "!rstring", "^E",
 				               "min-recv", "5",
@@ -4429,7 +4429,7 @@
 		goto error;
 	}
 	chk->index = 2;
-	LIST_ADDQ(&rs->rules, &chk->list);
+	LIST_APPEND(&rs->rules, &chk->list);
 
 	chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "rbinary", "^52000000(08|0A|0C)000000(00|02|03|04|05|06)",
 				               "min-recv", "9",
@@ -4443,7 +4443,7 @@
 		goto error;
 	}
 	chk->index = 3;
-	LIST_ADDQ(&rs->rules, &chk->list);
+	LIST_APPEND(&rs->rules, &chk->list);
 
   ruleset_found:
 	rules->list = &rs->rules;
@@ -4599,7 +4599,7 @@
 		var->data.u.str.area = hdr;
 		var->data.u.str.data = 4;
 		LIST_INIT(&var->list);
-		LIST_ADDQ(&rules->preset_vars, &var->list);
+		LIST_APPEND(&rules->preset_vars, &var->list);
 		hdr = NULL;
 		var = NULL;
 
@@ -4612,7 +4612,7 @@
 		var->data.u.str.area = user;
 		var->data.u.str.data = strlen(user);
 		LIST_INIT(&var->list);
-		LIST_ADDQ(&rules->preset_vars, &var->list);
+		LIST_APPEND(&rules->preset_vars, &var->list);
 		user = NULL;
 		var = NULL;
 	}
@@ -4634,7 +4634,7 @@
 		goto error;
 	}
 	chk->index = index++;
-	LIST_ADDQ(&rs->rules, &chk->list);
+	LIST_APPEND(&rs->rules, &chk->list);
 
 	if (mysql_req) {
 		chk = parse_tcpcheck_send((char *[]){"tcp-check", "send-binary-lf", mysql_req, ""},
@@ -4644,7 +4644,7 @@
 			goto error;
 		}
 		chk->index = index++;
-		LIST_ADDQ(&rs->rules, &chk->list);
+		LIST_APPEND(&rs->rules, &chk->list);
 	}
 
 	chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "custom", ""},
@@ -4655,7 +4655,7 @@
 	}
 	chk->expect.custom = tcpcheck_mysql_expect_iniths;
 	chk->index = index++;
-	LIST_ADDQ(&rs->rules, &chk->list);
+	LIST_APPEND(&rs->rules, &chk->list);
 
 	if (mysql_req) {
 		chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "custom", ""},
@@ -4666,7 +4666,7 @@
 		}
 		chk->expect.custom = tcpcheck_mysql_expect_ok;
 		chk->index = index++;
-		LIST_ADDQ(&rs->rules, &chk->list);
+		LIST_APPEND(&rs->rules, &chk->list);
 	}
 
   ruleset_found:
@@ -4729,7 +4729,7 @@
 		goto error;
 	}
 	chk->index = 0;
-	LIST_ADDQ(&rs->rules, &chk->list);
+	LIST_APPEND(&rs->rules, &chk->list);
 
 	chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "rbinary", "^30",
 				               "min-recv", "14",
@@ -4741,7 +4741,7 @@
 		goto error;
 	}
 	chk->index = 1;
-	LIST_ADDQ(&rs->rules, &chk->list);
+	LIST_APPEND(&rs->rules, &chk->list);
 
 	chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "custom", ""},
 		                    1, curpx, &rs->rules, TCPCHK_RULES_LDAP_CHK, file, line, &errmsg);
@@ -4751,7 +4751,7 @@
 	}
 	chk->expect.custom = tcpcheck_ldap_expect_bindrsp;
 	chk->index = 2;
-	LIST_ADDQ(&rs->rules, &chk->list);
+	LIST_APPEND(&rs->rules, &chk->list);
 
   ruleset_found:
 	rules->list = &rs->rules;
@@ -4817,7 +4817,7 @@
 		goto error;
 	}
 	chk->index = 0;
-	LIST_ADDQ(&rs->rules, &chk->list);
+	LIST_APPEND(&rs->rules, &chk->list);
 
 	chk = parse_tcpcheck_expect((char *[]){"tcp-check", "expect", "custom", "min-recv", "4", ""},
 		                    1, curpx, &rs->rules, TCPCHK_RULES_SPOP_CHK, file, line, &errmsg);
@@ -4827,7 +4827,7 @@
 	}
 	chk->expect.custom = tcpcheck_spop_expect_agenthello;
 	chk->index = 1;
-	LIST_ADDQ(&rs->rules, &chk->list);
+	LIST_APPEND(&rs->rules, &chk->list);
 
   ruleset_found:
 	rules->list = &rs->rules;
@@ -4951,7 +4951,7 @@
 			ist0(tmp_hdrs[i].v);
 			if (!parse_logformat_string(istptr(tmp_hdrs[i].v), px, &hdr->value, 0, SMP_VAL_BE_CHK_RUL, errmsg))
 				goto error;
-			LIST_ADDQ(&chk->send.http.hdrs, &hdr->list);
+			LIST_APPEND(&chk->send.http.hdrs, &hdr->list);
 		}
 	}
 
diff --git a/src/tools.c b/src/tools.c
index 7bb9b05..c103817 100644
--- a/src/tools.c
+++ b/src/tools.c
@@ -4427,7 +4427,7 @@
 		goto fail_wl_s;
 	}
 
-	LIST_ADDQ(li, &wl->list);
+	LIST_APPEND(li, &wl->list);
 
 	return 1;
 
diff --git a/src/vars.c b/src/vars.c
index 980b669..03aade2 100644
--- a/src/vars.c
+++ b/src/vars.c
@@ -150,7 +150,7 @@
 		ha_free(&var->data.u.meth.str.area);
 		size += var->data.u.meth.str.data;
 	}
-	LIST_DEL(&var->l);
+	LIST_DELETE(&var->l);
 	pool_free(var_pool, var);
 	size += sizeof(struct var);
 	return size;
@@ -373,7 +373,7 @@
 		var = pool_alloc(var_pool);
 		if (!var)
 			return 0;
-		LIST_ADDQ(&vars->head, &var->l);
+		LIST_APPEND(&vars->head, &var->l);
 		var->name = name;
 	}
 
diff --git a/src/xprt_quic.c b/src/xprt_quic.c
index 2d51a99..68d0f60 100644
--- a/src/xprt_quic.c
+++ b/src/xprt_quic.c
@@ -855,7 +855,7 @@
 		frm->type = QUIC_FT_CRYPTO;
 		frm->crypto.offset = cf_offset;
 		frm->crypto.len = cf_len;
-		LIST_ADDQ(&qel->pktns->tx.frms, &frm->list);
+		LIST_APPEND(&qel->pktns->tx.frms, &frm->list);
 	}
 
 	return len == 0;
@@ -1156,7 +1156,7 @@
                                          struct quic_conn_ctx *ctx)
 {
 	TRACE_PROTO("Removing frame", QUIC_EV_CONN_PRSAFRM, ctx->conn, frm);
-	LIST_DEL(&frm->list);
+	LIST_DELETE(&frm->list);
 	pool_free(pool_head_quic_tx_frm, frm);
 }
 
@@ -1188,7 +1188,7 @@
 
 		pkt = eb64_entry(&node->node, struct quic_tx_packet, pn_node);
 		*pkt_flags |= pkt->flags;
-		LIST_ADD(newly_acked_pkts, &pkt->list);
+		LIST_INSERT(newly_acked_pkts, &pkt->list);
 		TRACE_PROTO("Removing packet #", QUIC_EV_CONN_PRSAFRM, ctx->conn,, &pkt->pn_node.key);
 		list_for_each_entry_safe(frm, frmbak, &pkt->frms, list)
 			qc_treat_acked_tx_frm(frm, ctx);
@@ -1207,8 +1207,8 @@
                                           struct quic_conn_ctx *ctx)
 {
 	TRACE_PROTO("to resend frame", QUIC_EV_CONN_PRSAFRM, ctx->conn, frm);
-	LIST_DEL(&frm->list);
-	LIST_ADD(&pktns->tx.frms, &frm->list);
+	LIST_DELETE(&frm->list);
+	LIST_INSERT(&pktns->tx.frms, &frm->list);
 }
 
 
@@ -1218,7 +1218,7 @@
 	struct quic_tx_packet *pkt, *tmp;
 
 	list_for_each_entry_safe(pkt, tmp, pkts, list) {
-		LIST_DEL(&pkt->list);
+		LIST_DELETE(&pkt->list);
 		eb64_delete(&pkt->pn_node);
 		pool_free(pool_head_quic_tx_packet, pkt);
 	}
@@ -1267,7 +1267,7 @@
 		ev.ack.acked = pkt->in_flight_len;
 		ev.ack.time_sent = pkt->time_sent;
 		quic_cc_event(&qc->path->cc, &ev);
-		LIST_DEL(&pkt->list);
+		LIST_DELETE(&pkt->list);
 		eb64_delete(&pkt->pn_node);
 		pool_free(pool_head_quic_tx_packet, pkt);
 	}
@@ -1302,7 +1302,7 @@
 		/* Treat the frames of this lost packet. */
 		list_for_each_entry_safe(frm, frmbak, &pkt->frms, list)
 			qc_treat_nacked_tx_frm(frm, pktns, ctx);
-		LIST_DEL(&pkt->list);
+		LIST_DELETE(&pkt->list);
 		if (!oldest_lost) {
 			oldest_lost = newest_lost = pkt;
 		}
@@ -1368,7 +1368,7 @@
 		if (tick_is_le(time_sent, now_ms) ||
 			(int64_t)largest_acked_pn >= pkt->pn_node.key + QUIC_LOSS_PACKET_THRESHOLD) {
 			eb64_delete(&pkt->pn_node);
-			LIST_ADDQ(lost_pkts, &pkt->list);
+			LIST_APPEND(lost_pkts, &pkt->list);
 		}
 		else {
 			pktns->tx.loss_time = tick_first(pktns->tx.loss_time, loss_time_limit);
@@ -1851,7 +1851,7 @@
 			if (p->in_flight_len)
 				qc_set_timer(ctx);
 			TRACE_PROTO("sent pkt", QUIC_EV_CONN_SPPKTS, ctx->conn, p);
-			LIST_DEL(&p->list);
+			LIST_DELETE(&p->list);
 		}
 	}
 
@@ -1875,7 +1875,7 @@
 			return 0;
 
 		frm->type = QUIC_FT_HANDSHAKE_DONE;
-		LIST_ADDQ(&conn->tx.frms_to_send, &frm->list);
+		LIST_APPEND(&conn->tx.frms_to_send, &frm->list);
 	}
 
 	for (i = 1; i < conn->rx_tps.active_connection_id_limit; i++) {
@@ -1887,7 +1887,7 @@
 			goto err;
 
 		quic_connection_id_to_frm_cpy(frm, cid);
-		LIST_ADDQ(&conn->tx.frms_to_send, &frm->list);
+		LIST_APPEND(&conn->tx.frms_to_send, &frm->list);
 	}
 
     return 1;
@@ -2982,7 +2982,7 @@
 			 */
 			pkt->odcid_len = dcid_len;
 			/* Enqueue this packet. */
-			LIST_ADDQ(&l->rx.qpkts, &pkt->rx_list);
+			LIST_APPEND(&l->rx.qpkts, &pkt->rx_list);
 			/* Try to accept a new connection. */
 			listener_accept(l);
 			if (!qc->conn) {
@@ -3276,8 +3276,8 @@
 		room -= cflen;
 		if (dlen == cf->crypto.len) {
 			/* <cf> CRYPTO data have been consumed. */
-			LIST_DEL(&cf->list);
-			LIST_ADDQ(&pkt->frms, &cf->list);
+			LIST_DELETE(&cf->list);
+			LIST_APPEND(&pkt->frms, &cf->list);
 		}
 		else {
 			struct quic_tx_frm *new_cf;
@@ -3291,7 +3291,7 @@
 			new_cf->type = QUIC_FT_CRYPTO;
 			new_cf->crypto.len = dlen;
 			new_cf->crypto.offset = cf->crypto.offset;
-			LIST_ADDQ(&pkt->frms, &new_cf->list);
+			LIST_APPEND(&pkt->frms, &new_cf->list);
 			/* Consume <dlen> bytes of the current frame. */
 			cf->crypto.len -= dlen;
 			cf->crypto.offset += dlen;
@@ -3516,7 +3516,7 @@
 	struct quic_tx_frm *frm, *frmbak;
 
 	list_for_each_entry_safe(frm, frmbak, &pkt->frms, list) {
-		LIST_DEL(&frm->list);
+		LIST_DELETE(&frm->list);
 		pool_free(pool_head_quic_tx_frm, frm);
 	}
 	pool_free(pool_head_quic_tx_packet, pkt);
@@ -3594,7 +3594,7 @@
 	/* Increment the number of bytes in <buf> buffer by the length of this packet. */
 	buf->data += pkt_len;
 	/* Attach this packet to <buf>. */
-	LIST_ADDQ(&buf->pkts, &pkt->list);
+	LIST_APPEND(&buf->pkts, &pkt->list);
 	TRACE_LEAVE(QUIC_EV_CONN_HPKT, qc->conn, pkt);
 
 	return pkt_len;
@@ -3712,8 +3712,8 @@
 			break;
 		}
 
-		LIST_DEL(&frm->list);
-		LIST_ADDQ(&pkt->frms, &frm->list);
+		LIST_DELETE(&frm->list);
+		LIST_APPEND(&pkt->frms, &frm->list);
 		pos = ppos;
 	}
 
@@ -3792,7 +3792,7 @@
 	/* Increment the number of bytes in <buf> buffer by the length of this packet. */
 	wbuf->data += pkt_len;
 	/* Attach this packet to <buf>. */
-	LIST_ADDQ(&wbuf->pkts, &pkt->list);
+	LIST_APPEND(&wbuf->pkts, &pkt->list);
 
 	TRACE_LEAVE(QUIC_EV_CONN_PAPKT, qc->conn, pkt);
 
