diff --git a/include/types/stream_interface.h b/include/types/stream_interface.h
index 1af5be5..b7f1a5a 100644
--- a/include/types/stream_interface.h
+++ b/include/types/stream_interface.h
@@ -169,7 +169,7 @@
 	/* struct members below are the "remote" part, as seen from the buffer side */
 	int conn_retries;	/* number of connect retries left */
 	int send_proxy_ofs;	/* <0 = offset to (re)send from the end, >0 = send all */
-	struct appctx applet;   /* context of the running applet if any */
+	struct appctx appctx;   /* context of the running applet if any */
 };
 
 /* An applet designed to run in a stream interface */
diff --git a/src/dumpstats.c b/src/dumpstats.c
index 2332379..5e54d5d 100644
--- a/src/dumpstats.c
+++ b/src/dumpstats.c
@@ -159,8 +159,8 @@
 	/* we have a dedicated I/O handler for the stats */
 	stream_int_register_handler(&s->si[1], &cli_applet);
 	s->target = s->si[1].conn->target; // for logging only
-	s->si[1].applet.st1 = 0;
-	s->si[1].applet.st0 = STAT_CLI_INIT;
+	s->si[1].appctx.st1 = 0;
+	s->si[1].appctx.st0 = STAT_CLI_INIT;
 
 	tv_zero(&s->logs.tv_request);
 	s->logs.t_queue = 0;
@@ -583,7 +583,7 @@
 static void stats_sock_table_key_request(struct stream_interface *si, char **args, int action)
 {
 	struct session *s = session_from_task(si->owner);
-	struct proxy *px = si->applet.ctx.table.target;
+	struct proxy *px = si->appctx.ctx.table.target;
 	struct stksess *ts;
 	uint32_t uint32_key;
 	unsigned char ip6_key[sizeof(struct in6_addr)];
@@ -593,11 +593,11 @@
 	void *ptr;
 	struct freq_ctr_period *frqp;
 
-	si->applet.st0 = STAT_CLI_OUTPUT;
+	si->appctx.st0 = STAT_CLI_OUTPUT;
 
 	if (!*args[4]) {
-		si->applet.ctx.cli.msg = "Key value expected\n";
-		si->applet.st0 = STAT_CLI_PRINT;
+		si->appctx.ctx.cli.msg = "Key value expected\n";
+		si->appctx.st0 = STAT_CLI_PRINT;
 		return;
 	}
 
@@ -619,8 +619,8 @@
 			if ((errno == ERANGE && val == ULONG_MAX) ||
 			    (errno != 0 && val == 0) || endptr == args[4] ||
 			    val > 0xffffffff) {
-				si->applet.ctx.cli.msg = "Invalid key\n";
-				si->applet.st0 = STAT_CLI_PRINT;
+				si->appctx.ctx.cli.msg = "Invalid key\n";
+				si->appctx.st0 = STAT_CLI_PRINT;
 				return;
 			}
 			uint32_key = (uint32_t) val;
@@ -635,23 +635,23 @@
 	default:
 		switch (action) {
 		case STAT_CLI_O_TAB:
-			si->applet.ctx.cli.msg = "Showing keys from tables of type other than ip, ipv6, string and integer is not supported\n";
+			si->appctx.ctx.cli.msg = "Showing keys from tables of type other than ip, ipv6, string and integer is not supported\n";
 			break;
 		case STAT_CLI_O_CLR:
-			si->applet.ctx.cli.msg = "Removing keys from ip tables of type other than ip, ipv6, string and integer is not supported\n";
+			si->appctx.ctx.cli.msg = "Removing keys from ip tables of type other than ip, ipv6, string and integer is not supported\n";
 			break;
 		default:
-			si->applet.ctx.cli.msg = "Unknown action\n";
+			si->appctx.ctx.cli.msg = "Unknown action\n";
 			break;
 		}
-		si->applet.st0 = STAT_CLI_PRINT;
+		si->appctx.st0 = STAT_CLI_PRINT;
 		return;
 	}
 
 	/* check permissions */
 	if (s->listener->bind_conf->level < ACCESS_LVL_OPER) {
-		si->applet.ctx.cli.msg = stats_permission_denied_msg;
-		si->applet.st0 = STAT_CLI_PRINT;
+		si->appctx.ctx.cli.msg = stats_permission_denied_msg;
+		si->appctx.st0 = STAT_CLI_PRINT;
 		return;
 	}
 
@@ -672,8 +672,8 @@
 			return;
 		if (ts->ref_cnt) {
 			/* don't delete an entry which is currently referenced */
-			si->applet.ctx.cli.msg = "Entry currently in use, cannot remove\n";
-			si->applet.st0 = STAT_CLI_PRINT;
+			si->appctx.ctx.cli.msg = "Entry currently in use, cannot remove\n";
+			si->appctx.st0 = STAT_CLI_PRINT;
 			return;
 		}
 		stksess_kill(&px->table, ts);
@@ -686,8 +686,8 @@
 			ts = stksess_new(&px->table, static_table_key);
 			if (!ts) {
 				/* don't delete an entry which is currently referenced */
-				si->applet.ctx.cli.msg = "Unable to allocate a new entry\n";
-				si->applet.st0 = STAT_CLI_PRINT;
+				si->appctx.ctx.cli.msg = "Unable to allocate a new entry\n";
+				si->appctx.st0 = STAT_CLI_PRINT;
 				return;
 			}
 			stktable_store(&px->table, ts, 1);
@@ -695,27 +695,27 @@
 
 		for (cur_arg = 5; *args[cur_arg]; cur_arg += 2) {
 			if (strncmp(args[cur_arg], "data.", 5) != 0) {
-				si->applet.ctx.cli.msg = "\"data.<type>\" followed by a value expected\n";
-				si->applet.st0 = STAT_CLI_PRINT;
+				si->appctx.ctx.cli.msg = "\"data.<type>\" followed by a value expected\n";
+				si->appctx.st0 = STAT_CLI_PRINT;
 				return;
 			}
 
 			data_type = stktable_get_data_type(args[cur_arg] + 5);
 			if (data_type < 0) {
-				si->applet.ctx.cli.msg = "Unknown data type\n";
-				si->applet.st0 = STAT_CLI_PRINT;
+				si->appctx.ctx.cli.msg = "Unknown data type\n";
+				si->appctx.st0 = STAT_CLI_PRINT;
 				return;
 			}
 
 			if (!px->table.data_ofs[data_type]) {
-				si->applet.ctx.cli.msg = "Data type not stored in this table\n";
-				si->applet.st0 = STAT_CLI_PRINT;
+				si->appctx.ctx.cli.msg = "Data type not stored in this table\n";
+				si->appctx.st0 = STAT_CLI_PRINT;
 				return;
 			}
 
 			if (!*args[cur_arg+1] || strl2llrc(args[cur_arg+1], strlen(args[cur_arg+1]), &value) != 0) {
-				si->applet.ctx.cli.msg = "Require a valid integer value to store\n";
-				si->applet.st0 = STAT_CLI_PRINT;
+				si->appctx.ctx.cli.msg = "Require a valid integer value to store\n";
+				si->appctx.st0 = STAT_CLI_PRINT;
 				return;
 			}
 
@@ -747,8 +747,8 @@
 		break;
 
 	default:
-		si->applet.ctx.cli.msg = "Unknown action\n";
-		si->applet.st0 = STAT_CLI_PRINT;
+		si->appctx.ctx.cli.msg = "Unknown action\n";
+		si->appctx.st0 = STAT_CLI_PRINT;
 		break;
 	}
 }
@@ -756,53 +756,53 @@
 static void stats_sock_table_data_request(struct stream_interface *si, char **args, int action)
 {
 	if (action != STAT_CLI_O_TAB && action != STAT_CLI_O_CLR) {
-		si->applet.ctx.cli.msg = "content-based lookup is only supported with the \"show\" and \"clear\" actions";
-		si->applet.st0 = STAT_CLI_PRINT;
+		si->appctx.ctx.cli.msg = "content-based lookup is only supported with the \"show\" and \"clear\" actions";
+		si->appctx.st0 = STAT_CLI_PRINT;
 		return;
 	}
 
 	/* condition on stored data value */
-	si->applet.ctx.table.data_type = stktable_get_data_type(args[3] + 5);
-	if (si->applet.ctx.table.data_type < 0) {
-		si->applet.ctx.cli.msg = "Unknown data type\n";
-		si->applet.st0 = STAT_CLI_PRINT;
+	si->appctx.ctx.table.data_type = stktable_get_data_type(args[3] + 5);
+	if (si->appctx.ctx.table.data_type < 0) {
+		si->appctx.ctx.cli.msg = "Unknown data type\n";
+		si->appctx.st0 = STAT_CLI_PRINT;
 		return;
 	}
 
-	if (!((struct proxy *)si->applet.ctx.table.target)->table.data_ofs[si->applet.ctx.table.data_type]) {
-		si->applet.ctx.cli.msg = "Data type not stored in this table\n";
-		si->applet.st0 = STAT_CLI_PRINT;
+	if (!((struct proxy *)si->appctx.ctx.table.target)->table.data_ofs[si->appctx.ctx.table.data_type]) {
+		si->appctx.ctx.cli.msg = "Data type not stored in this table\n";
+		si->appctx.st0 = STAT_CLI_PRINT;
 		return;
 	}
 
-	si->applet.ctx.table.data_op = get_std_op(args[4]);
-	if (si->applet.ctx.table.data_op < 0) {
-		si->applet.ctx.cli.msg = "Require and operator among \"eq\", \"ne\", \"le\", \"ge\", \"lt\", \"gt\"\n";
-		si->applet.st0 = STAT_CLI_PRINT;
+	si->appctx.ctx.table.data_op = get_std_op(args[4]);
+	if (si->appctx.ctx.table.data_op < 0) {
+		si->appctx.ctx.cli.msg = "Require and operator among \"eq\", \"ne\", \"le\", \"ge\", \"lt\", \"gt\"\n";
+		si->appctx.st0 = STAT_CLI_PRINT;
 		return;
 	}
 
-	if (!*args[5] || strl2llrc(args[5], strlen(args[5]), &si->applet.ctx.table.value) != 0) {
-		si->applet.ctx.cli.msg = "Require a valid integer value to compare against\n";
-		si->applet.st0 = STAT_CLI_PRINT;
+	if (!*args[5] || strl2llrc(args[5], strlen(args[5]), &si->appctx.ctx.table.value) != 0) {
+		si->appctx.ctx.cli.msg = "Require a valid integer value to compare against\n";
+		si->appctx.st0 = STAT_CLI_PRINT;
 		return;
 	}
 }
 
 static void stats_sock_table_request(struct stream_interface *si, char **args, int action)
 {
-	si->applet.ctx.table.data_type = -1;
-	si->applet.st2 = STAT_ST_INIT;
-	si->applet.ctx.table.target = NULL;
-	si->applet.ctx.table.proxy = NULL;
-	si->applet.ctx.table.entry = NULL;
-	si->applet.st0 = action;
+	si->appctx.ctx.table.data_type = -1;
+	si->appctx.st2 = STAT_ST_INIT;
+	si->appctx.ctx.table.target = NULL;
+	si->appctx.ctx.table.proxy = NULL;
+	si->appctx.ctx.table.entry = NULL;
+	si->appctx.st0 = action;
 
 	if (*args[2]) {
-		si->applet.ctx.table.target = find_stktable(args[2]);
-		if (!si->applet.ctx.table.target) {
-			si->applet.ctx.cli.msg = "No such table\n";
-			si->applet.st0 = STAT_CLI_PRINT;
+		si->appctx.ctx.table.target = find_stktable(args[2]);
+		if (!si->appctx.ctx.table.target) {
+			si->appctx.ctx.cli.msg = "No such table\n";
+			si->appctx.st0 = STAT_CLI_PRINT;
 			return;
 		}
 	}
@@ -824,16 +824,16 @@
 err_args:
 	switch (action) {
 	case STAT_CLI_O_TAB:
-		si->applet.ctx.cli.msg = "Optional argument only supports \"data.<store_data_type>\" <operator> <value> and key <key>\n";
+		si->appctx.ctx.cli.msg = "Optional argument only supports \"data.<store_data_type>\" <operator> <value> and key <key>\n";
 		break;
 	case STAT_CLI_O_CLR:
-		si->applet.ctx.cli.msg = "Required arguments: <table> \"data.<store_data_type>\" <operator> <value> or <table> key <key>\n";
+		si->appctx.ctx.cli.msg = "Required arguments: <table> \"data.<store_data_type>\" <operator> <value> or <table> key <key>\n";
 		break;
 	default:
-		si->applet.ctx.cli.msg = "Unknown action\n";
+		si->appctx.ctx.cli.msg = "Unknown action\n";
 		break;
 	}
-	si->applet.st0 = STAT_CLI_PRINT;
+	si->appctx.st0 = STAT_CLI_PRINT;
 }
 
 /* Expects to find a frontend named <arg> and returns it, otherwise displays various
@@ -845,21 +845,21 @@
 	struct proxy *px;
 
 	if (s->listener->bind_conf->level < ACCESS_LVL_ADMIN) {
-		si->applet.ctx.cli.msg = stats_permission_denied_msg;
-		si->applet.st0 = STAT_CLI_PRINT;
+		si->appctx.ctx.cli.msg = stats_permission_denied_msg;
+		si->appctx.st0 = STAT_CLI_PRINT;
 		return NULL;
 	}
 
 	if (!*arg) {
-		si->applet.ctx.cli.msg = "A frontend name is expected.\n";
-		si->applet.st0 = STAT_CLI_PRINT;
+		si->appctx.ctx.cli.msg = "A frontend name is expected.\n";
+		si->appctx.st0 = STAT_CLI_PRINT;
 		return NULL;
 	}
 
 	px = findproxy(arg, PR_CAP_FE);
 	if (!px) {
-		si->applet.ctx.cli.msg = "No such frontend.\n";
-		si->applet.st0 = STAT_CLI_PRINT;
+		si->appctx.ctx.cli.msg = "No such frontend.\n";
+		si->appctx.st0 = STAT_CLI_PRINT;
 		return NULL;
 	}
 	return px;
@@ -877,8 +877,8 @@
 	char *line;
 
 	if (s->listener->bind_conf->level < ACCESS_LVL_ADMIN) {
-		si->applet.ctx.cli.msg = stats_permission_denied_msg;
-		si->applet.st0 = STAT_CLI_PRINT;
+		si->appctx.ctx.cli.msg = stats_permission_denied_msg;
+		si->appctx.st0 = STAT_CLI_PRINT;
 		return NULL;
 	}
 
@@ -890,20 +890,20 @@
 		}
 
 	if (!*line || !*arg) {
-		si->applet.ctx.cli.msg = "Require 'backend/server'.\n";
-		si->applet.st0 = STAT_CLI_PRINT;
+		si->appctx.ctx.cli.msg = "Require 'backend/server'.\n";
+		si->appctx.st0 = STAT_CLI_PRINT;
 		return NULL;
 	}
 
 	if (!get_backend_server(arg, line, &px, &sv)) {
-		si->applet.ctx.cli.msg = px ? "No such server.\n" : "No such backend.\n";
-		si->applet.st0 = STAT_CLI_PRINT;
+		si->appctx.ctx.cli.msg = px ? "No such server.\n" : "No such backend.\n";
+		si->appctx.st0 = STAT_CLI_PRINT;
 		return NULL;
 	}
 
 	if (px->state == PR_STSTOPPED) {
-		si->applet.ctx.cli.msg = "Proxy is disabled.\n";
-		si->applet.st0 = STAT_CLI_PRINT;
+		si->appctx.ctx.cli.msg = "Proxy is disabled.\n";
+		si->appctx.st0 = STAT_CLI_PRINT;
 		return NULL;
 	}
 
@@ -912,7 +912,7 @@
 
 /* Processes the stats interpreter on the statistics socket. This function is
  * called from an applet running in a stream interface. The function returns 1
- * if the request was understood, otherwise zero. It sets si->applet.st0 to a value
+ * if the request was understood, otherwise zero. It sets si->appctx.st0 to a value
  * designating the function which will have to process the request, which can
  * also be the print function to display the return message set into cli.msg.
  */
@@ -945,53 +945,53 @@
 	while (++arg <= MAX_STATS_ARGS)
 		args[arg] = line;
 
-	si->applet.ctx.stats.flags = 0;
+	si->appctx.ctx.stats.flags = 0;
 	if (strcmp(args[0], "show") == 0) {
 		if (strcmp(args[1], "stat") == 0) {
 			if (*args[2] && *args[3] && *args[4]) {
-				si->applet.ctx.stats.flags |= STAT_BOUND;
-				si->applet.ctx.stats.iid = atoi(args[2]);
-				si->applet.ctx.stats.type = atoi(args[3]);
-				si->applet.ctx.stats.sid = atoi(args[4]);
+				si->appctx.ctx.stats.flags |= STAT_BOUND;
+				si->appctx.ctx.stats.iid = atoi(args[2]);
+				si->appctx.ctx.stats.type = atoi(args[3]);
+				si->appctx.ctx.stats.sid = atoi(args[4]);
 			}
 
-			si->applet.st2 = STAT_ST_INIT;
-			si->applet.st0 = STAT_CLI_O_STAT; // stats_dump_stat_to_buffer
+			si->appctx.st2 = STAT_ST_INIT;
+			si->appctx.st0 = STAT_CLI_O_STAT; // stats_dump_stat_to_buffer
 		}
 		else if (strcmp(args[1], "info") == 0) {
-			si->applet.st2 = STAT_ST_INIT;
-			si->applet.st0 = STAT_CLI_O_INFO; // stats_dump_info_to_buffer
+			si->appctx.st2 = STAT_ST_INIT;
+			si->appctx.st0 = STAT_CLI_O_INFO; // stats_dump_info_to_buffer
 		}
 		else if (strcmp(args[1], "sess") == 0) {
-			si->applet.st2 = STAT_ST_INIT;
+			si->appctx.st2 = STAT_ST_INIT;
 			if (s->listener->bind_conf->level < ACCESS_LVL_OPER) {
-				si->applet.ctx.cli.msg = stats_permission_denied_msg;
-				si->applet.st0 = STAT_CLI_PRINT;
+				si->appctx.ctx.cli.msg = stats_permission_denied_msg;
+				si->appctx.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 			if (*args[2] && strcmp(args[2], "all") == 0)
-				si->applet.ctx.sess.target = (void *)-1;
+				si->appctx.ctx.sess.target = (void *)-1;
 			else if (*args[2])
-				si->applet.ctx.sess.target = (void *)strtoul(args[2], NULL, 0);
+				si->appctx.ctx.sess.target = (void *)strtoul(args[2], NULL, 0);
 			else
-				si->applet.ctx.sess.target = NULL;
-			si->applet.ctx.sess.section = 0; /* start with session status */
-			si->applet.ctx.sess.pos = 0;
-			si->applet.st0 = STAT_CLI_O_SESS; // stats_dump_sess_to_buffer
+				si->appctx.ctx.sess.target = NULL;
+			si->appctx.ctx.sess.section = 0; /* start with session status */
+			si->appctx.ctx.sess.pos = 0;
+			si->appctx.st0 = STAT_CLI_O_SESS; // stats_dump_sess_to_buffer
 		}
 		else if (strcmp(args[1], "errors") == 0) {
 			if (s->listener->bind_conf->level < ACCESS_LVL_OPER) {
-				si->applet.ctx.cli.msg = stats_permission_denied_msg;
-				si->applet.st0 = STAT_CLI_PRINT;
+				si->appctx.ctx.cli.msg = stats_permission_denied_msg;
+				si->appctx.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 			if (*args[2])
-				si->applet.ctx.errors.iid	= atoi(args[2]);
+				si->appctx.ctx.errors.iid	= atoi(args[2]);
 			else
-				si->applet.ctx.errors.iid	= -1;
-			si->applet.ctx.errors.px = NULL;
-			si->applet.st2 = STAT_ST_INIT;
-			si->applet.st0 = STAT_CLI_O_ERR; // stats_dump_errors_to_buffer
+				si->appctx.ctx.errors.iid	= -1;
+			si->appctx.ctx.errors.px = NULL;
+			si->appctx.st2 = STAT_ST_INIT;
+			si->appctx.st0 = STAT_CLI_O_ERR; // stats_dump_errors_to_buffer
 		}
 		else if (strcmp(args[1], "table") == 0) {
 			stats_sock_table_request(si, args, STAT_CLI_O_TAB);
@@ -1013,8 +1013,8 @@
 			/* check permissions */
 			if (s->listener->bind_conf->level < ACCESS_LVL_OPER ||
 			    (clrall && s->listener->bind_conf->level < ACCESS_LVL_ADMIN)) {
-				si->applet.ctx.cli.msg = stats_permission_denied_msg;
-				si->applet.st0 = STAT_CLI_PRINT;
+				si->appctx.ctx.cli.msg = stats_permission_denied_msg;
+				si->appctx.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
@@ -1081,14 +1081,14 @@
 				}
 
 			if (!*line) {
-				si->applet.ctx.cli.msg = "Require 'backend/server'.\n";
-				si->applet.st0 = STAT_CLI_PRINT;
+				si->appctx.ctx.cli.msg = "Require 'backend/server'.\n";
+				si->appctx.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
 			if (!get_backend_server(args[2], line, &px, &sv)) {
-				si->applet.ctx.cli.msg = px ? "No such server.\n" : "No such backend.\n";
-				si->applet.st0 = STAT_CLI_PRINT;
+				si->appctx.ctx.cli.msg = px ? "No such server.\n" : "No such backend.\n";
+				si->appctx.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
@@ -1118,8 +1118,8 @@
 			 */
 			set_server_drain_state(sv);
 			if (warning) {
-				si->applet.ctx.cli.msg = warning;
-				si->applet.st0 = STAT_CLI_PRINT;
+				si->appctx.ctx.cli.msg = warning;
+				si->appctx.st0 = STAT_CLI_PRINT;
 			}
 			return 1;
 		}
@@ -1129,15 +1129,15 @@
 				const char *res;
 
 				if (!*args[3]) {
-					si->applet.ctx.cli.msg = "Expects an integer value.\n";
-					si->applet.st0 = STAT_CLI_PRINT;
+					si->appctx.ctx.cli.msg = "Expects an integer value.\n";
+					si->appctx.st0 = STAT_CLI_PRINT;
 					return 1;
 				}
 
 				res = parse_time_err(args[3], &timeout, TIME_UNIT_S);
 				if (res || timeout < 1) {
-					si->applet.ctx.cli.msg = "Invalid timeout value.\n";
-					si->applet.st0 = STAT_CLI_PRINT;
+					si->appctx.ctx.cli.msg = "Invalid timeout value.\n";
+					si->appctx.st0 = STAT_CLI_PRINT;
 					return 1;
 				}
 
@@ -1145,8 +1145,8 @@
 				return 1;
 			}
 			else {
-				si->applet.ctx.cli.msg = "'set timeout' only supports 'cli'.\n";
-				si->applet.st0 = STAT_CLI_PRINT;
+				si->appctx.ctx.cli.msg = "'set timeout' only supports 'cli'.\n";
+				si->appctx.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 		}
@@ -1161,15 +1161,15 @@
 					return 1;
 
 				if (!*args[4]) {
-					si->applet.ctx.cli.msg = "Integer value expected.\n";
-					si->applet.st0 = STAT_CLI_PRINT;
+					si->appctx.ctx.cli.msg = "Integer value expected.\n";
+					si->appctx.st0 = STAT_CLI_PRINT;
 					return 1;
 				}
 
 				v = atoi(args[4]);
 				if (v < 0) {
-					si->applet.ctx.cli.msg = "Value out of range.\n";
-					si->applet.st0 = STAT_CLI_PRINT;
+					si->appctx.ctx.cli.msg = "Value out of range.\n";
+					si->appctx.st0 = STAT_CLI_PRINT;
 					return 1;
 				}
 
@@ -1192,21 +1192,21 @@
 				int v;
 
 				if (s->listener->bind_conf->level < ACCESS_LVL_ADMIN) {
-					si->applet.ctx.cli.msg = stats_permission_denied_msg;
-					si->applet.st0 = STAT_CLI_PRINT;
+					si->appctx.ctx.cli.msg = stats_permission_denied_msg;
+					si->appctx.st0 = STAT_CLI_PRINT;
 					return 1;
 				}
 
 				if (!*args[3]) {
-					si->applet.ctx.cli.msg = "Expects an integer value.\n";
-					si->applet.st0 = STAT_CLI_PRINT;
+					si->appctx.ctx.cli.msg = "Expects an integer value.\n";
+					si->appctx.st0 = STAT_CLI_PRINT;
 					return 1;
 				}
 
 				v = atoi(args[3]);
 				if (v > global.hardmaxconn) {
-					si->applet.ctx.cli.msg = "Value out of range.\n";
-					si->applet.st0 = STAT_CLI_PRINT;
+					si->appctx.ctx.cli.msg = "Value out of range.\n";
+					si->appctx.st0 = STAT_CLI_PRINT;
 					return 1;
 				}
 
@@ -1223,8 +1223,8 @@
 				return 1;
 			}
 			else {
-				si->applet.ctx.cli.msg = "'set maxconn' only supports 'frontend' and 'global'.\n";
-				si->applet.st0 = STAT_CLI_PRINT;
+				si->appctx.ctx.cli.msg = "'set maxconn' only supports 'frontend' and 'global'.\n";
+				si->appctx.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 		}
@@ -1234,21 +1234,21 @@
 					int v;
 
 					if (s->listener->bind_conf->level < ACCESS_LVL_ADMIN) {
-						si->applet.ctx.cli.msg = stats_permission_denied_msg;
-						si->applet.st0 = STAT_CLI_PRINT;
+						si->appctx.ctx.cli.msg = stats_permission_denied_msg;
+						si->appctx.st0 = STAT_CLI_PRINT;
 						return 1;
 					}
 
 					if (!*args[4]) {
-						si->applet.ctx.cli.msg = "Expects an integer value.\n";
-						si->applet.st0 = STAT_CLI_PRINT;
+						si->appctx.ctx.cli.msg = "Expects an integer value.\n";
+						si->appctx.st0 = STAT_CLI_PRINT;
 						return 1;
 					}
 
 					v = atoi(args[4]);
 					if (v < 0) {
-						si->applet.ctx.cli.msg = "Value out of range.\n";
-						si->applet.st0 = STAT_CLI_PRINT;
+						si->appctx.ctx.cli.msg = "Value out of range.\n";
+						si->appctx.st0 = STAT_CLI_PRINT;
 						return 1;
 					}
 
@@ -1261,8 +1261,8 @@
 					return 1;
 				}
 				else {
-					si->applet.ctx.cli.msg = "'set rate-limit connections' only supports 'global'.\n";
-					si->applet.st0 = STAT_CLI_PRINT;
+					si->appctx.ctx.cli.msg = "'set rate-limit connections' only supports 'global'.\n";
+					si->appctx.st0 = STAT_CLI_PRINT;
 					return 1;
 				}
 			}
@@ -1271,8 +1271,8 @@
 					int v;
 
 					if (!*args[4]) {
-						si->applet.ctx.cli.msg = "Expects a maximum input byte rate in kB/s.\n";
-						si->applet.st0 = STAT_CLI_PRINT;
+						si->appctx.ctx.cli.msg = "Expects a maximum input byte rate in kB/s.\n";
+						si->appctx.st0 = STAT_CLI_PRINT;
 						return 1;
 					}
 
@@ -1280,14 +1280,14 @@
 					global.comp_rate_lim = v * 1024; /* Kilo to bytes. */
 				}
 				else {
-					si->applet.ctx.cli.msg = "'set rate-limit http-compression' only supports 'global'.\n";
-					si->applet.st0 = STAT_CLI_PRINT;
+					si->appctx.ctx.cli.msg = "'set rate-limit http-compression' only supports 'global'.\n";
+					si->appctx.st0 = STAT_CLI_PRINT;
 					return 1;
 				}
 			}
 			else {
-				si->applet.ctx.cli.msg = "'set rate-limit' supports 'connections' and 'http-compression'.\n";
-				si->applet.st0 = STAT_CLI_PRINT;
+				si->appctx.ctx.cli.msg = "'set rate-limit' supports 'connections' and 'http-compression'.\n";
+				si->appctx.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 		}
@@ -1346,27 +1346,27 @@
 				return 1;
 
 			if (px->state == PR_STSTOPPED) {
-				si->applet.ctx.cli.msg = "Frontend was previously shut down, cannot enable.\n";
-				si->applet.st0 = STAT_CLI_PRINT;
+				si->appctx.ctx.cli.msg = "Frontend was previously shut down, cannot enable.\n";
+				si->appctx.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
 			if (px->state != PR_STPAUSED) {
-				si->applet.ctx.cli.msg = "Frontend is already enabled.\n";
-				si->applet.st0 = STAT_CLI_PRINT;
+				si->appctx.ctx.cli.msg = "Frontend is already enabled.\n";
+				si->appctx.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
 			if (!resume_proxy(px)) {
-				si->applet.ctx.cli.msg = "Failed to resume frontend, check logs for precise cause (port conflict?).\n";
-				si->applet.st0 = STAT_CLI_PRINT;
+				si->appctx.ctx.cli.msg = "Failed to resume frontend, check logs for precise cause (port conflict?).\n";
+				si->appctx.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 			return 1;
 		}
 		else { /* unknown "enable" parameter */
-			si->applet.ctx.cli.msg = "'enable' only supports 'frontend' and 'server'.\n";
-			si->applet.st0 = STAT_CLI_PRINT;
+			si->appctx.ctx.cli.msg = "'enable' only supports 'frontend' and 'server'.\n";
+			si->appctx.st0 = STAT_CLI_PRINT;
 			return 1;
 		}
 	}
@@ -1405,27 +1405,27 @@
 				return 1;
 
 			if (px->state == PR_STSTOPPED) {
-				si->applet.ctx.cli.msg = "Frontend was previously shut down, cannot disable.\n";
-				si->applet.st0 = STAT_CLI_PRINT;
+				si->appctx.ctx.cli.msg = "Frontend was previously shut down, cannot disable.\n";
+				si->appctx.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
 			if (px->state == PR_STPAUSED) {
-				si->applet.ctx.cli.msg = "Frontend is already disabled.\n";
-				si->applet.st0 = STAT_CLI_PRINT;
+				si->appctx.ctx.cli.msg = "Frontend is already disabled.\n";
+				si->appctx.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
 			if (!pause_proxy(px)) {
-				si->applet.ctx.cli.msg = "Failed to pause frontend, check logs for precise cause.\n";
-				si->applet.st0 = STAT_CLI_PRINT;
+				si->appctx.ctx.cli.msg = "Failed to pause frontend, check logs for precise cause.\n";
+				si->appctx.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 			return 1;
 		}
 		else { /* unknown "disable" parameter */
-			si->applet.ctx.cli.msg = "'disable' only supports 'frontend' and 'server'.\n";
-			si->applet.st0 = STAT_CLI_PRINT;
+			si->appctx.ctx.cli.msg = "'disable' only supports 'frontend' and 'server'.\n";
+			si->appctx.st0 = STAT_CLI_PRINT;
 			return 1;
 		}
 	}
@@ -1438,8 +1438,8 @@
 				return 1;
 
 			if (px->state == PR_STSTOPPED) {
-				si->applet.ctx.cli.msg = "Frontend was already shut down.\n";
-				si->applet.st0 = STAT_CLI_PRINT;
+				si->appctx.ctx.cli.msg = "Frontend was already shut down.\n";
+				si->appctx.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
@@ -1454,14 +1454,14 @@
 			struct session *sess, *ptr;
 
 			if (s->listener->bind_conf->level < ACCESS_LVL_ADMIN) {
-				si->applet.ctx.cli.msg = stats_permission_denied_msg;
-				si->applet.st0 = STAT_CLI_PRINT;
+				si->appctx.ctx.cli.msg = stats_permission_denied_msg;
+				si->appctx.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
 			if (!*args[2]) {
-				si->applet.ctx.cli.msg = "Session pointer expected (use 'show sess').\n";
-				si->applet.st0 = STAT_CLI_PRINT;
+				si->appctx.ctx.cli.msg = "Session pointer expected (use 'show sess').\n";
+				si->appctx.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
@@ -1475,8 +1475,8 @@
 
 			/* do we have the session ? */
 			if (sess != ptr) {
-				si->applet.ctx.cli.msg = "No such session (use 'show sess').\n";
-				si->applet.st0 = STAT_CLI_PRINT;
+				si->appctx.ctx.cli.msg = "No such session (use 'show sess').\n";
+				si->appctx.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
@@ -1500,14 +1500,14 @@
 				return 1;
 			}
 			else {
-				si->applet.ctx.cli.msg = "'shutdown sessions' only supports 'server'.\n";
-				si->applet.st0 = STAT_CLI_PRINT;
+				si->appctx.ctx.cli.msg = "'shutdown sessions' only supports 'server'.\n";
+				si->appctx.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 		}
 		else { /* unknown "disable" parameter */
-			si->applet.ctx.cli.msg = "'shutdown' only supports 'frontend', 'session' and 'sessions'.\n";
-			si->applet.st0 = STAT_CLI_PRINT;
+			si->appctx.ctx.cli.msg = "'shutdown' only supports 'frontend', 'session' and 'sessions'.\n";
+			si->appctx.st0 = STAT_CLI_PRINT;
 			return 1;
 		}
 	}
@@ -1521,8 +1521,8 @@
  * used to processes I/O from/to the stats unix socket. The system relies on a
  * state machine handling requests and various responses. We read a request,
  * then we process it and send the response, and we possibly display a prompt.
- * Then we can read again. The state is stored in si->applet.st0 and is one of the
- * STAT_CLI_* constants. si->applet.st1 is used to indicate whether prompt is enabled
+ * Then we can read again. The state is stored in si->appctx.st0 and is one of the
+ * STAT_CLI_* constants. si->appctx.st1 is used to indicate whether prompt is enabled
  * or not.
  */
 static void cli_io_handler(struct stream_interface *si)
@@ -1536,19 +1536,19 @@
 		goto out;
 
 	while (1) {
-		if (si->applet.st0 == STAT_CLI_INIT) {
+		if (si->appctx.st0 == STAT_CLI_INIT) {
 			/* Stats output not initialized yet */
-			memset(&si->applet.ctx.stats, 0, sizeof(si->applet.ctx.stats));
-			si->applet.st0 = STAT_CLI_GETREQ;
+			memset(&si->appctx.ctx.stats, 0, sizeof(si->appctx.ctx.stats));
+			si->appctx.st0 = STAT_CLI_GETREQ;
 		}
-		else if (si->applet.st0 == STAT_CLI_END) {
+		else if (si->appctx.st0 == STAT_CLI_END) {
 			/* Let's close for real now. We just close the request
 			 * side, the conditions below will complete if needed.
 			 */
 			si_shutw(si);
 			break;
 		}
-		else if (si->applet.st0 == STAT_CLI_GETREQ) {
+		else if (si->appctx.st0 == STAT_CLI_GETREQ) {
 			/* ensure we have some output room left in the event we
 			 * would want to return some info right after parsing.
 			 */
@@ -1559,7 +1559,7 @@
 			if (reql <= 0) { /* closed or EOL not found */
 				if (reql == 0)
 					break;
-				si->applet.st0 = STAT_CLI_END;
+				si->appctx.st0 = STAT_CLI_END;
 				continue;
 			}
 
@@ -1579,7 +1579,7 @@
 			 */
 			len = reql - 1;
 			if (trash.str[len] != '\n') {
-				si->applet.st0 = STAT_CLI_END;
+				si->appctx.st0 = STAT_CLI_END;
 				continue;
 			}
 
@@ -1588,30 +1588,30 @@
 
 			trash.str[len] = '\0';
 
-			si->applet.st0 = STAT_CLI_PROMPT;
+			si->appctx.st0 = STAT_CLI_PROMPT;
 			if (len) {
 				if (strcmp(trash.str, "quit") == 0) {
-					si->applet.st0 = STAT_CLI_END;
+					si->appctx.st0 = STAT_CLI_END;
 					continue;
 				}
 				else if (strcmp(trash.str, "prompt") == 0)
-					si->applet.st1 = !si->applet.st1;
+					si->appctx.st1 = !si->appctx.st1;
 				else if (strcmp(trash.str, "help") == 0 ||
 					 !stats_sock_parse_request(si, trash.str)) {
-					si->applet.ctx.cli.msg = stats_sock_usage_msg;
-					si->applet.st0 = STAT_CLI_PRINT;
+					si->appctx.ctx.cli.msg = stats_sock_usage_msg;
+					si->appctx.st0 = STAT_CLI_PRINT;
 				}
 				/* NB: stats_sock_parse_request() may have put
-				 * another STAT_CLI_O_* into si->applet.st0.
+				 * another STAT_CLI_O_* into si->appctx.st0.
 				 */
 			}
-			else if (!si->applet.st1) {
+			else if (!si->appctx.st1) {
 				/* if prompt is disabled, print help on empty lines,
 				 * so that the user at least knows how to enable
 				 * prompt and find help.
 				 */
-				si->applet.ctx.cli.msg = stats_sock_usage_msg;
-				si->applet.st0 = STAT_CLI_PRINT;
+				si->appctx.ctx.cli.msg = stats_sock_usage_msg;
+				si->appctx.st0 = STAT_CLI_PRINT;
 			}
 
 			/* re-adjust req buffer */
@@ -1620,49 +1620,49 @@
 		}
 		else {	/* output functions: first check if the output buffer is closed then abort */
 			if (res->flags & (CF_SHUTR_NOW|CF_SHUTR)) {
-				si->applet.st0 = STAT_CLI_END;
+				si->appctx.st0 = STAT_CLI_END;
 				continue;
 			}
 
-			switch (si->applet.st0) {
+			switch (si->appctx.st0) {
 			case STAT_CLI_PRINT:
-				if (bi_putstr(si->ib, si->applet.ctx.cli.msg) != -1)
-					si->applet.st0 = STAT_CLI_PROMPT;
+				if (bi_putstr(si->ib, si->appctx.ctx.cli.msg) != -1)
+					si->appctx.st0 = STAT_CLI_PROMPT;
 				break;
 			case STAT_CLI_O_INFO:
 				if (stats_dump_info_to_buffer(si))
-					si->applet.st0 = STAT_CLI_PROMPT;
+					si->appctx.st0 = STAT_CLI_PROMPT;
 				break;
 			case STAT_CLI_O_STAT:
 				if (stats_dump_stat_to_buffer(si, NULL))
-					si->applet.st0 = STAT_CLI_PROMPT;
+					si->appctx.st0 = STAT_CLI_PROMPT;
 				break;
 			case STAT_CLI_O_SESS:
 				if (stats_dump_sess_to_buffer(si))
-					si->applet.st0 = STAT_CLI_PROMPT;
+					si->appctx.st0 = STAT_CLI_PROMPT;
 				break;
 			case STAT_CLI_O_ERR:	/* errors dump */
 				if (stats_dump_errors_to_buffer(si))
-					si->applet.st0 = STAT_CLI_PROMPT;
+					si->appctx.st0 = STAT_CLI_PROMPT;
 				break;
 			case STAT_CLI_O_TAB:
 			case STAT_CLI_O_CLR:
-				if (stats_table_request(si, si->applet.st0))
-					si->applet.st0 = STAT_CLI_PROMPT;
+				if (stats_table_request(si, si->appctx.st0))
+					si->appctx.st0 = STAT_CLI_PROMPT;
 				break;
 			default: /* abnormal state */
-				si->applet.st0 = STAT_CLI_PROMPT;
+				si->appctx.st0 = STAT_CLI_PROMPT;
 				break;
 			}
 
 			/* The post-command prompt is either LF alone or LF + '> ' in interactive mode */
-			if (si->applet.st0 == STAT_CLI_PROMPT) {
-				if (bi_putstr(si->ib, si->applet.st1 ? "\n> " : "\n") != -1)
-					si->applet.st0 = STAT_CLI_GETREQ;
+			if (si->appctx.st0 == STAT_CLI_PROMPT) {
+				if (bi_putstr(si->ib, si->appctx.st1 ? "\n> " : "\n") != -1)
+					si->appctx.st0 = STAT_CLI_GETREQ;
 			}
 
 			/* If the output functions are still there, it means they require more room. */
-			if (si->applet.st0 >= STAT_CLI_OUTPUT)
+			if (si->appctx.st0 >= STAT_CLI_OUTPUT)
 				break;
 
 			/* Now we close the output if one of the writers did so,
@@ -1670,17 +1670,17 @@
 			 * buffer is empty. This still allows pipelined requests
 			 * to be sent in non-interactive mode.
 			 */
-			if ((res->flags & (CF_SHUTW|CF_SHUTW_NOW)) || (!si->applet.st1 && !req->buf->o)) {
-				si->applet.st0 = STAT_CLI_END;
+			if ((res->flags & (CF_SHUTW|CF_SHUTW_NOW)) || (!si->appctx.st1 && !req->buf->o)) {
+				si->appctx.st0 = STAT_CLI_END;
 				continue;
 			}
 
 			/* switch state back to GETREQ to read next requests */
-			si->applet.st0 = STAT_CLI_GETREQ;
+			si->appctx.st0 = STAT_CLI_GETREQ;
 		}
 	}
 
-	if ((res->flags & CF_SHUTR) && (si->state == SI_ST_EST) && (si->applet.st0 != STAT_CLI_GETREQ)) {
+	if ((res->flags & CF_SHUTR) && (si->state == SI_ST_EST) && (si->appctx.st0 != STAT_CLI_GETREQ)) {
 		DPRINTF(stderr, "%s@%d: si to buf closed. req=%08x, res=%08x, st=%d\n",
 			__FUNCTION__, __LINE__, req->flags, res->flags, si->state);
 		/* Other side has closed, let's abort if we have no more processing to do
@@ -1691,7 +1691,7 @@
 		si_shutw(si);
 	}
 
-	if ((req->flags & CF_SHUTW) && (si->state == SI_ST_EST) && (si->applet.st0 < STAT_CLI_OUTPUT)) {
+	if ((req->flags & CF_SHUTW) && (si->state == SI_ST_EST) && (si->appctx.st0 < STAT_CLI_OUTPUT)) {
 		DPRINTF(stderr, "%s@%d: buf to si closed. req=%08x, res=%08x, st=%d\n",
 			__FUNCTION__, __LINE__, req->flags, res->flags, si->state);
 		/* We have no more processing to do, and nothing more to send, and
@@ -1798,15 +1798,15 @@
 	if (!(px->cap & PR_CAP_FE))
 		return 0;
 
-	if ((si->applet.ctx.stats.flags & STAT_BOUND) && !(si->applet.ctx.stats.type & (1 << STATS_TYPE_FE)))
+	if ((si->appctx.ctx.stats.flags & STAT_BOUND) && !(si->appctx.ctx.stats.type & (1 << STATS_TYPE_FE)))
 		return 0;
 
-	if (si->applet.ctx.stats.flags & STAT_FMT_HTML) {
+	if (si->appctx.ctx.stats.flags & STAT_FMT_HTML) {
 		chunk_appendf(&trash,
 		              /* name, queue */
 		              "<tr class=\"frontend\">");
 
-		if (px->cap & PR_CAP_BE && px->srv && (si->applet.ctx.stats.flags & STAT_ADMIN)) {
+		if (px->cap & PR_CAP_BE && px->srv && (si->appctx.ctx.stats.flags & STAT_ADMIN)) {
 			/* Column sub-heading for Enable or Disable server */
 			chunk_appendf(&trash, "<td></td>");
 		}
@@ -2006,9 +2006,9 @@
  */
 static int stats_dump_li_stats(struct stream_interface *si, struct proxy *px, struct listener *l, int flags)
 {
-	if (si->applet.ctx.stats.flags & STAT_FMT_HTML) {
+	if (si->appctx.ctx.stats.flags & STAT_FMT_HTML) {
 		chunk_appendf(&trash, "<tr class=socket>");
-		if (px->cap & PR_CAP_BE && px->srv && (si->applet.ctx.stats.flags & STAT_ADMIN)) {
+		if (px->cap & PR_CAP_BE && px->srv && (si->appctx.ctx.stats.flags & STAT_ADMIN)) {
 			/* Column sub-heading for Enable or Disable server */
 			chunk_appendf(&trash, "<td></td>");
 		}
@@ -2139,7 +2139,7 @@
 	struct chunk src;
 	int i;
 
-	if (si->applet.ctx.stats.flags & STAT_FMT_HTML) {
+	if (si->appctx.ctx.stats.flags & STAT_FMT_HTML) {
 		static char *srv_hlt_st[9] = {
 			"DOWN",
 			"DN %d/%d &uarr;",
@@ -2159,7 +2159,7 @@
 			              "<tr class=\"%s%d\">",
 			              (sv->state & SRV_BACKUP) ? "backup" : "active", state);
 
-		if ((px->cap & PR_CAP_BE) && px->srv && (si->applet.ctx.stats.flags & STAT_ADMIN))
+		if ((px->cap & PR_CAP_BE) && px->srv && (si->appctx.ctx.stats.flags & STAT_ADMIN))
 			chunk_appendf(&trash,
 			              "<td><input type=\"checkbox\" name=\"s\" value=\"%s\"></td>",
 			              sv->id);
@@ -2520,12 +2520,12 @@
 	if (!(px->cap & PR_CAP_BE))
 		return 0;
 
-	if ((si->applet.ctx.stats.flags & STAT_BOUND) && !(si->applet.ctx.stats.type & (1 << STATS_TYPE_BE)))
+	if ((si->appctx.ctx.stats.flags & STAT_BOUND) && !(si->appctx.ctx.stats.type & (1 << STATS_TYPE_BE)))
 		return 0;
 
-	if (si->applet.ctx.stats.flags & STAT_FMT_HTML) {
+	if (si->appctx.ctx.stats.flags & STAT_FMT_HTML) {
 		chunk_appendf(&trash, "<tr class=\"backend\">");
-		if (px->srv && (si->applet.ctx.stats.flags & STAT_ADMIN)) {
+		if (px->srv && (si->appctx.ctx.stats.flags & STAT_ADMIN)) {
 			/* Column sub-heading for Enable or Disable server */
 			chunk_appendf(&trash, "<td></td>");
 		}
@@ -2744,22 +2744,22 @@
 {
 	char scope_txt[STAT_SCOPE_TXT_MAXLEN + sizeof STAT_SCOPE_PATTERN];
 
-	if (px->cap & PR_CAP_BE && px->srv && (si->applet.ctx.stats.flags & STAT_ADMIN)) {
+	if (px->cap & PR_CAP_BE && px->srv && (si->appctx.ctx.stats.flags & STAT_ADMIN)) {
 		/* A form to enable/disable this proxy servers */
 
-		/* scope_txt = search pattern + search query, si->applet.ctx.stats.scope_len is always <= STAT_SCOPE_TXT_MAXLEN */
+		/* scope_txt = search pattern + search query, si->appctx.ctx.stats.scope_len is always <= STAT_SCOPE_TXT_MAXLEN */
 		scope_txt[0] = 0;
-		if (si->applet.ctx.stats.scope_len) {
+		if (si->appctx.ctx.stats.scope_len) {
 			strcpy(scope_txt, STAT_SCOPE_PATTERN);
-			memcpy(scope_txt + strlen(STAT_SCOPE_PATTERN), bo_ptr(si->ob->buf) + si->applet.ctx.stats.scope_str, si->applet.ctx.stats.scope_len);
-			scope_txt[strlen(STAT_SCOPE_PATTERN) + si->applet.ctx.stats.scope_len] = 0;
+			memcpy(scope_txt + strlen(STAT_SCOPE_PATTERN), bo_ptr(si->ob->buf) + si->appctx.ctx.stats.scope_str, si->appctx.ctx.stats.scope_len);
+			scope_txt[strlen(STAT_SCOPE_PATTERN) + si->appctx.ctx.stats.scope_len] = 0;
 		}
 
 		chunk_appendf(&trash,
 			      "<form action=\"%s%s%s%s\" method=\"post\">",
 			      uri->uri_prefix,
-			      (si->applet.ctx.stats.flags & STAT_HIDE_DOWN) ? ";up" : "",
-			      (si->applet.ctx.stats.flags & STAT_NO_REFRESH) ? ";norefresh" : "",
+			      (si->appctx.ctx.stats.flags & STAT_HIDE_DOWN) ? ";up" : "",
+			      (si->appctx.ctx.stats.flags & STAT_NO_REFRESH) ? ";norefresh" : "",
 			      scope_txt);
 	}
 
@@ -2794,7 +2794,7 @@
 	              (uri->flags & ST_SHLGNDS) ? "</u>":"",
 	              px->desc ? "desc" : "empty", px->desc ? px->desc : "");
 
-	if ((px->cap & PR_CAP_BE) && px->srv && (si->applet.ctx.stats.flags & STAT_ADMIN)) {
+	if ((px->cap & PR_CAP_BE) && px->srv && (si->appctx.ctx.stats.flags & STAT_ADMIN)) {
 		/* Column heading for Enable or Disable server */
 		chunk_appendf(&trash, "<th rowspan=2 width=1></th>");
 	}
@@ -2826,7 +2826,7 @@
 {
 	chunk_appendf(&trash, "</table>");
 
-	if ((px->cap & PR_CAP_BE) && px->srv && (si->applet.ctx.stats.flags & STAT_ADMIN)) {
+	if ((px->cap & PR_CAP_BE) && px->srv && (si->appctx.ctx.stats.flags & STAT_ADMIN)) {
 		/* close the form used to enable/disable this proxy servers */
 		chunk_appendf(&trash,
 			      "Choose the action to perform on the checked servers : "
@@ -2863,7 +2863,7 @@
 
 	chunk_reset(&trash);
 
-	switch (si->applet.ctx.stats.px_st) {
+	switch (si->appctx.ctx.stats.px_st) {
 	case STAT_PX_ST_INIT:
 		/* we are on a new proxy */
 		if (uri && uri->scope) {
@@ -2893,26 +2893,26 @@
 		/* if the user has requested a limited output and the proxy
 		 * name does not match, skip it.
 		 */
-		if (si->applet.ctx.stats.scope_len &&
-		    strnistr(px->id, strlen(px->id), bo_ptr(si->ob->buf) + si->applet.ctx.stats.scope_str, si->applet.ctx.stats.scope_len) == NULL)
+		if (si->appctx.ctx.stats.scope_len &&
+		    strnistr(px->id, strlen(px->id), bo_ptr(si->ob->buf) + si->appctx.ctx.stats.scope_str, si->appctx.ctx.stats.scope_len) == NULL)
 			return 1;
 
-		if ((si->applet.ctx.stats.flags & STAT_BOUND) &&
-		    (si->applet.ctx.stats.iid != -1) &&
-		    (px->uuid != si->applet.ctx.stats.iid))
+		if ((si->appctx.ctx.stats.flags & STAT_BOUND) &&
+		    (si->appctx.ctx.stats.iid != -1) &&
+		    (px->uuid != si->appctx.ctx.stats.iid))
 			return 1;
 
-		si->applet.ctx.stats.px_st = STAT_PX_ST_TH;
+		si->appctx.ctx.stats.px_st = STAT_PX_ST_TH;
 		/* fall through */
 
 	case STAT_PX_ST_TH:
-		if (si->applet.ctx.stats.flags & STAT_FMT_HTML) {
+		if (si->appctx.ctx.stats.flags & STAT_FMT_HTML) {
 			stats_dump_html_px_hdr(si, px, uri);
 			if (bi_putchk(rep, &trash) == -1)
 				return 0;
 		}
 
-		si->applet.ctx.stats.px_st = STAT_PX_ST_FE;
+		si->appctx.ctx.stats.px_st = STAT_PX_ST_FE;
 		/* fall through */
 
 	case STAT_PX_ST_FE:
@@ -2921,25 +2921,25 @@
 			if (bi_putchk(rep, &trash) == -1)
 				return 0;
 
-		si->applet.ctx.stats.l = px->conf.listeners.n;
-		si->applet.ctx.stats.px_st = STAT_PX_ST_LI;
+		si->appctx.ctx.stats.l = px->conf.listeners.n;
+		si->appctx.ctx.stats.px_st = STAT_PX_ST_LI;
 		/* fall through */
 
 	case STAT_PX_ST_LI:
 		/* stats.l has been initialized above */
-		for (; si->applet.ctx.stats.l != &px->conf.listeners; si->applet.ctx.stats.l = l->by_fe.n) {
+		for (; si->appctx.ctx.stats.l != &px->conf.listeners; si->appctx.ctx.stats.l = l->by_fe.n) {
 			if (buffer_almost_full(rep->buf))
 				return 0;
 
-			l = LIST_ELEM(si->applet.ctx.stats.l, struct listener *, by_fe);
+			l = LIST_ELEM(si->appctx.ctx.stats.l, struct listener *, by_fe);
 			if (!l->counters)
 				continue;
 
-			if (si->applet.ctx.stats.flags & STAT_BOUND) {
-				if (!(si->applet.ctx.stats.type & (1 << STATS_TYPE_SO)))
+			if (si->appctx.ctx.stats.flags & STAT_BOUND) {
+				if (!(si->appctx.ctx.stats.type & (1 << STATS_TYPE_SO)))
 					break;
 
-				if (si->applet.ctx.stats.sid != -1 && l->luid != si->applet.ctx.stats.sid)
+				if (si->appctx.ctx.stats.sid != -1 && l->luid != si->appctx.ctx.stats.sid)
 					continue;
 			}
 
@@ -2949,25 +2949,25 @@
 					return 0;
 		}
 
-		si->applet.ctx.stats.sv = px->srv; /* may be NULL */
-		si->applet.ctx.stats.px_st = STAT_PX_ST_SV;
+		si->appctx.ctx.stats.sv = px->srv; /* may be NULL */
+		si->appctx.ctx.stats.px_st = STAT_PX_ST_SV;
 		/* fall through */
 
 	case STAT_PX_ST_SV:
 		/* stats.sv has been initialized above */
-		for (; si->applet.ctx.stats.sv != NULL; si->applet.ctx.stats.sv = sv->next) {
+		for (; si->appctx.ctx.stats.sv != NULL; si->appctx.ctx.stats.sv = sv->next) {
 			int sv_state; /* 0=DOWN, 1=going up, 2=going down, 3=UP, 4,5=NOLB, 6=unchecked */
 
 			if (buffer_almost_full(rep->buf))
 				return 0;
 
-			sv = si->applet.ctx.stats.sv;
+			sv = si->appctx.ctx.stats.sv;
 
-			if (si->applet.ctx.stats.flags & STAT_BOUND) {
-				if (!(si->applet.ctx.stats.type & (1 << STATS_TYPE_SV)))
+			if (si->appctx.ctx.stats.flags & STAT_BOUND) {
+				if (!(si->appctx.ctx.stats.type & (1 << STATS_TYPE_SV)))
 					break;
 
-				if (si->applet.ctx.stats.sid != -1 && sv->puid != si->applet.ctx.stats.sid)
+				if (si->appctx.ctx.stats.sid != -1 && sv->puid != si->appctx.ctx.stats.sid)
 					continue;
 			}
 
@@ -2996,9 +2996,9 @@
 				else
 					sv_state = 0; /* DOWN */
 
-			if (((sv_state == 0) || (sv->state & SRV_MAINTAIN)) && (si->applet.ctx.stats.flags & STAT_HIDE_DOWN)) {
+			if (((sv_state == 0) || (sv->state & SRV_MAINTAIN)) && (si->appctx.ctx.stats.flags & STAT_HIDE_DOWN)) {
 				/* do not report servers which are DOWN */
-				si->applet.ctx.stats.sv = sv->next;
+				si->appctx.ctx.stats.sv = sv->next;
 				continue;
 			}
 
@@ -3007,7 +3007,7 @@
 					return 0;
 		} /* for sv */
 
-		si->applet.ctx.stats.px_st = STAT_PX_ST_BE;
+		si->appctx.ctx.stats.px_st = STAT_PX_ST_BE;
 		/* fall through */
 
 	case STAT_PX_ST_BE:
@@ -3016,17 +3016,17 @@
 			if (bi_putchk(rep, &trash) == -1)
 				return 0;
 
-		si->applet.ctx.stats.px_st = STAT_PX_ST_END;
+		si->appctx.ctx.stats.px_st = STAT_PX_ST_END;
 		/* fall through */
 
 	case STAT_PX_ST_END:
-		if (si->applet.ctx.stats.flags & STAT_FMT_HTML) {
+		if (si->appctx.ctx.stats.flags & STAT_FMT_HTML) {
 			stats_dump_html_px_end(si, px);
 			if (bi_putchk(rep, &trash) == -1)
 				return 0;
 		}
 
-		si->applet.ctx.stats.px_st = STAT_PX_ST_FIN;
+		si->appctx.ctx.stats.px_st = STAT_PX_ST_FIN;
 		/* fall through */
 
 	case STAT_PX_ST_FIN:
@@ -3225,54 +3225,54 @@
 	              run_queue_cur, nb_tasks_cur, idle_pct
 	              );
 
-	/* scope_txt = search query, si->applet.ctx.stats.scope_len is always <= STAT_SCOPE_TXT_MAXLEN */
-	memcpy(scope_txt, bo_ptr(si->ob->buf) + si->applet.ctx.stats.scope_str, si->applet.ctx.stats.scope_len);
-	scope_txt[si->applet.ctx.stats.scope_len] = '\0';
+	/* scope_txt = search query, si->appctx.ctx.stats.scope_len is always <= STAT_SCOPE_TXT_MAXLEN */
+	memcpy(scope_txt, bo_ptr(si->ob->buf) + si->appctx.ctx.stats.scope_str, si->appctx.ctx.stats.scope_len);
+	scope_txt[si->appctx.ctx.stats.scope_len] = '\0';
 
 	chunk_appendf(&trash,
 		      "<li><form method=\"GET\" action=\"%s%s%s\">Scope : <input value=\"%s\" name=\"" STAT_SCOPE_INPUT_NAME "\" size=\"8\" maxlength=\"%d\" tabindex=\"1\"/></form>\n",
 		      uri->uri_prefix,
-		      (si->applet.ctx.stats.flags & STAT_HIDE_DOWN) ? ";up" : "",
-		      (si->applet.ctx.stats.flags & STAT_NO_REFRESH) ? ";norefresh" : "",
-		      (si->applet.ctx.stats.scope_len > 0) ? scope_txt : "",
+		      (si->appctx.ctx.stats.flags & STAT_HIDE_DOWN) ? ";up" : "",
+		      (si->appctx.ctx.stats.flags & STAT_NO_REFRESH) ? ";norefresh" : "",
+		      (si->appctx.ctx.stats.scope_len > 0) ? scope_txt : "",
 		      STAT_SCOPE_TXT_MAXLEN);
 
-	/* scope_txt = search pattern + search query, si->applet.ctx.stats.scope_len is always <= STAT_SCOPE_TXT_MAXLEN */
+	/* scope_txt = search pattern + search query, si->appctx.ctx.stats.scope_len is always <= STAT_SCOPE_TXT_MAXLEN */
 	scope_txt[0] = 0;
-	if (si->applet.ctx.stats.scope_len) {
+	if (si->appctx.ctx.stats.scope_len) {
 		strcpy(scope_txt, STAT_SCOPE_PATTERN);
-		memcpy(scope_txt + strlen(STAT_SCOPE_PATTERN), bo_ptr(si->ob->buf) + si->applet.ctx.stats.scope_str, si->applet.ctx.stats.scope_len);
-		scope_txt[strlen(STAT_SCOPE_PATTERN) + si->applet.ctx.stats.scope_len] = 0;
+		memcpy(scope_txt + strlen(STAT_SCOPE_PATTERN), bo_ptr(si->ob->buf) + si->appctx.ctx.stats.scope_str, si->appctx.ctx.stats.scope_len);
+		scope_txt[strlen(STAT_SCOPE_PATTERN) + si->appctx.ctx.stats.scope_len] = 0;
 	}
 
-	if (si->applet.ctx.stats.flags & STAT_HIDE_DOWN)
+	if (si->appctx.ctx.stats.flags & STAT_HIDE_DOWN)
 		chunk_appendf(&trash,
 		              "<li><a href=\"%s%s%s%s\">Show all servers</a><br>\n",
 		              uri->uri_prefix,
 		              "",
-		              (si->applet.ctx.stats.flags & STAT_NO_REFRESH) ? ";norefresh" : "",
+		              (si->appctx.ctx.stats.flags & STAT_NO_REFRESH) ? ";norefresh" : "",
 			      scope_txt);
 	else
 		chunk_appendf(&trash,
 		              "<li><a href=\"%s%s%s%s\">Hide 'DOWN' servers</a><br>\n",
 		              uri->uri_prefix,
 		              ";up",
-		              (si->applet.ctx.stats.flags & STAT_NO_REFRESH) ? ";norefresh" : "",
+		              (si->appctx.ctx.stats.flags & STAT_NO_REFRESH) ? ";norefresh" : "",
 			      scope_txt);
 
 	if (uri->refresh > 0) {
-		if (si->applet.ctx.stats.flags & STAT_NO_REFRESH)
+		if (si->appctx.ctx.stats.flags & STAT_NO_REFRESH)
 			chunk_appendf(&trash,
 			              "<li><a href=\"%s%s%s%s\">Enable refresh</a><br>\n",
 			              uri->uri_prefix,
-			              (si->applet.ctx.stats.flags & STAT_HIDE_DOWN) ? ";up" : "",
+			              (si->appctx.ctx.stats.flags & STAT_HIDE_DOWN) ? ";up" : "",
 			              "",
 				      scope_txt);
 		else
 			chunk_appendf(&trash,
 			              "<li><a href=\"%s%s%s%s\">Disable refresh</a><br>\n",
 			              uri->uri_prefix,
-			              (si->applet.ctx.stats.flags & STAT_HIDE_DOWN) ? ";up" : "",
+			              (si->appctx.ctx.stats.flags & STAT_HIDE_DOWN) ? ";up" : "",
 			              ";norefresh",
 				      scope_txt);
 	}
@@ -3280,8 +3280,8 @@
 	chunk_appendf(&trash,
 	              "<li><a href=\"%s%s%s%s\">Refresh now</a><br>\n",
 	              uri->uri_prefix,
-	              (si->applet.ctx.stats.flags & STAT_HIDE_DOWN) ? ";up" : "",
-	              (si->applet.ctx.stats.flags & STAT_NO_REFRESH) ? ";norefresh" : "",
+	              (si->appctx.ctx.stats.flags & STAT_HIDE_DOWN) ? ";up" : "",
+	              (si->appctx.ctx.stats.flags & STAT_NO_REFRESH) ? ";norefresh" : "",
 		      scope_txt);
 
 	chunk_appendf(&trash,
@@ -3303,16 +3303,16 @@
 	              ""
 	              );
 
-	if (si->applet.ctx.stats.st_code) {
-		switch (si->applet.ctx.stats.st_code) {
+	if (si->appctx.ctx.stats.st_code) {
+		switch (si->appctx.ctx.stats.st_code) {
 		case STAT_STATUS_DONE:
 			chunk_appendf(&trash,
 			              "<p><div class=active3>"
 			              "<a class=lfsb href=\"%s%s%s%s\" title=\"Remove this message\">[X]</a> "
 			              "Action processed successfully."
 			              "</div>\n", uri->uri_prefix,
-			              (si->applet.ctx.stats.flags & STAT_HIDE_DOWN) ? ";up" : "",
-			              (si->applet.ctx.stats.flags & STAT_NO_REFRESH) ? ";norefresh" : "",
+			              (si->appctx.ctx.stats.flags & STAT_HIDE_DOWN) ? ";up" : "",
+			              (si->appctx.ctx.stats.flags & STAT_NO_REFRESH) ? ";norefresh" : "",
 			              scope_txt);
 			break;
 		case STAT_STATUS_NONE:
@@ -3321,8 +3321,8 @@
 			              "<a class=lfsb href=\"%s%s%s%s\" title=\"Remove this message\">[X]</a> "
 			              "Nothing has changed."
 			              "</div>\n", uri->uri_prefix,
-			              (si->applet.ctx.stats.flags & STAT_HIDE_DOWN) ? ";up" : "",
-			              (si->applet.ctx.stats.flags & STAT_NO_REFRESH) ? ";norefresh" : "",
+			              (si->appctx.ctx.stats.flags & STAT_HIDE_DOWN) ? ";up" : "",
+			              (si->appctx.ctx.stats.flags & STAT_NO_REFRESH) ? ";norefresh" : "",
 			              scope_txt);
 			break;
 		case STAT_STATUS_PART:
@@ -3332,8 +3332,8 @@
 			              "Action partially processed.<br>"
 			              "Some server names are probably unknown or ambiguous (duplicated names in the backend)."
 			              "</div>\n", uri->uri_prefix,
-			              (si->applet.ctx.stats.flags & STAT_HIDE_DOWN) ? ";up" : "",
-			              (si->applet.ctx.stats.flags & STAT_NO_REFRESH) ? ";norefresh" : "",
+			              (si->appctx.ctx.stats.flags & STAT_HIDE_DOWN) ? ";up" : "",
+			              (si->appctx.ctx.stats.flags & STAT_NO_REFRESH) ? ";norefresh" : "",
 			              scope_txt);
 			break;
 		case STAT_STATUS_ERRP:
@@ -3347,8 +3347,8 @@
 			              "<li>Some server names are probably unknown or ambiguous (duplicated names in the backend).</li>"
 			              "</ul>"
 			              "</div>\n", uri->uri_prefix,
-			              (si->applet.ctx.stats.flags & STAT_HIDE_DOWN) ? ";up" : "",
-			              (si->applet.ctx.stats.flags & STAT_NO_REFRESH) ? ";norefresh" : "",
+			              (si->appctx.ctx.stats.flags & STAT_HIDE_DOWN) ? ";up" : "",
+			              (si->appctx.ctx.stats.flags & STAT_NO_REFRESH) ? ";norefresh" : "",
 			              scope_txt);
 			break;
 		case STAT_STATUS_EXCD:
@@ -3358,8 +3358,8 @@
 			              "<b>Action not processed : the buffer couldn't store all the data.<br>"
 			              "You should retry with less servers at a time.</b>"
 			              "</div>\n", uri->uri_prefix,
-			              (si->applet.ctx.stats.flags & STAT_HIDE_DOWN) ? ";up" : "",
-			              (si->applet.ctx.stats.flags & STAT_NO_REFRESH) ? ";norefresh" : "",
+			              (si->appctx.ctx.stats.flags & STAT_HIDE_DOWN) ? ";up" : "",
+			              (si->appctx.ctx.stats.flags & STAT_NO_REFRESH) ? ";norefresh" : "",
 			              scope_txt);
 			break;
 		case STAT_STATUS_DENY:
@@ -3368,8 +3368,8 @@
 			              "<a class=lfsb href=\"%s%s%s%s\" title=\"Remove this message\">[X]</a> "
 			              "<b>Action denied.</b>"
 			              "</div>\n", uri->uri_prefix,
-			              (si->applet.ctx.stats.flags & STAT_HIDE_DOWN) ? ";up" : "",
-			              (si->applet.ctx.stats.flags & STAT_NO_REFRESH) ? ";norefresh" : "",
+			              (si->appctx.ctx.stats.flags & STAT_HIDE_DOWN) ? ";up" : "",
+			              (si->appctx.ctx.stats.flags & STAT_NO_REFRESH) ? ";norefresh" : "",
 			              scope_txt);
 			break;
 		default:
@@ -3378,8 +3378,8 @@
 			              "<a class=lfsb href=\"%s%s%s%s\" title=\"Remove this message\">[X]</a> "
 			              "Unexpected result."
 			              "</div>\n", uri->uri_prefix,
-			              (si->applet.ctx.stats.flags & STAT_HIDE_DOWN) ? ";up" : "",
-			              (si->applet.ctx.stats.flags & STAT_NO_REFRESH) ? ";norefresh" : "",
+			              (si->appctx.ctx.stats.flags & STAT_HIDE_DOWN) ? ";up" : "",
+			              (si->appctx.ctx.stats.flags & STAT_NO_REFRESH) ? ";norefresh" : "",
 			              scope_txt);
 		}
 		chunk_appendf(&trash, "<p>\n");
@@ -3408,13 +3408,13 @@
 
 	chunk_reset(&trash);
 
-	switch (si->applet.st2) {
+	switch (si->appctx.st2) {
 	case STAT_ST_INIT:
-		si->applet.st2 = STAT_ST_HEAD; /* let's start producing data */
+		si->appctx.st2 = STAT_ST_HEAD; /* let's start producing data */
 		/* fall through */
 
 	case STAT_ST_HEAD:
-		if (si->applet.ctx.stats.flags & STAT_FMT_HTML)
+		if (si->appctx.ctx.stats.flags & STAT_FMT_HTML)
 			stats_dump_html_head(uri);
 		else
 			stats_dump_csv_header();
@@ -3422,49 +3422,49 @@
 		if (bi_putchk(rep, &trash) == -1)
 			return 0;
 
-		si->applet.st2 = STAT_ST_INFO;
+		si->appctx.st2 = STAT_ST_INFO;
 		/* fall through */
 
 	case STAT_ST_INFO:
-		if (si->applet.ctx.stats.flags & STAT_FMT_HTML) {
+		if (si->appctx.ctx.stats.flags & STAT_FMT_HTML) {
 			stats_dump_html_info(si, uri);
 			if (bi_putchk(rep, &trash) == -1)
 				return 0;
 		}
 
-		si->applet.ctx.stats.px = proxy;
-		si->applet.ctx.stats.px_st = STAT_PX_ST_INIT;
-		si->applet.st2 = STAT_ST_LIST;
+		si->appctx.ctx.stats.px = proxy;
+		si->appctx.ctx.stats.px_st = STAT_PX_ST_INIT;
+		si->appctx.st2 = STAT_ST_LIST;
 		/* fall through */
 
 	case STAT_ST_LIST:
 		/* dump proxies */
-		while (si->applet.ctx.stats.px) {
+		while (si->appctx.ctx.stats.px) {
 			if (buffer_almost_full(rep->buf))
 				return 0;
 
-			px = si->applet.ctx.stats.px;
+			px = si->appctx.ctx.stats.px;
 			/* skip the disabled proxies, global frontend and non-networked ones */
 			if (px->state != PR_STSTOPPED && px->uuid > 0 && (px->cap & (PR_CAP_FE | PR_CAP_BE)))
 				if (stats_dump_proxy_to_buffer(si, px, uri) == 0)
 					return 0;
 
-			si->applet.ctx.stats.px = px->next;
-			si->applet.ctx.stats.px_st = STAT_PX_ST_INIT;
+			si->appctx.ctx.stats.px = px->next;
+			si->appctx.ctx.stats.px_st = STAT_PX_ST_INIT;
 		}
 		/* here, we just have reached the last proxy */
 
-		si->applet.st2 = STAT_ST_END;
+		si->appctx.st2 = STAT_ST_END;
 		/* fall through */
 
 	case STAT_ST_END:
-		if (si->applet.ctx.stats.flags & STAT_FMT_HTML) {
+		if (si->appctx.ctx.stats.flags & STAT_FMT_HTML) {
 			stats_dump_html_end();
 			if (bi_putchk(rep, &trash) == -1)
 				return 0;
 		}
 
-		si->applet.st2 = STAT_ST_FIN;
+		si->appctx.st2 = STAT_ST_FIN;
 		/* fall through */
 
 	case STAT_ST_FIN:
@@ -3472,7 +3472,7 @@
 
 	default:
 		/* unknown state ! */
-		si->applet.st2 = STAT_ST_FIN;
+		si->appctx.st2 = STAT_ST_FIN;
 		return -1;
 	}
 }
@@ -3505,14 +3505,14 @@
 	temp = get_trash_chunk();
 	if (temp->size < s->txn.req.body_len) {
 		/* too large request */
-		si->applet.ctx.stats.st_code = STAT_STATUS_EXCD;
+		si->appctx.ctx.stats.st_code = STAT_STATUS_EXCD;
 		goto out;
 	}
 
 	reql = bo_getblk(si->ob, temp->str, s->txn.req.body_len, s->txn.req.eoh + 2);
 	if (reql <= 0) {
 		/* we need more data */
-		si->applet.ctx.stats.st_code = STAT_STATUS_NONE;
+		si->appctx.ctx.stats.st_code = STAT_STATUS_NONE;
 		return 0;
 	}
 
@@ -3521,7 +3521,7 @@
 	cur_param = next_param = end_params;
 	*end_params = '\0';
 
-	si->applet.ctx.stats.st_code = STAT_STATUS_NONE;
+	si->appctx.ctx.stats.st_code = STAT_STATUS_NONE;
 
 	/*
 	 * Parse the parameters in reverse order to only store the last value.
@@ -3542,7 +3542,7 @@
 				strncpy(key, cur_param + poffset, plen);
 				key[plen - 1] = '\0';
 			} else {
-				si->applet.ctx.stats.st_code = STAT_STATUS_EXCD;
+				si->appctx.ctx.stats.st_code = STAT_STATUS_EXCD;
 				goto out;
 			}
 
@@ -3562,7 +3562,7 @@
 			if (!px && (strcmp(key, "b") == 0)) {
 				if ((px = findproxy(value, PR_CAP_BE)) == NULL) {
 					/* the backend name is unknown or ambiguous (duplicate names) */
-					si->applet.ctx.stats.st_code = STAT_STATUS_ERRP;
+					si->appctx.ctx.stats.st_code = STAT_STATUS_ERRP;
 					goto out;
 				}
 			}
@@ -3583,7 +3583,7 @@
 					action = ST_ADM_ACTION_SHUTDOWN;
 				}
 				else {
-					si->applet.ctx.stats.st_code = STAT_STATUS_ERRP;
+					si->appctx.ctx.stats.st_code = STAT_STATUS_ERRP;
 					goto out;
 				}
 			}
@@ -3666,16 +3666,16 @@
 	}
 
 	if (total_servers == 0) {
-		si->applet.ctx.stats.st_code = STAT_STATUS_NONE;
+		si->appctx.ctx.stats.st_code = STAT_STATUS_NONE;
 	}
 	else if (altered_servers == 0) {
-		si->applet.ctx.stats.st_code = STAT_STATUS_ERRP;
+		si->appctx.ctx.stats.st_code = STAT_STATUS_ERRP;
 	}
 	else if (altered_servers == total_servers) {
-		si->applet.ctx.stats.st_code = STAT_STATUS_DONE;
+		si->appctx.ctx.stats.st_code = STAT_STATUS_DONE;
 	}
 	else {
-		si->applet.ctx.stats.st_code = STAT_STATUS_PART;
+		si->appctx.ctx.stats.st_code = STAT_STATUS_PART;
 	}
  out:
 	return 1;
@@ -3692,9 +3692,9 @@
 		     "Cache-Control: no-cache\r\n"
 		     "Connection: close\r\n"
 		     "Content-Type: %s\r\n",
-		     (si->applet.ctx.stats.flags & STAT_FMT_HTML) ? "text/html" : "text/plain");
+		     (si->appctx.ctx.stats.flags & STAT_FMT_HTML) ? "text/html" : "text/plain");
 
-	if (uri->refresh > 0 && !(si->applet.ctx.stats.flags & STAT_NO_REFRESH))
+	if (uri->refresh > 0 && !(si->appctx.ctx.stats.flags & STAT_NO_REFRESH))
 		chunk_appendf(&trash, "Refresh: %d\r\n",
 			      uri->refresh);
 
@@ -3715,12 +3715,12 @@
 	struct session *s = session_from_task(si->owner);
 	struct uri_auth *uri = s->be->uri_auth;
 
-	/* scope_txt = search pattern + search query, si->applet.ctx.stats.scope_len is always <= STAT_SCOPE_TXT_MAXLEN */
+	/* scope_txt = search pattern + search query, si->appctx.ctx.stats.scope_len is always <= STAT_SCOPE_TXT_MAXLEN */
 	scope_txt[0] = 0;
-	if (si->applet.ctx.stats.scope_len) {
+	if (si->appctx.ctx.stats.scope_len) {
 		strcpy(scope_txt, STAT_SCOPE_PATTERN);
-		memcpy(scope_txt + strlen(STAT_SCOPE_PATTERN), bo_ptr(si->ob->buf) + si->applet.ctx.stats.scope_str, si->applet.ctx.stats.scope_len);
-		scope_txt[strlen(STAT_SCOPE_PATTERN) + si->applet.ctx.stats.scope_len] = 0;
+		memcpy(scope_txt + strlen(STAT_SCOPE_PATTERN), bo_ptr(si->ob->buf) + si->appctx.ctx.stats.scope_str, si->appctx.ctx.stats.scope_len);
+		scope_txt[strlen(STAT_SCOPE_PATTERN) + si->appctx.ctx.stats.scope_len] = 0;
 	}
 
 	/* We don't want to land on the posted stats page because a refresh will
@@ -3735,13 +3735,13 @@
 		     "Location: %s;st=%s%s%s%s\r\n"
 		     "\r\n",
 		     uri->uri_prefix,
-		     ((si->applet.ctx.stats.st_code > STAT_STATUS_INIT) &&
-		      (si->applet.ctx.stats.st_code < STAT_STATUS_SIZE) &&
-		      stat_status_codes[si->applet.ctx.stats.st_code]) ?
-		     stat_status_codes[si->applet.ctx.stats.st_code] :
+		     ((si->appctx.ctx.stats.st_code > STAT_STATUS_INIT) &&
+		      (si->appctx.ctx.stats.st_code < STAT_STATUS_SIZE) &&
+		      stat_status_codes[si->appctx.ctx.stats.st_code]) ?
+		     stat_status_codes[si->appctx.ctx.stats.st_code] :
 		     stat_status_codes[STAT_STATUS_UNKN],
-		     (si->applet.ctx.stats.flags & STAT_HIDE_DOWN) ? ";up" : "",
-		     (si->applet.ctx.stats.flags & STAT_NO_REFRESH) ? ";norefresh" : "",
+		     (si->appctx.ctx.stats.flags & STAT_HIDE_DOWN) ? ";up" : "",
+		     (si->appctx.ctx.stats.flags & STAT_NO_REFRESH) ? ";norefresh" : "",
 		     scope_txt);
 
 	s->txn.status = 303;
@@ -3755,7 +3755,7 @@
 
 /* This I/O handler runs as an applet embedded in a stream interface. It is
  * used to send HTTP stats over a TCP socket. The mechanism is very simple.
- * si->applet.st0 contains the operation in progress (dump, done). The handler
+ * si->appctx.st0 contains the operation in progress (dump, done). The handler
  * automatically unregisters itself once transfer is complete.
  */
 static void http_stats_io_handler(struct stream_interface *si)
@@ -3769,42 +3769,42 @@
 
 	/* check that the output is not closed */
 	if (res->flags & (CF_SHUTW|CF_SHUTW_NOW))
-		si->applet.st0 = STAT_HTTP_DONE;
+		si->appctx.st0 = STAT_HTTP_DONE;
 
 	/* all states are processed in sequence */
-	if (si->applet.st0 == STAT_HTTP_HEAD) {
+	if (si->appctx.st0 == STAT_HTTP_HEAD) {
 		if (stats_send_http_headers(si)) {
 			if (s->txn.meth == HTTP_METH_HEAD)
-				si->applet.st0 = STAT_HTTP_DONE;
+				si->appctx.st0 = STAT_HTTP_DONE;
 			else
-				si->applet.st0 = STAT_HTTP_DUMP;
+				si->appctx.st0 = STAT_HTTP_DUMP;
 		}
 	}
 
-	if (si->applet.st0 == STAT_HTTP_DUMP) {
+	if (si->appctx.st0 == STAT_HTTP_DUMP) {
 		if (stats_dump_stat_to_buffer(si, s->be->uri_auth))
-			si->applet.st0 = STAT_HTTP_DONE;
+			si->appctx.st0 = STAT_HTTP_DONE;
 	}
 
-	if (si->applet.st0 == STAT_HTTP_POST) {
+	if (si->appctx.st0 == STAT_HTTP_POST) {
 		if (stats_process_http_post(si))
-			si->applet.st0 = STAT_HTTP_LAST;
+			si->appctx.st0 = STAT_HTTP_LAST;
 		else if (si->ob->flags & CF_SHUTR)
-			si->applet.st0 = STAT_HTTP_DONE;
+			si->appctx.st0 = STAT_HTTP_DONE;
 	}
 
-	if (si->applet.st0 == STAT_HTTP_LAST) {
+	if (si->appctx.st0 == STAT_HTTP_LAST) {
 		if (stats_send_http_redirect(si))
-			si->applet.st0 = STAT_HTTP_DONE;
+			si->appctx.st0 = STAT_HTTP_DONE;
 	}
 
-	if (si->applet.st0 == STAT_HTTP_DONE)
+	if (si->appctx.st0 == STAT_HTTP_DONE)
 		si_shutw(si);
 
 	if ((res->flags & CF_SHUTR) && (si->state == SI_ST_EST))
 		si_shutw(si);
 
-	if (si->applet.st0 == STAT_HTTP_DONE) {
+	if (si->appctx.st0 == STAT_HTTP_DONE) {
 		if ((req->flags & CF_SHUTW) && (si->state == SI_ST_EST)) {
 			si_shutr(si);
 			res->flags |= CF_READ_NULL;
@@ -3884,20 +3884,20 @@
 
 	chunk_reset(&trash);
 
-	if (si->applet.ctx.sess.section > 0 && si->applet.ctx.sess.uid != sess->uniq_id) {
+	if (si->appctx.ctx.sess.section > 0 && si->appctx.ctx.sess.uid != sess->uniq_id) {
 		/* session changed, no need to go any further */
 		chunk_appendf(&trash, "  *** session terminated while we were watching it ***\n");
 		if (bi_putchk(si->ib, &trash) == -1)
 			return 0;
-		si->applet.ctx.sess.uid = 0;
-		si->applet.ctx.sess.section = 0;
+		si->appctx.ctx.sess.uid = 0;
+		si->appctx.ctx.sess.section = 0;
 		return 1;
 	}
 
-	switch (si->applet.ctx.sess.section) {
+	switch (si->appctx.ctx.sess.section) {
 	case 0: /* main status of the session */
-		si->applet.ctx.sess.uid = sess->uniq_id;
-		si->applet.ctx.sess.section = 1;
+		si->appctx.ctx.sess.uid = sess->uniq_id;
+		si->appctx.ctx.sess.section = 1;
 		/* fall through */
 
 	case 1:
@@ -4141,8 +4141,8 @@
 		/* use other states to dump the contents */
 	}
 	/* end of dump */
-	si->applet.ctx.sess.uid = 0;
-	si->applet.ctx.sess.section = 0;
+	si->appctx.ctx.sess.uid = 0;
+	si->appctx.ctx.sess.section = 0;
 	return 1;
 }
 
@@ -4157,10 +4157,10 @@
 		/* If we're forced to shut down, we might have to remove our
 		 * reference to the last session being dumped.
 		 */
-		if (si->applet.st2 == STAT_ST_LIST) {
-			if (!LIST_ISEMPTY(&si->applet.ctx.sess.bref.users)) {
-				LIST_DEL(&si->applet.ctx.sess.bref.users);
-				LIST_INIT(&si->applet.ctx.sess.bref.users);
+		if (si->appctx.st2 == STAT_ST_LIST) {
+			if (!LIST_ISEMPTY(&si->appctx.ctx.sess.bref.users)) {
+				LIST_DEL(&si->appctx.ctx.sess.bref.users);
+				LIST_INIT(&si->appctx.ctx.sess.bref.users);
 			}
 		}
 		return 1;
@@ -4168,7 +4168,7 @@
 
 	chunk_reset(&trash);
 
-	switch (si->applet.st2) {
+	switch (si->appctx.st2) {
 	case STAT_ST_INIT:
 		/* the function had not been called yet, let's prepare the
 		 * buffer for a response. We initialize the current session
@@ -4177,39 +4177,39 @@
 		 * this pointer. We know we have reached the end when this
 		 * pointer points back to the head of the sessions list.
 		 */
-		LIST_INIT(&si->applet.ctx.sess.bref.users);
-		si->applet.ctx.sess.bref.ref = sessions.n;
-		si->applet.st2 = STAT_ST_LIST;
+		LIST_INIT(&si->appctx.ctx.sess.bref.users);
+		si->appctx.ctx.sess.bref.ref = sessions.n;
+		si->appctx.st2 = STAT_ST_LIST;
 		/* fall through */
 
 	case STAT_ST_LIST:
 		/* first, let's detach the back-ref from a possible previous session */
-		if (!LIST_ISEMPTY(&si->applet.ctx.sess.bref.users)) {
-			LIST_DEL(&si->applet.ctx.sess.bref.users);
-			LIST_INIT(&si->applet.ctx.sess.bref.users);
+		if (!LIST_ISEMPTY(&si->appctx.ctx.sess.bref.users)) {
+			LIST_DEL(&si->appctx.ctx.sess.bref.users);
+			LIST_INIT(&si->appctx.ctx.sess.bref.users);
 		}
 
 		/* and start from where we stopped */
-		while (si->applet.ctx.sess.bref.ref != &sessions) {
+		while (si->appctx.ctx.sess.bref.ref != &sessions) {
 			char pn[INET6_ADDRSTRLEN];
 			struct session *curr_sess;
 
-			curr_sess = LIST_ELEM(si->applet.ctx.sess.bref.ref, struct session *, list);
+			curr_sess = LIST_ELEM(si->appctx.ctx.sess.bref.ref, struct session *, list);
 
-			if (si->applet.ctx.sess.target) {
-				if (si->applet.ctx.sess.target != (void *)-1 && si->applet.ctx.sess.target != curr_sess)
+			if (si->appctx.ctx.sess.target) {
+				if (si->appctx.ctx.sess.target != (void *)-1 && si->appctx.ctx.sess.target != curr_sess)
 					goto next_sess;
 
-				LIST_ADDQ(&curr_sess->back_refs, &si->applet.ctx.sess.bref.users);
+				LIST_ADDQ(&curr_sess->back_refs, &si->appctx.ctx.sess.bref.users);
 				/* call the proper dump() function and return if we're missing space */
 				if (!stats_dump_full_sess_to_buffer(si, curr_sess))
 					return 0;
 
 				/* session dump complete */
-				LIST_DEL(&si->applet.ctx.sess.bref.users);
-				LIST_INIT(&si->applet.ctx.sess.bref.users);
-				if (si->applet.ctx.sess.target != (void *)-1) {
-					si->applet.ctx.sess.target = NULL;
+				LIST_DEL(&si->appctx.ctx.sess.bref.users);
+				LIST_INIT(&si->appctx.ctx.sess.bref.users);
+				if (si->appctx.ctx.sess.target != (void *)-1) {
+					si->appctx.ctx.sess.target = NULL;
 					break;
 				}
 				else
@@ -4325,17 +4325,17 @@
 				/* let's try again later from this session. We add ourselves into
 				 * this session's users so that it can remove us upon termination.
 				 */
-				LIST_ADDQ(&curr_sess->back_refs, &si->applet.ctx.sess.bref.users);
+				LIST_ADDQ(&curr_sess->back_refs, &si->appctx.ctx.sess.bref.users);
 				return 0;
 			}
 
 		next_sess:
-			si->applet.ctx.sess.bref.ref = curr_sess->list.n;
+			si->appctx.ctx.sess.bref.ref = curr_sess->list.n;
 		}
 
-		if (si->applet.ctx.sess.target && si->applet.ctx.sess.target != (void *)-1) {
+		if (si->appctx.ctx.sess.target && si->appctx.ctx.sess.target != (void *)-1) {
 			/* specified session not found */
-			if (si->applet.ctx.sess.section > 0)
+			if (si->appctx.ctx.sess.section > 0)
 				chunk_appendf(&trash, "  *** session terminated while we were watching it ***\n");
 			else
 				chunk_appendf(&trash, "Session not found.\n");
@@ -4343,16 +4343,16 @@
 			if (bi_putchk(si->ib, &trash) == -1)
 				return 0;
 
-			si->applet.ctx.sess.target = NULL;
-			si->applet.ctx.sess.uid = 0;
+			si->appctx.ctx.sess.target = NULL;
+			si->appctx.ctx.sess.uid = 0;
 			return 1;
 		}
 
-		si->applet.st2 = STAT_ST_FIN;
+		si->appctx.st2 = STAT_ST_FIN;
 		/* fall through */
 
 	default:
-		si->applet.st2 = STAT_ST_FIN;
+		si->appctx.st2 = STAT_ST_FIN;
 		return 1;
 	}
 }
@@ -4363,9 +4363,9 @@
  */
 static void cli_release_handler(struct stream_interface *si)
 {
-	if (si->applet.st0 == STAT_CLI_O_SESS && si->applet.st2 == STAT_ST_LIST) {
-		if (!LIST_ISEMPTY(&si->applet.ctx.sess.bref.users))
-			LIST_DEL(&si->applet.ctx.sess.bref.users);
+	if (si->appctx.st0 == STAT_CLI_O_SESS && si->appctx.st2 == STAT_ST_LIST) {
+		if (!LIST_ISEMPTY(&si->appctx.ctx.sess.bref.users))
+			LIST_DEL(&si->appctx.ctx.sess.bref.users);
 	}
 }
 
@@ -4383,7 +4383,7 @@
 	int show = action == STAT_CLI_O_TAB;
 
 	/*
-	 * We have 3 possible states in si->applet.st2 :
+	 * We have 3 possible states in si->appctx.st2 :
 	 *   - STAT_ST_INIT : the first call
 	 *   - STAT_ST_INFO : the proxy pointer points to the next table to
 	 *     dump, the entry pointer is NULL ;
@@ -4396,65 +4396,65 @@
 
 	if (unlikely(si->ib->flags & (CF_WRITE_ERROR|CF_SHUTW))) {
 		/* in case of abort, remove any refcount we might have set on an entry */
-		if (si->applet.st2 == STAT_ST_LIST) {
-			si->applet.ctx.table.entry->ref_cnt--;
-			stksess_kill_if_expired(&si->applet.ctx.table.proxy->table, si->applet.ctx.table.entry);
+		if (si->appctx.st2 == STAT_ST_LIST) {
+			si->appctx.ctx.table.entry->ref_cnt--;
+			stksess_kill_if_expired(&si->appctx.ctx.table.proxy->table, si->appctx.ctx.table.entry);
 		}
 		return 1;
 	}
 
 	chunk_reset(&trash);
 
-	while (si->applet.st2 != STAT_ST_FIN) {
-		switch (si->applet.st2) {
+	while (si->appctx.st2 != STAT_ST_FIN) {
+		switch (si->appctx.st2) {
 		case STAT_ST_INIT:
-			si->applet.ctx.table.proxy = si->applet.ctx.table.target;
-			if (!si->applet.ctx.table.proxy)
-				si->applet.ctx.table.proxy = proxy;
+			si->appctx.ctx.table.proxy = si->appctx.ctx.table.target;
+			if (!si->appctx.ctx.table.proxy)
+				si->appctx.ctx.table.proxy = proxy;
 
-			si->applet.ctx.table.entry = NULL;
-			si->applet.st2 = STAT_ST_INFO;
+			si->appctx.ctx.table.entry = NULL;
+			si->appctx.st2 = STAT_ST_INFO;
 			break;
 
 		case STAT_ST_INFO:
-			if (!si->applet.ctx.table.proxy ||
-			    (si->applet.ctx.table.target &&
-			     si->applet.ctx.table.proxy != si->applet.ctx.table.target)) {
-				si->applet.st2 = STAT_ST_END;
+			if (!si->appctx.ctx.table.proxy ||
+			    (si->appctx.ctx.table.target &&
+			     si->appctx.ctx.table.proxy != si->appctx.ctx.table.target)) {
+				si->appctx.st2 = STAT_ST_END;
 				break;
 			}
 
-			if (si->applet.ctx.table.proxy->table.size) {
-				if (show && !stats_dump_table_head_to_buffer(&trash, si, si->applet.ctx.table.proxy,
-									     si->applet.ctx.table.target))
+			if (si->appctx.ctx.table.proxy->table.size) {
+				if (show && !stats_dump_table_head_to_buffer(&trash, si, si->appctx.ctx.table.proxy,
+									     si->appctx.ctx.table.target))
 					return 0;
 
-				if (si->applet.ctx.table.target &&
+				if (si->appctx.ctx.table.target &&
 				    s->listener->bind_conf->level >= ACCESS_LVL_OPER) {
 					/* dump entries only if table explicitly requested */
-					eb = ebmb_first(&si->applet.ctx.table.proxy->table.keys);
+					eb = ebmb_first(&si->appctx.ctx.table.proxy->table.keys);
 					if (eb) {
-						si->applet.ctx.table.entry = ebmb_entry(eb, struct stksess, key);
-						si->applet.ctx.table.entry->ref_cnt++;
-						si->applet.st2 = STAT_ST_LIST;
+						si->appctx.ctx.table.entry = ebmb_entry(eb, struct stksess, key);
+						si->appctx.ctx.table.entry->ref_cnt++;
+						si->appctx.st2 = STAT_ST_LIST;
 						break;
 					}
 				}
 			}
-			si->applet.ctx.table.proxy = si->applet.ctx.table.proxy->next;
+			si->appctx.ctx.table.proxy = si->appctx.ctx.table.proxy->next;
 			break;
 
 		case STAT_ST_LIST:
 			skip_entry = 0;
 
-			if (si->applet.ctx.table.data_type >= 0) {
+			if (si->appctx.ctx.table.data_type >= 0) {
 				/* we're filtering on some data contents */
 				void *ptr;
 				long long data;
 
-				dt = si->applet.ctx.table.data_type;
-				ptr = stktable_data_ptr(&si->applet.ctx.table.proxy->table,
-							si->applet.ctx.table.entry,
+				dt = si->appctx.ctx.table.data_type;
+				ptr = stktable_data_ptr(&si->appctx.ctx.table.proxy->table,
+							si->appctx.ctx.table.entry,
 							dt);
 
 				data = 0;
@@ -4470,57 +4470,57 @@
 					break;
 				case STD_T_FRQP:
 					data = read_freq_ctr_period(&stktable_data_cast(ptr, std_t_frqp),
-								    si->applet.ctx.table.proxy->table.data_arg[dt].u);
+								    si->appctx.ctx.table.proxy->table.data_arg[dt].u);
 					break;
 				}
 
 				/* skip the entry if the data does not match the test and the value */
-				if ((data < si->applet.ctx.table.value &&
-				     (si->applet.ctx.table.data_op == STD_OP_EQ ||
-				      si->applet.ctx.table.data_op == STD_OP_GT ||
-				      si->applet.ctx.table.data_op == STD_OP_GE)) ||
-				    (data == si->applet.ctx.table.value &&
-				     (si->applet.ctx.table.data_op == STD_OP_NE ||
-				      si->applet.ctx.table.data_op == STD_OP_GT ||
-				      si->applet.ctx.table.data_op == STD_OP_LT)) ||
-				    (data > si->applet.ctx.table.value &&
-				     (si->applet.ctx.table.data_op == STD_OP_EQ ||
-				      si->applet.ctx.table.data_op == STD_OP_LT ||
-				      si->applet.ctx.table.data_op == STD_OP_LE)))
+				if ((data < si->appctx.ctx.table.value &&
+				     (si->appctx.ctx.table.data_op == STD_OP_EQ ||
+				      si->appctx.ctx.table.data_op == STD_OP_GT ||
+				      si->appctx.ctx.table.data_op == STD_OP_GE)) ||
+				    (data == si->appctx.ctx.table.value &&
+				     (si->appctx.ctx.table.data_op == STD_OP_NE ||
+				      si->appctx.ctx.table.data_op == STD_OP_GT ||
+				      si->appctx.ctx.table.data_op == STD_OP_LT)) ||
+				    (data > si->appctx.ctx.table.value &&
+				     (si->appctx.ctx.table.data_op == STD_OP_EQ ||
+				      si->appctx.ctx.table.data_op == STD_OP_LT ||
+				      si->appctx.ctx.table.data_op == STD_OP_LE)))
 					skip_entry = 1;
 			}
 
 			if (show && !skip_entry &&
-			    !stats_dump_table_entry_to_buffer(&trash, si, si->applet.ctx.table.proxy,
-							      si->applet.ctx.table.entry))
+			    !stats_dump_table_entry_to_buffer(&trash, si, si->appctx.ctx.table.proxy,
+							      si->appctx.ctx.table.entry))
 			    return 0;
 
-			si->applet.ctx.table.entry->ref_cnt--;
+			si->appctx.ctx.table.entry->ref_cnt--;
 
-			eb = ebmb_next(&si->applet.ctx.table.entry->key);
+			eb = ebmb_next(&si->appctx.ctx.table.entry->key);
 			if (eb) {
-				struct stksess *old = si->applet.ctx.table.entry;
-				si->applet.ctx.table.entry = ebmb_entry(eb, struct stksess, key);
+				struct stksess *old = si->appctx.ctx.table.entry;
+				si->appctx.ctx.table.entry = ebmb_entry(eb, struct stksess, key);
 				if (show)
-					stksess_kill_if_expired(&si->applet.ctx.table.proxy->table, old);
-				else if (!skip_entry && !si->applet.ctx.table.entry->ref_cnt)
-					stksess_kill(&si->applet.ctx.table.proxy->table, old);
-				si->applet.ctx.table.entry->ref_cnt++;
+					stksess_kill_if_expired(&si->appctx.ctx.table.proxy->table, old);
+				else if (!skip_entry && !si->appctx.ctx.table.entry->ref_cnt)
+					stksess_kill(&si->appctx.ctx.table.proxy->table, old);
+				si->appctx.ctx.table.entry->ref_cnt++;
 				break;
 			}
 
 
 			if (show)
-				stksess_kill_if_expired(&si->applet.ctx.table.proxy->table, si->applet.ctx.table.entry);
-			else if (!skip_entry && !si->applet.ctx.table.entry->ref_cnt)
-				stksess_kill(&si->applet.ctx.table.proxy->table, si->applet.ctx.table.entry);
+				stksess_kill_if_expired(&si->appctx.ctx.table.proxy->table, si->appctx.ctx.table.entry);
+			else if (!skip_entry && !si->appctx.ctx.table.entry->ref_cnt)
+				stksess_kill(&si->appctx.ctx.table.proxy->table, si->appctx.ctx.table.entry);
 
-			si->applet.ctx.table.proxy = si->applet.ctx.table.proxy->next;
-			si->applet.st2 = STAT_ST_INFO;
+			si->appctx.ctx.table.proxy = si->appctx.ctx.table.proxy->next;
+			si->appctx.st2 = STAT_ST_INFO;
 			break;
 
 		case STAT_ST_END:
-			si->applet.st2 = STAT_ST_FIN;
+			si->appctx.st2 = STAT_ST_FIN;
 			break;
 		}
 	}
@@ -4598,7 +4598,7 @@
 
 	chunk_reset(&trash);
 
-	if (!si->applet.ctx.errors.px) {
+	if (!si->appctx.ctx.errors.px) {
 		/* the function had not been called yet, let's prepare the
 		 * buffer for a response.
 		 */
@@ -4615,32 +4615,32 @@
 			return 0;
 		}
 
-		si->applet.ctx.errors.px = proxy;
-		si->applet.ctx.errors.buf = 0;
-		si->applet.ctx.errors.bol = 0;
-		si->applet.ctx.errors.ptr = -1;
+		si->appctx.ctx.errors.px = proxy;
+		si->appctx.ctx.errors.buf = 0;
+		si->appctx.ctx.errors.bol = 0;
+		si->appctx.ctx.errors.ptr = -1;
 	}
 
 	/* we have two inner loops here, one for the proxy, the other one for
 	 * the buffer.
 	 */
-	while (si->applet.ctx.errors.px) {
+	while (si->appctx.ctx.errors.px) {
 		struct error_snapshot *es;
 
-		if (si->applet.ctx.errors.buf == 0)
-			es = &si->applet.ctx.errors.px->invalid_req;
+		if (si->appctx.ctx.errors.buf == 0)
+			es = &si->appctx.ctx.errors.px->invalid_req;
 		else
-			es = &si->applet.ctx.errors.px->invalid_rep;
+			es = &si->appctx.ctx.errors.px->invalid_rep;
 
 		if (!es->when.tv_sec)
 			goto next;
 
-		if (si->applet.ctx.errors.iid >= 0 &&
-		    si->applet.ctx.errors.px->uuid != si->applet.ctx.errors.iid &&
-		    es->oe->uuid != si->applet.ctx.errors.iid)
+		if (si->appctx.ctx.errors.iid >= 0 &&
+		    si->appctx.ctx.errors.px->uuid != si->appctx.ctx.errors.iid &&
+		    es->oe->uuid != si->appctx.ctx.errors.iid)
 			goto next;
 
-		if (si->applet.ctx.errors.ptr < 0) {
+		if (si->appctx.ctx.errors.ptr < 0) {
 			/* just print headers now */
 
 			char pn[INET6_ADDRSTRLEN];
@@ -4661,12 +4661,12 @@
 				port = 0;
 			}
 
-			switch (si->applet.ctx.errors.buf) {
+			switch (si->appctx.ctx.errors.buf) {
 			case 0:
 				chunk_appendf(&trash,
 					     " frontend %s (#%d): invalid request\n"
 					     "  backend %s (#%d)",
-					     si->applet.ctx.errors.px->id, si->applet.ctx.errors.px->uuid,
+					     si->appctx.ctx.errors.px->id, si->appctx.ctx.errors.px->uuid,
 					     (es->oe->cap & PR_CAP_BE) ? es->oe->id : "<NONE>",
 					     (es->oe->cap & PR_CAP_BE) ? es->oe->uuid : -1);
 				break;
@@ -4674,7 +4674,7 @@
 				chunk_appendf(&trash,
 					     " backend %s (#%d) : invalid response\n"
 					     "  frontend %s (#%d)",
-					     si->applet.ctx.errors.px->id, si->applet.ctx.errors.px->uuid,
+					     si->appctx.ctx.errors.px->id, si->appctx.ctx.errors.px->uuid,
 					     es->oe->id, es->oe->uuid);
 				break;
 			}
@@ -4698,11 +4698,11 @@
 				/* Socket buffer full. Let's try again later from the same point */
 				return 0;
 			}
-			si->applet.ctx.errors.ptr = 0;
-			si->applet.ctx.errors.sid = es->sid;
+			si->appctx.ctx.errors.ptr = 0;
+			si->appctx.ctx.errors.sid = es->sid;
 		}
 
-		if (si->applet.ctx.errors.sid != es->sid) {
+		if (si->appctx.ctx.errors.sid != es->sid) {
 			/* the snapshot changed while we were dumping it */
 			chunk_appendf(&trash,
 				     "  WARNING! update detected on this snapshot, dump interrupted. Please re-check!\n");
@@ -4712,29 +4712,29 @@
 		}
 
 		/* OK, ptr >= 0, so we have to dump the current line */
-		while (si->applet.ctx.errors.ptr < es->len && si->applet.ctx.errors.ptr < sizeof(es->buf)) {
+		while (si->appctx.ctx.errors.ptr < es->len && si->appctx.ctx.errors.ptr < sizeof(es->buf)) {
 			int newptr;
 			int newline;
 
-			newline = si->applet.ctx.errors.bol;
-			newptr = dump_text_line(&trash, es->buf, sizeof(es->buf), es->len, &newline, si->applet.ctx.errors.ptr);
-			if (newptr == si->applet.ctx.errors.ptr)
+			newline = si->appctx.ctx.errors.bol;
+			newptr = dump_text_line(&trash, es->buf, sizeof(es->buf), es->len, &newline, si->appctx.ctx.errors.ptr);
+			if (newptr == si->appctx.ctx.errors.ptr)
 				return 0;
 
 			if (bi_putchk(si->ib, &trash) == -1) {
 				/* Socket buffer full. Let's try again later from the same point */
 				return 0;
 			}
-			si->applet.ctx.errors.ptr = newptr;
-			si->applet.ctx.errors.bol = newline;
+			si->appctx.ctx.errors.ptr = newptr;
+			si->appctx.ctx.errors.bol = newline;
 		};
 	next:
-		si->applet.ctx.errors.bol = 0;
-		si->applet.ctx.errors.ptr = -1;
-		si->applet.ctx.errors.buf++;
-		if (si->applet.ctx.errors.buf > 1) {
-			si->applet.ctx.errors.buf = 0;
-			si->applet.ctx.errors.px = si->applet.ctx.errors.px->next;
+		si->appctx.ctx.errors.bol = 0;
+		si->appctx.ctx.errors.ptr = -1;
+		si->appctx.ctx.errors.buf++;
+		if (si->appctx.ctx.errors.buf > 1) {
+			si->appctx.ctx.errors.buf = 0;
+			si->appctx.ctx.errors.px = si->appctx.ctx.errors.px->next;
 		}
 	}
 
diff --git a/src/peers.c b/src/peers.c
index 6ef4aa5..43d7249 100644
--- a/src/peers.c
+++ b/src/peers.c
@@ -184,10 +184,10 @@
 static void peer_session_release(struct stream_interface *si)
 {
 	struct session *s = session_from_task(si->owner);
-	struct peer_session *ps = (struct peer_session *)si->applet.ctx.peers.ptr;
+	struct peer_session *ps = (struct peer_session *)si->appctx.ctx.peers.ptr;
 
-	/* si->applet.ctx.peers.ptr is not a peer session */
-	if (si->applet.st0 < PEER_SESSION_SENDSUCCESS)
+	/* si->appctx.ctx.peers.ptr is not a peer session */
+	if (si->appctx.st0 < PEER_SESSION_SENDSUCCESS)
 		return;
 
 	/* peer session identified */
@@ -223,21 +223,21 @@
 
 	while (1) {
 switchstate:
-		switch(si->applet.st0) {
+		switch(si->appctx.st0) {
 			case PEER_SESSION_ACCEPT:
-				si->applet.ctx.peers.ptr = NULL;
-				si->applet.st0 = PEER_SESSION_GETVERSION;
+				si->appctx.ctx.peers.ptr = NULL;
+				si->appctx.st0 = PEER_SESSION_GETVERSION;
 				/* fall through */
 			case PEER_SESSION_GETVERSION:
 				reql = bo_getline(si->ob, trash.str, trash.size);
 				if (reql <= 0) { /* closed or EOL not found */
 					if (reql == 0)
 						goto out;
-					si->applet.st0 = PEER_SESSION_END;
+					si->appctx.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
 				if (trash.str[reql-1] != '\n') {
-					si->applet.st0 = PEER_SESSION_END;
+					si->appctx.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
 				else if (reql > 1 && (trash.str[reql-2] == '\r'))
@@ -249,26 +249,26 @@
 
 				/* test version */
 				if (strcmp(PEER_SESSION_PROTO_NAME " 1.0", trash.str) != 0) {
-					si->applet.st0 = PEER_SESSION_EXIT;
-					si->applet.st1 = PEER_SESSION_ERRVERSION;
+					si->appctx.st0 = PEER_SESSION_EXIT;
+					si->appctx.st1 = PEER_SESSION_ERRVERSION;
 					/* test protocol */
 					if (strncmp(PEER_SESSION_PROTO_NAME " ", trash.str, strlen(PEER_SESSION_PROTO_NAME)+1) != 0)
-						si->applet.st1 = PEER_SESSION_ERRPROTO;
+						si->appctx.st1 = PEER_SESSION_ERRPROTO;
 					goto switchstate;
 				}
 
-				si->applet.st0 = PEER_SESSION_GETHOST;
+				si->appctx.st0 = PEER_SESSION_GETHOST;
 				/* fall through */
 			case PEER_SESSION_GETHOST:
 				reql = bo_getline(si->ob, trash.str, trash.size);
 				if (reql <= 0) { /* closed or EOL not found */
 					if (reql == 0)
 						goto out;
-					si->applet.st0 = PEER_SESSION_END;
+					si->appctx.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
 				if (trash.str[reql-1] != '\n') {
-					si->applet.st0 = PEER_SESSION_END;
+					si->appctx.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
 				else if (reql > 1 && (trash.str[reql-2] == '\r'))
@@ -280,12 +280,12 @@
 
 				/* test hostname match */
 				if (strcmp(localpeer, trash.str) != 0) {
-					si->applet.st0 = PEER_SESSION_EXIT;
-					si->applet.st1 = PEER_SESSION_ERRHOST;
+					si->appctx.st0 = PEER_SESSION_EXIT;
+					si->appctx.st1 = PEER_SESSION_ERRHOST;
 					goto switchstate;
 				}
 
-				si->applet.st0 = PEER_SESSION_GETPEER;
+				si->appctx.st0 = PEER_SESSION_GETPEER;
 				/* fall through */
 			case PEER_SESSION_GETPEER: {
 				struct peer *curpeer;
@@ -294,12 +294,12 @@
 				if (reql <= 0) { /* closed or EOL not found */
 					if (reql == 0)
 						goto out;
-					si->applet.st0 = PEER_SESSION_END;
+					si->appctx.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
 				if (trash.str[reql-1] != '\n') {
 					/* Incomplete line, we quit */
-					si->applet.st0 = PEER_SESSION_END;
+					si->appctx.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
 				else if (reql > 1 && (trash.str[reql-2] == '\r'))
@@ -312,8 +312,8 @@
 				/* parse line "<peer name> <pid>" */
 				p = strchr(trash.str, ' ');
 				if (!p) {
-					si->applet.st0 = PEER_SESSION_EXIT;
-					si->applet.st1 = PEER_SESSION_ERRPROTO;
+					si->appctx.st0 = PEER_SESSION_EXIT;
+					si->appctx.st1 = PEER_SESSION_ERRPROTO;
 					goto switchstate;
 				}
 				*p = 0;
@@ -326,17 +326,17 @@
 
 				/* if unknown peer */
 				if (!curpeer) {
-					si->applet.st0 = PEER_SESSION_EXIT;
-					si->applet.st1 = PEER_SESSION_ERRPEER;
+					si->appctx.st0 = PEER_SESSION_EXIT;
+					si->appctx.st1 = PEER_SESSION_ERRPEER;
 					goto switchstate;
 				}
 
-				si->applet.ctx.peers.ptr = curpeer;
-				si->applet.st0 = PEER_SESSION_GETTABLE;
+				si->appctx.ctx.peers.ptr = curpeer;
+				si->appctx.st0 = PEER_SESSION_GETTABLE;
 				/* fall through */
 			}
 			case PEER_SESSION_GETTABLE: {
-				struct peer *curpeer = (struct peer *)si->applet.ctx.peers.ptr;
+				struct peer *curpeer = (struct peer *)si->appctx.ctx.peers.ptr;
 				struct shared_table *st;
 				struct peer_session *ps = NULL;
 				unsigned long key_type;
@@ -347,16 +347,16 @@
 				if (reql <= 0) { /* closed or EOL not found */
 					if (reql == 0)
 						goto out;
-					si->applet.ctx.peers.ptr = NULL;
-					si->applet.st0 = PEER_SESSION_END;
+					si->appctx.ctx.peers.ptr = NULL;
+					si->appctx.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
-				/* Re init si->applet.ctx.peers.ptr to null, to handle correctly a release case */
-				si->applet.ctx.peers.ptr = NULL;
+				/* Re init si->appctx.ctx.peers.ptr to null, to handle correctly a release case */
+				si->appctx.ctx.peers.ptr = NULL;
 
 				if (trash.str[reql-1] != '\n') {
 					/* Incomplete line, we quit */
-					si->applet.st0 = PEER_SESSION_END;
+					si->appctx.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
 				else if (reql > 1 && (trash.str[reql-2] == '\r'))
@@ -369,8 +369,8 @@
 				/* Parse line "<table name> <type> <size>" */
 				p = strchr(trash.str, ' ');
 				if (!p) {
-					si->applet.st0 = PEER_SESSION_EXIT;
-					si->applet.st1 = PEER_SESSION_ERRPROTO;
+					si->appctx.st0 = PEER_SESSION_EXIT;
+					si->appctx.st1 = PEER_SESSION_ERRPROTO;
 					goto switchstate;
 				}
 				*p = 0;
@@ -378,9 +378,9 @@
 
 				p = strchr(p+1, ' ');
 				if (!p) {
-					si->applet.ctx.peers.ptr = NULL;
-					si->applet.st0 = PEER_SESSION_EXIT;
-					si->applet.st1 = PEER_SESSION_ERRPROTO;
+					si->appctx.ctx.peers.ptr = NULL;
+					si->appctx.st0 = PEER_SESSION_EXIT;
+					si->appctx.st1 = PEER_SESSION_ERRPROTO;
 					goto switchstate;
 				}
 
@@ -395,15 +395,15 @@
 						if (key_size != st->table->key_size &&
 						    (key_type != STKTABLE_TYPE_STRING ||
 						     1 + 4 + 4 + key_size - 1 >= trash.size)) {
-							si->applet.st0 = PEER_SESSION_EXIT;
-							si->applet.st1 = PEER_SESSION_ERRSIZE;
+							si->appctx.st0 = PEER_SESSION_EXIT;
+							si->appctx.st1 = PEER_SESSION_ERRSIZE;
 							goto switchstate;
 						}
 
 						/* If key type mismatches */
 						if (key_type != st->table->type) {
-							si->applet.st0 = PEER_SESSION_EXIT;
-							si->applet.st1 = PEER_SESSION_ERRTYPE;
+							si->appctx.st0 = PEER_SESSION_EXIT;
+							si->appctx.st1 = PEER_SESSION_ERRTYPE;
 							goto switchstate;
 						}
 
@@ -414,8 +414,8 @@
 								if (ps->session && ps->session != s) {
 									if (ps->peer->local) {
 										/* Local connection, reply a retry */
-										si->applet.st0 = PEER_SESSION_EXIT;
-										si->applet.st1 = PEER_SESSION_TRYAGAIN;
+										si->appctx.st0 = PEER_SESSION_EXIT;
+										si->appctx.st1 = PEER_SESSION_TRYAGAIN;
 										goto switchstate;
 									}
 									peer_session_forceshutdown(ps->session);
@@ -430,31 +430,31 @@
 
 				/* If table not found */
 				if (!st){
-					si->applet.st0 = PEER_SESSION_EXIT;
-					si->applet.st1 = PEER_SESSION_ERRTABLE;
+					si->appctx.st0 = PEER_SESSION_EXIT;
+					si->appctx.st1 = PEER_SESSION_ERRTABLE;
 					goto switchstate;
 				}
 
 				/* If no peer session for current peer */
 				if (!ps) {
-					si->applet.st0 = PEER_SESSION_EXIT;
-					si->applet.st1 = PEER_SESSION_ERRPEER;
+					si->appctx.st0 = PEER_SESSION_EXIT;
+					si->appctx.st1 = PEER_SESSION_ERRPEER;
 					goto switchstate;
 				}
 
-				si->applet.ctx.peers.ptr = ps;
-				si->applet.st0 = PEER_SESSION_SENDSUCCESS;
+				si->appctx.ctx.peers.ptr = ps;
+				si->appctx.st0 = PEER_SESSION_SENDSUCCESS;
 				/* fall through */
 			}
 			case PEER_SESSION_SENDSUCCESS:{
-				struct peer_session *ps = (struct peer_session *)si->applet.ctx.peers.ptr;
+				struct peer_session *ps = (struct peer_session *)si->appctx.ctx.peers.ptr;
 
 				repl = snprintf(trash.str, trash.size, "%d\n", PEER_SESSION_SUCCESSCODE);
 				repl = bi_putblk(si->ib, trash.str, repl);
 				if (repl <= 0) {
 					if (repl == -1)
 						goto out;
-					si->applet.st0 = PEER_SESSION_END;
+					si->appctx.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
 
@@ -493,11 +493,11 @@
 					ps->table->flags |= SHTABLE_F_RESYNC_ASSIGN;
 				}
 				/* switch to waiting message state */
-				si->applet.st0 = PEER_SESSION_WAITMSG;
+				si->appctx.st0 = PEER_SESSION_WAITMSG;
 				goto switchstate;
 			}
 			case PEER_SESSION_CONNECT: {
-				struct peer_session *ps = (struct peer_session *)si->applet.ctx.peers.ptr;
+				struct peer_session *ps = (struct peer_session *)si->appctx.ctx.peers.ptr;
 
 				/* Send headers */
 				repl = snprintf(trash.str, trash.size,
@@ -510,7 +510,7 @@
 				                (int)ps->table->table->key_size);
 
 				if (repl >= trash.size) {
-					si->applet.st0 = PEER_SESSION_END;
+					si->appctx.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
 
@@ -518,16 +518,16 @@
 				if (repl <= 0) {
 					if (repl == -1)
 						goto out;
-					si->applet.st0 = PEER_SESSION_END;
+					si->appctx.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
 
 				/* switch to the waiting statuscode state */
-				si->applet.st0 = PEER_SESSION_GETSTATUS;
+				si->appctx.st0 = PEER_SESSION_GETSTATUS;
 				/* fall through */
 			}
 			case PEER_SESSION_GETSTATUS: {
-				struct peer_session *ps = (struct peer_session *)si->applet.ctx.peers.ptr;
+				struct peer_session *ps = (struct peer_session *)si->appctx.ctx.peers.ptr;
 
 				if (si->ib->flags & CF_WRITE_PARTIAL)
 					ps->statuscode = PEER_SESSION_CONNECTEDCODE;
@@ -536,12 +536,12 @@
 				if (reql <= 0) { /* closed or EOL not found */
 					if (reql == 0)
 						goto out;
-					si->applet.st0 = PEER_SESSION_END;
+					si->appctx.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
 				if (trash.str[reql-1] != '\n') {
 					/* Incomplete line, we quit */
-					si->applet.st0 = PEER_SESSION_END;
+					si->appctx.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
 				else if (reql > 1 && (trash.str[reql-2] == '\r'))
@@ -591,14 +591,14 @@
 				}
 				else {
 					/* Status code is not success, abort */
-					si->applet.st0 = PEER_SESSION_END;
+					si->appctx.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
-				si->applet.st0 = PEER_SESSION_WAITMSG;
+				si->appctx.st0 = PEER_SESSION_WAITMSG;
 				/* fall through */
 			}
 			case PEER_SESSION_WAITMSG: {
-				struct peer_session *ps = (struct peer_session *)si->applet.ctx.peers.ptr;
+				struct peer_session *ps = (struct peer_session *)si->appctx.ctx.peers.ptr;
 				struct stksess *ts, *newts = NULL;
 				char c;
 				int totl = 0;
@@ -771,7 +771,7 @@
 					if (stopping) {
 						/* Close session, push resync no more needed */
 						ps->flags |= PEER_F_TEACH_COMPLETE;
-						si->applet.st0 = PEER_SESSION_END;
+						si->appctx.st0 = PEER_SESSION_END;
 						goto switchstate;
 					}
 
@@ -813,7 +813,7 @@
 				}
 				else {
 					/* Unknown message */
-					si->applet.st0 = PEER_SESSION_END;
+					si->appctx.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
 
@@ -834,7 +834,7 @@
 
 				if (reql < 0) {
 					/* there was an error */
-					si->applet.st0 = PEER_SESSION_END;
+					si->appctx.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
 
@@ -848,7 +848,7 @@
 						/* no more write possible */
 						if (repl == -1)
 							goto out;
-						si->applet.st0 = PEER_SESSION_END;
+						si->appctx.st0 = PEER_SESSION_END;
 						goto switchstate;
 					}
 					ps->confirm--;
@@ -865,7 +865,7 @@
 						/* no more write possible */
 						if (repl == -1)
 							goto out;
-						si->applet.st0 = PEER_SESSION_END;
+						si->appctx.st0 = PEER_SESSION_END;
 						goto switchstate;
 					}
 					ps->table->flags |= SHTABLE_F_RESYNC_PROCESS;
@@ -884,7 +884,7 @@
 						/* no more write possible */
 						if (repl == -1)
 							goto out;
-						si->applet.st0 = PEER_SESSION_END;
+						si->appctx.st0 = PEER_SESSION_END;
 						goto switchstate;
 					}
 					ps->lastack = ps->pushack;
@@ -920,7 +920,7 @@
 									/* no more write possible */
 									if (repl == -1)
 										goto out;
-									si->applet.st0 = PEER_SESSION_END;
+									si->appctx.st0 = PEER_SESSION_END;
 									goto switchstate;
 								}
 								ps->lastpush = ps->pushed = ts->upd.key;
@@ -954,7 +954,7 @@
 									/* no more write possible */
 									if (repl == -1)
 										goto out;
-									si->applet.st0 = PEER_SESSION_END;
+									si->appctx.st0 = PEER_SESSION_END;
 									goto switchstate;
 								}
 								ps->lastpush = ps->pushed = ts->upd.key;
@@ -970,7 +970,7 @@
 							/* no more write possible */
 							if (repl == -1)
 								goto out;
-							si->applet.st0 = PEER_SESSION_END;
+							si->appctx.st0 = PEER_SESSION_END;
 							goto switchstate;
 						}
 
@@ -1012,7 +1012,7 @@
 								/* no more write possible */
 								if (repl == -1)
 									goto out;
-								si->applet.st0 = PEER_SESSION_END;
+								si->appctx.st0 = PEER_SESSION_END;
 								goto switchstate;
 							}
 							ps->lastpush = ps->pushed = ts->upd.key;
@@ -1024,11 +1024,11 @@
 				goto out;
 			}
 			case PEER_SESSION_EXIT:
-				repl = snprintf(trash.str, trash.size, "%d\n", si->applet.st1);
+				repl = snprintf(trash.str, trash.size, "%d\n", si->appctx.st1);
 
 				if (bi_putblk(si->ib, trash.str, repl) == -1)
 					goto out;
-				si->applet.st0 = PEER_SESSION_END;
+				si->appctx.st0 = PEER_SESSION_END;
 				/* fall through */
 			case PEER_SESSION_END: {
 				si_shutw(si);
@@ -1071,8 +1071,8 @@
 
 	/* call release to reinit resync states if needed */
 	peer_session_release(oldsi);
-	oldsi->applet.st0 = PEER_SESSION_END;
-	oldsi->applet.ctx.peers.ptr = NULL;
+	oldsi->appctx.st0 = PEER_SESSION_END;
+	oldsi->appctx.ctx.peers.ptr = NULL;
 	task_wakeup(session->task, TASK_WOKEN_MSG);
 }
 
@@ -1087,8 +1087,8 @@
 	 /* we have a dedicated I/O handler for the stats */
 	stream_int_register_handler(&s->si[1], &peer_applet);
 	s->target = s->si[1].conn->target; // for logging only
-	s->si[1].applet.ctx.peers.ptr = s;
-	s->si[1].applet.st0 = PEER_SESSION_ACCEPT;
+	s->si[1].appctx.ctx.peers.ptr = s;
+	s->si[1].appctx.st0 = PEER_SESSION_ACCEPT;
 
 	tv_zero(&s->logs.tv_request);
 	s->logs.t_queue = 0;
@@ -1178,8 +1178,8 @@
 		s->si[0].flags |= SI_FL_INDEP_STR;
 
 	stream_int_register_handler(&s->si[0], &peer_applet);
-	s->si[0].applet.st0 = PEER_SESSION_CONNECT;
-	s->si[0].applet.ctx.peers.ptr = (void *)ps;
+	s->si[0].appctx.st0 = PEER_SESSION_CONNECT;
+	s->si[0].appctx.ctx.peers.ptr = (void *)ps;
 
 	s->si[1].conn->obj_type = OBJ_TYPE_CONN;
 	s->si[1].conn->t.sock.fd = -1; /* just to help with debugging */
diff --git a/src/proto_http.c b/src/proto_http.c
index dc3c9a9..94cf352 100644
--- a/src/proto_http.c
+++ b/src/proto_http.c
@@ -2806,16 +2806,16 @@
 	struct uri_auth *uri_auth = s->be->uri_auth;
 	const char *uri, *h, *lookup;
 
-	memset(&si->applet.ctx.stats, 0, sizeof(si->applet.ctx.stats));
-	si->applet.ctx.stats.st_code = STAT_STATUS_INIT;
-	si->applet.ctx.stats.flags |= STAT_FMT_HTML; /* assume HTML mode by default */
+	memset(&si->appctx.ctx.stats, 0, sizeof(si->appctx.ctx.stats));
+	si->appctx.ctx.stats.st_code = STAT_STATUS_INIT;
+	si->appctx.ctx.stats.flags |= STAT_FMT_HTML; /* assume HTML mode by default */
 
 	uri = msg->chn->buf->p + msg->sl.rq.u;
 	lookup = uri + uri_auth->uri_len;
 
 	for (h = lookup; h <= uri + msg->sl.rq.u_l - 3; h++) {
 		if (memcmp(h, ";up", 3) == 0) {
-			si->applet.ctx.stats.flags |= STAT_HIDE_DOWN;
+			si->appctx.ctx.stats.flags |= STAT_HIDE_DOWN;
 			break;
 		}
 	}
@@ -2823,7 +2823,7 @@
 	if (uri_auth->refresh) {
 		for (h = lookup; h <= uri + msg->sl.rq.u_l - 10; h++) {
 			if (memcmp(h, ";norefresh", 10) == 0) {
-				si->applet.ctx.stats.flags |= STAT_NO_REFRESH;
+				si->appctx.ctx.stats.flags |= STAT_NO_REFRESH;
 				break;
 			}
 		}
@@ -2831,7 +2831,7 @@
 
 	for (h = lookup; h <= uri + msg->sl.rq.u_l - 4; h++) {
 		if (memcmp(h, ";csv", 4) == 0) {
-			si->applet.ctx.stats.flags &= ~STAT_FMT_HTML;
+			si->appctx.ctx.stats.flags &= ~STAT_FMT_HTML;
 			break;
 		}
 	}
@@ -2840,10 +2840,10 @@
 		if (memcmp(h, ";st=", 4) == 0) {
 			int i;
 			h += 4;
-			si->applet.ctx.stats.st_code = STAT_STATUS_UNKN;
+			si->appctx.ctx.stats.st_code = STAT_STATUS_UNKN;
 			for (i = STAT_STATUS_INIT + 1; i < STAT_STATUS_SIZE; i++) {
 				if (strncmp(stat_status_codes[i], h, 4) == 0) {
-					si->applet.ctx.stats.st_code = i;
+					si->appctx.ctx.stats.st_code = i;
 					break;
 				}
 			}
@@ -2851,8 +2851,8 @@
 		}
 	}
 
-	si->applet.ctx.stats.scope_str = 0;
-	si->applet.ctx.stats.scope_len = 0;
+	si->appctx.ctx.stats.scope_str = 0;
+	si->appctx.ctx.stats.scope_len = 0;
 	for (h = lookup; h <= uri + msg->sl.rq.u_l - 8; h++) {
 		if (memcmp(h, STAT_SCOPE_INPUT_NAME "=", strlen(STAT_SCOPE_INPUT_NAME) + 1) == 0) {
 			int itx = 0;
@@ -2862,7 +2862,7 @@
 
 			h += strlen(STAT_SCOPE_INPUT_NAME) + 1;
 			h2 = h;
-			si->applet.ctx.stats.scope_str = h2 - msg->chn->buf->p;
+			si->appctx.ctx.stats.scope_str = h2 - msg->chn->buf->p;
 			while (*h != ';' && *h != '\0' && *h != '&' && *h != ' ' && *h != '\n') {
 				itx++;
 				h++;
@@ -2870,16 +2870,16 @@
 
 			if (itx > STAT_SCOPE_TXT_MAXLEN)
 				itx = STAT_SCOPE_TXT_MAXLEN;
-			si->applet.ctx.stats.scope_len = itx;
+			si->appctx.ctx.stats.scope_len = itx;
 
-			/* scope_txt = search query, si->applet.ctx.stats.scope_len is always <= STAT_SCOPE_TXT_MAXLEN */
+			/* scope_txt = search query, si->appctx.ctx.stats.scope_len is always <= STAT_SCOPE_TXT_MAXLEN */
 			memcpy(scope_txt, h2, itx);
 			scope_txt[itx] = '\0';
 			err = invalid_char(scope_txt);
 			if (err) {
 				/* bad char in search text => clear scope */
-				si->applet.ctx.stats.scope_str = 0;
-				si->applet.ctx.stats.scope_len = 0;
+				si->appctx.ctx.stats.scope_str = 0;
+				si->appctx.ctx.stats.scope_len = 0;
 			}
 			break;
 		}
@@ -2898,14 +2898,14 @@
 
 		if (ret) {
 			/* no rule, or the rule matches */
-			s->rep->prod->applet.ctx.stats.flags |= STAT_ADMIN;
+			s->rep->prod->appctx.ctx.stats.flags |= STAT_ADMIN;
 			break;
 		}
 	}
 
 	/* Was the status page requested with a POST ? */
 	if (unlikely(txn->meth == HTTP_METH_POST && txn->req.body_len > 0)) {
-		if (si->applet.ctx.stats.flags & STAT_ADMIN) {
+		if (si->appctx.ctx.stats.flags & STAT_ADMIN) {
 			if (msg->msg_state < HTTP_MSG_100_SENT) {
 				/* If we have HTTP/1.1 and Expect: 100-continue, then we must
 				 * send an HTTP/1.1 100 Continue intermediate response.
@@ -2922,21 +2922,21 @@
 				msg->msg_state = HTTP_MSG_100_SENT;
 				s->logs.tv_request = now;  /* update the request timer to reflect full request */
 			}
-			s->rep->prod->applet.st0 = STAT_HTTP_POST;
+			s->rep->prod->appctx.st0 = STAT_HTTP_POST;
 		}
 		else {
-			si->applet.ctx.stats.st_code = STAT_STATUS_DENY;
-			s->rep->prod->applet.st0 = STAT_HTTP_LAST;
+			si->appctx.ctx.stats.st_code = STAT_STATUS_DENY;
+			s->rep->prod->appctx.st0 = STAT_HTTP_LAST;
 		}
 	}
 	else {
 		/* So it was another method (GET/HEAD) */
-		s->rep->prod->applet.st0 = STAT_HTTP_HEAD;
+		s->rep->prod->appctx.st0 = STAT_HTTP_HEAD;
 	}
 
 	s->task->nice = -32; /* small boost for HTTP statistics */
 	stream_int_register_handler(s->rep->prod, &http_stats_applet);
-	s->rep->prod->applet.st1 = s->rep->prod->applet.st2 = 0;
+	s->rep->prod->appctx.st1 = s->rep->prod->appctx.st2 = 0;
 	return 1;
 }
 
