diff --git a/core/java/src/net/i2p/util/NativeBigInteger.java b/core/java/src/net/i2p/util/NativeBigInteger.java
index d2d53ada82b161565fd819e5a413f03bc6314bdb..a542bfbe3db1502c97d4c4b47737aaa193157a40 100644
--- a/core/java/src/net/i2p/util/NativeBigInteger.java
+++ b/core/java/src/net/i2p/util/NativeBigInteger.java
@@ -125,13 +125,19 @@ public class NativeBigInteger extends BigInteger {
     private final static String JBIGI_OPTIMIZATION_PENTIUM3   = "pentium3";
     private final static String JBIGI_OPTIMIZATION_PENTIUM4   = "pentium4";
     private final static String JBIGI_OPTIMIZATION_VIAC3      = "viac3";
-    /** below here @since 0.8.7 */
+    /**
+     * The 7 optimizations below here are since 0.8.7. Each of the 32-bit processors below
+     * needs an explicit fallback in getResourceList() or getMiddleName2().
+     * 64-bit processors will fallback to athlon64 and athlon in getResourceList().
+     * @since 0.8.7
+     */
     private final static String JBIGI_OPTIMIZATION_ATOM       = "atom";
     private final static String JBIGI_OPTIMIZATION_CORE2      = "core2";
     private final static String JBIGI_OPTIMIZATION_COREI      = "corei";
     private final static String JBIGI_OPTIMIZATION_GEODE      = "geode";
     private final static String JBIGI_OPTIMIZATION_NANO       = "nano";
     private final static String JBIGI_OPTIMIZATION_PENTIUMM   = "pentiumm";
+    /** all libjbibi builds are identical to pentium3, case handled in getMiddleName2() */
     private final static String JBIGI_OPTIMIZATION_VIAC32     = "viac32";
 
     private static final boolean _isWin = System.getProperty("os.name").startsWith("Win");
@@ -192,15 +198,20 @@ public class NativeBigInteger extends BigInteger {
             if (c instanceof VIACPUInfo){
             	VIACPUInfo viacpu = (VIACPUInfo) c;
             	if (viacpu.IsNanoCompatible())
-            		return JBIGI_OPTIMIZATION_NANO;
-            	if (viacpu.IsNanoCompatible())
-            		return JBIGI_OPTIMIZATION_VIAC3;
+            	    return JBIGI_OPTIMIZATION_NANO;
+            	return JBIGI_OPTIMIZATION_VIAC3;
             } else if(c instanceof AMDCPUInfo) {
                 AMDCPUInfo amdcpu = (AMDCPUInfo) c;
+                // Supported in CPUID, no GMP support
+                //if (amdcpu.IsBobcatCompatible())
+                //    return JBIGI_OPTIMIZATION_BOBCAT;
                 if (amdcpu.IsAthlon64Compatible())
                     return JBIGI_OPTIMIZATION_ATHLON64;
                 if (amdcpu.IsAthlonCompatible())
                     return JBIGI_OPTIMIZATION_ATHLON;
+                // FIXME lots of geodes, but GMP configures like a K6-3
+                if (amdcpu.IsGeodeCompatible())
+                    return JBIGI_OPTIMIZATION_GEODE;
                 if (amdcpu.IsK6_3_Compatible())
                     return JBIGI_OPTIMIZATION_K6_3;
                 if (amdcpu.IsK6_2_Compatible())
@@ -209,8 +220,16 @@ public class NativeBigInteger extends BigInteger {
                     return JBIGI_OPTIMIZATION_K6;
             } else if (c instanceof IntelCPUInfo) {
                 IntelCPUInfo intelcpu = (IntelCPUInfo) c;
+                if (intelcpu.IsCoreiCompatible())
+                    return JBIGI_OPTIMIZATION_COREI;
+                if (intelcpu.IsCore2Compatible())
+                    return JBIGI_OPTIMIZATION_CORE2;
                 if (intelcpu.IsPentium4Compatible())
                     return JBIGI_OPTIMIZATION_PENTIUM4;
+                if (intelcpu.IsAtomCompatible())
+                    return JBIGI_OPTIMIZATION_ATOM;
+                if (intelcpu.IsPentiumMCompatible())
+                    return JBIGI_OPTIMIZATION_PENTIUMM;
                 if (intelcpu.IsPentium3Compatible())
                     return JBIGI_OPTIMIZATION_PENTIUM3;
                 if (intelcpu.IsPentium2Compatible())
@@ -605,12 +624,18 @@ public class NativeBigInteger extends BigInteger {
             }
             // the preferred selection
             rv.add(_libPrefix + getMiddleName1() + primary + _libSuffix);
+
             // athlon64 is always a fallback for 64 bit
             if (_is64 && !primary.equals(JBIGI_OPTIMIZATION_ATHLON64))
                 rv.add(_libPrefix + getMiddleName1() + JBIGI_OPTIMIZATION_ATHLON64 + _libSuffix);
+
             // Add fallbacks for any 32-bit that were added 0.8.7 or later here
-            if (primary.equals(JBIGI_OPTIMIZATION_ATOM))
+            // FIXME lots of geodes, but GMP configures like a K6-3, so pentium3 is probably a good backup
+            if (primary.equals(JBIGI_OPTIMIZATION_ATOM) ||
+                primary.equals(JBIGI_OPTIMIZATION_PENTIUMM) ||
+                primary.equals(JBIGI_OPTIMIZATION_GEODE))
                 rv.add(_libPrefix + getMiddleName1() + JBIGI_OPTIMIZATION_PENTIUM3 + _libSuffix);
+
             // athlon is always a fallback for 64 bit, we have it for all architectures
             // and it should be much better than "none"
             if (_is64)
diff --git a/installer/lib/jbigi/libjbigi-linux-atom.so b/installer/lib/jbigi/libjbigi-linux-atom.so
new file mode 100644
index 0000000000000000000000000000000000000000..8de95258a4a406895f749ee8ec4ea874c7bac109
Binary files /dev/null and b/installer/lib/jbigi/libjbigi-linux-atom.so differ
diff --git a/installer/lib/jbigi/libjbigi-linux-atom_64.so b/installer/lib/jbigi/libjbigi-linux-atom_64.so
new file mode 100644
index 0000000000000000000000000000000000000000..069aeb855304fbf0dbf7e73762859759defab12e
Binary files /dev/null and b/installer/lib/jbigi/libjbigi-linux-atom_64.so differ
diff --git a/installer/lib/jbigi/libjbigi-linux-core2.so b/installer/lib/jbigi/libjbigi-linux-core2.so
new file mode 100644
index 0000000000000000000000000000000000000000..ce34a65ce43173b31771210284034bf7a2f266d6
Binary files /dev/null and b/installer/lib/jbigi/libjbigi-linux-core2.so differ
diff --git a/installer/lib/jbigi/libjbigi-linux-core2_64.so b/installer/lib/jbigi/libjbigi-linux-core2_64.so
new file mode 100644
index 0000000000000000000000000000000000000000..eab1ff757ca9ae63afb5e532cec7e6b0684a8995
Binary files /dev/null and b/installer/lib/jbigi/libjbigi-linux-core2_64.so differ
diff --git a/installer/lib/jbigi/libjbigi-linux-corei.so b/installer/lib/jbigi/libjbigi-linux-corei.so
new file mode 100644
index 0000000000000000000000000000000000000000..ce34a65ce43173b31771210284034bf7a2f266d6
Binary files /dev/null and b/installer/lib/jbigi/libjbigi-linux-corei.so differ
diff --git a/installer/lib/jbigi/libjbigi-linux-corei_64.so b/installer/lib/jbigi/libjbigi-linux-corei_64.so
new file mode 100644
index 0000000000000000000000000000000000000000..e72a3aaaa4e1f2430b3a6d8390448af6ca14bbff
Binary files /dev/null and b/installer/lib/jbigi/libjbigi-linux-corei_64.so differ
diff --git a/installer/lib/jbigi/libjbigi-linux-geode.so b/installer/lib/jbigi/libjbigi-linux-geode.so
new file mode 100644
index 0000000000000000000000000000000000000000..8865e6dcde5423beb2bd3e4fa840fd6aa93bd655
Binary files /dev/null and b/installer/lib/jbigi/libjbigi-linux-geode.so differ
diff --git a/installer/lib/jbigi/libjbigi-linux-nano.so b/installer/lib/jbigi/libjbigi-linux-nano.so
new file mode 100644
index 0000000000000000000000000000000000000000..16873d80c85fd7447e27d8ab65a8b4e97814fb86
Binary files /dev/null and b/installer/lib/jbigi/libjbigi-linux-nano.so differ
diff --git a/installer/lib/jbigi/libjbigi-linux-nano_64.so b/installer/lib/jbigi/libjbigi-linux-nano_64.so
new file mode 100644
index 0000000000000000000000000000000000000000..855e7d56307565ac1823d17ccb8a2a65289c3595
Binary files /dev/null and b/installer/lib/jbigi/libjbigi-linux-nano_64.so differ
diff --git a/installer/lib/jbigi/libjbigi-linux-pentiumm.so b/installer/lib/jbigi/libjbigi-linux-pentiumm.so
new file mode 100644
index 0000000000000000000000000000000000000000..336d5d12060aa6171f3037e26c3934148e47c067
Binary files /dev/null and b/installer/lib/jbigi/libjbigi-linux-pentiumm.so differ