diff --git a/apps/i2psnark/java/src/org/klomp/snark/ConnectionAcceptor.java b/apps/i2psnark/java/src/org/klomp/snark/ConnectionAcceptor.java
index 77ba522e6e545b7e3b47452f4f4a6f1b1a237969..29e6e80756d709e98c008fbc00d1d62e246ca211 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/ConnectionAcceptor.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/ConnectionAcceptor.java
@@ -129,7 +129,7 @@ class ConnectionAcceptor implements Runnable
 
   public int getPort()
   {
-    return 6881; // serverSocket.getLocalPort();
+    return TrackerClient.PORT; // serverSocket.getLocalPort();
   }
 
   public void run()
@@ -166,10 +166,18 @@ class ConnectionAcceptor implements Runnable
                     try { socket.close(); } catch (IOException ioe) {}
                     continue;
                 }
-                int bad = _badCounter.count(socket.getPeerDestination().calculateHash());
+                Hash h = socket.getPeerDestination().calculateHash();
+                if (socket.getLocalPort() == 80) {
+                     _badCounter.increment(h);
+                    if (_log.shouldLog(Log.WARN))
+                        _log.error("Dropping incoming HTTP from " + h);
+                    try { socket.close(); } catch (IOException ioe) {}
+                    continue;
+                }
+                int bad = _badCounter.count(h);
                 if (bad >= MAX_BAD) {
                     if (_log.shouldLog(Log.WARN))
-                        _log.warn("Rejecting connection from " + socket.getPeerDestination().calculateHash() +
+                        _log.warn("Rejecting connection from " + h +
                                   " after " + bad + " failures, max is " + MAX_BAD);
                     try { socket.close(); } catch (IOException ioe) {}
                     continue;
diff --git a/apps/i2psnark/java/src/org/klomp/snark/ExtensionHandler.java b/apps/i2psnark/java/src/org/klomp/snark/ExtensionHandler.java
index fd79e82527c6ed7268e2ad5c64edbb9b251bbf98..6c35dbe3acc4e53afe90fde8899889f9845124dc 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/ExtensionHandler.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/ExtensionHandler.java
@@ -56,7 +56,7 @@ abstract class ExtensionHandler {
         }
         // include the map even if empty so the far-end doesn't NPE
         handshake.put("m", m);
-        handshake.put("p", Integer.valueOf(6881));
+        handshake.put("p", Integer.valueOf(TrackerClient.PORT));
         handshake.put("v", "I2PSnark");
         handshake.put("reqq", Integer.valueOf(5));
         return BEncoder.bencode(handshake);
diff --git a/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java b/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java
index 8e4172265450581a00bbc9cbd257a358be487a9d..6f5401c5443af1794617fca55baeeef1229bdab3 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java
@@ -324,6 +324,8 @@ public class I2PSnarkUtil {
         if (_banlist.contains(dest))
             throw new IOException("Not trying to contact " + dest.toBase64() + ", as they are banlisted");
         try {
+            // TODO opts.setPort(xxx); connect(addr, opts)
+            // DHT moved above 6881 in 0.9.9
             I2PSocket rv = _manager.connect(addr);
             if (rv != null)
                 _banlist.remove(dest);
@@ -331,7 +333,9 @@ public class I2PSnarkUtil {
         } catch (I2PException ie) {
             _banlist.add(dest);
             _context.simpleScheduler().addEvent(new Unbanlist(dest), 10*60*1000);
-            throw new IOException("Unable to reach the peer " + peer + ": " + ie.getMessage());
+            IOException ioe = new IOException("Unable to reach the peer " + peer);
+            ioe.initCause(ie);
+            throw ioe;
         }
     }
     
diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerID.java b/apps/i2psnark/java/src/org/klomp/snark/PeerID.java
index cc71a5f58e82f90c23bfd1a8c69f3518d56620e9..a5f0f65745f6568fb741f5da72b0333ee7aafcaa 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/PeerID.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/PeerID.java
@@ -58,7 +58,7 @@ class PeerID implements Comparable
   {
     this.id = id;
     this.address = address;
-    this.port = 6881;
+    this.port = TrackerClient.PORT;
     this.destHash = address.calculateHash().getData();
     hash = calculateHash();
     util = null;
@@ -92,7 +92,7 @@ class PeerID implements Comparable
     if (address == null)
         throw new InvalidBEncodingException("Invalid destination [" + bevalue.getString() + "]");
 
-    port = 6881;
+    port = TrackerClient.PORT;
     this.destHash = address.calculateHash().getData();
     hash = calculateHash();
     util = null;
@@ -106,7 +106,7 @@ class PeerID implements Comparable
   public PeerID(byte[] dest_hash, I2PSnarkUtil util) throws InvalidBEncodingException
   {
     // id and address remain null
-    port = 6881;
+    port = TrackerClient.PORT;
     if (dest_hash.length != 32)
         throw new InvalidBEncodingException("bad hash length");
     destHash = dest_hash;
diff --git a/apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java b/apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java
index ace18c25de2887afe4ed90ac71c3be3765b3ef1b..ec1352bc04ab03ede0a6932f0adac0fc0820bc32 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java
@@ -86,6 +86,7 @@ public class TrackerClient implements Runnable {
   private final static int LONG_SLEEP = 30*60*1000; // sleep a while after lots of fails
   private final static long MIN_TRACKER_ANNOUNCE_INTERVAL = 15*60*1000;
   private final static long MIN_DHT_ANNOUNCE_INTERVAL = 10*60*1000;
+  public static final int PORT = 6881;
 
   private final I2PSnarkUtil _util;
   private final MetaInfo meta;
@@ -135,7 +136,7 @@ public class TrackerClient implements Runnable {
     this.coordinator = coordinator;
     this.snark = snark;
 
-    this.port = 6881; //(port == -1) ? 9 : port;
+    this.port = PORT; //(port == -1) ? 9 : port;
     this.infoHash = urlencode(snark.getInfoHash());
     this.peerID = urlencode(snark.getID());
     this.trackers = new ArrayList(2);
diff --git a/apps/i2psnark/java/src/org/klomp/snark/dht/KRPC.java b/apps/i2psnark/java/src/org/klomp/snark/dht/KRPC.java
index e9fca89b1f94019a66c0115a23856a07bddda23d..3782e28914d261d857de16195faa09601a5863ce 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/dht/KRPC.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/dht/KRPC.java
@@ -43,6 +43,7 @@ import net.i2p.util.I2PAppThread;
 import net.i2p.util.Log;
 import net.i2p.util.SimpleTimer2;
 
+import org.klomp.snark.TrackerClient;
 import org.klomp.snark.bencode.BDecoder;
 import org.klomp.snark.bencode.BEncoder;
 import org.klomp.snark.bencode.BEValue;
@@ -176,7 +177,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
         // Construct my NodeInfo
         // Pick ports over a big range to marginally increase security
         // If we add a search DHT, adjust to stay out of each other's way
-        _qPort = 2555 + ctx.random().nextInt(61111);
+        _qPort = TrackerClient.PORT + 10 + ctx.random().nextInt(65535 - 20 - TrackerClient.PORT);
         _rPort = _qPort + 1;
         if (SECURE_NID) {
             _myNID = NodeInfo.generateNID(session.getMyDestination().calculateHash(), _qPort, _context.random());
@@ -756,7 +757,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
         Map<String, Object> args = new HashMap();
         args.put("info_hash", ih.getData());
         // port ignored
-        args.put("port", Integer.valueOf(6881));
+        args.put("port", Integer.valueOf(TrackerClient.PORT));
         args.put("token", token.getData());
         map.put("a", args);
         // an announce need not be signed, we have a token