diff --git a/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java
index 244cc13a0f80e94009eb5a1de2a7c5b35914e4b8..a2c5632fa8e0e4d57e750d3f60447b3469f6d605 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java
@@ -19,6 +19,8 @@ import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
+import java.util.Map;
+import java.util.Properties;
 import java.util.Set;
 import java.util.TreeSet;
 
@@ -34,6 +36,7 @@ import net.i2p.router.TunnelPoolSettings;
 import net.i2p.router.networkdb.kademlia.HashDistance;   // debug
 import net.i2p.util.HexDump;                             // debug
 import net.i2p.util.ObjectCounter;
+import net.i2p.util.OrderedProperties;
 import net.i2p.util.VersionComparator;
 
 public class NetDbRenderer {
@@ -371,9 +374,11 @@ public class NetDbRenderer {
             int cost = addr.getCost();
             if (!((style.equals("SSU") && cost == 5) || (style.equals("NTCP") && cost == 10)))
                 buf.append('[').append(_("cost")).append('=').append("" + cost).append("] ");
-            for (Iterator optIter = addr.getOptions().keySet().iterator(); optIter.hasNext(); ) {
-                String name = (String)optIter.next();
-                String val = addr.getOptions().getProperty(name);
+            Properties p = new OrderedProperties();
+            p.putAll(addr.getOptions());
+            for (Map.Entry e : p.entrySet()) {
+                String name = (String) e.getKey();
+                String val = (String) e.getValue();
                 buf.append('[').append(_(DataHelper.stripHTML(name))).append('=').append(DataHelper.stripHTML(val)).append("] ");
             }
         }
diff --git a/core/java/src/net/i2p/data/RouterAddress.java b/core/java/src/net/i2p/data/RouterAddress.java
index 9d199e57401add70fb9919555d489ee3e78918fc..1b4d6438f5e518caf134c9f4a9a61183f7aaf96e 100644
--- a/core/java/src/net/i2p/data/RouterAddress.java
+++ b/core/java/src/net/i2p/data/RouterAddress.java
@@ -14,8 +14,11 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.Date;
 import java.util.Iterator;
+import java.util.Map;
 import java.util.Properties;
 
+import net.i2p.util.OrderedProperties;
+
 /**
  * Defines a method of communicating with a router
  *
@@ -28,7 +31,7 @@ public class RouterAddress extends DataStructureImpl {
     private Properties _options;
 
     public RouterAddress() {
-        setCost(-1);
+        _cost = -1;
     }
 
     /**
@@ -134,18 +137,27 @@ public class RouterAddress extends DataStructureImpl {
         return DataHelper.hashCode(_transportStyle);
     }
     
+    /**
+     *  This is used on peers.jsp so sort options so it looks better.
+     *  We don't just use OrderedProperties for _options because DataHelper.writeProperties()
+     *  sorts also.
+     */
     @Override
     public String toString() {
-        StringBuilder buf = new StringBuilder(64);
+        StringBuilder buf = new StringBuilder(128);
         buf.append("[RouterAddress: ");
-        buf.append("\n\tTransportStyle: ").append(getTransportStyle());
-        buf.append("\n\tCost: ").append(getCost());
-        buf.append("\n\tExpiration: ").append(getExpiration());
-        buf.append("\n\tOptions: #: ").append(getOptions().size());
-        for (Iterator iter = getOptions().keySet().iterator(); iter.hasNext();) {
-            String key = (String) iter.next();
-            String val = getOptions().getProperty(key);
-            buf.append("\n\t\t[").append(key).append("] = [").append(val).append("]");
+        buf.append("\n\tTransportStyle: ").append(_transportStyle);
+        buf.append("\n\tCost: ").append(_cost);
+        buf.append("\n\tExpiration: ").append(_expiration);
+        if (_options != null) {
+            buf.append("\n\tOptions: #: ").append(_options.size());
+            Properties p = new OrderedProperties();
+            p.putAll(_options);
+            for (Map.Entry e : p.entrySet()) {
+                String key = (String) e.getKey();
+                String val = (String) e.getValue();
+                buf.append("\n\t\t[").append(key).append("] = [").append(val).append("]");
+            }
         }
         buf.append("]");
         return buf.toString();