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 62bfe4a83e73aedaa9c5c0ab3d667132a348c37d..fd184fa6ad8c8cae37895ed7b3b6b8dc127d80b9 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/Connection.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/Connection.java
@@ -574,7 +574,9 @@ public class Connection {
     }
     
     private boolean _remotePeerSet = false;
-    /** who are we talking with */
+    /** who are we talking with
+     * @return peer Destination
+     */
     public Destination getRemotePeer() { return _remotePeer; }
     public void setRemotePeer(Destination peer) { 
         if (_remotePeerSet) throw new RuntimeException("Remote peer already set [" + _remotePeer + ", " + peer + "]");
@@ -583,7 +585,9 @@ public class Connection {
     }
     
     private boolean _sendStreamIdSet = false;
-    /** what stream do we send data to the peer on? */
+    /** what stream do we send data to the peer on?
+     * @return non-global stream sending ID
+     */
     public long getSendStreamId() { return _sendStreamId; }
     public void setSendStreamId(long id) { 
         if (_sendStreamIdSet) throw new RuntimeException("Send stream ID already set [" + _sendStreamId + ", " + id + "]");
@@ -592,7 +596,9 @@ public class Connection {
     }
     
     private boolean _receiveStreamIdSet = false;
-    /** stream the peer sends data to us on. (may be null) */
+    /** The stream ID of a peer connection that sends data to us. (may be null)
+     * @return receive stream ID, or null if there isn't one
+     */
     public long getReceiveStreamId() { return _receiveStreamId; }
     public void setReceiveStreamId(long id) { 
         if (_receiveStreamIdSet) throw new RuntimeException("Receive stream ID already set [" + _receiveStreamId + ", " + id + "]");
@@ -601,15 +607,33 @@ public class Connection {
         synchronized (_connectLock) { _connectLock.notifyAll(); }
     }
     
-    /** when did we last send anything to the peer? */
+    /** When did we last send anything to the peer?
+     * @return Last time we sent data
+     */
     public long getLastSendTime() { return _lastSendTime; }
+    /** Set the time we sent data.
+     * @param when The time we sent data
+     */
     public void setLastSendTime(long when) { _lastSendTime = when; }
     
-    /** what was the last packet Id sent to the peer? */
+    /** What was the last packet Id sent to the peer?
+     * @return The last sent packet ID
+     */
     public long getLastSendId() { return _lastSendId; }
+    /** Set the packet Id that was sent to a peer.
+     * @param id The packet ID
+     */
     public void setLastSendId(long id) { _lastSendId = id; }
     
+    /**
+     * Retrieve the current ConnectionOptions.
+     * @return the current ConnectionOptions
+     */
     public ConnectionOptions getOptions() { return _options; }
+    /**
+     * Set the ConnectionOptions.
+     * @param opts ConnectionOptions
+     */
     public void setOptions(ConnectionOptions opts) { _options = opts; }
         
     public I2PSession getSession() { return _connectionManager.getSession(); }
@@ -641,6 +665,7 @@ public class Connection {
      * Time when the scheduler next want to send a packet, or -1 if 
      * never.  This should be set when we want to send on timeout, for 
      * instance, or want to delay an ACK.
+     * @return the next time the scheduler will want to send a packet, or -1 if never.
      */
     public long getNextSendTime() { return _nextSendTime; }
     public void setNextSendTime(long when) { 
@@ -665,7 +690,9 @@ public class Connection {
         }
     }
     
-    /** how many packets have we sent and the other side has ACKed? */
+    /** how many packets have we sent and the other side has ACKed?
+     * @return Count of how many packets ACKed.
+     */
     public long getAckedPackets() { return _ackedPackets; }
     public long getCreatedOn() { return _createdOn; }
     public long getCloseSentOn() { return _closeSentOn; }
@@ -681,7 +708,9 @@ public class Connection {
     
     public void incrementUnackedPacketsReceived() { _unackedPacketsReceived++; }
     public int getUnackedPacketsReceived() { return _unackedPacketsReceived; }
-    /** how many packets have we sent but not yet received an ACK for? */
+    /** how many packets have we sent but not yet received an ACK for?
+     * @return Count of packets in-flight.
+     */
     public int getUnackedPacketsSent() { 
         synchronized (_outboundPackets) { 
             return _outboundPackets.size(); 
@@ -857,11 +886,16 @@ public class Connection {
         }
     }
     
-    /** stream that the local peer receives data on */
+    /** stream that the local peer receives data on
+     * @return the inbound message stream
+     */
     public MessageInputStream getInputStream() { return _inputStream; }
-    /** stream that the local peer sends data to the remote peer on */
+    /** stream that the local peer sends data to the remote peer on
+     * @return the outbound message stream
+     */
     public MessageOutputStream getOutputStream() { return _outputStream; }
     
+	@Override
     public String toString() { 
         StringBuffer buf = new StringBuffer(128);
         buf.append("[Connection ");
@@ -927,7 +961,7 @@ public class Connection {
      * fired to reschedule event notification
      */
     class ConEvent implements SimpleTimer.TimedEvent {
-        private Exception _addedBy;
+        private Exception _addedBy; // unused?
         public ConEvent() { 
             //_addedBy = new Exception("added by");
         }
diff --git a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionManager.java b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionManager.java
index 1e500d997bff3e7ce776fad22bfdeeea51a4fa67..5caf341f4e432b1b5900447523fb2c130f20aef8 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionManager.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionManager.java
@@ -104,7 +104,7 @@ public class ConnectionManager {
 
     /**
      * Get the socket accept() timeout.
-     * @return
+     * @return accept timeout in ms.
      */
     public long MgetSoTimeout() {
         return SoTimeout;
@@ -121,6 +121,7 @@ public class ConnectionManager {
     /**
      * Create a new connection based on the SYN packet we received.
      *
+     * @param synPacket SYN packet to process
      * @return created Connection with the packet's data already delivered to
      *         it, or null if the syn's streamId was already taken
      */
@@ -190,7 +191,9 @@ public class ConnectionManager {
      * Build a new connection to the given peer.  This blocks if there is no
      * connection delay, otherwise it returns immediately.
      *
-     * @return new connection, or null if we have exceeded our limit 
+     * @param peer Destination to contact
+     * @param opts Connection's options
+     * @return new connection, or null if we have exceeded our limit
      */
     public Connection connect(Destination peer, ConnectionOptions opts) {
         Connection con = null;
@@ -293,6 +296,7 @@ public class ConnectionManager {
     /**
      * Drop the (already closed) connection on the floor.
      *
+     * @param con Connection to drop.
      */
     public void removeConnection(Connection con) {
         boolean removed = false;
@@ -319,7 +323,9 @@ public class ConnectionManager {
         }
     }
     
-    /** return a set of Connection objects */
+    /** return a set of Connection objects
+     * @return set of Connection objects
+     */
     public Set listConnections() {
         synchronized (_connectionLock) {
             return new HashSet(_connectionByInboundId.values());
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 92a4ad3318ff80475a33600b843935813ae05695..feafa5a9cdd316d2b9f4e984ab53f27a9e092cba 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionOptions.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionOptions.java
@@ -94,6 +94,7 @@ public class ConnectionOptions extends I2PSocketOptionsImpl {
         }
     }
     
+	@Override
     protected void init(Properties opts) {
         super.init(opts);
         _trend = new int[TREND_COUNT];
@@ -118,6 +119,7 @@ public class ConnectionOptions extends I2PSocketOptionsImpl {
         setConnectTimeout(getInt(opts, PROP_CONNECT_TIMEOUT, Connection.DISCONNECT_TIMEOUT));
     }
     
+	@Override
     public void setProperties(Properties opts) {
         super.setProperties(opts);
         if (opts == null) return;
@@ -164,6 +166,7 @@ public class ConnectionOptions extends I2PSocketOptionsImpl {
      * until the output stream is flushed, the buffer fills, 
      * or that many milliseconds pass.
      *
+     * @return how long to wait before actually attempting to connect
      */
     public int getConnectDelay() { return _connectDelay; }
     public void setConnectDelay(int delayMs) { _connectDelay = delayMs; }
@@ -173,6 +176,7 @@ public class ConnectionOptions extends I2PSocketOptionsImpl {
      * or can we deal with signatures on the SYN and FIN packets
      * only?
      *
+     * @return if we want signatures on all packets.
      */
     public boolean getRequireFullySigned() { return _fullySigned; }
     public void setRequireFullySigned(boolean sign) { _fullySigned = sign; }
@@ -180,6 +184,7 @@ public class ConnectionOptions extends I2PSocketOptionsImpl {
     /** 
      * How many messages will we send before waiting for an ACK?
      *
+     * @return Maximum amount of messages that can be in-flight
      */
     public int getWindowSize() { return _windowSize; }
     public void setWindowSize(int numMsgs) { 
@@ -195,12 +200,15 @@ public class ConnectionOptions extends I2PSocketOptionsImpl {
         _windowSize = numMsgs; 
     }
     
-    /** after how many consecutive messages should we ack? */
+    /** after how many consecutive messages should we ack?
+     * @return receive window size.
+     */
     public int getReceiveWindow() { return _receiveWindow; } 
     public void setReceiveWindow(int numMsgs) { _receiveWindow = numMsgs; }
     
     /**
      * What to set the round trip time estimate to (in milliseconds)
+     * @return round trip time estimate in ms
      */
     public int getRTT() { return _rtt; }
     public void setRTT(int ms) { 
@@ -229,6 +237,7 @@ public class ConnectionOptions extends I2PSocketOptionsImpl {
      * If we have 3 consecutive rtt increases, we are trending upwards (1), or if we have
      * 3 consecutive rtt decreases, we are trending downwards (-1), else we're stable.
      *
+     * @return positive/flat/negative trend in round trip time
      */
     public int getRTTTrend() {
         synchronized (_trend) {
@@ -255,7 +264,9 @@ public class ConnectionOptions extends I2PSocketOptionsImpl {
         setRTT(smoothed);
     }
     
-    /** How long after sending a packet will we wait before resending? */
+    /** How long after sending a packet will we wait before resending?
+     * @return delay for a retransmission in ms
+     */
     public int getResendDelay() { return _resendDelay; }
     public void setResendDelay(int ms) { _resendDelay = ms; }
     
@@ -265,11 +276,14 @@ public class ConnectionOptions extends I2PSocketOptionsImpl {
      * (_lastSendTime+_sendAckDelay), send an ACK of what
      * we have received so far.
      *
+     * @return ACK delay in ms
      */
     public int getSendAckDelay() { return _sendAckDelay; }
     public void setSendAckDelay(int delayMs) { _sendAckDelay = delayMs; }
     
-    /** What is the largest message we want to send or receive? */
+    /** What is the largest message we want to send or receive?
+     * @return Maximum message size (MTU/MRU)
+     */
     public int getMaxMessageSize() { return _maxMessageSize; }
     public void setMaxMessageSize(int bytes) { _maxMessageSize = bytes; }
     
@@ -277,13 +291,15 @@ public class ConnectionOptions extends I2PSocketOptionsImpl {
      * how long we want to wait before any data is transferred on the
      * connection in either direction
      *
+     * @return how long to wait before any data is transferred in either direction in ms
      */
     public int getChoke() { return _choke; }
     public void setChoke(int ms) { _choke = ms; }
 
     /**
      * What profile do we want to use for this connection?
-     *
+     * TODO: Only bulk is supported so far.
+     * @return the profile of the connection.
      */
     public int getProfile() { return _profile; }
     public void setProfile(int profile) { 
@@ -295,6 +311,7 @@ public class ConnectionOptions extends I2PSocketOptionsImpl {
     /**
      * How many times will we try to send a message before giving up?
      *
+     * @return Maximum retrys before failing a sent message.
      */
     public int getMaxResends() { return _maxResends; }
     public void setMaxResends(int numSends) { _maxResends = numSends; }
@@ -302,6 +319,7 @@ public class ConnectionOptions extends I2PSocketOptionsImpl {
     /**
      * What period of inactivity qualifies as "too long"?
      *
+     * @return period of inactivity qualifies as "too long"
      */
     public int getInactivityTimeout() { return _inactivityTimeout; }
     public void setInactivityTimeout(int timeout) { _inactivityTimeout = timeout; }
@@ -322,6 +340,7 @@ public class ConnectionOptions extends I2PSocketOptionsImpl {
     /** 
      * how much data are we willing to accept in our buffer?
      *
+     * @return size of the buffer used to accept data
      */
     public int getInboundBufferSize() { return _inboundBufferSize; }
     public void setInboundBufferSize(int bytes) { _inboundBufferSize = bytes; }
@@ -331,6 +350,7 @@ public class ConnectionOptions extends I2PSocketOptionsImpl {
      * of 1/(windowSize*factor).  In standard TCP, window sizes are in bytes,
      * while in I2P, window sizes are in messages, so setting factor=maxMessageSize
      * mimics TCP, but using a smaller factor helps grow a little more rapidly.
+     * @return window size to grow by to attempt to avoid congestion.
      */
     public int getCongestionAvoidanceGrowthRateFactor() { return _congestionAvoidanceGrowthRateFactor; }
     public void setCongestionAvoidanceGrowthRateFactor(int factor) { _congestionAvoidanceGrowthRateFactor = factor; }
@@ -340,10 +360,12 @@ public class ConnectionOptions extends I2PSocketOptionsImpl {
      * of 1/(factor).  In standard TCP, window sizes are in bytes,
      * while in I2P, window sizes are in messages, so setting factor=maxMessageSize
      * mimics TCP, but using a smaller factor helps grow a little more rapidly.
+     * @return slow start window size to grow by to attempt to avoid sending many small packets.
      */
     public int getSlowStartGrowthRateFactor() { return _slowStartGrowthRateFactor; }
     public void setSlowStartGrowthRateFactor(int factor) { _slowStartGrowthRateFactor = factor; }
     
+	@Override
     public String toString() {
         StringBuffer buf = new StringBuffer(128);
         buf.append("conDelay=").append(_connectDelay);
diff --git a/apps/streaming/java/src/net/i2p/client/streaming/I2PServerSocketFull.java b/apps/streaming/java/src/net/i2p/client/streaming/I2PServerSocketFull.java
index 55070125c8e89d60bb0fe17c672667f2a210dfd3..83f7c8376aa23710e4cf22347694598d6ca53194 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/I2PServerSocketFull.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/I2PServerSocketFull.java
@@ -16,7 +16,7 @@ public class I2PServerSocketFull implements I2PServerSocket {
     
     /**
      * 
-     * @return
+     * @return I2PSocket
      * @throws net.i2p.I2PException
      * @throws SocketTimeoutException 
      */
diff --git a/apps/streaming/java/src/net/i2p/client/streaming/I2PSocketFull.java b/apps/streaming/java/src/net/i2p/client/streaming/I2PSocketFull.java
index 61dd4875788cc21b9af06c98cada64c94474df27..19867ed066c52dfb74f26a707f3486f76ffce5b3 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/I2PSocketFull.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/I2PSocketFull.java
@@ -119,6 +119,7 @@ public class I2PSocketFull implements I2PSocket {
         if (c != null)
             c.disconnectComplete();
     }
+	@Override
     public String toString() {
         Connection c = _connection;
         if (c == null)
diff --git a/apps/streaming/java/src/net/i2p/client/streaming/I2PSocketManagerFull.java b/apps/streaming/java/src/net/i2p/client/streaming/I2PSocketManagerFull.java
index 764b4089df85afe867d260e004d9b9cf5dc4ee87..157e48793e1c980644ce7d9493f19a75542f2f7b 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/I2PSocketManagerFull.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/I2PSocketManagerFull.java
@@ -112,7 +112,7 @@ public class I2PSocketManagerFull implements I2PSocketManager {
 
     /**
      * 
-     * @return
+     * @return connected I2PSocket
      * @throws net.i2p.I2PException
      * @throws java.net.SocketTimeoutException
      */
@@ -141,7 +141,7 @@ public class I2PSocketManagerFull implements I2PSocketManager {
      * 
      * @param peer
      * @param timeoutMs
-     * @return 
+     * @return true on success, false on failure
      */
     public boolean ping(Destination peer, long timeoutMs) {
         return _connectionManager.ping(peer, timeoutMs);
@@ -246,6 +246,7 @@ public class I2PSocketManagerFull implements I2PSocketManager {
     /**
      * Retrieve a set of currently connected I2PSockets, either initiated locally or remotely.
      *
+     * @return set of currently connected I2PSockets
      */
     public Set listSockets() {
         Set connections = _connectionManager.listConnections();
diff --git a/apps/streaming/java/src/net/i2p/client/streaming/MessageHandler.java b/apps/streaming/java/src/net/i2p/client/streaming/MessageHandler.java
index 30365762ecbe157f40f30fb6470fa313ae92d7f1..75adf6e593bc5d4dbbb77983c1202146fbc6dc89 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/MessageHandler.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/MessageHandler.java
@@ -70,6 +70,7 @@ public class MessageHandler implements I2PSessionListener {
     /**
      * Notify the client that the session has been terminated
      *
+     * @param session that has been terminated
      */
     public void disconnected(I2PSession session) {
         if (_log.shouldLog(Log.ERROR))
@@ -90,6 +91,9 @@ public class MessageHandler implements I2PSessionListener {
     /**
      * Notify the client that some error occurred
      *
+     * @param session of the client
+     * @param message to send to the client about the error
+     * @param error the actual error
      */
     public void errorOccurred(I2PSession session, String message, Throwable error) {
         if (_log.shouldLog(Log.WARN))
diff --git a/apps/streaming/java/src/net/i2p/client/streaming/MessageInputStream.java b/apps/streaming/java/src/net/i2p/client/streaming/MessageInputStream.java
index df7abbcc2928c82f2153e41b3fe06fd46ae660bb..77a5014cf4dd11af3e6c9fdd0919ba5c2296ed14 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/MessageInputStream.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/MessageInputStream.java
@@ -73,7 +73,9 @@ public class MessageInputStream extends InputStream {
         _cache = ByteCache.getInstance(128, Packet.MAX_PAYLOAD_SIZE);
     }
     
-    /** What is the highest block ID we've completely received through? */
+    /** What is the highest block ID we've completely received through?
+     * @return highest data block ID completely received
+     */
     public long getHighestReadyBockId() { 
         // not synchronized as it doesnt hurt to read a too-low value
         return _highestReadyBlockId; 
@@ -89,6 +91,7 @@ public class MessageInputStream extends InputStream {
      * past the highest ready ID and below the highest received message 
      * ID.  This may return null if there are no such IDs.
      *
+     * @return array of message ID holes, or null if none
      */
     public long[] getNacks() {
         synchronized (_dataLock) {
@@ -128,6 +131,7 @@ public class MessageInputStream extends InputStream {
      * Ascending list of block IDs greater than the highest
      * ready block ID, or null if there aren't any.
      *
+     * @return block IDs greater than the highest ready block ID, or null if there aren't any.
      */
     public long[] getOutOfOrderBlocks() {
         long blocks[] = null;
@@ -146,7 +150,9 @@ public class MessageInputStream extends InputStream {
         return blocks;
     }
     
-    /** how many blocks have we received that we still have holes before? */
+    /** how many blocks have we received that we still have holes before?
+     * @return Count of blocks received that still have holes
+     */
     public int getOutOfOrderBlockCount() { 
         synchronized (_dataLock) { 
             return _notYetReadyBlocks.size(); 
@@ -156,6 +162,7 @@ public class MessageInputStream extends InputStream {
     /** 
      * how long a read() call should block (if less than 0, block indefinitely,
      * but if it is 0, do not block at all)
+     * @return how long read calls should block, 0 or less indefinitely block
      */
     public int getReadTimeout() { return _readTimeout; }
     public void setReadTimeout(int timeout) {
@@ -203,6 +210,8 @@ public class MessageInputStream extends InputStream {
      * A new message has arrived - toss it on the appropriate queue (moving 
      * previously pending messages to the ready queue if it fills the gap, etc).
      *
+     * @param messageId ID of the message
+     * @param payload message payload
      * @return true if this is a new packet, false if it is a dup
      */
     public boolean messageReceived(long messageId, ByteArray payload) {
@@ -260,10 +269,12 @@ public class MessageInputStream extends InputStream {
             return _oneByte[0];
     }
     
+	@Override
     public int read(byte target[]) throws IOException {
         return read(target, 0, target.length);
     }
     
+	@Override
     public int read(byte target[], int offset, int length) throws IOException {
         if (_locallyClosed) throw new IOException("Already locally closed");
         throwAnyError();
@@ -360,6 +371,7 @@ public class MessageInputStream extends InputStream {
         return length;
     }
     
+	@Override
     public int available() throws IOException {
         if (_locallyClosed) throw new IOException("Already closed, you wanker");
         throwAnyError();
@@ -383,6 +395,7 @@ public class MessageInputStream extends InputStream {
      * How many bytes are queued up for reading (or sitting in the out-of-order
      * buffer)?
      *
+     * @return Count of bytes waiting to be read
      */
     public int getTotalQueuedSize() {
         synchronized (_dataLock) {
@@ -418,6 +431,7 @@ public class MessageInputStream extends InputStream {
         }
     }
     
+	@Override
     public void close() {
         synchronized (_dataLock) {
             //while (_readyDataBlocks.size() > 0)
diff --git a/apps/streaming/java/src/net/i2p/client/streaming/MessageOutputStream.java b/apps/streaming/java/src/net/i2p/client/streaming/MessageOutputStream.java
index 34c826ab29964bc1d43fb0eca488acad538ec126..952f1f79386aee9619a11efb173125549017e9c5 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/MessageOutputStream.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/MessageOutputStream.java
@@ -77,10 +77,12 @@ public class MessageOutputStream extends OutputStream {
     public int getWriteTimeout() { return _writeTimeout; }
     public void setBufferSize(int size) { _nextBufferSize = size; }
     
+	@Override
     public void write(byte b[]) throws IOException {
         write(b, 0, b.length);
     }
     
+	@Override
     public void write(byte b[], int off, int len) throws IOException {
         if (_closed) throw new IOException("Already closed");
         if (_log.shouldLog(Log.DEBUG))
@@ -159,7 +161,7 @@ public class MessageOutputStream extends OutputStream {
         int periods = (int)Math.floor((now - _sendPeriodBeginTime) / 1000d);
         if (periods > 0) {
             // first term decays on slow transmission
-            _sendBps = (int)(((float)0.9f*((float)_sendBps/(float)periods)) + ((float)0.1f*((float)_sendPeriodBytes/(float)periods)));
+            _sendBps = (int)((0.9f*((float)_sendBps/(float)periods)) + (0.1f*((float)_sendPeriodBytes/(float)periods)));
             _sendPeriodBytes = len;
             _sendPeriodBeginTime = now;
             _context.statManager().addRateData("stream.sendBps", _sendBps, 0);
@@ -255,9 +257,12 @@ public class MessageOutputStream extends OutputStream {
      * delivered.
      *
      * @throws IOException if the write fails
-     * @throws InterruptedIOException if the write times out
      */
+	@Override
     public void flush() throws IOException {
+     /* @throws InterruptedIOException if the write times out
+      * Documented here, but doesn't belong in the javadoc. 
+      */
         long begin = _context.clock().now();
         WriteStatus ws = null;
         synchronized (_dataLock) {
diff --git a/apps/streaming/java/src/net/i2p/client/streaming/Packet.java b/apps/streaming/java/src/net/i2p/client/streaming/Packet.java
index d95df7d8cb87e138d7617454743046a822344223..32c33fdb00e45965e562e883eb6b70ff6e6ea10c 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/Packet.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/Packet.java
@@ -149,7 +149,9 @@ public class Packet {
     public Packet() { }
     
     private boolean _sendStreamIdSet = false;
-    /** what stream do we send data to the peer on? */
+    /** what stream do we send data to the peer on?
+     * @return stream ID we use to send data
+     */
     public long getSendStreamId() { return _sendStreamId; }
     public void setSendStreamId(long id) { 
         if ( (_sendStreamIdSet) && (_sendStreamId > 0) )
@@ -162,6 +164,7 @@ public class Packet {
     /** 
      * stream the replies should be sent on.  this should be 0 if the
      * connection is still being built.
+     * @return stream ID we use to get data, zero if the connection is still being built.
      */
     public long getReceiveStreamId() { return _receiveStreamId; }
     public void setReceiveStreamId(long id) { 
@@ -171,7 +174,9 @@ public class Packet {
         _receiveStreamId = id; 
     }
     
-    /** 0-indexed sequence number for this Packet in the sendStream */
+    /** 0-indexed sequence number for this Packet in the sendStream
+     * @return 0-indexed sequence number for current Packet in current sendStream
+     */
     public long getSequenceNum() { return _sequenceNum; }
     public void setSequenceNum(long num) { _sequenceNum = num; }
     
@@ -181,6 +186,7 @@ public class Packet {
      * connection packet (where receiveStreamId is the unknown id) or
      * if FLAG_NO_ACK is set.
      *
+     * @return The highest packet sequence number received on receiveStreamId
      */
     public long getAckThrough() { 
         if (isFlagSet(FLAG_NO_ACK))
@@ -198,6 +204,7 @@ public class Packet {
      * List of packet sequence numbers below the getAckThrough() value
      * have not been received.  this may be null.
      *
+     * @return List of packet sequence numbers not ACKed, or null if there are none.
      */
     public long[] getNacks() { return _nacks; }
     public void setNacks(long nacks[]) { _nacks = nacks; }
@@ -207,13 +214,16 @@ public class Packet {
      * resending this packet (if it hasn't yet been ACKed).  The 
      * value is seconds since the packet was created.
      *
+     * @return Delay before resending a packet in seconds.
      */
     public int getResendDelay() { return _resendDelay; }
     public void setResendDelay(int numSeconds) { _resendDelay = numSeconds; }
     
     public static final int MAX_PAYLOAD_SIZE = 32*1024;
     
-    /** get the actual payload of the message.  may be null */
+    /** get the actual payload of the message.  may be null
+     * @return the payload of the message, null if none.
+     */
     public ByteArray getPayload() { return _payload; }
     public void setPayload(ByteArray payload) { 
         _payload = payload; 
@@ -232,7 +242,10 @@ public class Packet {
         return _payload;
     }
 
-    /** is a particular flag set on this packet? */
+    /** is a particular flag set on this packet?
+     * @param flag bitmask of any flag(s)
+     * @return true if set, false if not.
+     */
     public boolean isFlagSet(int flag) { return 0 != (_flags & flag); }
     public void setFlag(int flag) { _flags |= flag; }
     public void setFlag(int flag, boolean set) { 
@@ -243,14 +256,18 @@ public class Packet {
     }
     public void setFlags(int flags) { _flags = flags; } 
 
-    /** the signature on the packet (only included if the flag for it is set) */
+    /** the signature on the packet (only included if the flag for it is set)
+     * @return signature on the packet if the flag for signatures is set
+     */
     public Signature getOptionalSignature() { return _optionSignature; }
     public void setOptionalSignature(Signature sig) { 
         setFlag(FLAG_SIGNATURE_INCLUDED, sig != null);
         _optionSignature = sig; 
     }
 
-    /** the sender of the packet (only included if the flag for it is set) */
+    /** the sender of the packet (only included if the flag for it is set)
+     * @return the sending Destination
+     */
     public Destination getOptionalFrom() { return _optionFrom; }
     public void setOptionalFrom(Destination from) { 
         setFlag(FLAG_FROM_INCLUDED, from != null);
@@ -262,6 +279,7 @@ public class Packet {
      * How many milliseconds the sender of this packet wants the recipient
      * to wait before sending any more data (only valid if the flag for it is
      * set) 
+     * @return How long the sender wants the recipient to wait before sending any more data in ms.
      */
     public int getOptionalDelay() { return _optionDelay; }
     public void setOptionalDelay(int delayMs) {
@@ -276,6 +294,7 @@ public class Packet {
     /**
      * What is the largest payload the sender of this packet wants to receive?
      *
+     * @return Maximum payload size sender can receive (MRU)
      */
     public int getOptionalMaxSize() { return _optionMaxSize; }
     public void setOptionalMaxSize(int numBytes) { 
@@ -287,6 +306,9 @@ public class Packet {
      * Write the packet to the buffer (starting at the offset) and return
      * the number of bytes written.
      *
+     * @param buffer bytes to write to a destination
+     * @param offset starting point in the buffer to send
+     * @return Count actually written
      * @throws IllegalStateException if there is data missing or otherwise b0rked
      */
     public int writePacket(byte buffer[], int offset) throws IllegalStateException {
@@ -370,6 +392,8 @@ public class Packet {
     
     /**
      * how large would this packet be if we wrote it
+     * @return How large the current packet would be
+     * @throws IllegalStateException 
      */
     public int writtenSize() throws IllegalStateException {
         int size = 0;
@@ -497,7 +521,10 @@ public class Packet {
     /**
      * Determine whether the signature on the data is valid.  
      *
-     * @return true if the signature exists and validates against the data, 
+     * @param ctx Application context
+     * @param from the Destination the data came from
+     * @param buffer data to validate with signature
+     * @return true if the signature exists and validates against the data,
      *         false otherwise.
      */
     public boolean verifySignature(I2PAppContext ctx, Destination from, byte buffer[]) {
@@ -530,6 +557,11 @@ public class Packet {
      * Sign and write the packet to the buffer (starting at the offset) and return
      * the number of bytes written.
      *
+     * @param buffer data to be written
+     * @param offset starting point in the buffer
+     * @param ctx Application Context
+     * @param key signing key
+     * @return Count of bytes written
      * @throws IllegalStateException if there is data missing or otherwise b0rked
      */
     public int writeSignedPacket(byte buffer[], int offset, I2PAppContext ctx, SigningPrivateKey key) throws IllegalStateException {
@@ -560,6 +592,7 @@ public class Packet {
         return size;
     }
     
+	@Override
     public String toString() {
         StringBuffer str = formatAsString();
         return str.toString();
diff --git a/apps/streaming/java/src/net/i2p/client/streaming/PacketLocal.java b/apps/streaming/java/src/net/i2p/client/streaming/PacketLocal.java
index 5cfe34205479878bfa519f5e24ed6c6d2998cbc4..e4604688f978b6c6dc254745937bd6563d07d52a 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/PacketLocal.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/PacketLocal.java
@@ -107,7 +107,9 @@ public class PacketLocal extends Packet implements MessageOutputStream.WriteStat
     }
     public SimpleTimer.TimedEvent getResendEvent() { return _resendEvent; }
     
-    /** how long after packet creation was it acked? */
+    /** how long after packet creation was it acked?
+     * @return how long after packet creation the packet was ACKed in ms
+     */
     public int getAckTime() {
         if (_ackOn <= 0) 
             return -1;
@@ -130,6 +132,7 @@ public class PacketLocal extends Packet implements MessageOutputStream.WriteStat
     
     public void setResendPacketEvent(SimpleTimer.TimedEvent evt) { _resendEvent = evt; }
     
+	@Override
     public StringBuffer formatAsString() {
         StringBuffer buf = super.formatAsString();