diff --git a/tools/console/daemon/io.c b/tools/console/daemon/io.c
index 6f5c69c..a2a3496 100644
--- a/tools/console/daemon/io.c
+++ b/tools/console/daemon/io.c
@@ -163,10 +163,10 @@ static int write_with_timestamp(int fd, const char *data, size_t sz,
 	return 0;
 }
 
-static void buffer_append(struct domain *dom)
+static void buffer_append(struct console *con)
 {
-	struct console *con = &dom->console;
 	struct buffer *buffer = &con->buffer;
+	struct domain *dom = con->d;
 	XENCONS_RING_IDX cons, prod, size;
 	struct xencons_interface *intf = con->interface;
 
@@ -296,12 +296,13 @@ static int create_hv_log(void)
 	return fd;
 }
 
-static int create_domain_log(struct domain *dom)
+static int create_console_log(struct console *con)
 {
 	char logfile[PATH_MAX];
 	char *namepath, *data, *s;
 	int fd;
 	unsigned int len;
+	struct domain *dom = con->d;
 
 	namepath = xs_get_domain_path(xs, dom->domid);
 	s = realloc(namepath, strlen(namepath) + 6);
@@ -342,10 +343,8 @@ static int create_domain_log(struct domain *dom)
 	return fd;
 }
 
-static void domain_close_tty(struct domain *dom)
+static void console_close_tty(struct console *con)
 {
-	struct console *con = &dom->console;
-
 	if (con->master_fd != -1) {
 		close(con->master_fd);
 		con->master_fd = -1;
@@ -417,7 +416,7 @@ void cfmakeraw(struct termios *termios_p)
 }
 #endif /* __sun__ */
 
-static int domain_create_tty(struct domain *dom)
+static int console_create_tty(struct console *con)
 {
 	const char *slave;
 	char *path;
@@ -426,7 +425,7 @@ static int domain_create_tty(struct domain *dom)
 	char *data;
 	unsigned int len;
 	struct termios term;
-	struct console *con = &dom->console;
+	struct domain *dom = con->d;
 
 	assert(con->slave_fd == -1);
 	assert(con->master_fd == -1);
@@ -487,7 +486,7 @@ static int domain_create_tty(struct domain *dom)
 
 	return 1;
 out:
-	domain_close_tty(dom);
+	console_close_tty(con);
 	return 0;
 }
  
@@ -526,10 +525,8 @@ static int xs_gather(struct xs_handle *xs, const char *dir, ...)
 	return ret;
 }
 
-static void domain_unmap_interface(struct domain *dom)
+static void console_unmap_interface(struct console *con)
 {
-	struct console *con = &dom->console;
-
 	if (con->interface == NULL)
 		return;
 	if (xgt_handle && con->ring_ref == -1)
@@ -540,11 +537,11 @@ static void domain_unmap_interface(struct domain *dom)
 	con->ring_ref = -1;
 }
  
-static int domain_create_ring(struct domain *dom)
+static int console_create_ring(struct console *con)
 {
 	int err, remote_port, ring_ref, rc;
 	char *type, path[PATH_MAX];
-	struct console *con = &dom->console;
+	struct domain *dom = con->d;
 
 	err = xs_gather(xs, con->xspath,
 			"ring-ref", "%u", &ring_ref,
@@ -563,7 +560,7 @@ static int domain_create_ring(struct domain *dom)
 
 	/* If using ring_ref and it has changed, remap */
 	if (ring_ref != con->ring_ref && con->ring_ref != -1)
-		domain_unmap_interface(dom);
+		console_unmap_interface(con);
 
 	if (!con->interface && xgt_handle) {
 		/* Prefer using grant table */
@@ -621,7 +618,7 @@ static int domain_create_ring(struct domain *dom)
 	con->remote_port = remote_port;
 
 	if (con->master_fd == -1) {
-		if (!domain_create_tty(dom)) {
+		if (!console_create_tty(con)) {
 			err = errno;
 			xenevtchn_close(con->xce_handle);
 			con->xce_handle = NULL;
@@ -632,7 +629,7 @@ static int domain_create_ring(struct domain *dom)
 	}
 
 	if (log_guest && (con->log_fd == -1))
-		con->log_fd = create_domain_log(dom);
+		con->log_fd = create_console_log(con);
 
  out:
 	return err;
@@ -648,7 +645,7 @@ static bool watch_domain(struct domain *dom, bool watch)
 	if (watch) {
 		success = xs_watch(xs, con->xspath, domid_str);
 		if (success)
-			domain_create_ring(dom);
+			console_create_ring(con);
 		else
 			xs_unwatch(xs, con->xspath, domid_str);
 	} else {
@@ -695,6 +692,7 @@ static struct domain *create_domain(int domid)
 	con->slave_fd = -1;
 	con->log_fd = -1;
 	con->xce_pollfd_idx = -1;
+	con->d = dom;
 
 	con->next_period = ((long long)ts.tv_sec * 1000) + (ts.tv_nsec / 1000000) + RATE_LIMIT_PERIOD;
 
@@ -746,7 +744,7 @@ static void cleanup_domain(struct domain *d)
 {
 	struct console *con = &d->console;
 
-	domain_close_tty(d);
+	console_close_tty(con);
 
 	if (con->log_fd != -1) {
 		close(con->log_fd);
@@ -768,7 +766,7 @@ static void shutdown_domain(struct domain *d)
 
 	d->is_dead = true;
 	watch_domain(d, false);
-	domain_unmap_interface(d);
+	console_unmap_interface(con);
 	if (con->xce_handle != NULL)
 		xenevtchn_close(con->xce_handle);
 	con->xce_handle = NULL;
@@ -799,9 +797,8 @@ static void enum_domains(void)
 	}
 }
 
-static int ring_free_bytes(struct domain *dom)
+static int ring_free_bytes(struct console *con)
 {
-	struct console *con = &dom->console;
 	struct xencons_interface *intf = con->interface;
 	XENCONS_RING_IDX cons, prod, space;
 
@@ -816,30 +813,30 @@ static int ring_free_bytes(struct domain *dom)
 	return (sizeof(intf->in) - space);
 }
 
-static void domain_handle_broken_tty(struct domain *dom, int recreate)
+static void console_handle_broken_tty(struct console *con, int recreate)
 {
-	domain_close_tty(dom);
+	console_close_tty(con);
 
 	if (recreate) {
-		domain_create_tty(dom);
+		console_create_tty(con);
 	} else {
-		shutdown_domain(dom);
+		shutdown_domain(con->d);
 	}
 }
 
-static void handle_tty_read(struct domain *dom)
+static void handle_tty_read(struct console *con)
 {
 	ssize_t len = 0;
 	char msg[80];
 	int i;
-	struct console *con = &dom->console;
 	struct xencons_interface *intf = con->interface;
+	struct domain *dom = con->d;
 	XENCONS_RING_IDX prod;
 
 	if (dom->is_dead)
 		return;
 
-	len = ring_free_bytes(dom);
+	len = ring_free_bytes(con);
 	if (len == 0)
 		return;
 
@@ -853,7 +850,7 @@ static void handle_tty_read(struct domain *dom)
 	 * keep the slave open for the duration.
 	 */
 	if (len < 0) {
-		domain_handle_broken_tty(dom, domain_is_valid(dom->domid));
+		console_handle_broken_tty(con, domain_is_valid(dom->domid));
 	} else if (domain_is_valid(dom->domid)) {
 		prod = intf->in_prod;
 		for (i = 0; i < len; i++) {
@@ -864,15 +861,15 @@ static void handle_tty_read(struct domain *dom)
 		intf->in_prod = prod;
 		xenevtchn_notify(con->xce_handle, con->local_port);
 	} else {
-		domain_close_tty(dom);
+		console_close_tty(con);
 		shutdown_domain(dom);
 	}
 }
 
-static void handle_tty_write(struct domain *dom)
+static void handle_tty_write(struct console *con)
 {
 	ssize_t len;
-	struct console *con = &dom->console;
+	struct domain *dom = con->d;
 
 	if (dom->is_dead)
 		return;
@@ -882,7 +879,7 @@ static void handle_tty_write(struct domain *dom)
  	if (len < 1) {
 		dolog(LOG_DEBUG, "Write failed on domain %d: %zd, %d\n",
 		      dom->domid, len, errno);
-		domain_handle_broken_tty(dom, domain_is_valid(dom->domid));
+		console_handle_broken_tty(con, domain_is_valid(dom->domid));
 	} else {
 		buffer_advance(&con->buffer, len);
 	}
@@ -901,7 +898,7 @@ static void handle_ring_read(struct domain *dom)
 
 	con->event_count++;
 
-	buffer_append(dom);
+	buffer_append(con);
 
 	if (con->event_count < RATE_LIMIT_ALLOWANCE)
 		(void)xenevtchn_unmask(con->xce_handle, port);
@@ -925,7 +922,7 @@ static void handle_xs(void)
 		/* We may get watches firing for domains that have recently
 		   been removed, so dom may be NULL here. */
 		if (dom && dom->is_dead == false)
-			domain_create_ring(dom);
+			console_create_ring(&dom->console);
 	}
 
 	free(vec);
@@ -975,7 +972,7 @@ static void handle_log_reload(void)
 
 			if (con->log_fd != -1)
 				close(con->log_fd);
-			con->log_fd = create_domain_log(d);
+			con->log_fd = create_console_log(con);
 		}
 	}
 
@@ -1121,7 +1118,7 @@ void handle_io(void)
 
 			if (con->master_fd != -1) {
 				short events = 0;
-				if (!d->is_dead && ring_free_bytes(d))
+				if (!d->is_dead && ring_free_bytes(con))
 					events |= POLLIN;
 
 				if (!buffer_empty(&con->buffer))
@@ -1208,15 +1205,15 @@ void handle_io(void)
 			if (con->master_fd != -1 && con->master_pollfd_idx != -1) {
 				if (fds[con->master_pollfd_idx].revents &
 				    ~(POLLIN|POLLOUT|POLLPRI))
-					domain_handle_broken_tty(d,
+					console_handle_broken_tty(con,
 						   domain_is_valid(d->domid));
 				else {
 					if (fds[con->master_pollfd_idx].revents &
 					    POLLIN)
-						handle_tty_read(d);
+						handle_tty_read(con);
 					if (fds[con->master_pollfd_idx].revents &
 					    POLLOUT)
-						handle_tty_write(d);
+						handle_tty_write(con);
 				}
 			}
 
