diff --git a/apps/BOB/nbproject/private/private.xml b/apps/BOB/nbproject/private/private.xml
index c1f155a782bd6f432a8846f3d3b308ba6fa6856c..2482568bf901a79a0141ee10333f9c8aa577e198 100644
--- a/apps/BOB/nbproject/private/private.xml
+++ b/apps/BOB/nbproject/private/private.xml
@@ -1,4 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project-private xmlns="http://www.netbeans.org/ns/project-private/1">
     <editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/1"/>
+    <open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/1">
+        <file>file:/root/NetBeansProjects/i2p.i2p/apps/BOB/src/net/i2p/BOB/MUXlisten.java</file>
+    </open-files>
 </project-private>
diff --git a/apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketOptionsImpl.java b/apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketOptionsImpl.java
index eb58b687156f8f4e1d5d5333f157d739c5c71585..334c86af0689c696bb52d17a6d5db89a8eb93152 100644
--- a/apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketOptionsImpl.java
+++ b/apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketOptionsImpl.java
@@ -6,7 +6,7 @@ import java.util.Properties;
  * Define the configuration for streaming and verifying data on the socket.
  *
  */
-class I2PSocketOptionsImpl implements I2PSocketOptions {
+public class I2PSocketOptionsImpl implements I2PSocketOptions {
     private long _connectTimeout;
     private long _readTimeout;
     private long _writeTimeout;
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 f73632683c7f22ba2db9bbf1da55ac670dcf844b..e6d99c473137b7a3f87d3807979cf71f92ab67a6 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/Connection.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/Connection.java
@@ -49,7 +49,7 @@ public class Connection {
     private boolean _isInbound;
     private boolean _updatedShareOpts;
     /** Packet ID (Long) to PacketLocal for sent but unacked packets */
-    private Map _outboundPackets;
+    private final Map _outboundPackets;
     private PacketQueue _outboundQueue;
     private ConnectionPacketHandler _handler;
     private ConnectionOptions _options;
@@ -66,7 +66,7 @@ public class Connection {
     private long _lastCongestionHighestUnacked;
     private boolean _ackSinceCongestion;
     /** Notify this on connection (or connection failure) */
-    private Object _connectLock;
+    private final Object _connectLock;
     /** how many messages have been resent and not yet ACKed? */
     private int _activeResends;
     private ConEvent _connectionEvent;
@@ -90,21 +90,22 @@ public class Connection {
     }
     public Connection(I2PAppContext ctx, ConnectionManager manager, SchedulerChooser chooser, PacketQueue queue, ConnectionPacketHandler handler, ConnectionOptions opts) {
         _context = ctx;
-        _log = ctx.logManager().getLog(Connection.class);
-        _receiver = new ConnectionDataReceiver(ctx, this);
-        _inputStream = new MessageInputStream(ctx);
-        _outputStream = new MessageOutputStream(ctx, _receiver, (opts == null ? Packet.MAX_PAYLOAD_SIZE : opts.getMaxMessageSize()));
+        _connectionManager = manager;
         _chooser = chooser;
-        _outboundPackets = new TreeMap();
         _outboundQueue = queue;
         _handler = handler;
+        _log = _context.logManager().getLog(Connection.class);
+        _receiver = new ConnectionDataReceiver(_context, this);
+        _inputStream = new MessageInputStream(_context);
+        _outputStream = new MessageOutputStream(_context, _receiver, (opts == null ? Packet.MAX_PAYLOAD_SIZE : opts.getMaxMessageSize()));
+        _outboundPackets = new TreeMap();
         _options = (opts != null ? opts : new ConnectionOptions());
         _outputStream.setWriteTimeout((int)_options.getWriteTimeout());
         _inputStream.setReadTimeout((int)_options.getReadTimeout());
         _lastSendId = -1;
         _nextSendTime = -1;
         _ackedPackets = 0;
-        _createdOn = ctx.clock().now();
+        _createdOn = _context.clock().now();
         _closeSentOn = -1;
         _closeReceivedOn = -1;
         _unackedPacketsReceived = 0;
@@ -113,7 +114,6 @@ public class Connection {
         _lastCongestionSeenAt = MAX_WINDOW_SIZE*2; // lets allow it to grow
         _lastCongestionTime = -1;
         _lastCongestionHighestUnacked = -1;
-        _connectionManager = manager;
         _resetReceived = false;
         _connected = true;
         _disconnectScheduledOn = -1;
@@ -126,7 +126,7 @@ public class Connection {
         _isInbound = false;
         _updatedShareOpts = false;
         _connectionEvent = new ConEvent();
-	_hardDisconnected = false;
+        _hardDisconnected = false;
         _randomWait = _context.random().nextInt(10*1000); // just do this once to reduce usage
         _context.statManager().createRateStat("stream.con.windowSizeAtCongestion", "How large was our send window when we send a dup?", "Stream", new long[] { 60*1000, 10*60*1000, 60*60*1000 });
         _context.statManager().createRateStat("stream.chokeSizeBegin", "How many messages were outstanding when we started to choke?", "Stream", new long[] { 60*1000, 10*60*1000, 60*60*1000 });
@@ -1018,6 +1018,7 @@ public class Connection {
             //    _log.debug("firing event on " + _connection, _addedBy);
             eventOccurred(); 
         }
+        @Override
         public String toString() { return "event on " + Connection.this.toString(); }
     }
     
diff --git a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionHandler.java b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionHandler.java
index d989a23671a938c3597ab517ae77f7c78f0845c8..382c984d9af303d0d58eb31b3ef0a46919cfda5a 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionHandler.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionHandler.java
@@ -16,7 +16,7 @@ import net.i2p.util.SimpleTimer;
  *
  * @author zzz modded to use concurrent and bound queue size
  */
-class ConnectionHandler {
+public class ConnectionHandler {
     private I2PAppContext _context;
     private Log _log;
     private ConnectionManager _manager;
@@ -109,7 +109,7 @@ class ConnectionHandler {
                 // fail all the ones we had queued up
                 while(true) {
                     Packet packet = _synQueue.poll(); // fails immediately if empty
-                    if (packet == null || packet.getOptionalDelay() == PoisonPacket.MAX_DELAY_REQUEST)
+                    if (packet == null || packet.getOptionalDelay() == PoisonPacket.POISON_MAX_DELAY_REQUEST)
                         break;
                     sendReset(packet);
                 }
@@ -142,7 +142,7 @@ class ConnectionHandler {
             }
 
             if (syn != null) {
-                if (syn.getOptionalDelay() == PoisonPacket.MAX_DELAY_REQUEST)
+                if (syn.getOptionalDelay() == PoisonPacket.POISON_MAX_DELAY_REQUEST)
                     return null;
 
                 // deal with forged / invalid syn packets
@@ -226,14 +226,14 @@ class ConnectionHandler {
 
     /**
      * Simple end-of-queue marker.
-     * The standard class limits the delay to MAX_DELAY_REQUEST so
+     * The standard class limits the delay to POISON_MAX_DELAY_REQUEST so
      * an evil user can't use this to shut us down
      */
     private static class PoisonPacket extends Packet {
-        public static final int MAX_DELAY_REQUEST = Packet.MAX_DELAY_REQUEST + 1;
+        public static final int POISON_MAX_DELAY_REQUEST = Packet.MAX_DELAY_REQUEST + 1;
 
         public PoisonPacket() {
-            setOptionalDelay(MAX_DELAY_REQUEST);
+            setOptionalDelay(POISON_MAX_DELAY_REQUEST);
         }
     }
 }
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 7826ba2a81c0d86d48ce235ddedaa96c07d51994..b978ff3be933ca190871adb74471cbe7d8098dfa 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionManager.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionManager.java
@@ -34,32 +34,32 @@ public class ConnectionManager {
     /** Inbound stream ID (Long) to Connection map */
     private Map _connectionByInboundId;
     /** Ping ID (Long) to PingRequest */
-    private Map _pendingPings;
+    private final Map _pendingPings;
     private boolean _allowIncoming;
     private int _maxConcurrentStreams;
     private ConnectionOptions _defaultOptions;
     private volatile int _numWaiting;
-    private Object _connectionLock;
+    private final Object _connectionLock;
     private long SoTimeout;
     
     public ConnectionManager(I2PAppContext context, I2PSession session, int maxConcurrent, ConnectionOptions defaultOptions) {
         _context = context;
-        _log = context.logManager().getLog(ConnectionManager.class);
+        _session = session;
+        _maxConcurrentStreams = maxConcurrent;
+        _defaultOptions = defaultOptions;
+        _log = _context.logManager().getLog(ConnectionManager.class);
         _connectionByInboundId = new HashMap(32);
         _pendingPings = new HashMap(4);
         _connectionLock = new Object();
-        _messageHandler = new MessageHandler(context, this);
-        _packetHandler = new PacketHandler(context, this);
-        _connectionHandler = new ConnectionHandler(context, this);
-        _schedulerChooser = new SchedulerChooser(context);
-        _conPacketHandler = new ConnectionPacketHandler(context);
-        _tcbShare = new TCBShare(context);
-        _session = session;
-        session.setSessionListener(_messageHandler);
-        _outboundQueue = new PacketQueue(context, session, this);
+        _messageHandler = new MessageHandler(_context, this);
+        _packetHandler = new PacketHandler(_context, this);
+        _connectionHandler = new ConnectionHandler(_context, this);
+        _schedulerChooser = new SchedulerChooser(_context);
+        _conPacketHandler = new ConnectionPacketHandler(_context);
+        _tcbShare = new TCBShare(_context);
+        _session.setSessionListener(_messageHandler);
+        _outboundQueue = new PacketQueue(_context, _session, this);
         _allowIncoming = false;
-        _maxConcurrentStreams = maxConcurrent;
-        _defaultOptions = defaultOptions;
         _numWaiting = 0;
         /** Socket timeout for accept() */
         SoTimeout = -1;
@@ -277,11 +277,13 @@ public class ConnectionManager {
     
     public MessageHandler getMessageHandler() { return _messageHandler; }
     public PacketHandler getPacketHandler() { return _packetHandler; }
-    public ConnectionHandler getConnectionHandler() { return _connectionHandler; }
     public I2PSession getSession() { return _session; }
-    public PacketQueue getPacketQueue() { return _outboundQueue; }
     public void updateOptsFromShare(Connection con) { _tcbShare.updateOptsFromShare(con); }
     public void updateShareOpts(Connection con) { _tcbShare.updateShareOpts(con); }
+    // Both of these methods are 
+    // exporting non-public type through public API, this is a potential bug.
+    public ConnectionHandler getConnectionHandler() { return _connectionHandler; }
+    public PacketQueue getPacketQueue() { return _outboundQueue; }
     
     /**
      * Something b0rked hard, so kill all of our connections without mercy.
@@ -345,13 +347,13 @@ public class ConnectionManager {
             return new HashSet(_connectionByInboundId.values());
         }
     }
-    
     public boolean ping(Destination peer, long timeoutMs) {
         return ping(peer, timeoutMs, true);
     }
     public boolean ping(Destination peer, long timeoutMs, boolean blocking) {
         return ping(peer, timeoutMs, blocking, null, null, null);
     }
+
     public boolean ping(Destination peer, long timeoutMs, boolean blocking, SessionKey keyToUse, Set tagsToSend, PingNotifier notifier) {
         Long id = new Long(_context.random().nextLong(Packet.MAX_STREAM_ID-1)+1);
         PacketLocal packet = new PacketLocal(_context, peer);
@@ -390,7 +392,7 @@ public class ConnectionManager {
         return ok;
     }
 
-    interface PingNotifier {
+    public interface PingNotifier {
         public void pingComplete(boolean ok);
     }
     
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 4363e3f49a57b7b1bc727288da295a0e0cb2e613..740fdcf8297380102e3d822c181ccd98df90ae68 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionOptions.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionOptions.java
@@ -15,7 +15,6 @@ public class ConnectionOptions extends I2PSocketOptionsImpl {
     private int _rtt;
     private int _rttDev;
     private int _rto;
-    private int _trend[];
     private int _resendDelay;
     private int _sendAckDelay;
     private int _maxMessageSize;
@@ -58,7 +57,10 @@ public class ConnectionOptions extends I2PSocketOptionsImpl {
     static final int DEFAULT_MAX_SENDS = 8;
     public static final int DEFAULT_INITIAL_RTT = 8*1000;    
     static final int MIN_WINDOW_SIZE = 1;
-    
+    // Syncronization fix, but doing it this way causes NPE...
+    // private final int _trend[] = new int[TREND_COUNT];
+    private int _trend[];
+
     /**
      *  OK, here is the calculation on the message size to fit in a single
      *  tunnel message without fragmentation.
@@ -203,7 +205,6 @@ public class ConnectionOptions extends I2PSocketOptionsImpl {
     protected void init(Properties opts) {
         super.init(opts);
         _trend = new int[TREND_COUNT];
-        
         setMaxWindowSize(getInt(opts, PROP_MAX_WINDOW_SIZE, Connection.MAX_WINDOW_SIZE));
         setConnectDelay(getInt(opts, PROP_CONNECT_DELAY, -1));
         setProfile(getInt(opts, PROP_PROFILE, PROFILE_BULK));
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 1ff65248ddd27c623ae3770435eea4cbc5968d99..98165cf7de165a0b21bb518d12f191f532689caa 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/MessageHandler.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/MessageHandler.java
@@ -18,7 +18,7 @@ public class MessageHandler implements I2PSessionListener {
     private ConnectionManager _manager;
     private I2PAppContext _context;
     private Log _log;
-    private List _listeners;
+    private final List _listeners;
     
     public MessageHandler(I2PAppContext ctx, ConnectionManager mgr) {
         _manager = mgr;
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 77a5014cf4dd11af3e6c9fdd0919ba5c2296ed14..7b87e55836be77ad93c7c8f079cc9f3edd0df018 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/MessageInputStream.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/MessageInputStream.java
@@ -55,7 +55,7 @@ public class MessageInputStream extends InputStream {
     
     private byte[] _oneByte = new byte[1];
     
-    private Object _dataLock;
+    private final Object _dataLock;
     
     public MessageInputStream(I2PAppContext ctx) {
         _context = ctx;
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 4a810d565dee186b837d56174d95afdb83632a3b..ab7c9374a3bdbbd51cf767ce33379df28f6a8b30 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/MessageOutputStream.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/MessageOutputStream.java
@@ -20,7 +20,7 @@ public class MessageOutputStream extends OutputStream {
     private Log _log;
     private byte _buf[];
     private int _valid;
-    private Object _dataLock;
+    private final Object _dataLock;
     private DataReceiver _dataReceiver;
     private IOException _streamError;
     private boolean _closed;
@@ -319,6 +319,7 @@ public class MessageOutputStream extends OutputStream {
         throwAnyError();
     }
     
+    @Override
     public void close() throws IOException {
         if (_closed) {
             synchronized (_dataLock) { _dataLock.notifyAll(); }
diff --git a/apps/streaming/java/src/net/i2p/client/streaming/PacketHandler.java b/apps/streaming/java/src/net/i2p/client/streaming/PacketHandler.java
index 1d26d7b8c1061acd3e24e28ffe4a78ec32a5b64d..ff43293a0e0fad57ceac0cec811cc39881e4fca4 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/PacketHandler.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/PacketHandler.java
@@ -9,7 +9,6 @@ import net.i2p.I2PAppContext;
 import net.i2p.I2PException;
 import net.i2p.data.DataHelper;
 import net.i2p.util.Log;
-import net.i2p.util.SimpleTimer;
 
 /**
  * receive a packet and dispatch it correctly to the connection specified,
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 e91cbdb7d4c7e7f22faeb5467196e19d33640c6e..db4adb27cd00f643199dc6ecb0e56273ad50cc43 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/PacketQueue.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/PacketQueue.java
@@ -18,7 +18,7 @@ import net.i2p.util.Log;
  * mode=bestEffort doesnt block in the SDK.
  *
  */
-class PacketQueue {
+public class PacketQueue {
     private I2PAppContext _context;
     private Log _log;
     private I2PSession _session;
diff --git a/apps/streaming/java/src/net/i2p/client/streaming/SchedulerChooser.java b/apps/streaming/java/src/net/i2p/client/streaming/SchedulerChooser.java
index a2aacf82e2c0ea56daee7d2e3a9a0124e5406ccc..be62f17661ebc8cee6efe8cb5589ad2d57418602 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/SchedulerChooser.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/SchedulerChooser.java
@@ -10,7 +10,7 @@ import net.i2p.util.Log;
  * Examine a connection's state and pick the right scheduler for it.
  *
  */
-class SchedulerChooser {
+public class SchedulerChooser {
     private I2PAppContext _context;
     private Log _log;
     private TaskScheduler _nullScheduler;
diff --git a/apps/streaming/java/src/net/i2p/client/streaming/TaskScheduler.java b/apps/streaming/java/src/net/i2p/client/streaming/TaskScheduler.java
index 8657a20538cc68a058fefcfea20725974533068c..c998c8425b62746a9749078a164f03d0a8051e91 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/TaskScheduler.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/TaskScheduler.java
@@ -5,7 +5,7 @@ package net.i2p.client.streaming;
  * selected based upon its current state.
  *
  */
-interface TaskScheduler {
+public interface TaskScheduler {
     /**
      * An event has occurred (timeout, message sent, or message received),
      * so schedule what to do next based on our current state.
diff --git a/history.txt b/history.txt
index 51e030805c9002a468aa314f5746a6690fc33682..d02bf97dc6bf66f95629bf3df4748287d9ae757a 100644
--- a/history.txt
+++ b/history.txt
@@ -130,6 +130,12 @@
     * NetDb stats: Normalize tunnel build stats for increased anonymity,
       effective in 0.7.6
 
+2009-06-30 sponge
+    * General cleanup on streaming and ministreaming.
+      This fixes some compile warnings, and prepares for a larger fix.
+      There is no code-flow changes, just lint. One warning remains as I am
+      unsure exactly how to solve the problem yet.
+
 * 2009-06-29  0.7.5 released
 
 2009-06-29 Complication
diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java
index 8aa072fcf9438648320c85ef3852d1e13da4f6b8..b74a3a021a67537a1c5a88fd8f2ae075a48f864b 100644
--- a/router/java/src/net/i2p/router/RouterVersion.java
+++ b/router/java/src/net/i2p/router/RouterVersion.java
@@ -18,7 +18,7 @@ public class RouterVersion {
     /** deprecated */
     public final static String ID = "Monotone";
     public final static String VERSION = CoreVersion.VERSION;
-    public final static long BUILD = 0;
+    public final static long BUILD = 1;
     /** for example "-test" */
     public final static String EXTRA = "";
     public final static String FULL_VERSION = VERSION + "-" + BUILD + EXTRA;