diff --git a/apps/routerconsole/java/src/net/i2p/router/update/ConsoleUpdateManager.java b/apps/routerconsole/java/src/net/i2p/router/update/ConsoleUpdateManager.java
index 5386554954aebcbcddc89ee8c9433a325299bc1b..7ba50c305ef963461a13aa3ca817c11dad3fc9e2 100644
--- a/apps/routerconsole/java/src/net/i2p/router/update/ConsoleUpdateManager.java
+++ b/apps/routerconsole/java/src/net/i2p/router/update/ConsoleUpdateManager.java
@@ -1,13 +1,15 @@
 package net.i2p.router.update;
 
-import java.io.ByteArrayInputStream;
 import java.io.File;
+import java.io.IOException;
+import java.io.Writer;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
@@ -1111,7 +1113,7 @@ public class ConsoleUpdateManager implements UpdateManager {
 
         @Override
         public String toString() {
-            return "RegisteredUpdater " + updater.getClass() + " for " + type + ' ' + method + " @pri " + priority;
+            return "RegisteredUpdater " + updater.getClass().getName() + " for " + type + ' ' + method + " @pri " + priority;
         }
     }
 
@@ -1152,7 +1154,7 @@ public class ConsoleUpdateManager implements UpdateManager {
 
         @Override
         public String toString() {
-            return "RegisteredChecker " + checker.getClass() + " for " + type + ' ' + method + " @pri " + priority;
+            return "RegisteredChecker " + checker.getClass().getName() + " for " + type + ' ' + method + " @pri " + priority;
         }
     }
 
@@ -1223,4 +1225,51 @@ public class ConsoleUpdateManager implements UpdateManager {
             return "VersionAvailable \"" + version + "\" " + sourceMap;
         }
     }
+
+    /** debug */
+    public void renderStatusHTML(Writer out) throws IOException {
+        StringBuilder buf = new StringBuilder(1024);
+        buf.append("<h2>Update Manager</h2>");
+        buf.append("<h3>Installed</h3>");
+        toString(buf, _installed);
+        buf.append("<h3>Available</h3>");
+        toString(buf, _available);
+        buf.append("<h3>Downloaded</h3>");
+        toString(buf, _downloaded);
+        buf.append("<h3>Registered Checkers</h3>");
+        toString(buf, _registeredCheckers);
+        buf.append("<h3>Registered Updaters</h3>");
+        toString(buf, _registeredUpdaters);
+        buf.append("<h3>Active Checkers</h3>");
+        toString(buf, _activeCheckers);
+        buf.append("<h3>Active Updaters</h3>");
+        toString(buf, _downloaders);
+        out.write(buf.toString());
+    }
+
+    /** debug */
+    private static void toString(StringBuilder buf, Collection col) {
+        List<String> list = new ArrayList(col.size());
+        for (Object o : col) {
+            list.add(o.toString());
+        }
+        Collections.sort(list);
+        for (String e : list) {
+            buf.append("[").append(e).append("]<br>");
+        }
+    }
+
+    /** debug */
+    private static void toString(StringBuilder buf, Map<?, ?> map) {
+        List<String> list = new ArrayList(map.size());
+        for (Map.Entry entry : map.entrySet()) {
+            String key = entry.getKey().toString();
+            String val = entry.getValue().toString();
+            list.add("[" + key + "] = [" + val + "]<br>");
+        }
+        Collections.sort(list);
+        for (String e : list) {
+            buf.append(e);
+        }
+    }
 }
diff --git a/apps/routerconsole/jsp/debug.jsp b/apps/routerconsole/jsp/debug.jsp
index 6da4cce616e93d6ef545d61f8ebe1fc23ffc5f6b..9f39b840e4720a7b57f1da11df23f728d0675f61 100644
--- a/apps/routerconsole/jsp/debug.jsp
+++ b/apps/routerconsole/jsp/debug.jsp
@@ -13,7 +13,7 @@
 <%@include file="summaryajax.jsi" %>
 </head><body onload="initAjax()">
 <%@include file="summary.jsi" %>
-<h1>Router SKM</h1>
+<h1>Router Debug</h1>
 <div class="main" id="main">
 <%
     /*
@@ -22,9 +22,14 @@
     net.i2p.router.RouterContext ctx = (net.i2p.router.RouterContext) net.i2p.I2PAppContext.getGlobalContext();
 
     /*
-     *  Print out the status for all the SessionKeyManagers
+     *  Print out the status for the UpdateManager
      */
+    ctx.updateManager().renderStatusHTML(out);
 
+    /*
+     *  Print out the status for all the SessionKeyManagers
+     */
+    out.print("<h2>Router SKM</h2>");
     ctx.sessionKeyManager().renderStatusHTML(out);
     java.util.Set<net.i2p.data.Destination> clients = ctx.clientManager().listClients();
     for (net.i2p.data.Destination dest : clients) {
diff --git a/core/java/src/net/i2p/update/UpdateManager.java b/core/java/src/net/i2p/update/UpdateManager.java
index eae698de4d59e50bc3d88cc578dacad9286671b4..5f609f54756e80698e2f38273fdb4db74c65eed5 100644
--- a/core/java/src/net/i2p/update/UpdateManager.java
+++ b/core/java/src/net/i2p/update/UpdateManager.java
@@ -1,6 +1,8 @@
 package net.i2p.update;
 
 import java.io.File;
+import java.io.IOException;
+import java.io.Writer;
 import java.net.URI;
 import java.util.List;
 
@@ -79,4 +81,9 @@ public interface UpdateManager {
      *  @return true if valid, false if corrupt
      */
     public boolean notifyComplete(UpdateTask task, String actualVersion, File file);
+
+    /**
+     *  For debugging
+     */
+    public void renderStatusHTML(Writer out) throws IOException;
 }
diff --git a/core/java/src/net/i2p/util/VersionComparator.java b/core/java/src/net/i2p/util/VersionComparator.java
index 8c72252fcb40f4a7a0fe49ac2804cee7bfab3232..ad7c20a0924fbb19ad9e4c028480031081fa702d 100644
--- a/core/java/src/net/i2p/util/VersionComparator.java
+++ b/core/java/src/net/i2p/util/VersionComparator.java
@@ -46,10 +46,9 @@ public class VersionComparator implements Comparator<String> {
         } catch (NumberFormatException nfe) {
             return 1;
         }
-        long diff = left - right;
-        if (diff < 0)
+        if (left < right)
             return -1;
-        if (diff > 0)
+        if (left > right)
             return 1;
         return 0;
     }