diff --git a/include/types/checks.h b/include/types/checks.h
index e5fd3fa..16a0997 100644
--- a/include/types/checks.h
+++ b/include/types/checks.h
@@ -211,6 +211,18 @@
 	unsigned char lr[HANA_OBS_SIZE];	/* result for l4/l7: 0 = ignore, 1 - error, 2 - OK */
 };
 
+enum tcpcheck_send_type {
+	TCPCHK_SEND_UNDEF = 0, /* Send is not parsed. */
+	TCPCHK_SEND_STRING, /* Send an ASCII string. */
+	TCPCHK_SEND_BINARY, /* Send a binary sequence. */
+};
+
+struct tcpcheck_send {
+	enum tcpcheck_send_type type;
+	char *string; /* Sending an ASCII string or a binary sequence. */
+	int length; /* Size in bytes of the sequence referenced by string / binary. */
+};
+
 enum tcpcheck_expect_type {
 	TCPCHK_EXPECT_UNDEF = 0, /* Match is not used. */
 	TCPCHK_EXPECT_STRING, /* Matches a string. */
@@ -251,9 +263,10 @@
 	enum tcpcheck_rule_type action;         /* type of the rule. */
 	int index;                              /* Index within the list. Starts at 0. */
 	char *comment;				/* comment to be used in the logs and on the stats socket */
-	char *string;                           /* sent string */
-	int string_len;                         /* sent string length */
-	struct tcpcheck_expect expect;          /* Expected pattern. */
+	union {
+		struct tcpcheck_send send;      /* Send rule. */
+		struct tcpcheck_expect expect;  /* Expected pattern. */
+	};
 	unsigned short port;                    /* port to connect to */
 	unsigned short conn_opts;               /* options when setting up a new connection */
 };
diff --git a/src/checks.c b/src/checks.c
index 24ac16e..247a4a8 100644
--- a/src/checks.c
+++ b/src/checks.c
@@ -2865,7 +2865,7 @@
 		if (b_data(&check->bo) &&
 		    (check->current_step == NULL ||
 		     check->current_step->action != TCPCHK_ACT_SEND ||
-		     check->current_step->string_len >= b_room(&check->bo))) {
+		     check->current_step->send.length >= b_room(&check->bo))) {
 			int ret;
 
 			ret = cs->conn->mux->snd_buf(cs, &check->bo, b_data(&check->bo), 0);
@@ -3073,15 +3073,17 @@
 
 		} /* end 'connect' */
 		else if (check->current_step->action == TCPCHK_ACT_SEND) {
+			struct tcpcheck_send *send = &check->current_step->send;
+
 			/* mark the step as started */
 			check->last_started_step = check->current_step;
 
 			/* reset the read buffer */
 			b_reset(&check->bi);
 
-			if (check->current_step->string_len >= b_size(&check->bo)) {
+			if (send->length >= b_size(&check->bo)) {
 				chunk_printf(&trash, "tcp-check send : string too large (%d) for buffer size (%u) at step %d",
-					     check->current_step->string_len, (unsigned int)b_size(&check->bo),
+					     send->length, (unsigned int)b_size(&check->bo),
 					     tcpcheck_get_step_id(check));
 				set_server_check_status(check, HCHK_STATUS_L7RSP,
 							trash.area);
@@ -3089,10 +3091,19 @@
 			}
 
 			/* do not try to send if there is no space */
-			if (check->current_step->string_len >= b_room(&check->bo))
+			if (send->length >= b_room(&check->bo))
 				continue;
 
-			b_putblk(&check->bo, check->current_step->string, check->current_step->string_len);
+			switch (send->type) {
+			case TCPCHK_SEND_STRING:
+			case TCPCHK_SEND_BINARY:
+				b_putblk(&check->bo, send->string, send->length);
+				break;
+			case TCPCHK_SEND_UNDEF:
+				/* Should never happen. */
+				retcode = -1;
+				goto out;
+			};
 
 			check->current_step = get_next_tcpcheck_rule(head, check->current_step);
 		} /* end 'send' */
@@ -3365,19 +3376,36 @@
 		return;
 
 	free(rule->comment);
-	free(rule->string);
-	switch (rule->expect.type) {
-	case TCPCHK_EXPECT_STRING:
-	case TCPCHK_EXPECT_BINARY:
-		free(rule->expect.string);
+	switch (rule->action) {
+	case TCPCHK_ACT_SEND:
+		switch (rule->send.type) {
+		case TCPCHK_SEND_STRING:
+		case TCPCHK_SEND_BINARY:
+			free(rule->send.string);
+			break;
+		case TCPCHK_SEND_UNDEF:
+			break;
+		}
 		break;
-	case TCPCHK_EXPECT_REGEX:
-	case TCPCHK_EXPECT_REGEX_BINARY:
-		regex_free(rule->expect.regex);
+	case TCPCHK_ACT_EXPECT:
+		switch (rule->expect.type) {
+		case TCPCHK_EXPECT_STRING:
+		case TCPCHK_EXPECT_BINARY:
+			free(rule->expect.string);
+			break;
+		case TCPCHK_EXPECT_REGEX:
+		case TCPCHK_EXPECT_REGEX_BINARY:
+			regex_free(rule->expect.regex);
+			break;
+		case TCPCHK_EXPECT_UNDEF:
+			break;
+		}
 		break;
-	case TCPCHK_EXPECT_UNDEF:
+	case TCPCHK_ACT_CONNECT:
+	case TCPCHK_ACT_COMMENT:
 		break;
 	}
+
 	if (in_pool)
 		pool_free(pool_head_tcpcheck_rule, rule);
 	else
@@ -3549,6 +3577,7 @@
 static int add_tcpcheck_send_strs(struct list *list, const char * const *strs)
 {
 	struct tcpcheck_rule *tcpcheck;
+	struct tcpcheck_send *send;
 	const char *in;
 	char *dst;
 	int i;
@@ -3557,18 +3586,20 @@
 		return 0;
 	memset(tcpcheck, 0, sizeof(*tcpcheck));
 	tcpcheck->action       = TCPCHK_ACT_SEND;
-	tcpcheck->comment      = NULL;
-	tcpcheck->string_len = 0;
+
+	send = &tcpcheck->send;
+	send->type = TCPCHK_SEND_STRING;
+
 	for (i = 0; strs[i]; i++)
-		tcpcheck->string_len += strlen(strs[i]);
+		send->length += strlen(strs[i]);
 
-	tcpcheck->string = malloc(tcpcheck->string_len + 1);
-	if (!tcpcheck->string) {
+	send->string = malloc(send->length + 1);
+	if (!send->string) {
 		pool_free(pool_head_tcpcheck_rule, tcpcheck);
 		return 0;
 	}
 
-	dst = tcpcheck->string;
+	dst = send->string;
 	for (i = 0; strs[i]; i++)
 		for (in = strs[i]; (*dst = *in++); dst++);
 	*dst = 0;
@@ -3595,7 +3626,7 @@
 	memset(tcpcheck, 0, sizeof(*tcpcheck));
 	tcpcheck->action       = TCPCHK_ACT_CONNECT;
 	tcpcheck->comment      = NULL;
-	tcpcheck->string       = NULL;
+
 	LIST_ADDQ(&alert->tcpcheck_rules, &tcpcheck->list);
 
 	if (!add_tcpcheck_expect_str(&alert->tcpcheck_rules, "220 "))
@@ -3991,15 +4022,17 @@
 {
 	struct tcpcheck_rule *chk = NULL;
 	char *str = NULL, *comment = NULL;
-	int len, is_binary;
+	enum tcpcheck_send_type type = TCPCHK_SEND_UNDEF;
+	int len;
 
-	is_binary = (strcmp(args[cur_arg], "send-binary") == 0);
+	type = ((strcmp(args[cur_arg], "send-binary") == 0) ? TCPCHK_SEND_BINARY : TCPCHK_SEND_STRING);
 	if (!*(args[cur_arg+1])) {
-		memprintf(errmsg, "'%s' expects a %s as argument", (is_binary ? "binary string": "string"), args[cur_arg]);
+		memprintf(errmsg, "'%s' expects a %s as argument",
+			  (type == TCPCHK_SEND_BINARY ? "binary string": "string"), args[cur_arg]);
 		goto error;
 	}
 
-	if (is_binary) {
+	if (type == TCPCHK_SEND_BINARY) {
 		if (parse_binary(args[cur_arg+1], &str, &len, errmsg) == 0) {
 			memprintf(errmsg, "'%s' invalid binary string (%s).\n", args[cur_arg], *errmsg);
 			goto error;
@@ -4033,10 +4066,11 @@
 		memprintf(errmsg, "out of memory");
 		goto error;
 	}
-	chk->action     = TCPCHK_ACT_SEND;
-	chk->string     = str;
-	chk->string_len = len;
-	chk->comment    = comment;
+	chk->action      = TCPCHK_ACT_SEND;
+	chk->comment     = comment;
+	chk->send.type   = type;
+	chk->send.string = str;
+	chk->send.length = len;
 	return chk;
 
   error:
