diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerID.java b/apps/i2psnark/java/src/org/klomp/snark/PeerID.java
index 0a71450c7c25188549464ff4bf067900488271c0..405d9e508aad4652bf2c18358eda0922081fe402 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/PeerID.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/PeerID.java
@@ -42,7 +42,7 @@ import org.klomp.snark.bencode.InvalidBEncodingException;
  *  and the PeerID is not required.
  *  Equality is now determined solely by the dest hash.
  */
-class PeerID implements Comparable<PeerID>
+public class PeerID implements Comparable<PeerID>
 {
   private byte[] id;
   private Destination address;
diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
index bed4519817af1e651a06f5f22a0339f909e622d4..f84fa230e0fb8d34da91fca40ffaa7e572561b89 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
@@ -32,6 +32,7 @@ import org.klomp.snark.I2PSnarkUtil;
 import org.klomp.snark.MagnetURI;
 import org.klomp.snark.MetaInfo;
 import org.klomp.snark.Peer;
+import org.klomp.snark.PeerID;
 import org.klomp.snark.Snark;
 import org.klomp.snark.SnarkManager;
 import org.klomp.snark.Storage;
@@ -1478,7 +1479,8 @@ public class I2PSnarkServlet extends BasicServlet {
                     continue;
                 out.write("<tr class=\"" + rowClass + "\"><td></td>");
                 out.write("<td colspan=\"4\" align=\"right\">");
-                String ch = peer.toString().substring(0, 4);
+                PeerID pid = peer.getPeerID();
+                String ch = pid != null ? pid.toString().substring(0, 4) : "????";
                 String client;
                 if ("AwMD".equals(ch))
                     client = _("I2PSnark");
@@ -1487,15 +1489,15 @@ public class I2PSnarkServlet extends BasicServlet {
                 else if ("TTMt".equals(ch))
                     client = "I2P-BT";
                 else if ("LUFa".equals(ch))
-                    client = "Azureus";
+                    client = "Vuze" + getAzVersion(pid.getID());
                 else if ("CwsL".equals(ch))
                     client = "I2PSnarkXL";
                 else if ("ZV".equals(ch.substring(2,4)) || "VUZP".equals(ch))
-                    client = "Robert";
+                    client = "Robert" + getRobtVersion(pid.getID());
                 else if (ch.startsWith("LV")) // LVCS 1.0.2?; LVRS 1.0.4
-                    client = "Transmission";
+                    client = "Transmission" + getAzVersion(pid.getID());
                 else if ("LUtU".equals(ch))
-                    client = "KTorrent";
+                    client = "KTorrent" + getAzVersion(pid.getID());
                 else
                     client = _("Unknown") + " (" + ch + ')';
                 out.write(client + "&nbsp;&nbsp;<tt>" + peer.toString().substring(5, 9)+ "</tt>");
@@ -1569,6 +1571,50 @@ public class I2PSnarkServlet extends BasicServlet {
             }
         }
     }
+
+    /**
+     *  Get version from bytes 3-6
+     *  @return " w.x.y.z" or ""
+     *  @since 0.9.14
+     */
+    private static String getAzVersion(byte[] id) {
+        if (id[7] != '-')
+            return "";
+        StringBuilder buf = new StringBuilder(16);
+        buf.append(' ');
+        for (int i = 3; i <= 6; i++) {
+            int val = id[i] - '0';
+            if (val < 0)
+                return "";
+            if (val > 9)
+                val = id[i] - 'A';
+            if (i != 6 || val != 0) {
+                if (i != 3)
+                    buf.append('.');
+                buf.append(val);
+            }
+        }
+        return buf.toString();
+    }
+
+    /**
+     *  Get version from bytes 3-5
+     *  @return " w.x.y" or ""
+     *  @since 0.9.14
+     */
+    private static String getRobtVersion(byte[] id) {
+        StringBuilder buf = new StringBuilder(8);
+        buf.append(' ');
+        for (int i = 3; i <= 5; i++) {
+            int val = id[i];
+            if (val < 0)
+                return "";
+            if (i != 3)
+                buf.append('.');
+            buf.append(val);
+        }
+        return buf.toString();
+    }
     
     /** @since 0.8.2 */
     private static String thinsp(boolean disable) {