diff --git a/core/java/src/net/i2p/data/DataHelper.java b/core/java/src/net/i2p/data/DataHelper.java
index fdd560243f44292def0abf20cc4bf354d88eca68..65542028243e3d4418284a1f1c8ec4c8ffa8cc67 100644
--- a/core/java/src/net/i2p/data/DataHelper.java
+++ b/core/java/src/net/i2p/data/DataHelper.java
@@ -798,12 +798,20 @@ public class DataHelper {
      * 
      */
     public static int hashCode(byte b[]) {
+        // Java 5 now has its own method, and the old way
+        // is horrible for arrays smaller than 32.
+        // otoh, for sizes >> 32, java's method may be too slow
         int rv = 0;
         if (b != null) {
-            for (int i = 0; i < b.length && i < 32; i++)
-                rv += (b[i] << i);
+            if (b.length <= 32) {
+                rv = Arrays.hashCode(b);
+            } else {
+                for (int i = 0; i < b.length && i < 32; i++)
+                    rv ^= (b[i] << i);  // xor better than + in tests
+            }
         }
         return rv;
+
     }
 
     /**