diff --git a/core/java/src/net/i2p/crypto/HMAC256Generator.java b/core/java/src/net/i2p/crypto/HMAC256Generator.java
index c532843ab6..5d38e5e1de 100644
--- a/core/java/src/net/i2p/crypto/HMAC256Generator.java
+++ b/core/java/src/net/i2p/crypto/HMAC256Generator.java
@@ -4,12 +4,12 @@ import gnu.crypto.hash.Sha256Standalone;
import net.i2p.I2PAppContext;
-import org.bouncycastle.crypto.Digest;
-import org.bouncycastle.crypto.macs.I2PHMac;
+import org.bouncycastle.oldcrypto.Digest;
+import org.bouncycastle.oldcrypto.macs.I2PHMac;
/**
* Calculate the HMAC-SHA256 of a key+message. All the good stuff occurs
- * in {@link org.bouncycastle.crypto.macs.I2PHMac} and
+ * in {@link org.bouncycastle.oldcrypto.macs.I2PHMac} and
* {@link gnu.crypto.hash.Sha256Standalone}.
*
* This should be compatible with javax.crypto.Mac.getInstance("HmacSHA256")
diff --git a/core/java/src/net/i2p/crypto/HMACGenerator.java b/core/java/src/net/i2p/crypto/HMACGenerator.java
index b21e994a6d..b6f13b1e3d 100644
--- a/core/java/src/net/i2p/crypto/HMACGenerator.java
+++ b/core/java/src/net/i2p/crypto/HMACGenerator.java
@@ -16,13 +16,13 @@ import net.i2p.data.Hash;
import net.i2p.data.SessionKey;
import net.i2p.util.SimpleByteCache;
-import org.bouncycastle.crypto.digests.MD5Digest;
-import org.bouncycastle.crypto.macs.I2PHMac;
+import org.bouncycastle.oldcrypto.digests.MD5Digest;
+import org.bouncycastle.oldcrypto.macs.I2PHMac;
/**
* Calculate the HMAC-MD5-128 of a key+message. All the good stuff occurs
- * in {@link org.bouncycastle.crypto.macs.I2PHMac} and
- * {@link org.bouncycastle.crypto.digests.MD5Digest}.
+ * in {@link org.bouncycastle.oldcrypto.macs.I2PHMac} and
+ * {@link org.bouncycastle.oldcrypto.digests.MD5Digest}.
*
* Keys are always 32 bytes.
* This is used only by UDP.
diff --git a/core/java/src/org/bouncycastle/crypto/Digest.java b/core/java/src/org/bouncycastle/oldcrypto/Digest.java
similarity index 98%
rename from core/java/src/org/bouncycastle/crypto/Digest.java
rename to core/java/src/org/bouncycastle/oldcrypto/Digest.java
index 7ffa239547..0ecc1bd65d 100644
--- a/core/java/src/org/bouncycastle/crypto/Digest.java
+++ b/core/java/src/org/bouncycastle/oldcrypto/Digest.java
@@ -1,4 +1,4 @@
-package org.bouncycastle.crypto;
+package org.bouncycastle.oldcrypto;
/*
* Copyright (c) 2000 - 2004 The Legion Of The Bouncy Castle
* (http://www.bouncycastle.org)
diff --git a/core/java/src/org/bouncycastle/crypto/Mac.java b/core/java/src/org/bouncycastle/oldcrypto/Mac.java
similarity index 98%
rename from core/java/src/org/bouncycastle/crypto/Mac.java
rename to core/java/src/org/bouncycastle/oldcrypto/Mac.java
index 336f883635..fe27bc8d9c 100644
--- a/core/java/src/org/bouncycastle/crypto/Mac.java
+++ b/core/java/src/org/bouncycastle/oldcrypto/Mac.java
@@ -1,4 +1,4 @@
-package org.bouncycastle.crypto;
+package org.bouncycastle.oldcrypto;
/*
* Copyright (c) 2000 - 2004 The Legion Of The Bouncy Castle
* (http://www.bouncycastle.org)
diff --git a/core/java/src/org/bouncycastle/crypto/digests/GeneralDigest.java b/core/java/src/org/bouncycastle/oldcrypto/digests/GeneralDigest.java
similarity index 97%
rename from core/java/src/org/bouncycastle/crypto/digests/GeneralDigest.java
rename to core/java/src/org/bouncycastle/oldcrypto/digests/GeneralDigest.java
index 09b72f9e7a..fe4808db49 100644
--- a/core/java/src/org/bouncycastle/crypto/digests/GeneralDigest.java
+++ b/core/java/src/org/bouncycastle/oldcrypto/digests/GeneralDigest.java
@@ -1,4 +1,4 @@
-package org.bouncycastle.crypto.digests;
+package org.bouncycastle.oldcrypto.digests;
/*
* Copyright (c) 2000 - 2004 The Legion Of The Bouncy Castle
* (http://www.bouncycastle.org)
@@ -26,7 +26,7 @@ package org.bouncycastle.crypto.digests;
*
*/
-import org.bouncycastle.crypto.Digest;
+import org.bouncycastle.oldcrypto.Digest;
/**
* base implementation of MD4 family style digest as outlined in
diff --git a/core/java/src/org/bouncycastle/crypto/digests/MD5Digest.java b/core/java/src/org/bouncycastle/oldcrypto/digests/MD5Digest.java
similarity index 99%
rename from core/java/src/org/bouncycastle/crypto/digests/MD5Digest.java
rename to core/java/src/org/bouncycastle/oldcrypto/digests/MD5Digest.java
index 04ae6e1fd1..178ab94c00 100644
--- a/core/java/src/org/bouncycastle/crypto/digests/MD5Digest.java
+++ b/core/java/src/org/bouncycastle/oldcrypto/digests/MD5Digest.java
@@ -1,4 +1,4 @@
-package org.bouncycastle.crypto.digests;
+package org.bouncycastle.oldcrypto.digests;
/**
diff --git a/core/java/src/org/bouncycastle/crypto/macs/I2PHMac.java b/core/java/src/org/bouncycastle/oldcrypto/macs/I2PHMac.java
similarity index 97%
rename from core/java/src/org/bouncycastle/crypto/macs/I2PHMac.java
rename to core/java/src/org/bouncycastle/oldcrypto/macs/I2PHMac.java
index 19ff6fc5db..031f029551 100644
--- a/core/java/src/org/bouncycastle/crypto/macs/I2PHMac.java
+++ b/core/java/src/org/bouncycastle/oldcrypto/macs/I2PHMac.java
@@ -1,4 +1,4 @@
-package org.bouncycastle.crypto.macs;
+package org.bouncycastle.oldcrypto.macs;
/*
* Copyright (c) 2000 - 2004 The Legion Of The Bouncy Castle
* (http://www.bouncycastle.org)
@@ -31,8 +31,8 @@ import java.util.Arrays;
import net.i2p.util.SimpleByteCache;
-import org.bouncycastle.crypto.Digest;
-import org.bouncycastle.crypto.Mac;
+import org.bouncycastle.oldcrypto.Digest;
+import org.bouncycastle.oldcrypto.Mac;
/**
* HMAC implementation based on RFC2104
diff --git a/core/java/src/org/bouncycastle/oldcrypto/package.html b/core/java/src/org/bouncycastle/oldcrypto/package.html
new file mode 100644
index 0000000000..56de5a3940
--- /dev/null
+++ b/core/java/src/org/bouncycastle/oldcrypto/package.html
@@ -0,0 +1,14 @@
+
+
+
+This is from some very old version of bouncycastle, part of package org.bouncycastle.crypto.
+Android bundled something similar in pre-Gingerbread, but upgraded to a later, incompatible version
+in Gingerbread. As of Java 1.4 these are in javax.crypto - more or less.
+To avoid having to make two different versions of our Android app, we rename to org.bouncycastle.oldcrypto.
+
+Ref: javax.crypto
+and
+this android issue.
+
+
+
diff --git a/history.txt b/history.txt
index b96e008c44..6fd81750b9 100644
--- a/history.txt
+++ b/history.txt
@@ -1,3 +1,11 @@
+2012-08-23 zzz
+ * Crypto: Rename bouncycastle HMAC libs so they don't conflict
+ with older Android versions which bundle them
+ * NTCP: Reduce lock contention
+ * SSU:
+ - Don't relay or introduce to/from privileged ports
+ - Various spoof detections
+
2012-08-22 zzz
* NetDB: Add hash collision detection
* SimpleTimer2: Synchronization improvements (ticket #653)
diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java
index ea17ad55f3..e1f87e077d 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 = 15;
+ public final static long BUILD = 16;
/** for example "-test" */
public final static String EXTRA = "";