diff --git a/apps/routerconsole/jsp/configlogging.jsp b/apps/routerconsole/jsp/configlogging.jsp
index 8f4c069e07ab43c9e2979ec8074db6583018dfc4..11db8e8b7fe055f8c5b90e7b9d86992a1464e315 100644
--- a/apps/routerconsole/jsp/configlogging.jsp
+++ b/apps/routerconsole/jsp/configlogging.jsp
@@ -27,27 +27,27 @@
     System.setProperty("net.i2p.router.web.ConfigLoggingHandler.nonce", new java.util.Random().nextLong()+""); %>
  <input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigLoggingHandler.nonce")%>" />
  <input type="hidden" name="action" value="blah" />
- <b>Logging filename:</b> 
-    <input type="text" name="logfilename" size="40" value="<jsp:getProperty name="logginghelper" property="logFilePattern" />" /><br />
-    <i>(the symbol '@' will be replaced during log rotation)</i><br />
- <b>Log record format:</b>
-    <input type="text" name="logformat" size="20" value="<jsp:getProperty name="logginghelper" property="recordPattern" />" /><br />
-    <i>(use 'd' = date, 'c' = class, 't' = thread, 'p' = priority, 'm' = message)</i><br />
- <b>Log date format:</b>
-    <input type="text" name="logdateformat" size="20" value="<jsp:getProperty name="logginghelper" property="datePattern" />" /><br />
-    <i>('MM' = month, 'dd' = day, 'HH' = hour, 'mm' = minute, 'ss' = second, 'SSS' = millisecond)</i><br />
- <b>Max log file size:</b>
-    <input type="text" name="logfilesize" size="4" value="<jsp:getProperty name="logginghelper" property="maxFileSize" />" /><br />
-  <hr />
-  <b>Log levels:</b> <br />
-  <b>Default log level:</b>
-   <jsp:getProperty name="logginghelper" property="defaultLogLevelBox" />
-   <i>(DEBUG and INFO are not recommended defaults, as they will drastically slow down your router)</i>
-   <br />
-   <jsp:getProperty name="logginghelper" property="logLevelTable" />
- <hr />
+ <table border="0" cellspacing="5">
+ <tr><td valign="top"><b>Logging filename:</b> 
+ <td><input type="text" name="logfilename" size="40" value="<jsp:getProperty name="logginghelper" property="logFilePattern" />" /><br />
+ <i>(the symbol '@' will be replaced during log rotation)</i>
+ <tr><td valign="top"><b>Log record format:</b>
+ <td><input type="text" name="logformat" size="20" value="<jsp:getProperty name="logginghelper" property="recordPattern" />" /><br />
+ <i>(use 'd' = date, 'c' = class, 't' = thread, 'p' = priority, 'm' = message)</i>
+ <tr><td valign="top"><b>Log date format:</b>
+ <td><input type="text" name="logdateformat" size="20" value="<jsp:getProperty name="logginghelper" property="datePattern" />" /><br />
+ <i>('MM' = month, 'dd' = day, 'HH' = hour, 'mm' = minute, 'ss' = second, 'SSS' = millisecond)</i>
+ <tr><td valign="top"><b>Max log file size:</b>
+ <td><input type="text" name="logfilesize" size="4" value="<jsp:getProperty name="logginghelper" property="maxFileSize" />" /><br />
+ <tr><td valign="top"><b>Default log level:</b>
+ <td><jsp:getProperty name="logginghelper" property="defaultLogLevelBox" />
+ <br /><i>(DEBUG and INFO are not recommended defaults, as they will drastically slow down your router)</i>
+ <tr><td valign="top"><b>Log level overrides:</b>
+ <td><jsp:getProperty name="logginghelper" property="logLevelTable" />
+ <tr><td><td>
  <input type="submit" name="shouldsave" value="Save changes" /> 
  <input type="reset" value="Cancel" />
+ </table>
  </form>
 </div>
 
diff --git a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionHandler.java b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionHandler.java
index 30d849ba4411de595c149ebaaf12e56b2bf4820a..d989a23671a938c3597ab517ae77f7c78f0845c8 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionHandler.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionHandler.java
@@ -171,7 +171,9 @@ class ConnectionHandler {
             // Send it through the packet handler again
             if (_log.shouldLog(Log.WARN))
                 _log.warn("Found con for queued non-syn packet: " + packet);
-            _manager.getPacketHandler().receivePacket(packet);
+            // false -> don't requeue, fixes a race where a SYN gets dropped
+            // between here and PacketHandler, causing the packet to loop forever....
+            _manager.getPacketHandler().receivePacketDirect(packet, false);
         } else {
             // goodbye
             if (_log.shouldLog(Log.WARN))
diff --git a/apps/streaming/java/src/net/i2p/client/streaming/PacketHandler.java b/apps/streaming/java/src/net/i2p/client/streaming/PacketHandler.java
index 1f2b3590246bab54092a00853c68f7d90972929b..1d26d7b8c1061acd3e24e28ffe4a78ec32a5b64d 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/PacketHandler.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/PacketHandler.java
@@ -90,10 +90,10 @@ public class PacketHandler {
     void receivePacket(Packet packet) {
         //boolean ok = choke(packet);
         //if (ok)
-            receivePacketDirect(packet);
+            receivePacketDirect(packet, true);
     }
     
-    private void receivePacketDirect(Packet packet) {
+    void receivePacketDirect(Packet packet, boolean queueIfNoConn) {
         //if (_log.shouldLog(Log.DEBUG))
         //    _log.debug("packet received: " + packet);
         
@@ -105,7 +105,7 @@ public class PacketHandler {
             if (_log.shouldLog(Log.INFO))
                 displayPacket(packet, "RECV", "wsize " + con.getOptions().getWindowSize() + " rto " + con.getOptions().getRTO());
         } else {
-            receiveUnknownCon(packet, sendId);
+            receiveUnknownCon(packet, sendId, queueIfNoConn);
             displayPacket(packet, "UNKN", null);
         }
     }
@@ -228,7 +228,7 @@ public class PacketHandler {
         _manager.getPacketQueue().enqueue(reply);
     }
     
-    private void receiveUnknownCon(Packet packet, long sendId) {
+    private void receiveUnknownCon(Packet packet, long sendId, boolean queueIfNoConn) {
         if (packet.isFlagSet(Packet.FLAG_ECHO)) {
             if (packet.getSendStreamId() > 0) {
                 receivePing(packet);
@@ -262,7 +262,7 @@ public class PacketHandler {
             
             if (packet.isFlagSet(Packet.FLAG_SYNCHRONIZE)) {
                 _manager.getConnectionHandler().receiveNewSyn(packet);
-            } else {
+            } else if (queueIfNoConn) {
                 // We can get here on the 2nd+ packet if the 1st (SYN) packet
                 // is still on the _synQueue in the ConnectionHandler, and
                 // ConnectionManager.receiveConnection() hasn't run yet to put
@@ -287,6 +287,10 @@ public class PacketHandler {
                 }
                 //packet.releasePayload();
                 _manager.getConnectionHandler().receiveNewSyn(packet);
+            } else {
+                // don't queue again (infinite loop!)
+                sendReset(packet);
+                packet.releasePayload();
             }
         }
     }
diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/ExploreJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/ExploreJob.java
index e8e0a01f102212832cd5ba92f5fe17dc8cbf6476..b03ea1473415ae4fc3332a50e878bd2bef640877 100644
--- a/router/java/src/net/i2p/router/networkdb/kademlia/ExploreJob.java
+++ b/router/java/src/net/i2p/router/networkdb/kademlia/ExploreJob.java
@@ -8,7 +8,9 @@ package net.i2p.router.networkdb.kademlia;
  *
  */
 
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import net.i2p.data.Hash;
 import net.i2p.data.TunnelId;
@@ -96,7 +98,13 @@ class ExploreJob extends SearchJob {
         
         available = MAX_CLOSEST - msg.getDontIncludePeers().size();
         if (available > 0) {
-            List peers = _peerSelector.selectNearestExplicit(getState().getTarget(), available, msg.getDontIncludePeers(), getFacade().getKBuckets());
+            // selectNearestExplicit adds our hash to the dontInclude set (3rd param) ...
+            // And we end up with MAX_CLOSEST+1 entries.
+            // We don't want our hash in the message's don't-include list though.
+            // We're just exploring, but this could give things away, and tie our exploratory tunnels to our router,
+            // so let's not put our hash in there.
+            Set dontInclude = new HashSet(msg.getDontIncludePeers());
+            List peers = _peerSelector.selectNearestExplicit(getState().getTarget(), available, dontInclude, getFacade().getKBuckets());
             msg.getDontIncludePeers().addAll(peers);
         }
         
@@ -106,17 +114,6 @@ class ExploreJob extends SearchJob {
         return msg;
     }
     
-    
-    /**
-     * We're looking for a router, so lets build the lookup message (no need to tunnel route either, so just have
-     * replies sent back to us directly).  This uses the similar overrides as the other buildMessage above.
-     *
-     */
-    @Override
-    protected DatabaseLookupMessage buildMessage(long expiration) {
-        return buildMessage(null, getContext().router().getRouterInfo().getIdentity().getHash(), expiration);
-    }
-    
     /** max # of concurrent searches */
     @Override
     protected int getBredth() { return EXPLORE_BREDTH; }
diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillPeerSelector.java b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillPeerSelector.java
index 049140397fc4127a8cbe7adc501a2475ea89f68e..d051460a29d349138b3d6862f2ac1ec49b6804e4 100644
--- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillPeerSelector.java
+++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillPeerSelector.java
@@ -44,7 +44,7 @@ class FloodfillPeerSelector extends PeerSelector {
     public List selectNearestExplicitThin(Hash key, int maxNumRouters, Set peersToIgnore, KBucketSet kbuckets, boolean preferConnected) { 
         if (peersToIgnore == null)
             peersToIgnore = new HashSet(1);
-        peersToIgnore.add(_context.router().getRouterInfo().getIdentity().getHash());
+        peersToIgnore.add(_context.routerHash());
         FloodfillSelectionCollector matches = new FloodfillSelectionCollector(key, peersToIgnore, maxNumRouters);
         if (kbuckets == null) return new ArrayList();
         kbuckets.getAll(matches);
diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/PeerSelector.java b/router/java/src/net/i2p/router/networkdb/kademlia/PeerSelector.java
index c88897a127031dcc818d5d5302ca5ef1e19cdaaa..acf533bf787325acc02bb71b2b55cc00b3e5f46a 100644
--- a/router/java/src/net/i2p/router/networkdb/kademlia/PeerSelector.java
+++ b/router/java/src/net/i2p/router/networkdb/kademlia/PeerSelector.java
@@ -61,7 +61,7 @@ public class PeerSelector {
         
         if (peersToIgnore == null)
             peersToIgnore = new HashSet(1);
-        peersToIgnore.add(_context.router().getRouterInfo().getIdentity().getHash());
+        peersToIgnore.add(_context.routerHash());
         Set allHashes = kbuckets.getAll(peersToIgnore);
         removeFailingPeers(allHashes);
         Map diffMap = new HashMap(allHashes.size());
@@ -94,7 +94,7 @@ public class PeerSelector {
     public List selectNearestExplicitThin(Hash key, int maxNumRouters, Set peersToIgnore, KBucketSet kbuckets) { // LINT -- Exporting non-public type through public API
         if (peersToIgnore == null)
             peersToIgnore = new HashSet(1);
-        peersToIgnore.add(_context.router().getRouterInfo().getIdentity().getHash());
+        peersToIgnore.add(_context.routerHash());
         MatchSelectionCollector matches = new MatchSelectionCollector(key, peersToIgnore);
         kbuckets.getAll(matches);
         List rv = matches.get(maxNumRouters);
diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/PersistentDataStore.java b/router/java/src/net/i2p/router/networkdb/kademlia/PersistentDataStore.java
index 6f89551e2f796a98ab9a28c15370fec22bbda622..282b67e0cdc0973045144633a4cac6a29ac17914 100644
--- a/router/java/src/net/i2p/router/networkdb/kademlia/PersistentDataStore.java
+++ b/router/java/src/net/i2p/router/networkdb/kademlia/PersistentDataStore.java
@@ -106,8 +106,10 @@ class PersistentDataStore extends TransientDataStore {
      */
     @Override
     public DataStructure remove(Hash key, boolean persist) {
-        if (persist)
+        if (persist) {
+            _writer.remove(key);
             _context.jobQueue().addJob(new RemoveJob(key));
+        }
         return super.remove(key);
     }
     
@@ -183,6 +185,10 @@ class PersistentDataStore extends TransientDataStore {
             return _keys.get(key);
         }
 
+        public void remove(Hash key) {
+            _keys.remove(key);
+        }
+
         public void run() {
             _quit = false;
             Hash key = null;
diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/SearchJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/SearchJob.java
index 161f2900128e32e9c6c92a9675535b2445a7ab95..d26ac1a5e4c2d3963692e84a9c69dc2669ec011b 100644
--- a/router/java/src/net/i2p/router/networkdb/kademlia/SearchJob.java
+++ b/router/java/src/net/i2p/router/networkdb/kademlia/SearchJob.java
@@ -452,6 +452,7 @@ class SearchJob extends JobImpl {
     }
     
     /** we're searching for a router, so we can just send direct */
+/******* always send through the lease
     protected void sendRouterSearch(RouterInfo router) {
         int timeout = _facade.getPeerTimeout(router.getIdentity().getHash());
         long expiration = getContext().clock().now() + timeout;
@@ -471,6 +472,7 @@ class SearchJob extends JobImpl {
         j.runJob();
         //getContext().jobQueue().addJob(j);
     }
+**********/
     
     /** 
      * what tunnel will we send the search out through? 
@@ -513,6 +515,7 @@ class SearchJob extends JobImpl {
      * replies sent back to us directly)
      *
      */
+/******* always send through the lease
     protected DatabaseLookupMessage buildMessage(long expiration) {
         DatabaseLookupMessage msg = new DatabaseLookupMessage(getContext(), true);
         msg.setSearchKey(_state.getTarget());
@@ -522,6 +525,7 @@ class SearchJob extends JobImpl {
         msg.setReplyTunnel(null);
         return msg;
     }
+*********/
     
     void replyFound(DatabaseSearchReplyMessage message, Hash peer) {
         long duration = _state.replyFound(peer);
diff --git a/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java b/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java
index a0531fffb06603bcf860bf62e3121a74985b5808..464fbd836e5f678a932695bbc8f2abf4db0b5066 100644
--- a/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java
+++ b/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java
@@ -58,9 +58,10 @@ class ProfileOrganizerRenderer {
         int failing = 0;
         StringBuffer buf = new StringBuffer(16*1024);
         buf.append("<h2>Peer Profiles</h2>\n");
+        buf.append("<p>Showing ").append(order.size()).append(" recent profiles, hiding ").append(peers.size()-order.size()).append(" older profiles</p>");
         buf.append("<table border=\"1\">");
         buf.append("<tr>");
-        buf.append("<td><b>Peer</b> (").append(order.size()).append(", hiding ").append(peers.size()-order.size()).append(")</td>");
+        buf.append("<td><b>Peer</b></td>");
         buf.append("<td><b>Groups (Caps)</b></td>");
         buf.append("<td><b>Speed</b></td>");
         buf.append("<td><b>Capacity</b></td>");
@@ -97,7 +98,7 @@ class ProfileOrganizerRenderer {
                 buf.append("<tr><td colspan=\"7\"><hr /></td></tr>\n");
             prevTier = tier;
             
-            buf.append("<tr><td>");
+            buf.append("<tr><td nowrap>");
             buf.append(_context.commSystem().renderPeerHTML(peer));
             buf.append("</td><td>");
             
@@ -179,7 +180,7 @@ class ProfileOrganizerRenderer {
             PeerProfile prof = (PeerProfile)iter.next();
             Hash peer = prof.getPeer();
 
-            buf.append("<tr><td>");
+            buf.append("<tr><td nowrap>");
             buf.append(_context.commSystem().renderPeerHTML(peer));
             buf.append("</td>");
             RouterInfo info = _context.netDb().lookupRouterInfoLocally(peer);
diff --git a/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java b/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java
index 2bddc3982c222d2e284a2a8af97446b2e9344f88..a798e0c18d90fe63af9ded7b62ab4b1fda198270 100644
--- a/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java
+++ b/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java
@@ -128,6 +128,7 @@ public class CommSystemFacadeImpl extends CommSystemFacade {
     }
     int getTransportCount() { return _manager.getTransportCount(); }
     
+    /** Send the message out */
     public void processMessage(OutNetMessage msg) {	
         //GetBidsJob j = new GetBidsJob(_context, this, msg);
         //j.runJob();
@@ -436,24 +437,24 @@ public class CommSystemFacadeImpl extends CommSystemFacade {
     public String renderPeerHTML(Hash peer) {
         String h = peer.toBase64().substring(0, 4);
         StringBuffer buf = new StringBuffer(128);
-        buf.append("<tt><font size=\"+1\">");
-        boolean found = _context.netDb().lookupRouterInfoLocally(peer) != null;
-        if (found)
-            buf.append("<a title=\"NetDb entry\" href=\"netdb.jsp?r=").append(h).append("\">");
-        buf.append(h);
-        if (found)
-            buf.append("</a>");
-        buf.append("</font></tt>");
         String c = getCountry(peer);
         if (c != null) {
-            buf.append(" <img alt=\"").append(c.toUpperCase()).append("\" title=\"");
+            buf.append("<img alt=\"").append(c.toUpperCase()).append("\" title=\"");
             String n = _geoIP.fullName(c);
             if (n != null)
                 buf.append(n);
             else
                 buf.append(c);
-            buf.append("\" src=\"/flags.jsp?c=").append(c).append("\">");
+            buf.append("\" src=\"/flags.jsp?c=").append(c).append("\"> ");
         }
+        buf.append("<tt><font size=\"+1\">");
+        boolean found = _context.netDb().lookupRouterInfoLocally(peer) != null;
+        if (found)
+            buf.append("<a title=\"NetDb entry\" href=\"netdb.jsp?r=").append(h).append("\">");
+        buf.append(h);
+        if (found)
+            buf.append("</a>");
+        buf.append("</font></tt>");
         return buf.toString();
     }
 }
diff --git a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
index d2f2f8bc4744fd3f28b50a65736a37d95ac7e92f..8b3f5f9e6162317e3c64f8a1a4062d242a029c53 100644
--- a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
+++ b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
@@ -265,7 +265,7 @@ public class NTCPTransport extends TransportImpl {
         boolean established = isEstablished(toAddress.getIdentity());
         if (established) { // should we check the queue size?  nah, if its valid, use it
             if (_log.shouldLog(Log.DEBUG))
-                _log.debug("fast bid when trying to send to " + toAddress.getIdentity().calculateHash().toBase64() + " as its already established");
+                _log.debug("fast bid when trying to send to " + peer.toBase64() + " as its already established");
             return _fastBid;
         }
         RouterAddress addr = toAddress.getTargetAddress(STYLE);
@@ -275,7 +275,7 @@ public class NTCPTransport extends TransportImpl {
             _context.statManager().addRateData("ntcp.bidRejectedNoNTCPAddress", 1, 0);
             //_context.shitlist().shitlistRouter(toAddress.getIdentity().calculateHash(), "No NTCP address", STYLE);
             if (_log.shouldLog(Log.DEBUG))
-                _log.debug("no bid when trying to send to " + toAddress.getIdentity().calculateHash().toBase64() + " as they don't have an ntcp address");
+                _log.debug("no bid when trying to send to " + peer.toBase64() + " as they don't have an ntcp address");
             return null;
         }
         NTCPAddress naddr = new NTCPAddress(addr);
@@ -284,7 +284,7 @@ public class NTCPTransport extends TransportImpl {
             markUnreachable(peer);
             //_context.shitlist().shitlistRouter(toAddress.getIdentity().calculateHash(), "Invalid NTCP address", STYLE);
             if (_log.shouldLog(Log.DEBUG))
-                _log.debug("no bid when trying to send to " + toAddress.getIdentity().calculateHash().toBase64() + " as they don't have a valid ntcp address");
+                _log.debug("no bid when trying to send to " + peer.toBase64() + " as they don't have a valid ntcp address");
             return null;
         }
         if (!naddr.isPubliclyRoutable()) {
@@ -292,14 +292,14 @@ public class NTCPTransport extends TransportImpl {
                 _context.statManager().addRateData("ntcp.bidRejectedLocalAddress", 1, 0);
                 markUnreachable(peer);
                 if (_log.shouldLog(Log.DEBUG))
-                    _log.debug("no bid when trying to send to " + toAddress.getIdentity().calculateHash().toBase64() + " as they have a private ntcp address");
+                    _log.debug("no bid when trying to send to " + peer.toBase64() + " as they have a private ntcp address");
                 return null;
             }
         }
 
         if (!allowConnection()) {
             if (_log.shouldLog(Log.WARN))
-                _log.warn("no bid when trying to send to " + toAddress.getIdentity().calculateHash().toBase64() + ", max connection limit reached");
+                _log.warn("no bid when trying to send to " + peer.toBase64() + ", max connection limit reached");
             return _transientFail;
         }
 
@@ -307,7 +307,7 @@ public class NTCPTransport extends TransportImpl {
         //    return null; // dont talk to yourself
 
         if (_log.shouldLog(Log.DEBUG))
-            _log.debug("slow bid when trying to send to " + toAddress.getIdentity().calculateHash().toBase64());
+            _log.debug("slow bid when trying to send to " + peer.toBase64());
         return _slowBid;
     }
 
@@ -655,7 +655,7 @@ public class NTCPTransport extends TransportImpl {
         buf.setLength(0);
         for (Iterator iter = peers.iterator(); iter.hasNext(); ) {
             NTCPConnection con = (NTCPConnection)iter.next();
-            buf.append("<tr><td>");
+            buf.append("<tr><td nowrap>");
             buf.append(_context.commSystem().renderPeerHTML(con.getRemotePeer().calculateHash()));
             //byte[] ip = getIP(con.getRemotePeer().calculateHash());
             //if (ip != null)
diff --git a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java
index b438d115ff0b0796278236e206fc7002c6027a0c..877a0a9aa4cd376aa262361ccfb7d6eb5f1a3bc4 100644
--- a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java
+++ b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java
@@ -1807,7 +1807,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
             
             buf.append("<tr>");
             
-            buf.append("<td>");
+            buf.append("<td nowrap>");
             buf.append(_context.commSystem().renderPeerHTML(peer.getRemotePeer()));
             //byte ip[] = peer.getRemoteIP();
             //if (ip != null)