diff --git a/core/java/src/net/i2p/client/I2PClient.java b/core/java/src/net/i2p/client/I2PClient.java
index 6521cf258fc56bc801129716e78cc35b1aa6a428..d0f4ac0500f03f13403e7ea351045364681ab156 100644
--- a/core/java/src/net/i2p/client/I2PClient.java
+++ b/core/java/src/net/i2p/client/I2PClient.java
@@ -21,6 +21,9 @@ import net.i2p.data.Destination;
 /**
  * Define the standard means of interacting with the I2P system
  *
+ * An I2PClient contains no state, it is just a facility for creating private key files
+ * and generating sesssions from existing private key files.
+ *
  * @author jrandom
  */
 public interface I2PClient {
diff --git a/core/java/src/net/i2p/client/I2PClientImpl.java b/core/java/src/net/i2p/client/I2PClientImpl.java
index 23033dbf0f8d4042619cf37eb787b5d184ac1381..932daa61a5a4f0c9fc9476bce23d82253ecee215 100644
--- a/core/java/src/net/i2p/client/I2PClientImpl.java
+++ b/core/java/src/net/i2p/client/I2PClientImpl.java
@@ -25,14 +25,18 @@ import net.i2p.data.SigningPrivateKey;
 import net.i2p.data.SigningPublicKey;
 
 /**
- * Base client implementation
+ * Base client implementation.
+ * An I2PClient contains no state, it is just a facility for creating private key files
+ * and generating sesssions from existing private key files.
  *
  * @author jrandom
  */
 class I2PClientImpl implements I2PClient {
 
     /**
-     * Create the destination with a null payload
+     * Create the destination with a null payload.
+     * This is not bound to the I2PClient, you must supply the data back again
+     * in createSession().
      *
      * @param destKeyStream location to write out the destination, PrivateKey, and SigningPrivateKey,
      *                      format is specified in {@link net.i2p.data.PrivateKeyFile PrivateKeyFile}
diff --git a/core/java/src/net/i2p/client/I2PSessionImpl.java b/core/java/src/net/i2p/client/I2PSessionImpl.java
index 69fc300788b288bb2bf6608808630bf621234ed9..010092cfd6e7d307e4bfd63433a7eb344171d0dd 100644
--- a/core/java/src/net/i2p/client/I2PSessionImpl.java
+++ b/core/java/src/net/i2p/client/I2PSessionImpl.java
@@ -515,9 +515,9 @@ abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2CPMessa
      *  Needs work.
      */
     protected class AvailabilityNotifier implements Runnable {
-        private List _pendingIds;
-        private List _pendingSizes;
-        private boolean _alive;
+        private final List _pendingIds;
+        private final List _pendingSizes;
+        private volatile boolean _alive;
  
         public AvailabilityNotifier() {
             _pendingIds = new ArrayList(2);
diff --git a/core/java/src/net/i2p/crypto/CryptixAESEngine.java b/core/java/src/net/i2p/crypto/CryptixAESEngine.java
index 6d8e0da07579f0c4012feece0173d3dfa173766f..9836e7c403ca10766359ff243829d5d19190f06f 100644
--- a/core/java/src/net/i2p/crypto/CryptixAESEngine.java
+++ b/core/java/src/net/i2p/crypto/CryptixAESEngine.java
@@ -61,6 +61,7 @@ public class CryptixAESEngine extends AESEngine {
     }
 ****/
 
+    /** */
     public CryptixAESEngine(I2PAppContext context) {
         super(context);
         //_cache = new CryptixAESKeyCache();
diff --git a/core/java/src/net/i2p/crypto/CryptixRijndael_Algorithm.java b/core/java/src/net/i2p/crypto/CryptixRijndael_Algorithm.java
index 02a11431fabc00381ca4d367ae0b69078f668d98..f36d7753b62bc422c6426a2f5e48a3514c1f9e52 100644
--- a/core/java/src/net/i2p/crypto/CryptixRijndael_Algorithm.java
+++ b/core/java/src/net/i2p/crypto/CryptixRijndael_Algorithm.java
@@ -32,53 +32,53 @@ public final class CryptixRijndael_Algorithm // implicit no-argument constructor
     // Debugging methods and variables
     //...........................................................................
 
-    static final String _NAME = "Rijndael_Algorithm";
-    static final boolean _IN = true, _OUT = false;
+    private static final String _NAME = "Rijndael_Algorithm";
+    private static final boolean _IN = true, _OUT = false;
 
-    static final boolean _RDEBUG = false;
-    static final int _debuglevel = 0; // RDEBUG ? Rijndael_Properties.getLevel(NAME): 0;
+    private static final boolean _RDEBUG = false;
+    private static final int _debuglevel = 0; // RDEBUG ? Rijndael_Properties.getLevel(NAME): 0;
     //    static final PrintWriter err = RDEBUG ? Rijndael_Properties.getOutput() : null;
-    static final PrintWriter _err = new PrintWriter(new java.io.OutputStreamWriter(System.err));
+    private static final PrintWriter _err = new PrintWriter(new java.io.OutputStreamWriter(System.err));
 
-    static final boolean _TRACE = false; // Rijndael_Properties.isTraceable(NAME);
+    private static final boolean _TRACE = false; // Rijndael_Properties.isTraceable(NAME);
 
-    static void debug(String s) {
+    private static void debug(String s) {
         _err.println(">>> " + _NAME + ": " + s);
     }
 
-    static void trace(boolean in, String s) {
+    private static void trace(boolean in, String s) {
         if (_TRACE) _err.println((in ? "==> " : "<== ") + _NAME + "." + s);
     }
 
-    static void trace(String s) {
+    private static void trace(String s) {
         if (_TRACE) _err.println("<=> " + _NAME + "." + s);
     }
 
     // Constants and variables
     //...........................................................................
 
-    static final int _BLOCK_SIZE = 16; // default block size in bytes
-
-    static final int[] _alog = new int[256];
-    static final int[] _log = new int[256];
-
-    static final byte[] _S = new byte[256];
-    static final byte[] _Si = new byte[256];
-    static final int[] _T1 = new int[256];
-    static final int[] _T2 = new int[256];
-    static final int[] _T3 = new int[256];
-    static final int[] _T4 = new int[256];
-    static final int[] _T5 = new int[256];
-    static final int[] _T6 = new int[256];
-    static final int[] _T7 = new int[256];
-    static final int[] _T8 = new int[256];
-    static final int[] _U1 = new int[256];
-    static final int[] _U2 = new int[256];
-    static final int[] _U3 = new int[256];
-    static final int[] _U4 = new int[256];
-    static final byte[] _rcon = new byte[30];
-
-    static final int[][][] _shifts = new int[][][] { { { 0, 0}, { 1, 3}, { 2, 2}, { 3, 1}},
+    private static final int _BLOCK_SIZE = 16; // default block size in bytes
+
+    private static final int[] _alog = new int[256];
+    private static final int[] _log = new int[256];
+
+    private static final byte[] _S = new byte[256];
+    private static final byte[] _Si = new byte[256];
+    private static final int[] _T1 = new int[256];
+    private static final int[] _T2 = new int[256];
+    private static final int[] _T3 = new int[256];
+    private static final int[] _T4 = new int[256];
+    private static final int[] _T5 = new int[256];
+    private static final int[] _T6 = new int[256];
+    private static final int[] _T7 = new int[256];
+    private static final int[] _T8 = new int[256];
+    private static final int[] _U1 = new int[256];
+    private static final int[] _U2 = new int[256];
+    private static final int[] _U3 = new int[256];
+    private static final int[] _U4 = new int[256];
+    private static final byte[] _rcon = new byte[30];
+
+    private static final int[][][] _shifts = new int[][][] { { { 0, 0}, { 1, 3}, { 2, 2}, { 3, 1}},
                                                     { { 0, 0}, { 1, 5}, { 2, 4}, { 3, 3}},
                                                     { { 0, 0}, { 1, 7}, { 3, 5}, { 4, 4}}};
 
@@ -344,12 +344,12 @@ public final class CryptixRijndael_Algorithm // implicit no-argument constructor
     }
 
     // multiply two elements of GF(2^m)
-    static final int mul(int a, int b) {
+    private static final int mul(int a, int b) {
         return (a != 0 && b != 0) ? _alog[(_log[a & 0xFF] + _log[b & 0xFF]) % 255] : 0;
     }
 
     // convenience method used in generating Transposition boxes
-    static final int mul4(int a, byte[] b) {
+    private static final int mul4(int a, byte[] b) {
         if (a == 0) return 0;
         a = _log[a & 0xFF];
         int a0 = (b[0] != 0) ? _alog[(a + _log[b[0] & 0xFF]) % 255] & 0xFF : 0;