diff --git a/src/backend.c b/src/backend.c
index adfd388..39efd17 100644
--- a/src/backend.c
+++ b/src/backend.c
@@ -476,7 +476,7 @@
 	b_rew(s->req.buf, rewind = s->req.buf->o);
 
 	ret = fetch_rdp_cookie_name(s, &smp, px->hh_name, px->hh_len);
-	len = smp.data.data.str.len;
+	len = smp.data.u.str.len;
 
 	b_adv(s->req.buf, rewind);
 
@@ -490,7 +490,7 @@
 	/* Found a the hh_name in the headers.
 	 * we will compute the hash based on this value ctx.val.
 	 */
-	hash = gen_hash(px, smp.data.data.str.str, len);
+	hash = gen_hash(px, smp.data.u.str.str, len);
 
 	if ((px->lbprm.algo & BE_LB_HASH_MOD) == BE_LB_HMOD_AVAL)
 		hash = full_hash(hash);
@@ -1218,10 +1218,10 @@
 			if (smp) {
 				/* get write access to terminate with a zero */
 				smp_dup(smp);
-				if (smp->data.data.str.len >= smp->data.data.str.size)
-					smp->data.data.str.len = smp->data.data.str.size - 1;
-				smp->data.data.str.str[smp->data.data.str.len] = 0;
-				ssl_sock_set_servername(srv_conn, smp->data.data.str.str);
+				if (smp->data.u.str.len >= smp->data.u.str.size)
+					smp->data.u.str.len = smp->data.u.str.size - 1;
+				smp->data.u.str.str[smp->data.u.str.len] = 0;
+				ssl_sock_set_servername(srv_conn, smp->data.u.str.str);
 				srv_conn->flags |= CO_FL_PRIVATE;
 			}
 		}
@@ -1361,14 +1361,14 @@
 	memset(&smp, 0, sizeof(smp));
 
 	ret = fetch_rdp_cookie_name(s, &smp, s->be->rdp_cookie_name, s->be->rdp_cookie_len);
-	if (ret == 0 || (smp.flags & SMP_F_MAY_CHANGE) || smp.data.data.str.len == 0)
+	if (ret == 0 || (smp.flags & SMP_F_MAY_CHANGE) || smp.data.u.str.len == 0)
 		goto no_cookie;
 
 	memset(&addr, 0, sizeof(addr));
 	addr.sin_family = AF_INET;
 
 	/* Considering an rdp cookie detected using acl, str ended with <cr><lf> and should return */
-	addr.sin_addr.s_addr = strtoul(smp.data.data.str.str, &p, 10);
+	addr.sin_addr.s_addr = strtoul(smp.data.u.str.str, &p, 10);
 	if (*p != '.')
 		goto no_cookie;
 	p++;
@@ -1606,11 +1606,11 @@
 	px = args->data.prx;
 
 	if (px->srv_act)
-		smp->data.data.sint = px->srv_act;
+		smp->data.u.sint = px->srv_act;
 	else if (px->lbprm.fbck)
-		smp->data.data.sint = 1;
+		smp->data.u.sint = 1;
 	else
-		smp->data.data.sint = px->srv_bck;
+		smp->data.u.sint = px->srv_bck;
 
 	return 1;
 }
@@ -1629,9 +1629,9 @@
 	smp->data.type = SMP_T_BOOL;
 	if (!(srv->admin & SRV_ADMF_MAINT) &&
 	    (!(srv->check.state & CHK_ST_CONFIGURED) || (srv->state != SRV_ST_STOPPED)))
-		smp->data.data.sint = 1;
+		smp->data.u.sint = 1;
 	else
-		smp->data.data.sint = 0;
+		smp->data.u.sint = 0;
 	return 1;
 }
 
@@ -1646,7 +1646,7 @@
 
 	smp->flags = SMP_F_VOL_TEST;
 	smp->data.type = SMP_T_SINT;
-	smp->data.data.sint = 0;
+	smp->data.u.sint = 0;
 
 	for (iterator = args->data.prx->srv; iterator; iterator = iterator->next) {
 		if (iterator->state == SRV_ST_STOPPED)
@@ -1654,11 +1654,11 @@
 
 		if (iterator->maxconn == 0 || iterator->maxqueue == 0) {
 			/* configuration is stupid */
-			smp->data.data.sint = -1;  /* FIXME: stupid value! */
+			smp->data.u.sint = -1;  /* FIXME: stupid value! */
 			return 1;
 		}
 
-		smp->data.data.sint += (iterator->maxconn - iterator->cur_sess)
+		smp->data.u.sint += (iterator->maxconn - iterator->cur_sess)
 		                       +  (iterator->maxqueue - iterator->nbpend);
 	}
 
@@ -1671,7 +1671,7 @@
 {
 	smp->flags = SMP_F_VOL_TXN;
 	smp->data.type = SMP_T_SINT;
-	smp->data.data.sint = smp->strm->be->uuid;
+	smp->data.u.sint = smp->strm->be->uuid;
 	return 1;
 }
 
@@ -1683,7 +1683,7 @@
 		return 0;
 
 	smp->data.type = SMP_T_SINT;
-	smp->data.data.sint = objt_server(smp->strm->target)->puid;
+	smp->data.u.sint = objt_server(smp->strm->target)->puid;
 
 	return 1;
 }
@@ -1697,7 +1697,7 @@
 {
 	smp->flags = SMP_F_VOL_TEST;
 	smp->data.type = SMP_T_SINT;
-	smp->data.data.sint = read_freq_ctr(&args->data.prx->be_sess_per_sec);
+	smp->data.u.sint = read_freq_ctr(&args->data.prx->be_sess_per_sec);
 	return 1;
 }
 
@@ -1710,7 +1710,7 @@
 {
 	smp->flags = SMP_F_VOL_TEST;
 	smp->data.type = SMP_T_SINT;
-	smp->data.data.sint = args->data.prx->beconn;
+	smp->data.u.sint = args->data.prx->beconn;
 	return 1;
 }
 
@@ -1723,7 +1723,7 @@
 {
 	smp->flags = SMP_F_VOL_TEST;
 	smp->data.type = SMP_T_SINT;
-	smp->data.data.sint = args->data.prx->totpend;
+	smp->data.u.sint = args->data.prx->totpend;
 	return 1;
 }
 
@@ -1753,9 +1753,9 @@
 		nbsrv = px->srv_bck;
 
 	if (nbsrv > 0)
-		smp->data.data.sint = (px->totpend + nbsrv - 1) / nbsrv;
+		smp->data.u.sint = (px->totpend + nbsrv - 1) / nbsrv;
 	else
-		smp->data.data.sint = px->totpend * 2;
+		smp->data.u.sint = px->totpend * 2;
 
 	return 1;
 }
@@ -1769,7 +1769,7 @@
 {
 	smp->flags = SMP_F_VOL_TEST;
 	smp->data.type = SMP_T_SINT;
-	smp->data.data.sint = args->data.srv->cur_sess;
+	smp->data.u.sint = args->data.srv->cur_sess;
 	return 1;
 }
 
@@ -1782,7 +1782,7 @@
 {
 	smp->flags = SMP_F_VOL_TEST;
 	smp->data.type = SMP_T_SINT;
-	smp->data.data.sint = read_freq_ctr(&args->data.srv->sess_per_sec);
+	smp->data.u.sint = read_freq_ctr(&args->data.srv->sess_per_sec);
 	return 1;
 }
 
