diff --git a/src/stream.c b/src/stream.c
index e81de2a..290c565 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -121,7 +121,7 @@
 	if (!s->sess)
 		goto out_free_stream;
 
-	s->listener = l;
+	s->sess->listener = l;
 	s->fe  = p;
 
 	s->si[0].flags = SI_FL_NONE;
@@ -275,23 +275,24 @@
 	char pn[INET6_ADDRSTRLEN];
 	int ret;
 	char *end;
+	struct session *sess = s->sess;
 	struct connection *cli_conn = __objt_conn(s->target);
 
 	ret = addr_to_str(&cli_conn->addr.from, pn, sizeof(pn));
 	if (ret <= 0)
 		chunk_printf(&trash, "unknown [");
 	else if (ret == AF_UNIX)
-		chunk_printf(&trash, "%s:%d [", pn, s->listener->luid);
+		chunk_printf(&trash, "%s:%d [", pn, sess->listener->luid);
 	else
 		chunk_printf(&trash, "%s:%d [", pn, get_host_port(&cli_conn->addr.from));
 
 	get_localtime(s->logs.accept_date.tv_sec, &tm);
 	end = date2str_log(trash.str + trash.len, &tm, &(s->logs.accept_date), trash.size - trash.len);
 	trash.len = end - trash.str;
-	if (s->listener->name)
-		chunk_appendf(&trash, "] %s/%s", s->fe->id, s->listener->name);
+	if (sess->listener->name)
+		chunk_appendf(&trash, "] %s/%s", s->fe->id, sess->listener->name);
 	else
-		chunk_appendf(&trash, "] %s/%d", s->fe->id, s->listener->luid);
+		chunk_appendf(&trash, "] %s/%d", s->fe->id, sess->listener->luid);
 }
 
 /* This function kills an existing embryonic stream. It stops the connection's
@@ -302,6 +303,7 @@
 static void kill_mini_session(struct stream *s)
 {
 	int level = LOG_INFO;
+	struct session *sess = s->sess;
 	struct connection *conn = __objt_conn(s->target);
 	unsigned int log = s->logs.logwait;
 	const char *err_msg;
@@ -341,12 +343,12 @@
 	s->fe->feconn--;
 	stream_store_counters(s);
 
-	if (!(s->listener->options & LI_O_UNLIMITED))
+	if (!(sess->listener->options & LI_O_UNLIMITED))
 		actconn--;
 	jobs--;
-	s->listener->nbconn--;
-	if (s->listener->state == LI_FULL)
-		resume_listener(s->listener);
+	sess->listener->nbconn--;
+	if (sess->listener->state == LI_FULL)
+		resume_listener(sess->listener);
 
 	/* Dequeues all of the listeners waiting for a resource */
 	if (!LIST_ISEMPTY(&global_listener_queue))
@@ -419,7 +421,8 @@
  */
 int stream_complete(struct stream *s)
 {
-	struct listener *l = s->listener;
+	struct session *sess = s->sess;
+	struct listener *l = sess->listener;
 	struct proxy *p = s->fe;
 	struct http_txn *txn;
 	struct task *t = s->task;
@@ -804,6 +807,7 @@
 
 void stream_process_counters(struct stream *s)
 {
+	struct session *sess = s->sess;
 	unsigned long long bytes;
 	void *ptr;
 	int i;
@@ -818,8 +822,8 @@
 		if (objt_server(s->target))
 			objt_server(s->target)->counters.bytes_in += bytes;
 
-		if (s->listener && s->listener->counters)
-			s->listener->counters->bytes_in += bytes;
+		if (sess->listener && sess->listener->counters)
+			sess->listener->counters->bytes_in += bytes;
 
 		for (i = 0; i < MAX_SESS_STKCTR; i++) {
 			if (!stkctr_entry(&s->stkctr[i]))
@@ -850,8 +854,8 @@
 		if (objt_server(s->target))
 			objt_server(s->target)->counters.bytes_out += bytes;
 
-		if (s->listener && s->listener->counters)
-			s->listener->counters->bytes_out += bytes;
+		if (sess->listener && sess->listener->counters)
+			sess->listener->counters->bytes_out += bytes;
 
 		for (i = 0; i < MAX_SESS_STKCTR; i++) {
 			if (!stkctr_entry(&s->stkctr[i]))
@@ -1271,8 +1275,8 @@
 		if (s->si[1].state < SI_ST_REQ) {
 
 			s->fe->fe_counters.failed_req++;
-			if (s->listener->counters)
-				s->listener->counters->failed_req++;
+			if (strm_sess(s)->listener->counters)
+				strm_sess(s)->listener->counters->failed_req++;
 
 			s->flags |= SF_FINST_R;
 		}
@@ -1754,6 +1758,7 @@
 {
 	struct server *srv;
 	struct stream *s = t->context;
+	struct session *sess = s->sess;
 	unsigned int rqf_last, rpf_last;
 	unsigned int rq_prod_last, rq_cons_last;
 	unsigned int rp_cons_last, rp_prod_last;
@@ -2685,12 +2690,12 @@
 	if (s->flags & SF_BE_ASSIGNED)
 		s->be->beconn--;
 	jobs--;
-	if (s->listener) {
-		if (!(s->listener->options & LI_O_UNLIMITED))
+	if (sess->listener) {
+		if (!(sess->listener->options & LI_O_UNLIMITED))
 			actconn--;
-		s->listener->nbconn--;
-		if (s->listener->state == LI_FULL)
-			resume_listener(s->listener);
+		sess->listener->nbconn--;
+		if (sess->listener->state == LI_FULL)
+			resume_listener(sess->listener);
 
 		/* Dequeues all of the listeners waiting for a resource */
 		if (!LIST_ISEMPTY(&global_listener_queue))
