diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java
index e53b3075f08cfab4b675429d95ee3f77ca80f84c..2bdee7d528bbf4b2a794b8feb3b7eda8fb34c04d 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java
@@ -252,7 +252,7 @@ public class I2PTunnel implements Logging, EventDispatcher {
     
     /**
      * Run the server pointing at the host and port specified using the private i2p
-     * destination loaded from the specified file
+     * destination loaded from the specified file. <p />
      *
      * Sets the event "serverTaskId" = Integer(taskId) after the tunnel has been started (or -1 on error)
      * Also sets the event "openServerResult" = "ok" or "error" (displaying "Ready!" on the logger after
@@ -307,7 +307,7 @@ public class I2PTunnel implements Logging, EventDispatcher {
     
     /**
      * Run the server pointing at the host and port specified using the private i2p
-     * destination loaded from the given base64 stream
+     * destination loaded from the given base64 stream. <p />
      *
      * Sets the event "serverTaskId" = Integer(taskId) after the tunnel has been started (or -1 on error)
      * Also sets the event "openServerResult" = "ok" or "error" (displaying "Ready!" on the logger after
@@ -353,7 +353,7 @@ public class I2PTunnel implements Logging, EventDispatcher {
     
     /**
      * Run the client on the given port number pointing at the specified destination
-     * (either the base64 of the destination or file:fileNameContainingDestination)
+     * (either the base64 of the destination or file:fileNameContainingDestination).
      *
      * Sets the event "clientTaskId" = Integer(taskId) after the tunnel has been started (or -1 on error)
      * Also sets the event "openClientResult" = "error" or "ok" (before setting the value to "ok" it also
diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelRunner.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelRunner.java
index 4f1ed4f927f756d213ae888ddaabee1fd57a88e8..ca39bf401f737847d4b19863c562e08181ea2ce3 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelRunner.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelRunner.java
@@ -62,8 +62,9 @@ public class I2PTunnelRunner extends Thread {
     public boolean isFinished() { return finished; }
     
     /** 
-     * When was the last data for this runner sent or received?  (-1 if no data
-     * has been transferred yet)
+     * When was the last data for this runner sent or received?  
+     *
+     * @return date (ms since the epoch), or -1 if no data has been transferred yet
      *
      */
     public long getLastActivityOn() { return lastActivityOn; }
diff --git a/core/java/src/net/i2p/client/ATalk.java b/core/java/src/net/i2p/client/ATalk.java
index 5b3a09bfafc4c78d794a86e13469a864d79440de..b4e9e1b205228ef632a97cd83ecc752413e75658 100644
--- a/core/java/src/net/i2p/client/ATalk.java
+++ b/core/java/src/net/i2p/client/ATalk.java
@@ -225,7 +225,7 @@ public class ATalk implements I2PSessionListener, Runnable {
     /** I2PSessionListener.messageAvailable requires this method to be called whenever
      * I2P wants to tell the session that a message is available.  ATalk always grabs
      * the message immediately and either processes it as a "send file" command (passing
-     * it off to {@link #handleRecieveFile handleRecieveFile}) or simply displays the
+     * it off to handleRecieveFile(..) or simply displays the
      * message to the user.
      *
      */
diff --git a/core/java/src/net/i2p/client/I2PSession.java b/core/java/src/net/i2p/client/I2PSession.java
index 22152c0f6e48b3d0b286a5796f77e4edf5420a40..6354d3cdb119ab9ce215d9cb7cfa9b136b1586b1 100644
--- a/core/java/src/net/i2p/client/I2PSession.java
+++ b/core/java/src/net/i2p/client/I2PSession.java
@@ -32,7 +32,9 @@ public interface I2PSession {
     public boolean sendMessage(Destination dest, byte[] payload) throws I2PSessionException;
     /**
      * Like sendMessage above, except the key used and the tags sent are exposed to the 
-     * application, so that if some application layer message delivery confirmation is used,
+     * application.  <p /> 
+     * 
+     * If some application layer message delivery confirmation is used,
      * rather than i2p's (slow) built in confirmation via guaranteed delivery mode, the 
      * application can update the SessionKeyManager, ala:
      * <pre>
diff --git a/core/java/src/net/i2p/client/TestServer.java b/core/java/src/net/i2p/client/TestServer.java
index 1c88e38a58eac9539d9218275fad6ae87d831bef..aea8b0a99b63cd25c92209dbca5553299e9e7e90 100644
--- a/core/java/src/net/i2p/client/TestServer.java
+++ b/core/java/src/net/i2p/client/TestServer.java
@@ -55,7 +55,7 @@ public class TestServer implements Runnable {
     }
     
     /**
-     * Handle the connection by passing it off to a {@link ConnectionRunner ConnectionRunner}
+     * Handle the connection by passing it off to a ConnectionRunner
      *
      */
     protected void runConnection(Socket socket) throws IOException {
diff --git a/core/java/src/net/i2p/crypto/AESEngine.java b/core/java/src/net/i2p/crypto/AESEngine.java
index 627d24ef413ae5c59fc3adabcabc49df233efca3..b6b87d81121a726b757b4465bf13799a97c545e8 100644
--- a/core/java/src/net/i2p/crypto/AESEngine.java
+++ b/core/java/src/net/i2p/crypto/AESEngine.java
@@ -23,8 +23,7 @@ import java.io.ByteArrayInputStream;
  * Wrapper singleton for AES cypher operation.
  *
  * @author jrandom
- * @license GPL
- */
+  */
 public class AESEngine {
     private final static Log _log = new Log(AESEngine.class);
     private static AESEngine _engine;
diff --git a/core/java/src/net/i2p/crypto/CryptixAESEngine.java b/core/java/src/net/i2p/crypto/CryptixAESEngine.java
index b44feaf2ece3d3236803c9ab94ba1b52f747c2dc..51f23181fb41f0be1923c3ee88b648e422468f71 100644
--- a/core/java/src/net/i2p/crypto/CryptixAESEngine.java
+++ b/core/java/src/net/i2p/crypto/CryptixAESEngine.java
@@ -20,8 +20,7 @@ import net.i2p.util.Log;
  * Only supports data of size mod 16 bytes - no inherent padding.
  *
  * @author jrandom, thecrypto
- * @license GPL
- */
+  */
 public class CryptixAESEngine extends AESEngine {
     private final static Log _log = new Log(CryptixAESEngine.class);
     private final static CryptixRijndael_Algorithm _algo = new CryptixRijndael_Algorithm();
diff --git a/core/java/src/net/i2p/crypto/DummyElGamalEngine.java b/core/java/src/net/i2p/crypto/DummyElGamalEngine.java
index b9445d173c87c3d0478741c2590c85eba6c5daa5..fdaa2a1bf5331af919cfa18678005432c5d1298e 100644
--- a/core/java/src/net/i2p/crypto/DummyElGamalEngine.java
+++ b/core/java/src/net/i2p/crypto/DummyElGamalEngine.java
@@ -21,7 +21,6 @@ import net.i2p.util.Log;
  * Fake ElG E and D, useful for when performance isn't being tested
  *
  * @author jrandom
- * @license GPL
  */
 public class DummyElGamalEngine extends ElGamalEngine {
     private final static Log _log = new Log(DummyElGamalEngine.class);    
diff --git a/core/java/src/net/i2p/data/DataHelper.java b/core/java/src/net/i2p/data/DataHelper.java
index 0f8a188dac34b26578e104e6d729e37c3757984a..03f035d33b3e1e704f895e2553b74df35d8256fe 100644
--- a/core/java/src/net/i2p/data/DataHelper.java
+++ b/core/java/src/net/i2p/data/DataHelper.java
@@ -338,9 +338,10 @@ public class DataHelper {
 
     
     /**
-     * Helper util to compare two objects, treating (null == null) as true, and 
-     * (null == (!null)) as false.
+     * Helper util to compare two objects, including null handling.
+     * <p />
      *
+     * This treats (null == null) as true, and (null == (!null)) as false.
      */
     public final static boolean eq(Object lhs, Object rhs) {
 	try {
@@ -353,8 +354,12 @@ public class DataHelper {
 	}
     }
     /**
-     * Deep compare two collections, treating (null == null) as true,
-     * (null == (!null)) as false, and then comparing each element via eq(object, object).
+     * Run a deep comparison across the two collections.  
+     * <p />
+     *
+     * This treats (null == null) as true, (null == (!null)) as false, and then 
+     * comparing each element via eq(object, object). <p />
+     *
      * If the size of the collections are not equal, the comparison returns false.
      * The collection order should be consistent, as this simply iterates across both and compares
      * based on the value of each at each step along the way.
@@ -373,8 +378,10 @@ public class DataHelper {
     }
     
     /**
-     * Compare the byte arrays byte by byte, treating (null == null) as
-     * true, (null == (!null)) as false, and unequal length arrays as false.
+     * Run a comparison on the byte arrays, byte by byte.  <p />
+     *
+     * This treats (null == null) as true, (null == (!null)) as false, 
+     * and unequal length arrays as false.
      *
      */
     public final static boolean eq(byte lhs[], byte rhs[]) {
diff --git a/core/java/src/net/i2p/data/Payload.java b/core/java/src/net/i2p/data/Payload.java
index 639c43460600bcf89246f46f106a993d308c14b0..9b778fc2ce3649d8d5664ecac4aa6bf00690ac9a 100644
--- a/core/java/src/net/i2p/data/Payload.java
+++ b/core/java/src/net/i2p/data/Payload.java
@@ -16,7 +16,7 @@ import net.i2p.util.Log;
 
 /**
  * Defines the actual payload of a message being delivered, including the 
- * standard encryption wrapping, as defined by the I2P data structure spec.<p />
+ * standard encryption wrapping, as defined by the I2P data structure spec.
  *
  * @author jrandom
  */
diff --git a/core/java/src/net/i2p/data/RouterAddress.java b/core/java/src/net/i2p/data/RouterAddress.java
index f5ab3dfffeed8a04d8766850800c797f9674e21b..2de2c42456c5b9bc3b61d5794a225448dab0f739 100644
--- a/core/java/src/net/i2p/data/RouterAddress.java
+++ b/core/java/src/net/i2p/data/RouterAddress.java
@@ -39,7 +39,7 @@ public class RouterAddress extends DataStructureImpl {
     
     /**
      * Retrieve the weighted cost of this address, relative to other methods of
-     * contacting this router.  0 means free and 255 means really expensive.
+     * contacting this router.  The value 0 means free and 255 means really expensive.
      * No value above 255 is allowed.
      *
      */
diff --git a/core/java/src/net/i2p/data/TunnelId.java b/core/java/src/net/i2p/data/TunnelId.java
index 4c1cc08041fb6b2b47ea869aca6c120d53e5a216..745eb948973c4187232cdae45fa62d4fdef7f725 100644
--- a/core/java/src/net/i2p/data/TunnelId.java
+++ b/core/java/src/net/i2p/data/TunnelId.java
@@ -41,8 +41,7 @@ public class TunnelId extends DataStructureImpl {
     public void setTunnelId(long id) { _tunnelId = id; }
     
     /** 
-     * contains the metadata for the tunnel - is it inbound, outbound, or a participant? 
-     * This data point is kept in memory only and is useful for the router.
+     * is this tunnel inbound, outbound, or a participant (kept in memory only and used only for the router).s
      *
      * @return type of tunnel (per constants TYPE_UNSPECIFIED, TYPE_INBOUND, TYPE_OUTBOUND, TYPE_PARTICIPANT)
      */
diff --git a/core/java/src/net/i2p/data/i2cp/I2CPMessageImpl.java b/core/java/src/net/i2p/data/i2cp/I2CPMessageImpl.java
index 10f4b61ce7099053a66fa59a0d418626479f88f1..dfcdffa28c4f72c196c85eaea0ec5eed6e7e3dd3 100644
--- a/core/java/src/net/i2p/data/i2cp/I2CPMessageImpl.java
+++ b/core/java/src/net/i2p/data/i2cp/I2CPMessageImpl.java
@@ -28,8 +28,7 @@ public abstract class I2CPMessageImpl extends DataStructureImpl implements I2CPM
     public I2CPMessageImpl() {}
     
     /**
-     * Validate the type and size of the message. and then read the message 
-     * into the data structures. 
+     * Validate the type and size of the message, and then read the message into the data structures.  <p />
      *
      */
     public void readMessage(InputStream in) throws I2CPMessageException, IOException {
diff --git a/core/java/src/net/i2p/stat/Rate.java b/core/java/src/net/i2p/stat/Rate.java
index 6e88166bf2799d01ac7c85c70b4e6cf0ee21e5cb..1101d2fb485ea7977379713105dfa65337508e8d 100644
--- a/core/java/src/net/i2p/stat/Rate.java
+++ b/core/java/src/net/i2p/stat/Rate.java
@@ -93,8 +93,8 @@ public class Rate {
     
     /**
      * Create a new rate and load its state from the properties, taking data 
-     * from the data points underneath the given prefix (e.g. prefix = 
-     * "profile.dbIntroduction.60m", this will load the associated data points such
+     * from the data points underneath the given prefix.  <p />
+     * (e.g. prefix = "profile.dbIntroduction.60m", this will load the associated data points such
      * as "profile.dbIntroduction.60m.lifetimeEventCount").  The data can be exported
      * through store(outputStream, "profile.dbIntroduction.60m").
      *
@@ -189,7 +189,7 @@ public class Rate {
      * During the last period, how much of the time was spent actually processing events in proportion 
      * to how many events could have occurred if there were no intervals?
      *
-     * If this statistic doesn't use event times, this returns 0.
+     * @return percentage, or 0 if event times aren't used
      */
     public double getLastEventSaturation() {
 	if ( (_lastEventCount > 0) && (_lastTotalEventTime > 0) ) {
@@ -203,10 +203,10 @@ public class Rate {
     }
     
     /** 
-     * During the extreme period, how much of the time was spent actually processing events in proportion 
-     * to how many events could have occurred if there were no intervals?
+     * During the extreme period, how much of the time was spent actually processing events
+     * in proportion to how many events could have occurred if there were no intervals? 
      *
-     * If this statistic doesn't use event times, this returns 0.
+     * @return percentage, or 0 if the statistic doesn't use event times
      */
     public double getExtremeEventSaturation() {
 	if ( (_extremeEventCount > 0) && (_extremeTotalEventTime > 0) ) {
@@ -220,9 +220,9 @@ public class Rate {
     
     /** 
      * During the lifetime of this stat, how much of the time was spent actually processing events in proportion 
-     * to how many events could have occurred if there were no intervals?
+     * to how many events could have occurred if there were no intervals? 
      *
-     * If this statistic doesn't use event times, this returns 0.
+     * @return percentage, or 0 if event times aren't used
      */
     public double getLifetimeEventSaturation() {
 	if ( (_lastEventCount > 0) && (_lifetimeTotalEventTime > 0) ) {
@@ -244,9 +244,10 @@ public class Rate {
     }
     
     /** 
-     * using the last period's rate, what is the total value that could have been sent if events were constant? 
-     * If this statistic's event times are 0, this returns 0.
+     * using the last period's rate, what is the total value that could have been sent 
+     * if events were constant?
      *
+     * @return max total value, or 0 if event times aren't used
      */
     public double getLastSaturationLimit() {
 	if ( (_lastTotalValue != 0) && (_lastEventCount > 0) && (_lastTotalEventTime > 0) ) {
@@ -261,9 +262,10 @@ public class Rate {
     }
     
     /** 
-     * using the extreme period's rate, what is the total value that could have been sent if events were constant? 
-     * If this statistic's event times are 0, this returns 0.
+     * using the extreme period's rate, what is the total value that could have been 
+     * sent if events were constant?
      *
+     * @return event total at saturation, or 0 if no event times are measured
      */
     public double getExtremeSaturationLimit() {
 	if ( (_extremeTotalValue != 0) && (_extremeEventCount > 0) && (_extremeTotalEventTime > 0) ) {
diff --git a/router/java/src/net/i2p/router/message/SendReplyMessageJob.java b/router/java/src/net/i2p/router/message/SendReplyMessageJob.java
index c90af01429de5c70ddebd38206980a27563eeb52..f47c66cc8bc0a764ad9cb83fa3a67412430ee5a9 100644
--- a/router/java/src/net/i2p/router/message/SendReplyMessageJob.java
+++ b/router/java/src/net/i2p/router/message/SendReplyMessageJob.java
@@ -45,10 +45,10 @@ public class SendReplyMessageJob extends JobImpl {
     }
     
     /**
-     * Send the message on its way.<p />
+     * Send the message on its way. <p />
      *
      * This could garlic route the message to the _block.getRouter, or it could
-     * send it there via a tunnel, or it could just send it direct.<p />
+     * send it there via a tunnel, or it could just send it direct. <p />
      *
      * For simplicity, its currently going direct.
      *
diff --git a/router/java/src/net/i2p/router/peermanager/DBHistory.java b/router/java/src/net/i2p/router/peermanager/DBHistory.java
index cc6c3b223c7fdc92b70798e0c7482ae1ab8dcf9b..766dc8797f1d7ecdbdc58afce2eb1f640bfcc3df 100644
--- a/router/java/src/net/i2p/router/peermanager/DBHistory.java
+++ b/router/java/src/net/i2p/router/peermanager/DBHistory.java
@@ -64,7 +64,10 @@ public class DBHistory {
     public long getUnpromptedDbStoreNew() { return _unpromptedDbStoreNew; }
     /** how many times have they sent us data we didn't ask for but that we have seen? */
     public long getUnpromptedDbStoreOld() { return _unpromptedDbStoreOld; }
-    /** how often does the peer fail to reply to a lookup request?  1 hour and 1 day periods */
+    /** 
+     * how often does the peer fail to reply to a lookup request, broken into 1 hour and 1 day periods.
+     *
+     */
     public RateStat getFailedLookupRate() { return _failedLookupRate; }
 
     /**