diff --git a/src/dumpstats.c b/src/dumpstats.c
index 2630eed..c24c1ef 100644
--- a/src/dumpstats.c
+++ b/src/dumpstats.c
@@ -85,9 +85,9 @@
 {
 	/* we have a dedicated I/O handler for the stats */
 	stream_int_register_handler(&s->si[1], &cli_applet);
-	s->si[1].private = s;
-	s->si[1].st1 = 0;
-	s->si[1].st0 = STAT_CLI_INIT;
+	s->si[1].applet.private = s;
+	s->si[1].applet.st1 = 0;
+	s->si[1].applet.st0 = STAT_CLI_INIT;
 
 	tv_zero(&s->logs.tv_request);
 	s->logs.t_queue = 0;
@@ -316,13 +316,13 @@
 
 /* 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->st0 to a value
+ * if the request was understood, otherwise zero. It sets si->applet.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.
  */
 int stats_sock_parse_request(struct stream_interface *si, char *line)
 {
-	struct session *s = si->private;
+	struct session *s = si->applet.private;
 	char *args[MAX_STATS_ARGS + 1];
 	int arg;
 
@@ -362,19 +362,19 @@
 			s->data_ctx.stats.flags |= STAT_SHOW_STAT;
 			s->data_ctx.stats.flags |= STAT_FMT_CSV;
 			s->data_state = DATA_ST_INIT;
-			si->st0 = STAT_CLI_O_INFO; // stats_dump_raw_to_buffer
+			si->applet.st0 = STAT_CLI_O_INFO; // stats_dump_raw_to_buffer
 		}
 		else if (strcmp(args[1], "info") == 0) {
 			s->data_ctx.stats.flags |= STAT_SHOW_INFO;
 			s->data_ctx.stats.flags |= STAT_FMT_CSV;
 			s->data_state = DATA_ST_INIT;
-			si->st0 = STAT_CLI_O_INFO; // stats_dump_raw_to_buffer
+			si->applet.st0 = STAT_CLI_O_INFO; // stats_dump_raw_to_buffer
 		}
 		else if (strcmp(args[1], "sess") == 0) {
 			s->data_state = DATA_ST_INIT;
 			if (s->listener->perm.ux.level < ACCESS_LVL_OPER) {
 				s->data_ctx.cli.msg = stats_permission_denied_msg;
-				si->st0 = STAT_CLI_PRINT;
+				si->applet.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 			if (*args[2])
@@ -383,12 +383,12 @@
 				s->data_ctx.sess.target = NULL;
 			s->data_ctx.sess.section = 0; /* start with session status */
 			s->data_ctx.sess.pos = 0;
-			si->st0 = STAT_CLI_O_SESS; // stats_dump_sess_to_buffer
+			si->applet.st0 = STAT_CLI_O_SESS; // stats_dump_sess_to_buffer
 		}
 		else if (strcmp(args[1], "errors") == 0) {
 			if (s->listener->perm.ux.level < ACCESS_LVL_OPER) {
 				s->data_ctx.cli.msg = stats_permission_denied_msg;
-				si->st0 = STAT_CLI_PRINT;
+				si->applet.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 			if (*args[2])
@@ -397,7 +397,7 @@
 				s->data_ctx.errors.iid	= -1;
 			s->data_ctx.errors.px = NULL;
 			s->data_state = DATA_ST_INIT;
-			si->st0 = STAT_CLI_O_ERR; // stats_dump_errors_to_buffer
+			si->applet.st0 = STAT_CLI_O_ERR; // stats_dump_errors_to_buffer
 		}
 		else if (strcmp(args[1], "table") == 0) {
 			s->data_state = DATA_ST_INIT;
@@ -405,7 +405,7 @@
 				s->data_ctx.table.target = find_stktable(args[2]);
 				if (!s->data_ctx.table.target) {
 					s->data_ctx.cli.msg = "No such table\n";
-					si->st0 = STAT_CLI_PRINT;
+					si->applet.st0 = STAT_CLI_PRINT;
 					return 1;
 				}
 			}
@@ -418,38 +418,38 @@
 				s->data_ctx.table.data_type = stktable_get_data_type(args[3] + 5);
 				if (s->data_ctx.table.data_type < 0) {
 					s->data_ctx.cli.msg = "Unknown data type\n";
-					si->st0 = STAT_CLI_PRINT;
+					si->applet.st0 = STAT_CLI_PRINT;
 					return 1;
 				}
 
 				if (!((struct proxy *)s->data_ctx.table.target)->table.data_ofs[s->data_ctx.table.data_type]) {
 					s->data_ctx.cli.msg = "Data type not stored in this table\n";
-					si->st0 = STAT_CLI_PRINT;
+					si->applet.st0 = STAT_CLI_PRINT;
 					return 1;
 				}
 
 				s->data_ctx.table.data_op = get_std_op(args[4]);
 				if (s->data_ctx.table.data_op < 0) {
 					s->data_ctx.cli.msg = "Require and operator among \"eq\", \"ne\", \"le\", \"ge\", \"lt\", \"gt\"\n";
-					si->st0 = STAT_CLI_PRINT;
+					si->applet.st0 = STAT_CLI_PRINT;
 					return 1;
 				}
 
 				if (!*args[5] || strl2llrc(args[5], strlen(args[5]), &s->data_ctx.table.value) != 0) {
 					s->data_ctx.cli.msg = "Require a valid integer value to compare against\n";
-					si->st0 = STAT_CLI_PRINT;
+					si->applet.st0 = STAT_CLI_PRINT;
 					return 1;
 				}
 			}
 			else if (*args[3]) {
 				s->data_ctx.cli.msg = "Optional argument only supports \"data.<store_data_type>\" <operator> <value>\n";
-				si->st0 = STAT_CLI_PRINT;
+				si->applet.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
 			s->data_ctx.table.proxy = NULL;
 			s->data_ctx.table.entry = NULL;
-			si->st0 = STAT_CLI_O_TAB; // stats_dump_table_to_buffer
+			si->applet.st0 = STAT_CLI_O_TAB; // stats_dump_table_to_buffer
 		}
 		else { /* neither "stat" nor "info" nor "sess" nor "errors" no "table" */
 			return 0;
@@ -469,7 +469,7 @@
 			if (s->listener->perm.ux.level < ACCESS_LVL_OPER ||
 			    (clrall && s->listener->perm.ux.level < ACCESS_LVL_ADMIN)) {
 				s->data_ctx.cli.msg = stats_permission_denied_msg;
-				si->st0 = STAT_CLI_PRINT;
+				si->applet.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
@@ -513,7 +513,7 @@
 
 			if (!*args[2]) {
 				s->data_ctx.cli.msg = "\"table\" argument expected\n";
-				si->st0 = STAT_CLI_PRINT;
+				si->applet.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
@@ -521,19 +521,19 @@
 
 			if (!px) {
 				s->data_ctx.cli.msg = "No such table\n";
-				si->st0 = STAT_CLI_PRINT;
+				si->applet.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
 			if (strcmp(args[3], "key") != 0) {
 				s->data_ctx.cli.msg = "\"key\" argument expected\n";
-				si->st0 = STAT_CLI_PRINT;
+				si->applet.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
 			if (!*args[4]) {
 				s->data_ctx.cli.msg = "Key value expected\n";
-				si->st0 = STAT_CLI_PRINT;
+				si->applet.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
@@ -543,14 +543,14 @@
 			}
 			else {
 				s->data_ctx.cli.msg = "Removing keys from non-ip tables is not supported\n";
-				si->st0 = STAT_CLI_PRINT;
+				si->applet.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
 			/* check permissions */
 			if (s->listener->perm.ux.level < ACCESS_LVL_OPER) {
 				s->data_ctx.cli.msg = stats_permission_denied_msg;
-				si->st0 = STAT_CLI_PRINT;
+				si->applet.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
@@ -562,7 +562,7 @@
 			else if (ts->ref_cnt) {
 				/* don't delete an entry which is currently referenced */
 				s->data_ctx.cli.msg = "Entry currently in use, cannot remove\n";
-				si->st0 = STAT_CLI_PRINT;
+				si->applet.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
@@ -589,13 +589,13 @@
 
 			if (!*line) {
 				s->data_ctx.cli.msg = "Require 'backend/server'.\n";
-				si->st0 = STAT_CLI_PRINT;
+				si->applet.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
 			if (!get_backend_server(args[2], line, &px, &sv)) {
 				s->data_ctx.cli.msg = px ? "No such server.\n" : "No such backend.\n";
-				si->st0 = STAT_CLI_PRINT;
+				si->applet.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
@@ -616,7 +616,7 @@
 
 			if (s->listener->perm.ux.level < ACCESS_LVL_ADMIN) {
 				s->data_ctx.cli.msg = stats_permission_denied_msg;
-				si->st0 = STAT_CLI_PRINT;
+				si->applet.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
@@ -629,19 +629,19 @@
 
 			if (!*line || !*args[3]) {
 				s->data_ctx.cli.msg = "Require 'backend/server' and 'weight' or 'weight%'.\n";
-				si->st0 = STAT_CLI_PRINT;
+				si->applet.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
 			if (!get_backend_server(args[2], line, &px, &sv)) {
 				s->data_ctx.cli.msg = px ? "No such server.\n" : "No such backend.\n";
-				si->st0 = STAT_CLI_PRINT;
+				si->applet.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
 			if (px->state == PR_STSTOPPED) {
 				s->data_ctx.cli.msg = "Proxy is disabled.\n";
-				si->st0 = STAT_CLI_PRINT;
+				si->applet.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
@@ -652,7 +652,7 @@
 			if (strchr(args[3], '%') != NULL) {
 				if (w < 0 || w > 100) {
 					s->data_ctx.cli.msg = "Relative weight can only be set between 0 and 100% inclusive.\n";
-					si->st0 = STAT_CLI_PRINT;
+					si->applet.st0 = STAT_CLI_PRINT;
 					return 1;
 				}
 				w = sv->iweight * w / 100;
@@ -660,14 +660,14 @@
 			else {
 				if (w < 0 || w > 256) {
 					s->data_ctx.cli.msg = "Absolute weight can only be between 0 and 256 inclusive.\n";
-					si->st0 = STAT_CLI_PRINT;
+					si->applet.st0 = STAT_CLI_PRINT;
 					return 1;
 				}
 			}
 
 			if (w && w != sv->iweight && !(px->lbprm.algo & BE_LB_PROP_DYN)) {
 				s->data_ctx.cli.msg = "Backend is using a static LB algorithm and only accepts weights '0%' and '100%'.\n";
-				si->st0 = STAT_CLI_PRINT;
+				si->applet.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
@@ -701,14 +701,14 @@
 
 				if (!*args[3]) {
 					s->data_ctx.cli.msg = "Expects an integer value.\n";
-					si->st0 = STAT_CLI_PRINT;
+					si->applet.st0 = STAT_CLI_PRINT;
 					return 1;
 				}
 
 				res = parse_time_err(args[3], &timeout, TIME_UNIT_S);
 				if (res || timeout < 1) {
 					s->data_ctx.cli.msg = "Invalid timeout value.\n";
-					si->st0 = STAT_CLI_PRINT;
+					si->applet.st0 = STAT_CLI_PRINT;
 					return 1;
 				}
 
@@ -717,7 +717,7 @@
 			}
 			else {
 				s->data_ctx.cli.msg = "'set timeout' only supports 'cli'.\n";
-				si->st0 = STAT_CLI_PRINT;
+				si->applet.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 		}
@@ -732,7 +732,7 @@
 
 			if (s->listener->perm.ux.level < ACCESS_LVL_ADMIN) {
 				s->data_ctx.cli.msg = stats_permission_denied_msg;
-				si->st0 = STAT_CLI_PRINT;
+				si->applet.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
@@ -745,19 +745,19 @@
 
 			if (!*line || !*args[2]) {
 				s->data_ctx.cli.msg = "Require 'backend/server'.\n";
-				si->st0 = STAT_CLI_PRINT;
+				si->applet.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
 			if (!get_backend_server(args[2], line, &px, &sv)) {
 				s->data_ctx.cli.msg = px ? "No such server.\n" : "No such backend.\n";
-				si->st0 = STAT_CLI_PRINT;
+				si->applet.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
 			if (px->state == PR_STSTOPPED) {
 				s->data_ctx.cli.msg = "Proxy is disabled.\n";
-				si->st0 = STAT_CLI_PRINT;
+				si->applet.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
@@ -793,7 +793,7 @@
 
 			if (s->listener->perm.ux.level < ACCESS_LVL_ADMIN) {
 				s->data_ctx.cli.msg = stats_permission_denied_msg;
-				si->st0 = STAT_CLI_PRINT;
+				si->applet.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
@@ -806,19 +806,19 @@
 
 			if (!*line || !*args[2]) {
 				s->data_ctx.cli.msg = "Require 'backend/server'.\n";
-				si->st0 = STAT_CLI_PRINT;
+				si->applet.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
 			if (!get_backend_server(args[2], line, &px, &sv)) {
 				s->data_ctx.cli.msg = px ? "No such server.\n" : "No such backend.\n";
-				si->st0 = STAT_CLI_PRINT;
+				si->applet.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
 			if (px->state == PR_STSTOPPED) {
 				s->data_ctx.cli.msg = "Proxy is disabled.\n";
-				si->st0 = STAT_CLI_PRINT;
+				si->applet.st0 = STAT_CLI_PRINT;
 				return 1;
 			}
 
@@ -844,13 +844,13 @@
  * 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->st0 and is one of the
- * STAT_CLI_* constants. si->st1 is used to indicate whether prompt is enabled
+ * 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
  * or not.
  */
 static void cli_io_handler(struct stream_interface *si)
 {
-	struct session *s = si->private;
+	struct session *s = si->applet.private;
 	struct buffer *req = si->ob;
 	struct buffer *res = si->ib;
 	int reql;
@@ -860,20 +860,20 @@
 		goto out;
 
 	while (1) {
-		if (si->st0 == STAT_CLI_INIT) {
+		if (si->applet.st0 == STAT_CLI_INIT) {
 			/* Stats output not initialized yet */
 			memset(&s->data_ctx.stats, 0, sizeof(s->data_ctx.stats));
 			s->data_source = DATA_SRC_STATS;
-			si->st0 = STAT_CLI_GETREQ;
+			si->applet.st0 = STAT_CLI_GETREQ;
 		}
-		else if (si->st0 == STAT_CLI_END) {
+		else if (si->applet.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->st0 == STAT_CLI_GETREQ) {
+		else if (si->applet.st0 == STAT_CLI_GETREQ) {
 			/* ensure we have some output room left in the event we
 			 * would want to return some info right after parsing.
 			 */
@@ -884,7 +884,7 @@
 			if (reql <= 0) { /* closed or EOL not found */
 				if (reql == 0)
 					break;
-				si->st0 = STAT_CLI_END;
+				si->applet.st0 = STAT_CLI_END;
 				continue;
 			}
 
@@ -904,7 +904,7 @@
 			 */
 			len = reql - 1;
 			if (trash[len] != '\n') {
-				si->st0 = STAT_CLI_END;
+				si->applet.st0 = STAT_CLI_END;
 				continue;
 			}
 
@@ -913,30 +913,30 @@
 
 			trash[len] = '\0';
 
-			si->st0 = STAT_CLI_PROMPT;
+			si->applet.st0 = STAT_CLI_PROMPT;
 			if (len) {
 				if (strcmp(trash, "quit") == 0) {
-					si->st0 = STAT_CLI_END;
+					si->applet.st0 = STAT_CLI_END;
 					continue;
 				}
 				else if (strcmp(trash, "prompt") == 0)
-					si->st1 = !si->st1;
+					si->applet.st1 = !si->applet.st1;
 				else if (strcmp(trash, "help") == 0 ||
 					 !stats_sock_parse_request(si, trash)) {
 					s->data_ctx.cli.msg = stats_sock_usage_msg;
-					si->st0 = STAT_CLI_PRINT;
+					si->applet.st0 = STAT_CLI_PRINT;
 				}
 				/* NB: stats_sock_parse_request() may have put
-				 * another STAT_CLI_O_* into si->st0.
+				 * another STAT_CLI_O_* into si->applet.st0.
 				 */
 			}
-			else if (!si->st1) {
+			else if (!si->applet.st1) {
 				/* if prompt is disabled, print help on empty lines,
 				 * so that the user at least knows how to enable
 				 * prompt and find help.
 				 */
 				s->data_ctx.cli.msg = stats_sock_usage_msg;
-				si->st0 = STAT_CLI_PRINT;
+				si->applet.st0 = STAT_CLI_PRINT;
 			}
 
 			/* re-adjust req buffer */
@@ -945,44 +945,44 @@
 		}
 		else {	/* output functions: first check if the output buffer is closed then abort */
 			if (res->flags & (BF_SHUTR_NOW|BF_SHUTR)) {
-				si->st0 = STAT_CLI_END;
+				si->applet.st0 = STAT_CLI_END;
 				continue;
 			}
 
-			switch (si->st0) {
+			switch (si->applet.st0) {
 			case STAT_CLI_PRINT:
 				if (buffer_feed(si->ib, s->data_ctx.cli.msg) < 0)
-					si->st0 = STAT_CLI_PROMPT;
+					si->applet.st0 = STAT_CLI_PROMPT;
 				break;
 			case STAT_CLI_O_INFO:
 				if (stats_dump_raw_to_buffer(s, res))
-					si->st0 = STAT_CLI_PROMPT;
+					si->applet.st0 = STAT_CLI_PROMPT;
 				break;
 			case STAT_CLI_O_SESS:
 				if (stats_dump_sess_to_buffer(s, res))
-					si->st0 = STAT_CLI_PROMPT;
+					si->applet.st0 = STAT_CLI_PROMPT;
 				break;
 			case STAT_CLI_O_ERR:	/* errors dump */
 				if (stats_dump_errors_to_buffer(s, res))
-					si->st0 = STAT_CLI_PROMPT;
+					si->applet.st0 = STAT_CLI_PROMPT;
 				break;
 			case STAT_CLI_O_TAB:
 				if (stats_dump_table_to_buffer(s, res))
-					si->st0 = STAT_CLI_PROMPT;
+					si->applet.st0 = STAT_CLI_PROMPT;
 				break;
 			default: /* abnormal state */
-				si->st0 = STAT_CLI_PROMPT;
+				si->applet.st0 = STAT_CLI_PROMPT;
 				break;
 			}
 
 			/* The post-command prompt is either LF alone or LF + '> ' in interactive mode */
-			if (si->st0 == STAT_CLI_PROMPT) {
-				if (buffer_feed(si->ib, si->st1 ? "\n> " : "\n") < 0)
-					si->st0 = STAT_CLI_GETREQ;
+			if (si->applet.st0 == STAT_CLI_PROMPT) {
+				if (buffer_feed(si->ib, si->applet.st1 ? "\n> " : "\n") < 0)
+					si->applet.st0 = STAT_CLI_GETREQ;
 			}
 
 			/* If the output functions are still there, it means they require more room. */
-			if (si->st0 >= STAT_CLI_OUTPUT)
+			if (si->applet.st0 >= STAT_CLI_OUTPUT)
 				break;
 
 			/* Now we close the output if one of the writers did so,
@@ -990,17 +990,17 @@
 			 * buffer is empty. This still allows pipelined requests
 			 * to be sent in non-interactive mode.
 			 */
-			if ((res->flags & (BF_SHUTW|BF_SHUTW_NOW)) || (!si->st1 && !req->send_max)) {
-				si->st0 = STAT_CLI_END;
+			if ((res->flags & (BF_SHUTW|BF_SHUTW_NOW)) || (!si->applet.st1 && !req->send_max)) {
+				si->applet.st0 = STAT_CLI_END;
 				continue;
 			}
 
 			/* switch state back to GETREQ to read next requests */
-			si->st0 = STAT_CLI_GETREQ;
+			si->applet.st0 = STAT_CLI_GETREQ;
 		}
 	}
 
-	if ((res->flags & BF_SHUTR) && (si->state == SI_ST_EST) && (si->st0 != STAT_CLI_GETREQ)) {
+	if ((res->flags & BF_SHUTR) && (si->state == SI_ST_EST) && (si->applet.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 size has closed, let's abort if we have no more processing to do
@@ -1011,7 +1011,7 @@
 		si->shutw(si);
 	}
 
-	if ((req->flags & BF_SHUTW) && (si->state == SI_ST_EST) && (si->st0 < STAT_CLI_OUTPUT)) {
+	if ((req->flags & BF_SHUTW) && (si->state == SI_ST_EST) && (si->applet.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
@@ -1197,12 +1197,12 @@
 
 /* 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->st0 becomes non-zero once the transfer is finished. The handler
+ * si->applet.st0 becomes non-zero once the transfer is finished. The handler
  * automatically unregisters itself once transfer is complete.
  */
 static void http_stats_io_handler(struct stream_interface *si)
 {
-	struct session *s = si->private;
+	struct session *s = si->applet.private;
 	struct buffer *req = si->ob;
 	struct buffer *res = si->ib;
 
@@ -1211,17 +1211,17 @@
 
 	/* check that the output is not closed */
 	if (res->flags & (BF_SHUTW|BF_SHUTW_NOW))
-		si->st0 = 1;
+		si->applet.st0 = 1;
 
-	if (!si->st0) {
+	if (!si->applet.st0) {
 		if (s->txn.meth == HTTP_METH_POST) {
 			if (stats_http_redir(s, res, s->be->uri_auth)) {
-				si->st0 = 1;
+				si->applet.st0 = 1;
 				si->shutw(si);
 			}
 		} else {
 			if (stats_dump_http(s, res, s->be->uri_auth)) {
-				si->st0 = 1;
+				si->applet.st0 = 1;
 				si->shutw(si);
 			}
 		}
@@ -1230,7 +1230,7 @@
 	if ((res->flags & BF_SHUTR) && (si->state == SI_ST_EST))
 		si->shutw(si);
 
-	if ((req->flags & BF_SHUTW) && (si->state == SI_ST_EST) && si->st0) {
+	if ((req->flags & BF_SHUTW) && (si->state == SI_ST_EST) && si->applet.st0) {
 		si->shutr(si);
 		res->flags |= BF_READ_NULL;
 	}
diff --git a/src/peers.c b/src/peers.c
index 39f4a35..a3f1ab3 100644
--- a/src/peers.c
+++ b/src/peers.c
@@ -186,10 +186,10 @@
 {
 	struct task *t= (struct task *)si->owner;
 	struct session *s = (struct session *)t->context;
-	struct peer_session *ps = (struct peer_session *)si->private;
+	struct peer_session *ps = (struct peer_session *)si->applet.private;
 
-	/* si->private is not a peer session */
-	if (si->st0 < PEER_SESSION_SENDSUCCESS)
+	/* si->applet.private is not a peer session */
+	if (si->applet.st0 < PEER_SESSION_SENDSUCCESS)
 		return;
 
 	/* peer session identified */
@@ -226,21 +226,21 @@
 
 	while (1) {
 switchstate:
-		switch(si->st0) {
+		switch(si->applet.st0) {
 			case PEER_SESSION_ACCEPT:
-				si->private = NULL;
-				si->st0 = PEER_SESSION_GETVERSION;
+				si->applet.private = NULL;
+				si->applet.st0 = PEER_SESSION_GETVERSION;
 				/* fall through */
 			case PEER_SESSION_GETVERSION:
 				reql = buffer_get_line(si->ob, trash, sizeof(trash));
 				if (reql <= 0) { /* closed or EOL not found */
 					if (reql == 0)
 						goto out;
-					si->st0 = PEER_SESSION_END;
+					si->applet.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
 				if (trash[reql-1] != '\n') {
-					si->st0 = PEER_SESSION_END;
+					si->applet.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
 				else if (reql > 1 && (trash[reql-2] == '\r'))
@@ -252,26 +252,26 @@
 
 				/* test version */
 				if (strcmp(PEER_SESSION_PROTO_NAME " 1.0", trash) != 0) {
-					si->st0 = PEER_SESSION_EXIT;
-					si->st1 = PEER_SESSION_ERRVERSION;
+					si->applet.st0 = PEER_SESSION_EXIT;
+					si->applet.st1 = PEER_SESSION_ERRVERSION;
 					/* test protocol */
 					if (strncmp(PEER_SESSION_PROTO_NAME " ", trash, strlen(PEER_SESSION_PROTO_NAME)+1) != 0)
-						si->st1 = PEER_SESSION_ERRPROTO;
+						si->applet.st1 = PEER_SESSION_ERRPROTO;
 					goto switchstate;
 				}
 
-				si->st0 = PEER_SESSION_GETHOST;
+				si->applet.st0 = PEER_SESSION_GETHOST;
 				/* fall through */
 			case PEER_SESSION_GETHOST:
 				reql = buffer_get_line(si->ob, trash, sizeof(trash));
 				if (reql <= 0) { /* closed or EOL not found */
 					if (reql == 0)
 						goto out;
-					si->st0 = PEER_SESSION_END;
+					si->applet.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
 				if (trash[reql-1] != '\n') {
-					si->st0 = PEER_SESSION_END;
+					si->applet.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
 				else if (reql > 1 && (trash[reql-2] == '\r'))
@@ -283,12 +283,12 @@
 
 				/* test hostname match */
 				if (strcmp(localpeer, trash) != 0) {
-					si->st0 = PEER_SESSION_EXIT;
-					si->st1 = PEER_SESSION_ERRHOST;
+					si->applet.st0 = PEER_SESSION_EXIT;
+					si->applet.st1 = PEER_SESSION_ERRHOST;
 					goto switchstate;
 				}
 
-				si->st0 = PEER_SESSION_GETPEER;
+				si->applet.st0 = PEER_SESSION_GETPEER;
 				/* fall through */
 			case PEER_SESSION_GETPEER: {
 				struct peer *curpeer;
@@ -297,12 +297,12 @@
 				if (reql <= 0) { /* closed or EOL not found */
 					if (reql == 0)
 						goto out;
-					si->st0 = PEER_SESSION_END;
+					si->applet.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
 				if (trash[reql-1] != '\n') {
 					/* Incomplete line, we quit */
-					si->st0 = PEER_SESSION_END;
+					si->applet.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
 				else if (reql > 1 && (trash[reql-2] == '\r'))
@@ -315,8 +315,8 @@
 				/* parse line "<peer name> <pid>" */
 				p = strchr(trash, ' ');
 				if (!p) {
-					si->st0 = PEER_SESSION_EXIT;
-					si->st1 = PEER_SESSION_ERRPROTO;
+					si->applet.st0 = PEER_SESSION_EXIT;
+					si->applet.st1 = PEER_SESSION_ERRPROTO;
 					goto switchstate;
 				}
 				*p = 0;
@@ -329,17 +329,17 @@
 
 				/* if unknown peer */
 				if (!curpeer) {
-					si->st0 = PEER_SESSION_EXIT;
-					si->st1 = PEER_SESSION_ERRPEER;
+					si->applet.st0 = PEER_SESSION_EXIT;
+					si->applet.st1 = PEER_SESSION_ERRPEER;
 					goto switchstate;
 				}
 
-				si->private = curpeer;
-				si->st0 = PEER_SESSION_GETTABLE;
+				si->applet.private = curpeer;
+				si->applet.st0 = PEER_SESSION_GETTABLE;
 				/* fall through */
 			}
 			case PEER_SESSION_GETTABLE: {
-				struct peer *curpeer = (struct peer *)si->private;
+				struct peer *curpeer = (struct peer *)si->applet.private;
 				struct shared_table *st;
 				struct peer_session *ps = NULL;
 				unsigned long key_type;
@@ -350,16 +350,16 @@
 				if (reql <= 0) { /* closed or EOL not found */
 					if (reql == 0)
 						goto out;
-					si->private = NULL;
-					si->st0 = PEER_SESSION_END;
+					si->applet.private = NULL;
+					si->applet.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
-				/* Re init si->private to null, to handle correctly a release case */
-				si->private = NULL;
+				/* Re init si->applet.private to null, to handle correctly a release case */
+				si->applet.private = NULL;
 
 				if (trash[reql-1] != '\n') {
 					/* Incomplete line, we quit */
-					si->st0 = PEER_SESSION_END;
+					si->applet.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
 				else if (reql > 1 && (trash[reql-2] == '\r'))
@@ -372,8 +372,8 @@
 				/* Parse line "<table name> <type> <size>" */
 				p = strchr(trash, ' ');
 				if (!p) {
-					si->st0 = PEER_SESSION_EXIT;
-					si->st1 = PEER_SESSION_ERRPROTO;
+					si->applet.st0 = PEER_SESSION_EXIT;
+					si->applet.st1 = PEER_SESSION_ERRPROTO;
 					goto switchstate;
 				}
 				*p = 0;
@@ -381,9 +381,9 @@
 
 				p = strchr(p+1, ' ');
 				if (!p) {
-					si->private = NULL;
-					si->st0 = PEER_SESSION_EXIT;
-					si->st1 = PEER_SESSION_ERRPROTO;
+					si->applet.private = NULL;
+					si->applet.st0 = PEER_SESSION_EXIT;
+					si->applet.st1 = PEER_SESSION_ERRPROTO;
 					goto switchstate;
 				}
 
@@ -393,15 +393,15 @@
 					if (strcmp(st->table->id, trash) == 0) {
 						/* If key size mismatches */
 						if (key_size != st->table->key_size) {
-							si->st0 = PEER_SESSION_EXIT;
-							si->st1 = PEER_SESSION_ERRSIZE;
+							si->applet.st0 = PEER_SESSION_EXIT;
+							si->applet.st1 = PEER_SESSION_ERRSIZE;
 							goto switchstate;
 						}
 
 						/* If key type mismatches */
 						if (key_type != st->table->type) {
-							si->st0 = PEER_SESSION_EXIT;
-							si->st1 = PEER_SESSION_ERRTYPE;
+							si->applet.st0 = PEER_SESSION_EXIT;
+							si->applet.st1 = PEER_SESSION_ERRTYPE;
 							goto switchstate;
 						}
 
@@ -412,8 +412,8 @@
 								if (ps->session && ps->session != s) {
 									if (ps->peer->local) {
 										/* Local connection, reply a retry */
-										si->st0 = PEER_SESSION_EXIT;
-										si->st1 = PEER_SESSION_TRYAGAIN;
+										si->applet.st0 = PEER_SESSION_EXIT;
+										si->applet.st1 = PEER_SESSION_TRYAGAIN;
 										goto switchstate;
 									}
 									peer_session_forceshutdown(ps->session);
@@ -428,31 +428,31 @@
 
 				/* If table not found */
 				if (!st){
-					si->st0 = PEER_SESSION_EXIT;
-					si->st1 = PEER_SESSION_ERRTABLE;
+					si->applet.st0 = PEER_SESSION_EXIT;
+					si->applet.st1 = PEER_SESSION_ERRTABLE;
 					goto switchstate;
 				}
 
 				/* If no peer session for current peer */
 				if (!ps) {
-					si->st0 = PEER_SESSION_EXIT;
-					si->st1 = PEER_SESSION_ERRPEER;
+					si->applet.st0 = PEER_SESSION_EXIT;
+					si->applet.st1 = PEER_SESSION_ERRPEER;
 					goto switchstate;
 				}
 
-				si->private = ps;
-				si->st0 = PEER_SESSION_SENDSUCCESS;
+				si->applet.private = ps;
+				si->applet.st0 = PEER_SESSION_SENDSUCCESS;
 				/* fall through */
 			}
 			case PEER_SESSION_SENDSUCCESS:{
-				struct peer_session *ps = (struct peer_session *)si->private;
+				struct peer_session *ps = (struct peer_session *)si->applet.private;
 
 				repl = snprintf(trash, sizeof(trash), "%d\n", PEER_SESSION_SUCCESSCODE);
 				repl = buffer_put_block(si->ib, trash, repl);
 				if (repl <= 0) {
 					if (repl == -1)
 						goto out;
-					si->st0 = PEER_SESSION_END;
+					si->applet.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
 
@@ -491,11 +491,11 @@
 					ps->table->flags |= SHTABLE_F_RESYNC_ASSIGN;
 				}
 				/* switch to waiting message state */
-				si->st0 = PEER_SESSION_WAITMSG;
+				si->applet.st0 = PEER_SESSION_WAITMSG;
 				goto switchstate;
 			}
 			case PEER_SESSION_CONNECT: {
-				struct peer_session *ps = (struct peer_session *)si->private;
+				struct peer_session *ps = (struct peer_session *)si->applet.private;
 
 				/* Send headers */
 				repl = snprintf(trash, sizeof(trash),
@@ -508,7 +508,7 @@
 				                (int)ps->table->table->key_size);
 
 				if (repl >= sizeof(trash)) {
-					si->st0 = PEER_SESSION_END;
+					si->applet.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
 
@@ -516,16 +516,16 @@
 				if (repl <= 0) {
 					if (repl == -1)
 						goto out;
-					si->st0 = PEER_SESSION_END;
+					si->applet.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
 
 				/* switch to the waiting statuscode state */
-				si->st0 = PEER_SESSION_GETSTATUS;
+				si->applet.st0 = PEER_SESSION_GETSTATUS;
 				/* fall through */
 			}
 			case PEER_SESSION_GETSTATUS: {
-				struct peer_session *ps = (struct peer_session *)si->private;
+				struct peer_session *ps = (struct peer_session *)si->applet.private;
 
 				if (si->ib->flags & BF_WRITE_PARTIAL)
 					ps->statuscode = PEER_SESSION_CONNECTEDCODE;
@@ -534,12 +534,12 @@
 				if (reql <= 0) { /* closed or EOL not found */
 					if (reql == 0)
 						goto out;
-					si->st0 = PEER_SESSION_END;
+					si->applet.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
 				if (trash[reql-1] != '\n') {
 					/* Incomplete line, we quit */
-					si->st0 = PEER_SESSION_END;
+					si->applet.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
 				else if (reql > 1 && (trash[reql-2] == '\r'))
@@ -589,14 +589,14 @@
 				}
 				else {
 					/* Status code is not success, abort */
-					si->st0 = PEER_SESSION_END;
+					si->applet.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
-				si->st0 = PEER_SESSION_WAITMSG;
+				si->applet.st0 = PEER_SESSION_WAITMSG;
 				/* fall through */
 			}
 			case PEER_SESSION_WAITMSG: {
-				struct peer_session *ps = (struct peer_session *)si->private;
+				struct peer_session *ps = (struct peer_session *)si->applet.private;
 				char c;
 				int totl = 0;
 
@@ -606,7 +606,7 @@
 						/* nothing to read */
 						goto incomplete;
 					}
-					si->st0 = PEER_SESSION_END;
+					si->applet.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
 				totl += reql;
@@ -630,7 +630,7 @@
 							if (reql == 0) {
 								goto incomplete;
 							}
-							si->st0 = PEER_SESSION_END;
+							si->applet.st0 = PEER_SESSION_END;
 							goto switchstate;
 						}
 						totl += reql;
@@ -647,7 +647,7 @@
 							if (reql == 0) {
 								goto incomplete;
 							}
-							si->st0 = PEER_SESSION_END;
+							si->applet.st0 = PEER_SESSION_END;
 							goto switchstate;
 						}
 						totl += reql;
@@ -658,7 +658,7 @@
 							if (reql == 0) {
 								goto incomplete;
 							}
-							si->st0 = PEER_SESSION_END;
+							si->applet.st0 = PEER_SESSION_END;
 							goto switchstate;
 						}
 						totl += reql;
@@ -673,7 +673,7 @@
 							if (reql == 0) {
 								goto incomplete;
 							}
-							si->st0 = PEER_SESSION_END;
+							si->applet.st0 = PEER_SESSION_END;
 							goto switchstate;
 						}
 						totl += reql;
@@ -689,7 +689,7 @@
 							if (reql == 0) {
 								goto incomplete;
 							}
-							si->st0 = PEER_SESSION_END;
+							si->applet.st0 = PEER_SESSION_END;
 							goto switchstate;
 						}
 						totl += reql;
@@ -702,7 +702,7 @@
 						if (reql == 0) {
 							goto incomplete;
 						}
-						si->st0 = PEER_SESSION_END;
+						si->applet.st0 = PEER_SESSION_END;
 						goto switchstate;
 					}
 					totl += reql;
@@ -775,7 +775,7 @@
 					if (stopping) {
 						/* Close session, push resync no more needed */
 						ps->flags |= PEER_F_TEACH_COMPLETE;
-						si->st0 = PEER_SESSION_END;
+						si->applet.st0 = PEER_SESSION_END;
 						goto switchstate;
 					}
 
@@ -811,7 +811,7 @@
 						if (reql == 0) {
 							goto incomplete;
 						}
-						si->st0 = PEER_SESSION_END;
+						si->applet.st0 = PEER_SESSION_END;
 						goto switchstate;
 					}
 					totl += reql;
@@ -821,7 +821,7 @@
 				}
 				else {
 					/* Unknown message */
-					si->st0 = PEER_SESSION_END;
+					si->applet.st0 = PEER_SESSION_END;
 					goto switchstate;
 				}
 
@@ -841,7 +841,7 @@
 						/* no more write possible */
 						if (repl == -1)
 							goto out;
-						si->st0 = PEER_SESSION_END;
+						si->applet.st0 = PEER_SESSION_END;
 						goto switchstate;
 					}
 					ps->confirm--;
@@ -858,7 +858,7 @@
 						/* no more write possible */
 						if (repl == -1)
 							goto out;
-						si->st0 = PEER_SESSION_END;
+						si->applet.st0 = PEER_SESSION_END;
 						goto switchstate;
 					}
 					ps->table->flags |= SHTABLE_F_RESYNC_PROCESS;
@@ -877,7 +877,7 @@
 						/* no more write possible */
 						if (repl == -1)
 							goto out;
-						si->st0 = PEER_SESSION_END;
+						si->applet.st0 = PEER_SESSION_END;
 						goto switchstate;
 					}
 					ps->lastack = ps->pushack;
@@ -913,7 +913,7 @@
 									/* no more write possible */
 									if (repl == -1)
 										goto out;
-									si->st0 = PEER_SESSION_END;
+									si->applet.st0 = PEER_SESSION_END;
 									goto switchstate;
 								}
 								ps->lastpush = ps->pushed = ts->upd.key;
@@ -947,7 +947,7 @@
 									/* no more write possible */
 									if (repl == -1)
 										goto out;
-									si->st0 = PEER_SESSION_END;
+									si->applet.st0 = PEER_SESSION_END;
 									goto switchstate;
 								}
 								ps->lastpush = ps->pushed = ts->upd.key;
@@ -963,7 +963,7 @@
 							/* no more write possible */
 							if (repl == -1)
 								goto out;
-							si->st0 = PEER_SESSION_END;
+							si->applet.st0 = PEER_SESSION_END;
 							goto switchstate;
 						}
 
@@ -1005,7 +1005,7 @@
 								/* no more write possible */
 								if (repl == -1)
 									goto out;
-								si->st0 = PEER_SESSION_END;
+								si->applet.st0 = PEER_SESSION_END;
 								goto switchstate;
 							}
 							ps->lastpush = ps->pushed = ts->upd.key;
@@ -1017,11 +1017,11 @@
 				goto out;
 			}
 			case PEER_SESSION_EXIT:
-				repl = snprintf(trash, sizeof(trash), "%d\n", si->st1);
+				repl = snprintf(trash, sizeof(trash), "%d\n", si->applet.st1);
 
 				if (buffer_put_block(si->ib, trash, repl) == -1)
 					goto out;
-				si->st0 = PEER_SESSION_END;
+				si->applet.st0 = PEER_SESSION_END;
 				/* fall through */
 			case PEER_SESSION_END: {
 				si->shutw(si);
@@ -1062,8 +1062,8 @@
 
 	/* call release to reinit resync states if needed */
 	peer_session_release(oldsi);
-	oldsi->st0 = PEER_SESSION_END;
-	oldsi->private = NULL;
+	oldsi->applet.st0 = PEER_SESSION_END;
+	oldsi->applet.private = NULL;
 	task_wakeup(session->task, TASK_WOKEN_MSG);
 }
 
@@ -1078,8 +1078,8 @@
 	 /* we have a dedicated I/O handler for the stats */
 	stream_int_register_handler(&s->si[1], &peer_applet);
 	s->si[1].release = peer_session_release;
-	s->si[1].private = s;
-	s->si[1].st0 = PEER_SESSION_ACCEPT;
+	s->si[1].applet.private = s;
+	s->si[1].applet.st0 = PEER_SESSION_ACCEPT;
 
 	tv_zero(&s->logs.tv_request);
 	s->logs.t_queue = 0;
@@ -1159,8 +1159,8 @@
 	s->si[0].flags = SI_FL_NONE;
 	if (s->fe->options2 & PR_O2_INDEPSTR)
 		s->si[0].flags |= SI_FL_INDEP_STR;
-	s->si[0].private = (void *)ps;
-	s->si[0].st0 = PEER_SESSION_CONNECT;
+	s->si[0].applet.private = (void *)ps;
+	s->si[0].applet.st0 = PEER_SESSION_CONNECT;
 
 	stream_int_register_handler(&s->si[0], &peer_applet);
 	s->si[0].release = peer_session_release;
diff --git a/src/proto_http.c b/src/proto_http.c
index 5119d37..a0c9b92 100644
--- a/src/proto_http.c
+++ b/src/proto_http.c
@@ -3227,8 +3227,8 @@
 		s->data_state  = DATA_ST_INIT;
 		s->task->nice = -32; /* small boost for HTTP statistics */
 		stream_int_register_handler(s->rep->prod, &http_stats_applet);
-		s->rep->prod->private = s;
-		s->rep->prod->st0 = s->rep->prod->st1 = 0;
+		s->rep->prod->applet.private = s;
+		s->rep->prod->applet.st0 = s->rep->prod->applet.st1 = 0;
 		req->analysers = 0;
 
 		return 0;
