diff --git a/src/session.c b/src/session.c
index 7189fbe..44fccbf 100644
--- a/src/session.c
+++ b/src/session.c
@@ -27,6 +27,7 @@
 #include <proto/raw_sock.h>
 #include <proto/session.h>
 #include <proto/stream.h>
+#include <proto/vars.h>
 
 struct pool_head *pool2_session;
 
@@ -59,6 +60,7 @@
 		sess->accept_date = date; /* user-visible date for logging */
 		sess->tv_accept   = now;  /* corrected date for internal use */
 		memset(sess->stkctr, 0, sizeof(sess->stkctr));
+		vars_init(&sess->vars, SCOPE_SESS);
 	}
 	return sess;
 }
@@ -66,6 +68,7 @@
 void session_free(struct session *sess)
 {
 	session_store_counters(sess);
+	vars_prune_per_sess(&sess->vars);
 	pool_free2(pool2_session, sess);
 }
 
diff --git a/src/stream.c b/src/stream.c
index 0a38f2e..1003826 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -137,10 +137,9 @@
 	s->req_cap = NULL;
 	s->res_cap = NULL;
 
-	/* Initialise alle the variable context even if will not use.
-	 * This permits to prune these context without errors.
+	/* Initialise all the variables contexts even if not used.
+	 * This permits to prune these contexts without errors.
 	 */
-	vars_init(&s->vars_sess,   SCOPE_SESS);
 	vars_init(&s->vars_txn,    SCOPE_TXN);
 	vars_init(&s->vars_reqres, SCOPE_REQ);
 
@@ -302,7 +301,6 @@
 	}
 
 	/* Cleanup all variable contexts. */
-	vars_prune(&s->vars_sess, s);
 	vars_prune(&s->vars_txn, s);
 	vars_prune(&s->vars_reqres, s);
 
diff --git a/src/vars.c b/src/vars.c
index 9662abe..fa521f3 100644
--- a/src/vars.c
+++ b/src/vars.c
@@ -10,6 +10,7 @@
 #include <proto/proto_tcp.h>
 #include <proto/sample.h>
 #include <proto/stream.h>
+#include <proto/vars.h>
 
 /* This contains a pool of struct vars */
 static struct pool_head *var_pool = NULL;
@@ -93,9 +94,35 @@
 		pool_free2(var_pool, var);
 		size += sizeof(struct var);
 	}
-	var_accounting_diff(vars, &strm->vars_sess, &strm->vars_txn, &strm->vars_reqres, -size);
+	var_accounting_diff(vars, &strm->sess->vars, &strm->vars_txn, &strm->vars_reqres, -size);
 }
 
+/* This function frees all the memory used by all the session variables in the
+ * list starting at <vars>.
+ */
+void vars_prune_per_sess(struct vars *vars)
+{
+	struct var *var, *tmp;
+	unsigned int size = 0;
+
+	list_for_each_entry_safe(var, tmp, &vars->head, l) {
+		if (var->data.type == SMP_T_STR ||
+		    var->data.type == SMP_T_BIN) {
+			free(var->data.data.str.str);
+			size += var->data.data.str.len;
+		}
+		else if (var->data.type == SMP_T_METH) {
+			free(var->data.data.meth.str.str);
+			size += var->data.data.meth.str.len;
+		}
+		LIST_DEL(&var->l);
+		pool_free2(var_pool, var);
+		size += sizeof(struct var);
+	}
+	vars->size      -= size;
+	var_global_size -= size;
+}
+
 /* This function init a list of variabes. */
 void vars_init(struct vars *vars, enum vars_scope scope)
 {
@@ -207,7 +234,7 @@
 
 	/* Check the availibity of the variable. */
 	switch (var_desc->scope) {
-	case SCOPE_SESS: vars = &smp->strm->vars_sess;   break;
+	case SCOPE_SESS: vars = &smp->strm->sess->vars;  break;
 	case SCOPE_TXN:  vars = &smp->strm->vars_txn;    break;
 	case SCOPE_REQ:
 	case SCOPE_RES:
@@ -245,16 +272,16 @@
 		if (var->data.type == SMP_T_STR ||
 		    var->data.type == SMP_T_BIN) {
 			free(var->data.data.str.str);
-			var_accounting_diff(vars, &strm->vars_sess, &strm->vars_txn, &strm->vars_reqres, -var->data.data.str.len);
+			var_accounting_diff(vars, &strm->sess->vars, &strm->vars_txn, &strm->vars_reqres, -var->data.data.str.len);
 		}
 		else if (var->data.type == SMP_T_METH) {
 			free(var->data.data.meth.str.str);
-			var_accounting_diff(vars, &strm->vars_sess, &strm->vars_txn, &strm->vars_reqres, -var->data.data.meth.str.len);
+			var_accounting_diff(vars, &strm->sess->vars, &strm->vars_txn, &strm->vars_reqres, -var->data.data.meth.str.len);
 		}
 	} else {
 
 		/* Check memory avalaible. */
-		if (!var_accounting_add(vars, &strm->vars_sess, &strm->vars_txn, &strm->vars_reqres, sizeof(struct var)))
+		if (!var_accounting_add(vars, &strm->sess->vars, &strm->vars_txn, &strm->vars_reqres, sizeof(struct var)))
 			return 0;
 
 		/* Create new entry. */
@@ -283,13 +310,13 @@
 		break;
 	case SMP_T_STR:
 	case SMP_T_BIN:
-		if (!var_accounting_add(vars, &strm->vars_sess, &strm->vars_txn, &strm->vars_reqres, smp->data.str.len)) {
+		if (!var_accounting_add(vars, &strm->sess->vars, &strm->vars_txn, &strm->vars_reqres, smp->data.str.len)) {
 			var->data.type = SMP_T_BOOL; /* This type doesn't use additional memory. */
 			return 0;
 		}
 		var->data.data.str.str = malloc(smp->data.str.len);
 		if (!var->data.data.str.str) {
-			var_accounting_diff(vars, &strm->vars_sess, &strm->vars_txn, &strm->vars_reqres, -smp->data.str.len);
+			var_accounting_diff(vars, &strm->sess->vars, &strm->vars_txn, &strm->vars_reqres, -smp->data.str.len);
 			var->data.type = SMP_T_BOOL; /* This type doesn't use additional memory. */
 			return 0;
 		}
@@ -297,13 +324,13 @@
 		memcpy(var->data.data.str.str, smp->data.str.str, var->data.data.str.len);
 		break;
 	case SMP_T_METH:
-		if (!var_accounting_add(vars, &strm->vars_sess, &strm->vars_txn, &strm->vars_reqres, smp->data.meth.str.len)) {
+		if (!var_accounting_add(vars, &strm->sess->vars, &strm->vars_txn, &strm->vars_reqres, smp->data.meth.str.len)) {
 			var->data.type = SMP_T_BOOL; /* This type doesn't use additional memory. */
 			return 0;
 		}
 		var->data.data.meth.str.str = malloc(smp->data.meth.str.len);
 		if (!var->data.data.meth.str.str) {
-			var_accounting_diff(vars, &strm->vars_sess, &strm->vars_txn, &strm->vars_reqres, -smp->data.meth.str.len);
+			var_accounting_diff(vars, &strm->sess->vars, &strm->vars_txn, &strm->vars_reqres, -smp->data.meth.str.len);
 			var->data.type = SMP_T_BOOL; /* This type doesn't use additional memory. */
 			return 0;
 		}
@@ -323,7 +350,7 @@
 	struct vars *vars;
 
 	switch (scope) {
-	case SCOPE_SESS: vars = &strm->vars_sess;   break;
+	case SCOPE_SESS: vars = &strm->sess->vars;  break;
 	case SCOPE_TXN:  vars = &strm->vars_txn;    break;
 	case SCOPE_REQ:
 	case SCOPE_RES:
@@ -399,7 +426,7 @@
 
 	/* Select "vars" pool according with the scope. */
 	switch (scope) {
-	case SCOPE_SESS: vars = &strm->vars_sess;   break;
+	case SCOPE_SESS: vars = &strm->sess->vars;  break;
 	case SCOPE_TXN:  vars = &strm->vars_txn;    break;
 	case SCOPE_REQ:
 	case SCOPE_RES:
