diff --git a/router/java/src/net/i2p/router/client/ClientManager.java b/router/java/src/net/i2p/router/client/ClientManager.java
index 9fe34991d7257b2ee270af76083525f4d8d17bda..c323042f67196eeb175d71238895c74e31a6544c 100644
--- a/router/java/src/net/i2p/router/client/ClientManager.java
+++ b/router/java/src/net/i2p/router/client/ClientManager.java
@@ -17,16 +17,19 @@ import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
 
+import net.i2p.data.DataHelper;
 import net.i2p.data.Destination;
 import net.i2p.data.Hash;
 import net.i2p.data.LeaseSet;
 import net.i2p.data.Payload;
+import net.i2p.data.TunnelId;
 import net.i2p.data.i2cp.MessageId;
 import net.i2p.data.i2cp.SessionConfig;
 import net.i2p.router.ClientMessage;
 import net.i2p.router.Job;
 import net.i2p.router.JobImpl;
 import net.i2p.router.RouterContext;
+import net.i2p.router.TunnelInfo;
 import net.i2p.util.I2PThread;
 import net.i2p.util.Log;
 
@@ -310,7 +313,8 @@ public class ClientManager {
     
     public void renderStatusHTML(OutputStream out) throws IOException {
         StringBuffer buf = new StringBuffer(8*1024);
-        buf.append("<h2>Clients</h2><ul>");
+        buf.append("<u><b>Local destinations</b></u><br />");
+        
         Map runners = null;
         synchronized (_runners) {
             runners = (Map)_runners.clone();
@@ -318,16 +322,39 @@ public class ClientManager {
         for (Iterator iter = runners.keySet().iterator(); iter.hasNext(); ) {
             Destination dest = (Destination)iter.next();
             ClientConnectionRunner runner = (ClientConnectionRunner)runners.get(dest);
-            buf.append("<li>").append(dest.calculateHash().toBase64()).append("</li>\n");
-            // toss out some general warnings
-            if (runner.getLeaseSet() == null)
-                buf.append("<font color=\"red\"><b>No leases! If you didn't just start a client, please restart it (and perhaps check your router's logs for ERROR messages)</b></font><br />\n");
-            else if (runner.getLeaseSet().getEarliestLeaseDate() < _context.clock().now()) 
-                buf.append("<font color=\"red\"><b>wtf, lease has already expired!  please wait a minute, and if this message remains, restart your client</b></font><br />\n");
-            buf.append("<pre>\n");
-            buf.append(runner.getLeaseSet()).append("</pre>\n");
+            buf.append("<b>*</b> ").append(dest.calculateHash().toBase64().substring(0,6)).append("<br />\n");
+            LeaseSet ls = runner.getLeaseSet();
+            if (ls == null) {
+                buf.append("<font color=\"red\"><i>No lease</i></font><br />\n");
+            } else { 
+                long leaseAge = ls.getEarliestLeaseDate() - _context.clock().now();
+                if (leaseAge <= 0) { 
+                    buf.append("<font color=\"red\"><i>Lease expired ");
+                    buf.append(DataHelper.formatDuration(0-leaseAge)).append(" ago</i></font><br />\n");
+                } else {
+                    int count = ls.getLeaseCount();
+                    if (count <= 0) {
+                        buf.append("<font color=\"red\"><i>No tunnels</i></font><br />\n");
+                    } else {
+                        TunnelId id = ls.getLease(0).getTunnelId();
+                        TunnelInfo info = _context.tunnelManager().getTunnelInfo(id);
+                        if (info == null) {
+                            buf.append("<font color=\"red\"><i>Failed tunnels</i></font><br />\n");
+                        } else {
+                            buf.append(count).append(" x ");
+                            buf.append(info.getLength() - 1).append(" hop tunnel");
+                            if (count != 1)
+                                buf.append('s');
+                            buf.append("<br />\n");
+                            buf.append("Expiring in ").append(DataHelper.formatDuration(leaseAge));
+                            buf.append("<br />\n");
+                        }
+                    }
+                }
+            }
         }
-        buf.append("</ul>\n");
+        
+        buf.append("\n<hr />\n");
         out.write(buf.toString().getBytes());
     }