diff --git a/router/java/src/net/i2p/router/transport/udp/OutboundMessageState.java b/router/java/src/net/i2p/router/transport/udp/OutboundMessageState.java
index 276ec13c3060f0c812917f3044d20898549c5bfe..600ad3c4fd0790fef8b9fdd500d12ff9d44c6e5d 100644
--- a/router/java/src/net/i2p/router/transport/udp/OutboundMessageState.java
+++ b/router/java/src/net/i2p/router/transport/udp/OutboundMessageState.java
@@ -402,16 +402,21 @@ class OutboundMessageState implements CDPQEntry {
         int end = start + fragmentSize(fragmentNum);
         int toSend = end - start;
         byte buf[] = _messageBuf.getData();
-        if ( (buf != null) && (start + toSend < buf.length) && (out != null) && (outOffset + toSend < out.length) ) {
-            System.arraycopy(_messageBuf.getData(), start, out, outOffset, toSend);
+        if ( (buf != null) && (start + toSend <= buf.length) && (outOffset + toSend <= out.length) ) {
+            System.arraycopy(buf, start, out, outOffset, toSend);
             if (_log.shouldLog(Log.DEBUG))
                 _log.debug("Raw fragment[" + fragmentNum + "] for " + _messageId 
                            + "[" + start + "-" + (start+toSend) + "/" + _totalSize + "/" + _fragmentSize + "]: " 
                            + Base64.encode(out, outOffset, toSend));
             return toSend;
+        } else if (buf == null) {
+            if (_log.shouldLog(Log.WARN))
+                _log.warn("Error: null buf");
         } else {
-            return -1;
+            if (_log.shouldLog(Log.WARN))
+                _log.warn("Error: " + start + '/' + end + '/' + outOffset + '/' + out.length);
         }
+        return -1;
     }
     
     /**