diff --git a/history.txt b/history.txt
index 21d53ebb919dd632bfb3b11001e548175cd3559e..533a10bd61ca448ac33d0280f0e9a59d76df0515 100644
--- a/history.txt
+++ b/history.txt
@@ -1,4 +1,8 @@
-$Id: history.txt,v 1.244 2005/09/10 22:22:52 jrandom Exp $
+$Id: history.txt,v 1.245 2005/09/12 19:12:04 jrandom Exp $
+
+2005-09-12  jrandom
+    * Bugfix for skewed store which could kill a UDP thread (causing complete
+      comm failure and eventual OOM)
 
 2005-09-12  jrandom
     * More aggressively publish updated routerInfo.
diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java
index 48cd8b190b7db22a9c9046dd23df133b02bd3aaa..13d3ae9902f7d6564dad398d89dcd71dba82ce28 100644
--- a/router/java/src/net/i2p/router/RouterVersion.java
+++ b/router/java/src/net/i2p/router/RouterVersion.java
@@ -15,9 +15,9 @@ import net.i2p.CoreVersion;
  *
  */
 public class RouterVersion {
-    public final static String ID = "$Revision: 1.231 $ $Date: 2005/09/10 22:22:52 $";
+    public final static String ID = "$Revision: 1.232 $ $Date: 2005/09/12 19:12:00 $";
     public final static String VERSION = "0.6.0.5";
-    public final static long BUILD = 6;
+    public final static long BUILD = 7;
     public static void main(String args[]) {
         System.out.println("I2P Router version: " + VERSION + "-" + BUILD);
         System.out.println("Router ID: " + RouterVersion.ID);
diff --git a/router/java/src/net/i2p/router/transport/TransportManager.java b/router/java/src/net/i2p/router/transport/TransportManager.java
index 06eca971fada07098fdaff80ec3cb709824430b3..335efc5e2b78464bc8ce7756f2acb5f2abc7783c 100644
--- a/router/java/src/net/i2p/router/transport/TransportManager.java
+++ b/router/java/src/net/i2p/router/transport/TransportManager.java
@@ -214,9 +214,14 @@ public class TransportManager implements TransportEventListener {
     public void messageReceived(I2NPMessage message, RouterIdentity fromRouter, Hash fromRouterHash) {
         if (_log.shouldLog(Log.DEBUG))
             _log.debug("I2NPMessage received: " + message.getClass().getName(), new Exception("Where did I come from again?"));
-        int num = _context.inNetMessagePool().add(message, fromRouter, fromRouterHash);
-        if (_log.shouldLog(Log.DEBUG))
-            _log.debug("Added to in pool: "+ num);
+        try {
+            int num = _context.inNetMessagePool().add(message, fromRouter, fromRouterHash);
+            if (_log.shouldLog(Log.DEBUG))
+                _log.debug("Added to in pool: "+ num);
+        } catch (IllegalArgumentException iae) {
+            if (_log.shouldLog(Log.WARN))
+                _log.warn("Error receiving message", iae);
+        }
     }
     
     public List getMostRecentErrorMessages() { 
diff --git a/router/java/src/net/i2p/router/transport/udp/UDPAddress.java b/router/java/src/net/i2p/router/transport/udp/UDPAddress.java
index 9431b368f715aae184cdecd3f646093aaa11b7d5..bca6884b0b8fb6e553760ae5c9f4def9a1e1e257 100644
--- a/router/java/src/net/i2p/router/transport/udp/UDPAddress.java
+++ b/router/java/src/net/i2p/router/transport/udp/UDPAddress.java
@@ -42,20 +42,21 @@ public class UDPAddress {
     
     public String toString() {
         StringBuffer rv = new StringBuffer(64);
-        rv.append("[SSU ");
-        if (_host != null)
-            rv.append("host: ").append(_host).append(' ');
-        if (_port > 0)
-            rv.append("port: ").append(_port).append(' ');
-        if (_introKey != null)
-            rv.append("key: ").append(Base64.encode(_introKey)).append(' ');
         if (_introHosts != null) {
             for (int i = 0; i < _introHosts.length; i++) {
-                rv.append("intro[" + i + "]: ").append(_introHosts[i]);
-                rv.append(':').append(_introPorts[i]);
-                rv.append('/').append(Base64.encode(_introKeys[i])).append(' ');
+                rv.append("ssu://");
+                rv.append(_introTags[i]).append('@');
+                rv.append(_introHosts[i]).append(':').append(_introPorts[i]);
+                //rv.append('/').append(Base64.encode(_introKeys[i]));
+                if (i + 1 < _introKeys.length)
+                    rv.append(", ");
             }
-        }   
+        } else {
+            if ( (_host != null) && (_port > 0) )
+                rv.append("ssu://").append(_host).append(':').append(_port);//.append('/').append(Base64.encode(_introKey));
+            else
+                rv.append("ssu://autodetect.not.yet.complete:").append(_port);
+        }
         return rv.toString();
     }
     
diff --git a/router/java/src/net/i2p/router/tunnel/InboundMessageDistributor.java b/router/java/src/net/i2p/router/tunnel/InboundMessageDistributor.java
index e724088f35ce7b2370002e238c79815dfbdf3aa2..23915ff5fbf5a48710d467aa863e14fbfbda2c98 100644
--- a/router/java/src/net/i2p/router/tunnel/InboundMessageDistributor.java
+++ b/router/java/src/net/i2p/router/tunnel/InboundMessageDistributor.java
@@ -114,10 +114,15 @@ public class InboundMessageDistributor implements GarlicMessageReceiver.CloveRec
                         // treat db store explicitly, since we don't want to republish (or flood)
                         // unnecessarily
                         DatabaseStoreMessage dsm = (DatabaseStoreMessage)data;
-                        if (dsm.getValueType() == DatabaseStoreMessage.KEY_TYPE_LEASESET)
-                            _context.netDb().store(dsm.getKey(), dsm.getLeaseSet());
-                        else
-                            _context.netDb().store(dsm.getKey(), dsm.getRouterInfo());
+                        try {
+                            if (dsm.getValueType() == DatabaseStoreMessage.KEY_TYPE_LEASESET)
+                                _context.netDb().store(dsm.getKey(), dsm.getLeaseSet());
+                            else
+                                _context.netDb().store(dsm.getKey(), dsm.getRouterInfo());
+                        } catch (IllegalArgumentException iae) {
+                            if (_log.shouldLog(Log.WARN))
+                                _log.warn("Bad store attempt", iae);
+                        }
                     } else {
                         _context.inNetMessagePool().add(data, null, null);
                     }