diff --git a/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java b/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java
index cdcd28837c685725e077e0ecae2754ff9d7524c1..61d988db37db178cd7dfa8ba98e361addf31deb4 100644
--- a/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java
+++ b/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java
@@ -9,9 +9,11 @@ package net.i2p.router.transport;
  */
 
 import java.io.IOException;
+import java.io.Serializable;
 import java.io.Writer;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Locale;
 import java.util.Set;
@@ -268,10 +270,32 @@ public class CommSystemFacadeImpl extends CommSystemFacade {
         //if (_context.router().isHidden())
         //    return Collections.EMPTY_SET;
         List<RouterAddress> addresses = new ArrayList<RouterAddress>(_manager.getAddresses());
+        if (addresses.size() > 1)
+            Collections.sort(addresses, new AddrComparator());
         if (_log.shouldLog(Log.INFO))
             _log.info("Creating addresses: " + addresses, new Exception("creator"));
         return addresses;
     }
+
+    /**
+     *  Arbitrary sort for consistency.
+     *  Note that the console UI has its own sorter.
+     *  @since 0.9.50
+     */
+    private static class AddrComparator implements Comparator<RouterAddress>, Serializable {
+        public int compare(RouterAddress l, RouterAddress r) {
+            int rv = l.getCost() - r.getCost();
+            if (rv != 0)
+                return rv;
+            int lh = l.hashCode();
+            int rh = l.hashCode();
+            if (lh > rh)
+                return 1;
+            if (lh < rh)
+                return -1;
+            return 0;
+        }
+    }
     
     /**
      * UDP changed addresses, tell NTCP and restart