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 ea1325e188f95ce62358f71daf53084106be4eba..3b7c507029ca59a099e0304dcf3fef13b979fd85 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
@@ -8,6 +8,7 @@ import java.io.PrintWriter;
 import java.text.Collator;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.Comparator;
 import java.util.Enumeration;
 import java.util.Iterator;
@@ -821,10 +822,9 @@ public class I2PSnarkServlet extends Default {
         out.write("</td>\n</tr>\n");
 
         if(showPeers && isRunning && curPeers > 0) {
-            List peers = snark.coordinator.peerList();
-            Iterator it = peers.iterator();
-            while (it.hasNext()) {
-                Peer peer = (Peer)it.next();
+            List<Peer> peers = snark.coordinator.peerList();
+            Collections.sort(peers, new PeerComparator());
+            for (Peer peer : peers) {
                 if (!peer.isConnected())
                     continue;
                 out.write("<tr class=\"" + rowClass + "\">");
@@ -908,6 +908,19 @@ public class I2PSnarkServlet extends Default {
         }
     }
     
+    /**
+     *  Sort by completeness (seeds first), then by ID
+     *  @since 0.8.1
+     */
+    private static class PeerComparator implements Comparator<Peer> {
+        public int compare(Peer l, Peer r) {
+            int diff = r.completed() - l.completed();      // reverse
+            if (diff != 0)
+                return diff;
+            return l.toString().substring(5, 9).compareTo(r.toString().substring(5, 9));
+        }
+    }
+
     private void writeAddForm(PrintWriter out, HttpServletRequest req) throws IOException {
         String uri = req.getRequestURI();
         String newURL = req.getParameter("newURL");