diff -urN a/libs/DomU.php b/libs/DomU.php
--- a/libs/DomU.php	2010-03-22 15:59:18.000000000 +0100
+++ b/libs/DomU.php	2010-05-26 13:27:10.000000000 +0200
@@ -65,6 +65,28 @@
 			return $this->dom0;
 		}
 
+		if ($name === 'console1')
+		{
+			if ($this->consoles === null)
+			{
+				$this->consoles = $this->dom0->rpc_query(
+					'VM.get_consoles',
+					$this->xid
+				);
+			}
+			foreach ($this->consoles as $console)
+			{
+				$this->console1 = $this->dom0->rpc_query(
+					'console.get_location',
+					$console
+				);
+				if(false === strpos($this->console1, ':'))
+				    continue;
+				break;
+			}
+			return $this->console1;
+		}
+
 		if (isset(self::$aliases[$name]))
 		{
 			$name = self::$aliases[$name];
@@ -137,6 +159,14 @@
 	{
 		$this->vm_record = null;
 		$this->vm_metrics_record = null;
+		$this->consoles = null;
+		$this->console1 = null;
+	}
+
+	public function refresh_console()
+	{
+		$this->consoles = null;
+		$this->console1 = null;
 	}
 
 	static private $aliases = array(
@@ -156,5 +186,8 @@
 	private $vm_record = null;
 
 	private $vm_metrics_record = null;
+
+	private $consoles = null;
+	private $console1 = null;
 }
 
diff -urN a/htdocs/index.php b/htdocs/index.php
--- a/htdocs/index.php	2010-03-22 15:59:18.000000000 +0100
+++ b/htdocs/index.php	2010-05-26 13:35:59.000000000 +0200
@@ -55,6 +55,8 @@
 		{
 			foreach ($domUs as $domU)
 			{
+				$domU->refresh_console();
+				$domU->__get('console1');
 				if ($u->can(ACL::READ, $dom0->id, $domU->name))
 				{
 					$cpus = $domU->VCPUs_utilisation;
@@ -70,6 +72,7 @@
 						'name' => $domU->name,
 						'ro' => !$u->can(ACL::WRITE, $dom0->id, $domU->name),
 						'state' => $domU->power_state,
+						'console1' => (($domU->power_state=='Halted')?'':$domU->console1),
 					);
 				}
 			}
@@ -140,7 +143,6 @@
 
 	$dom0_id = isset ($_GET['dom0']) ? $_GET['dom0'] : false;
 	$domU_id = isset ($_GET['domU']) ? $_GET['domU'] : false;
-
 	$u = Model::get_current_user();
 	if (!$u->can(ACL::READ, $dom0_id, $domU_id))
 	{
@@ -227,7 +229,9 @@
 		'd_min_ram' => $domU->memory_dynamic_min,
 		'd_max_ram' => $domU->memory_dynamic_max,
 		's_min_ram' => $domU->memory_static_min,
-		's_max_ram' => $domU->memory_static_max
+		's_max_ram' => $domU->memory_static_max,
+		'domid' => $domU->domid,
+		'console1' => (($domU->power_state=='Halted')?'':$domU->console1)
 	);
 }
 else
diff -urN a/htdocs/scripts/xo.js b/htdocs/scripts/xo.js
--- a/htdocs/scripts/xo.js	2010-05-26 11:50:16.000000000 +0200
+++ b/htdocs/scripts/xo.js	2010-05-26 13:31:46.000000000 +0200
@@ -142,7 +142,7 @@
 };
 
 
-function DomU(id, dom0, name, vcpus, state, ro)
+function DomU(id, dom0, name, vcpus, state, ro, console1)
 {
 	this.id = id;
 	this.dom0 = null;
@@ -151,6 +151,8 @@
 	this.d_min_ram = 'N/A';
 	this.kernel = 'N/A';
 	this.on_crash = 'N/A';
+	this.domid = 'N/A';
+	this.console1 = 'N/A';
 	this.on_reboot = 'N/A';
 	this.on_shutdown = 'N/A';
 	this.start_time = 'N/A';
@@ -159,7 +161,7 @@
 	this.s_min_ram = 'N/A';
 	this.s_max_ram = 'N/A';
 
-	this.update(dom0, name, vcpus, state, ro);
+	this.update(dom0, name, vcpus, state, ro, console1);
 }
 DomU.prototype = {
 	finalize: function ()
@@ -171,13 +173,14 @@
 		}
 		this.dom0.removeDomU(this.id);
 	},
-	update: function (dom0, name, vcpus, state, ro, cap, d_min_ram, kernel, on_crash, on_reboot,
+	update: function (dom0, name, vcpus, state, ro, console1, cap, d_min_ram, kernel, on_crash, domid, on_reboot,
 		on_shutdown, start_time, weight, d_max_ram, s_min_ram, s_max_ram)
 	{
 		this.name = name;
 		this.vcpus = vcpus;
 		this.state = state;
 		this.ro = ro;
+		this.console1 = console1;
 
 		if (cap !== undefined) // The second part of arguments is optional.
 		{
@@ -185,6 +188,7 @@
 			this.d_min_ram = d_min_ram;
 			this.kernel = kernel;
 			this.on_crash = on_crash;
+			this.domid = domid;
 			this.on_reboot = on_reboot;
 			this.on_shutdown = on_shutdown;
 			this.start_time = start_time;
@@ -267,12 +271,12 @@
 			Control.Tabs.instances = Control.Tabs.instances.without(current_instance);
 		}
 		// set windows title and html
-		this.window.setTitle('<b id="title_' + wId + '"></b> (' + this.dom0.address + ')');
+		this.window.setTitle('<b id="title_' + wId + '"></b> (' + this.dom0.address + this.console1.substr(this.console1.indexOf(':')) + ')');
 		$('title_' + wId).update(this.name);
 		$('title_' + wId).innerHTML;
 		
 		this.window.setHTMLContent('<div id="vm_' + wId + '"><ul id="tabs_' + wId + '" class="menuvm"></ul></div>');
-		var staticContent = render_vm(this.id,wId,this.state,this.kernel,this.vcpus,this.d_min_ram,date,actions,this.on_shutdown,this.on_reboot,this.on_crash,this.weight,this.cap,targets);
+		var staticContent = render_vm(this.id,wId,this.state,this.kernel,this.vcpus,this.d_min_ram,date,actions,this.on_shutdown,this.on_reboot,this.on_crash,this.domid,this.console1,this.weight,this.cap,targets);
 		// fill the content with correct data from render_vm
 		$('vm_' + wId).update(staticContent);
 		$('vm_' + wId).innerHTML;
@@ -492,12 +496,12 @@
 				if (domUs[r.id] === undefined)
 				{
 					domUs[r.id] = new DomU(r.id, dom0s[record.id], r.name,
-						r.cpus, r.state, r.ro);
+						r.cpus, r.state, r.ro, r.console1);
 				}
 				else
 				{
 					domUs[r.id].update(dom0s[record.id], r.name, r.cpus,
-						r.state, r.ro);
+						r.state, r.ro, r.console1);
 				}
 
 				delete domUs_diff[r.id];
@@ -534,10 +538,9 @@
 		// DomU and Dom0 have to already exist.
 		var domU = domUs[info.domU.id];
 		var dom0 = dom0s[info.domU.dom0_id];
-
 		domU.update(dom0, info.domU.name, info.domU.cpus, info.domU.state,
-			info.domU.ro, info.domU.cap, info.domU.d_min_ram, info.domU.kernel,
-			info.domU.on_crash, info.domU.on_reboot, info.domU.on_shutdown,
+			info.domU.ro, info.domU.console1, info.domU.cap, info.domU.d_min_ram, info.domU.kernel,
+			info.domU.on_crash, info.domU.domid, info.domU.on_reboot, info.domU.on_shutdown,
 			info.domU.start_time, info.domU.weight);
 	}
 }
diff -urN a/htdocs/scripts/xorender.js b/htdocs/scripts/xorender.js
--- a/htdocs/scripts/xorender.js	2010-03-22 15:59:18.000000000 +0100
+++ b/htdocs/scripts/xorender.js	2010-05-22 10:22:13.000000000 +0200
@@ -4,7 +4,7 @@
  * @param TODO
  */
 function render_vm(id,html_id,state,kernel,vcpus,d_min_ram,date,actions,
-					on_shutdown,on_reboot,on_crash,weight,cap,targets)
+					on_shutdown,on_reboot,on_crash,domid,console1,weight,cap,targets)
 {
 	var html = '<ul id="tabs_' + html_id + '" class="menuvm">'
 		+ '<li><a href="#overview_' + html_id + '"><b><img src="img/information.png" alt=""/>Overview</b></a></li>'
@@ -91,7 +91,13 @@
 		html+='<div id="misc_' + html_id + '">'
 			+ '<br/><b><p>On shutdown:</b> '+on_shutdown+'</p>'
 			+ '<b><p>On reboot:</b> '+on_reboot+'</p>'
-			+ '<b><p>On crash:</b> '+on_crash+'</p></div>';
+			+ '<b><p>On crash:</b> '+on_crash+'</p>';
+
+	if (console1 !== '')
+	{
+		html+='<b><p>Domain id:</b> '+domid+' (<a target="_blank" href="vnc.php?url='+console1+'">vnc</a>)</p>';
+	}
+	html+='</div>';
 
 return html;
 }
diff -urN a/htdocs/vnc.php b/htdocs/vnc.php
--- a/htdocs/vnc.php	1970-01-01 01:00:00.000000000 +0100
+++ b/htdocs/vnc.php	2010-05-26 13:21:01.000000000 +0200
@@ -0,0 +1,15 @@
+<HTML>
+<TITLE>
+VNC Viewer (<?php echo(isset($_GET['url'])?$_GET['url']:'url missing'); ?>)
+</TITLE>
+<APPLET CODE=VncViewer.class ARCHIVE=VncViewer.jar
+        WIDTH=<?php echo(isset($_GET['w'])?$_GET['w']:'800'); ?>
+        HEIGHT=<?php echo(isset($_GET['h'])?$_GET['h']:'600'); ?>
+>
+<param name="PORT" value=<?php echo(isset($_GET['url'])?(preg_replace('/.*:/','',$_GET['url'])):(isset($_GET['p'])?$_GET['p']:'5900')); ?>>
+</APPLET>
+<BR>
+Download Java Vnc Viewer, unpack VncViewer.jar from
+<A href="http://www.tightvnc.com/">TightVNC site</A>
+and put it into <?php echo(dirname(__FILE__)); ?>.
+</HTML>
