diff --git a/src/checks.c b/src/checks.c
index d77edef..6f707fb 100644
--- a/src/checks.c
+++ b/src/checks.c
@@ -589,10 +589,10 @@
 
 				switch (expect->type) {
 				case TCPCHK_EXPECT_STRING:
-					chunk_appendf(chk, " (expect string '%.*s')", (unsigned int)istlen(expect->data), expect->data.ptr);
+					chunk_appendf(chk, " (expect string '%.*s')", (unsigned int)istlen(expect->data), istptr(expect->data));
 					break;
 				case TCPCHK_EXPECT_BINARY:
-					chunk_appendf(chk, " (expect binary '%.*s')", (unsigned int)istlen(expect->data), expect->data.ptr);
+					chunk_appendf(chk, " (expect binary '%.*s')", (unsigned int)istlen(expect->data), istptr(expect->data));
 					break;
 				case TCPCHK_EXPECT_REGEX:
 					chunk_appendf(chk, " (expect regex)");
@@ -601,13 +601,13 @@
 					chunk_appendf(chk, " (expect binary regex)");
 					break;
 				case TCPCHK_EXPECT_HTTP_STATUS:
-					chunk_appendf(chk, " (expect HTTP status '%.*s')", (unsigned int)istlen(expect->data), expect->data.ptr);
+					chunk_appendf(chk, " (expect HTTP status '%.*s')", (unsigned int)istlen(expect->data), istptr(expect->data));
 					break;
 				case TCPCHK_EXPECT_HTTP_REGEX_STATUS:
 					chunk_appendf(chk, " (expect HTTP status regex)");
 					break;
 				case TCPCHK_EXPECT_HTTP_BODY:
-					chunk_appendf(chk, " (expect HTTP body content '%.*s')", (unsigned int)istlen(expect->data), expect->data.ptr);
+					chunk_appendf(chk, " (expect HTTP body content '%.*s')", (unsigned int)istlen(expect->data), istptr(expect->data));
 					break;
 				case TCPCHK_EXPECT_HTTP_REGEX_BODY:
 					chunk_appendf(chk, " (expect HTTP body regex)");
@@ -721,7 +721,7 @@
 		return;
 
 	free_tcpcheck_fmt(&hdr->value);
-	free(hdr->name.ptr);
+	istfree(&hdr->name);
 	free(hdr);
 }
 
@@ -753,7 +753,7 @@
 		switch (rule->send.type) {
 		case TCPCHK_SEND_STRING:
 		case TCPCHK_SEND_BINARY:
-			free(rule->send.data.ptr);
+			istfree(&rule->send.data);
 			break;
 		case TCPCHK_SEND_STRING_LF:
 		case TCPCHK_SEND_BINARY_LF:
@@ -762,13 +762,13 @@
 		case TCPCHK_SEND_HTTP:
 			free(rule->send.http.meth.str.area);
 			if (!(rule->send.http.flags & TCPCHK_SND_HTTP_FL_URI_FMT))
-				free(rule->send.http.uri.ptr);
+				istfree(&rule->send.http.uri);
 			else
 				free_tcpcheck_fmt(&rule->send.http.uri_fmt);
-			free(rule->send.http.vsn.ptr);
+			istfree(&rule->send.http.vsn);
 			free_tcpcheck_http_hdrs(&rule->send.http.hdrs);
 			if (!(rule->send.http.flags & TCPCHK_SND_HTTP_FL_BODY_FMT))
-				free(rule->send.http.body.ptr);
+				istfree(&rule->send.http.body);
 			else
 				free_tcpcheck_fmt(&rule->send.http.body_fmt);
 			break;
@@ -785,7 +785,7 @@
 		case TCPCHK_EXPECT_BINARY:
 		case TCPCHK_EXPECT_HTTP_STATUS:
 		case TCPCHK_EXPECT_HTTP_BODY:
-			free(rule->expect.data.ptr);
+			istfree(&rule->expect.data);
 			break;
 		case TCPCHK_EXPECT_REGEX:
 		case TCPCHK_EXPECT_REGEX_BINARY:
@@ -819,7 +819,7 @@
 /* Creates a tcp-check variable used in preset variables before executing a
  * tcp-check ruleset.
  */
-static struct tcpcheck_var *create_tcpcheck_var(const char *name)
+static struct tcpcheck_var *create_tcpcheck_var(const struct ist name)
 {
 	struct tcpcheck_var *var = NULL;
 
@@ -827,8 +827,8 @@
 	if (var == NULL)
 		return NULL;
 
-	var->name = ist2(strdup(name), strlen(name));
-	if (var->name.ptr == NULL) {
+	var->name = istdup(name);
+	if (!isttest(var->name)) {
 		free(var);
 		return NULL;
 	}
@@ -843,7 +843,7 @@
 	if (!var)
 		return;
 
-	free(var->name.ptr);
+	istfree(&var->name);
 	if (var->data.type == SMP_T_STR || var->data.type == SMP_T_BIN)
 		free(var->data.u.str.area);
 	else if (var->data.type == SMP_T_METH && var->data.u.meth.meth == HTTP_METH_OTHER)
@@ -868,7 +868,7 @@
 	struct tcpcheck_var *var, *new = NULL;
 
 	list_for_each_entry(var, src, list) {
-		new = create_tcpcheck_var(var->name.ptr);
+		new = create_tcpcheck_var(var->name);
 		if (!new)
 			goto error;
 		new->data.type = var->data.type;
@@ -1029,7 +1029,7 @@
 	 *     4. Otherwise produce the generic tcp-check info message
 	 */
 	if (istlen(info)) {
-		chunk_strncat(msg, info.ptr, info.len);
+		chunk_strncat(msg, istptr(info), istlen(info));
 		goto comment;
 	}
 	else if (!LIST_ISEMPTY(&rule->expect.onerror_fmt)) {
@@ -1046,7 +1046,7 @@
 	case TCPCHK_EXPECT_STRING:
 	case TCPCHK_EXPECT_HTTP_STATUS:
 	case TCPCHK_EXPECT_HTTP_BODY:
-		chunk_appendf(msg, " '%.*s' at step %d", (unsigned int)istlen(rule->expect.data), rule->expect.data.ptr,
+		chunk_appendf(msg, " '%.*s' at step %d", (unsigned int)istlen(rule->expect.data), istptr(rule->expect.data),
 			      tcpcheck_get_step_id(check, rule));
 		break;
 	case TCPCHK_EXPECT_BINARY:
@@ -1122,7 +1122,7 @@
 	 *     4. Otherwise produce the generic tcp-check info message
 	 */
 	if (istlen(info))
-		chunk_strncat(msg, info.ptr, info.len);
+		chunk_strncat(msg, istptr(info), istlen(info));
 	if (!LIST_ISEMPTY(&rule->expect.onsuccess_fmt))
 		msg->data += sess_build_logline(check->sess, NULL, b_tail(msg), b_room(msg),
 						&rule->expect.onsuccess_fmt);
@@ -1210,7 +1210,7 @@
 	enum tcpcheck_eval_ret ret = TCPCHK_EVAL_CONTINUE;
 	enum healthcheck_status status;
 	struct buffer *msg = NULL;
-	struct ist desc = ist(NULL);
+	struct ist desc = IST_NULL;
 	unsigned int err = 0, plen = 0;
 
 
@@ -1311,7 +1311,7 @@
 	enum tcpcheck_eval_ret ret = TCPCHK_EVAL_CONTINUE;
 	enum healthcheck_status status;
 	struct buffer *msg = NULL;
-	struct ist desc = ist(NULL);
+	struct ist desc = IST_NULL;
 	unsigned short msglen = 0;
 
 	/* Check if the server speaks LDAP (ASN.1/BER)
@@ -1381,7 +1381,7 @@
 	enum tcpcheck_eval_ret ret = TCPCHK_EVAL_CONTINUE;
 	enum healthcheck_status status;
 	struct buffer *msg = NULL;
-	struct ist desc = ist(NULL);
+	struct ist desc = IST_NULL;
 	unsigned int framesz;
 
 
@@ -2106,7 +2106,7 @@
 	struct tcpcheck_expect *expect = &rule->expect;
 	struct buffer *msg = NULL;
 	enum healthcheck_status status;
-	struct ist desc = ist(NULL);
+	struct ist desc = IST_NULL;
 	int match, inverse;
 
 	last_read |= (!htx_free_space(htx) || (htx_get_tail_type(htx) == HTX_BLK_EOM));
@@ -2185,7 +2185,7 @@
 		}
 
 		if (expect->type ==TCPCHK_EXPECT_HTTP_BODY)
-			match = my_memmem(b_orig(&trash), b_data(&trash), expect->data.ptr, istlen(expect->data)) != NULL;
+			match = my_memmem(b_orig(&trash), b_data(&trash), istptr(expect->data), istlen(expect->data)) != NULL;
 		else
 			match = regex_exec2(expect->regex, b_orig(&trash), b_data(&trash));
 
@@ -2265,7 +2265,7 @@
 	switch (expect->type) {
 	case TCPCHK_EXPECT_STRING:
 	case TCPCHK_EXPECT_BINARY:
-		match = my_memmem(b_head(&check->bi), b_data(&check->bi), expect->data.ptr, istlen(expect->data)) != NULL;
+		match = my_memmem(b_head(&check->bi), b_data(&check->bi), istptr(expect->data), istlen(expect->data)) != NULL;
 		break;
 	case TCPCHK_EXPECT_REGEX:
 		if (expect->flags & TCPCHK_EXPT_FL_CAP)
@@ -2312,7 +2312,7 @@
 	ret = TCPCHK_EVAL_STOP;
 	msg = alloc_trash_chunk();
 	if (msg)
-		tcpcheck_expect_onerror_message(msg, check, rule, match, ist(NULL));
+		tcpcheck_expect_onerror_message(msg, check, rule, match, IST_NULL);
 	set_server_check_status(check, expect->err_status, (msg ? b_head(msg) : NULL));
 	free_trash_chunk(msg);
 	ret = TCPCHK_EVAL_STOP;
@@ -2425,7 +2425,7 @@
 			memset(&smp, 0, sizeof(smp));
 			smp_set_owner(&smp, check->proxy, check->sess, NULL, SMP_OPT_FINAL);
 			smp.data = var->data;
-			vars_set_by_name_ifexist(var->name.ptr, var->name.len, &smp);
+			vars_set_by_name_ifexist(istptr(var->name), istlen(var->name), &smp);
 		}
 	}
 
@@ -2515,7 +2515,7 @@
 
 			msg = alloc_trash_chunk();
 			if (msg)
-				tcpcheck_expect_onsuccess_message(msg, check, rule, ist(NULL));
+				tcpcheck_expect_onsuccess_message(msg, check, rule, IST_NULL);
 			set_server_check_status(check, rule->expect.ok_status,
 						(msg ? b_head(msg) : "(tcp-check)"));
 			free_trash_chunk(msg);
@@ -3847,21 +3847,21 @@
 			goto error;
 		}
 	}
-	for (i = 0; hdrs[i].n.len; i++) {
+	for (i = 0; istlen(hdrs[i].n); i++) {
 		hdr = calloc(1, sizeof(*hdr));
 		if (!hdr) {
 			memprintf(errmsg, "out of memory");
 			goto error;
 		}
 		LIST_INIT(&hdr->value);
-		hdr->name = ist2(strdup(hdrs[i].n.ptr), hdrs[i].n.len);
-		if (!hdr->name.ptr) {
+		hdr->name = istdup(hdrs[i].n);
+		if (!isttest(hdr->name)) {
 			memprintf(errmsg, "out of memory");
 			goto error;
 		}
 
-		hdrs[i].v.ptr[hdrs[i].v.len] = '\0';
-		if (!parse_logformat_string(hdrs[i].v.ptr, px, &hdr->value, 0, SMP_VAL_BE_CHK_RUL, errmsg))
+		ist0(hdrs[i].v);
+		if (!parse_logformat_string(istptr(hdrs[i].v), px, &hdr->value, 0, SMP_VAL_BE_CHK_RUL, errmsg))
 			goto error;
 		LIST_ADDQ(&chk->send.http.hdrs, &hdr->list);
 		hdr = NULL;
@@ -4261,7 +4261,7 @@
 	case TCPCHK_EXPECT_HTTP_STATUS:
 	case TCPCHK_EXPECT_HTTP_BODY:
 		chk->expect.data = ist2(strdup(pattern), strlen(pattern));
-		if (!chk->expect.data.ptr) {
+		if (!isttest(chk->expect.data)) {
 			memprintf(errmsg, "out of memory");
 			goto error;
 		}
@@ -4334,7 +4334,7 @@
 
 	if (!(new->send.http.flags & TCPCHK_SND_HTTP_FL_URI_FMT) && isttest(new->send.http.uri)) {
 		if (!(old->send.http.flags & TCPCHK_SND_HTTP_FL_URI_FMT))
-			free(old->send.http.uri.ptr);
+			istfree(&old->send.http.uri);
 		else
 			free_tcpcheck_fmt(&old->send.http.uri_fmt);
 		old->send.http.flags &= ~TCPCHK_SND_HTTP_FL_URI_FMT;
@@ -4343,7 +4343,7 @@
 	}
 	else if ((new->send.http.flags & TCPCHK_SND_HTTP_FL_URI_FMT) && !LIST_ISEMPTY(&new->send.http.uri_fmt)) {
 		if (!(old->send.http.flags & TCPCHK_SND_HTTP_FL_URI_FMT))
-			free(old->send.http.uri.ptr);
+			istfree(&old->send.http.uri);
 		else
 			free_tcpcheck_fmt(&old->send.http.uri_fmt);
 		old->send.http.flags |= TCPCHK_SND_HTTP_FL_URI_FMT;
@@ -4355,7 +4355,7 @@
 	}
 
 	if (isttest(new->send.http.vsn)) {
-		free(old->send.http.vsn.ptr);
+		istfree(&old->send.http.vsn);
 		old->send.http.vsn = new->send.http.vsn;
 		new->send.http.vsn = IST_NULL;
 	}
@@ -4368,7 +4368,7 @@
 
 	if (!(new->send.http.flags & TCPCHK_SND_HTTP_FL_BODY_FMT) && isttest(new->send.http.body)) {
 		if (!(old->send.http.flags & TCPCHK_SND_HTTP_FL_BODY_FMT))
-			free(old->send.http.body.ptr);
+			istfree(&old->send.http.body);
 		else
 			free_tcpcheck_fmt(&old->send.http.body_fmt);
 		old->send.http.flags &= ~TCPCHK_SND_HTTP_FL_BODY_FMT;
@@ -4377,7 +4377,7 @@
 	}
 	else if ((new->send.http.flags & TCPCHK_SND_HTTP_FL_BODY_FMT) && !LIST_ISEMPTY(&new->send.http.body_fmt)) {
 		if (!(old->send.http.flags & TCPCHK_SND_HTTP_FL_BODY_FMT))
-			free(old->send.http.body.ptr);
+			istfree(&old->send.http.body);
 		else
 			free_tcpcheck_fmt(&old->send.http.body_fmt);
 		old->send.http.flags |= TCPCHK_SND_HTTP_FL_BODY_FMT;
@@ -5223,7 +5223,7 @@
 	expect->err_status = HCHK_STATUS_L7RSP;
 	expect->tout_status = HCHK_STATUS_L7TOUT;
 	expect->data = ist2(strdup(str), strlen(str));
-	if (!expect->data.ptr) {
+	if (!isttest(expect->data)) {
 		pool_free(pool_head_tcpcheck_rule, tcpcheck);
 		return 0;
 	}
@@ -5264,13 +5264,13 @@
 	for (i = 0; strs[i]; i++)
 		send->data.len += strlen(strs[i]);
 
-	send->data.ptr = malloc(send->data.len + 1);
+	send->data.ptr = malloc(istlen(send->data) + 1);
 	if (!isttest(send->data)) {
 		pool_free(pool_head_tcpcheck_rule, tcpcheck);
 		return 0;
 	}
 
-	dst = send->data.ptr;
+	dst = istptr(send->data);
 	for (i = 0; strs[i]; i++)
 		for (in = strs[i]; (*dst = *in++); dst++);
 	*dst = 0;
@@ -5987,7 +5987,7 @@
 		cmd = strdup("HELO localhost");
 	}
 
-	var = create_tcpcheck_var("check.smtp_cmd");
+	var = create_tcpcheck_var(ist("check.smtp_cmd"));
 	if (cmd == NULL || var == NULL) {
 		ha_alert("parsing [%s:%d] : out of memory.\n", file, line);
 		goto error;
@@ -6132,7 +6132,7 @@
 		packetlen = 15 + strlen(args[cur_arg+1]);
 		user = strdup(args[cur_arg+1]);
 
-		var = create_tcpcheck_var("check.username");
+		var = create_tcpcheck_var(ist("check.username"));
 		if (user == NULL || var == NULL) {
 			ha_alert("parsing [%s:%d] : out of memory.\n", file, line);
 			goto error;
@@ -6145,7 +6145,7 @@
 		user = NULL;
 		var = NULL;
 
-		var = create_tcpcheck_var("check.plen");
+		var = create_tcpcheck_var(ist("check.plen"));
 		if (var == NULL) {
 			ha_alert("parsing [%s:%d] : out of memory.\n", file, line);
 			goto error;
@@ -6364,7 +6364,7 @@
 		hdr[2] = (unsigned char)((packetlen >> 16) & 0xff);
 		hdr[3] = 1;
 
-		var = create_tcpcheck_var("check.header");
+		var = create_tcpcheck_var(ist("check.header"));
 		if (var == NULL) {
 			ha_alert("parsing [%s:%d] : out of memory.\n", file, line);
 			goto error;
@@ -6377,7 +6377,7 @@
 		hdr = NULL;
 		var = NULL;
 
-		var = create_tcpcheck_var("check.username");
+		var = create_tcpcheck_var(ist("check.username"));
 		if (var == NULL) {
 			ha_alert("parsing [%s:%d] : out of memory.\n", file, line);
 			goto error;
@@ -6681,14 +6681,14 @@
 	}
 	if (uri) {
 		chk->send.http.uri = ist2(strdup(uri), strlen(uri));
-		if (!chk->send.http.uri.ptr) {
+		if (!isttest(chk->send.http.uri)) {
 			memprintf(errmsg, "out of memory");
 			goto error;
 		}
 	}
 	if (vsn) {
 		chk->send.http.vsn = ist2(strdup(vsn), strlen(vsn));
-		if (!chk->send.http.vsn.ptr) {
+		if (!isttest(chk->send.http.vsn)) {
 			memprintf(errmsg, "out of memory");
 			goto error;
 		}
@@ -6712,21 +6712,21 @@
 			goto error;
 		}
 
-		for (i = 0; tmp_hdrs[i].n.len; i++) {
+		for (i = 0; istlen(tmp_hdrs[i].n); i++) {
 			hdr = calloc(1, sizeof(*hdr));
 			if (!hdr) {
 				memprintf(errmsg, "out of memory");
 				goto error;
 			}
 			LIST_INIT(&hdr->value);
-			hdr->name = ist2(strdup(tmp_hdrs[i].n.ptr), tmp_hdrs[i].n.len);
+			hdr->name = istdup(tmp_hdrs[i].n);
 			if (!hdr->name.ptr) {
 				memprintf(errmsg, "out of memory");
 				goto error;
 			}
 
-			tmp_hdrs[i].v.ptr[tmp_hdrs[i].v.len] = '\0';
-			if (!parse_logformat_string(tmp_hdrs[i].v.ptr, px, &hdr->value, 0, SMP_VAL_BE_CHK_RUL, errmsg))
+			ist0(tmp_hdrs[i].v);
+			if (!parse_logformat_string(istptr(tmp_hdrs[i].v), px, &hdr->value, 0, SMP_VAL_BE_CHK_RUL, errmsg))
 				goto error;
 			LIST_ADDQ(&chk->send.http.hdrs, &hdr->list);
 		}
@@ -6735,7 +6735,7 @@
 	/* Copy the body */
 	if (body) {
 		chk->send.http.body = ist2(strdup(body), strlen(body));
-		if (!chk->send.http.body.ptr) {
+		if (!isttest(chk->send.http.body)) {
 			memprintf(errmsg, "out of memory");
 			goto error;
 		}
@@ -7044,7 +7044,7 @@
 	char *str;
 
 	str = strdup(send);
-	var = create_tcpcheck_var("check.agent_string");
+	var = create_tcpcheck_var(ist("check.agent_string"));
 	if (str == NULL || var == NULL)
 		goto error;
 
