diff --git a/apps/streaming/java/src/net/i2p/client/streaming/Connection.java b/apps/streaming/java/src/net/i2p/client/streaming/Connection.java
index e0163f16ba2984042240156e68f72e57e1fa8f36..73c33ca630c828610122e4b2dac31e0621378939 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/Connection.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/Connection.java
@@ -54,6 +54,8 @@ public class Connection {
     /** set to an error cause if the connection could not be established */
     private String _connectionError;
     
+    public static final long MAX_RESEND_DELAY = 60*1000;
+    
     public Connection(I2PAppContext ctx, ConnectionManager manager, SchedulerChooser chooser, PacketQueue queue, ConnectionPacketHandler handler) {
         this(ctx, manager, chooser, queue, handler, null);
     }
@@ -175,9 +177,14 @@ public class Connection {
                 _log.debug("Requesting ack delay of " + delay + "ms for packet " + packet);
             }
             packet.setFlag(Packet.FLAG_DELAY_REQUESTED);
+            
+            long timeout = (_options.getRTT() < 10000 ? 10000 : _options.getRTT());
+            if (timeout > MAX_RESEND_DELAY)
+                timeout = MAX_RESEND_DELAY;
             if (_log.shouldLog(Log.DEBUG))
-                _log.debug("Resend in " + (_options.getRTT()*2) + " for " + packet);
-            SimpleTimer.getInstance().addEvent(new ResendPacketEvent(packet), (_options.getRTT()*2 < 5000 ? 5000 : _options.getRTT()*2));
+                _log.debug("Resend in " + timeout + " for " + packet);
+
+            SimpleTimer.getInstance().addEvent(new ResendPacketEvent(packet), timeout);
         }
 
         _lastSendTime = _context.clock().now();
@@ -439,6 +446,8 @@ public class Connection {
         }
         
         public void timeReached() {
+            if (!_connected) return;
+            
             //if (_log.shouldLog(Log.DEBUG))
             //    _log.debug("Resend period reached for " + _packet);
             boolean resend = false;
@@ -477,6 +486,8 @@ public class Connection {
                 } else {
                     //long timeout = _options.getResendDelay() << numSends;
                     long timeout = _options.getRTT() << (numSends-1);
+                    if ( (timeout > MAX_RESEND_DELAY) || (timeout <= 0) )
+                        timeout = MAX_RESEND_DELAY;
                     if (_log.shouldLog(Log.DEBUG))
                         _log.debug("Scheduling resend in " + timeout + "ms for " + _packet);
                     SimpleTimer.getInstance().addEvent(ResendPacketEvent.this, timeout);
diff --git a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionOptions.java b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionOptions.java
index 06d67c0d1f15e1e7832358213e3363d1304b9b3d..49e41229a91a73a80ae316d886575cf2550489fd 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionOptions.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionOptions.java
@@ -57,7 +57,7 @@ public class ConnectionOptions extends I2PSocketOptions {
             setResendDelay(5*1000);
             setSendAckDelay(2*1000);
             setWindowSize(1);
-            setMaxResends(10);
+            setMaxResends(5);
             setWriteTimeout(-1);
         }
     }
diff --git a/apps/streaming/java/src/net/i2p/client/streaming/PacketQueue.java b/apps/streaming/java/src/net/i2p/client/streaming/PacketQueue.java
index 53f33c1692a3da5f03f94ef3e0ea502a6931dd61..3bc9c4370c1e27a4413516a468bb0097d155b95a 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/PacketQueue.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/PacketQueue.java
@@ -48,6 +48,8 @@ class PacketQueue {
             if (packet.getAckTime() > 0) {
                 _log.debug("Not resending " + packet);
                 return;
+            } else {
+                _log.debug("Sending... " + packet);
             }
             // this should not block!
             long begin = _context.clock().now();
@@ -56,6 +58,7 @@ class PacketQueue {
             if (!sent) {
                 if (_log.shouldLog(Log.WARN))
                     _log.warn("Send failed for " + packet);
+                packet.getConnection().disconnect(false);
             } else {
                 packet.setKeyUsed(keyUsed);
                 packet.setTagsSent(tagsSent);