diff --git a/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java b/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java
index e75ef301e40ee35dc2b38cf308215782c342a439..96f3804358b911e2186598f75c19b8cf81faa214 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java
@@ -136,6 +136,7 @@ public class I2PSnarkUtil {
     
     public boolean configured() { return _configured; }
     
+    @SuppressWarnings({"unchecked", "rawtypes"})
     public void setI2CPConfig(String i2cpHost, int i2cpPort, Map opts) {
         if (i2cpHost != null)
             _i2cpHost = i2cpHost;
diff --git a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java
index bb1684e5f5fff0839840c4d6abffd01b2151fea0..03d4b8dc055425ad1f0364f68986df839df6d057 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java
@@ -2191,7 +2191,7 @@ public class SnarkManager implements CompleteListener {
      */
     private void addMagnets() {
         boolean changed = false;
-        for (Iterator iter = _config.keySet().iterator(); iter.hasNext(); ) {
+        for (Iterator<?> iter = _config.keySet().iterator(); iter.hasNext(); ) {
             String k = (String) iter.next();
             if (k.startsWith(PROP_META_MAGNET_PREFIX)) {
                 String b64 = k.substring(PROP_META_MAGNET_PREFIX.length());
diff --git a/apps/i2psnark/java/src/org/klomp/snark/dht/DHTTracker.java b/apps/i2psnark/java/src/org/klomp/snark/dht/DHTTracker.java
index 3b7b1d99c1f4a5b1a69eeab39870e3ddc902864e..784d8e6bff24fea169c8ea02de67ecfabf1a0fc6 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/dht/DHTTracker.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/dht/DHTTracker.java
@@ -106,6 +106,7 @@ class DHTTracker {
      *  @param noSeeds true if we do not want seeds in the result
      *  @return list or empty list (never null)
      */
+    @SuppressWarnings({"unchecked", "rawtypes"})
     List<Hash> getPeers(InfoHash ih, int max, boolean noSeeds) {
         Peers peers = _torrents.get(ih);
         if (peers == null || max <= 0)
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 58e0f39fca73397ccf946974ea77e82f697d011e..0e6da1c22b44da388a2cc28436916be21d46c8cb 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/dht/KRPC.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/dht/KRPC.java
@@ -243,6 +243,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
      *  @param maxWait how long to wait for each to reply (not total) must be > 0
      *  @param parallel how many outstanding at once (unimplemented, always 1)
      */
+    @SuppressWarnings("unchecked")
     private void explore(NID target, int maxNodes, long maxWait, int parallel) {
         List<NodeInfo> nodes = _knownNodes.findClosest(target, maxNodes);
         if (nodes.isEmpty()) {
@@ -327,6 +328,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
      *  @param noSeeds true if we do not want seeds in the result
      *  @return possibly empty (never null)
      */
+    @SuppressWarnings("unchecked")
     public Collection<Hash> getPeersAndAnnounce(byte[] ih, int max, long maxWait,
                                                 int annMax, long annMaxWait,
                                                 boolean isSeed, boolean noSeeds) {
@@ -858,6 +860,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
      *  @param repliable true for all but announce
      *  @return null on error
      */
+    @SuppressWarnings("unchecked")
     private ReplyWaiter sendQuery(NodeInfo nInfo, Map<String, Object> map, boolean repliable) {
         if (nInfo.equals(_myNodeInfo))
             throw new IllegalArgumentException("wtf don't send to ourselves");
@@ -907,6 +910,7 @@ public class KRPC implements I2PSessionMuxedListener, DHT {
      * @param toPort the query port, we will increment here
      *  @return success
      */
+    @SuppressWarnings("unchecked")
     private boolean sendResponse(NodeInfo nInfo, MsgID msgID, Map<String, Object> map) {
         if (nInfo.equals(_myNodeInfo))
             throw new IllegalArgumentException("wtf don't send to ourselves");
diff --git a/apps/jetty/java/src/net/i2p/jetty/JettyStart.java b/apps/jetty/java/src/net/i2p/jetty/JettyStart.java
index 6cac1cbae60346064bb24f418772b0225424ba86..c5f9e2aaffbd4018fad215835fa4c472f961e06f 100644
--- a/apps/jetty/java/src/net/i2p/jetty/JettyStart.java
+++ b/apps/jetty/java/src/net/i2p/jetty/JettyStart.java
@@ -72,6 +72,7 @@ public class JettyStart implements ClientApp {
     /**
      *  Modified from XmlConfiguration.main()
      */
+    @SuppressWarnings({"unchecked", "rawtypes"})
     public void parseArgs(String[] args) throws Exception {
         Properties properties=new Properties();
         XmlConfiguration last=null;
diff --git a/apps/jetty/java/src/net/i2p/servlet/filters/XSSRequestWrapper.java b/apps/jetty/java/src/net/i2p/servlet/filters/XSSRequestWrapper.java
index b8b8d39919984a5d3cc7289040401c683e951e64..54975964b0b135b2cee695889698f927baa88317 100644
--- a/apps/jetty/java/src/net/i2p/servlet/filters/XSSRequestWrapper.java
+++ b/apps/jetty/java/src/net/i2p/servlet/filters/XSSRequestWrapper.java
@@ -84,6 +84,7 @@ public class XSSRequestWrapper extends HttpServletRequestWrapper {
      *  Parameter names starting with "nofilter_" will not be filtered.
      */
     @Override
+    @SuppressWarnings({"unchecked", "rawtypes"})
     public Map getParameterMap() {
         Map rv = new HashMap();
         for (Enumeration keys = getParameterNames(); keys.hasMoreElements(); ) {
diff --git a/apps/jetty/java/src/org/mortbay/servlet/MultiPartRequest.java b/apps/jetty/java/src/org/mortbay/servlet/MultiPartRequest.java
index 1c964b8f1974d9c84e5f445d15f7ecb06331195a..1cc3973fdb9d8301839e9690a401b25f20a5ba33 100644
--- a/apps/jetty/java/src/org/mortbay/servlet/MultiPartRequest.java
+++ b/apps/jetty/java/src/org/mortbay/servlet/MultiPartRequest.java
@@ -219,6 +219,7 @@ public class MultiPartRequest
     }
 
     /* ------------------------------------------------------------ */
+    @SuppressWarnings("rawtypes")
     public Hashtable[] getMultipleParams(String name) 
     {
         List<Object> parts = _partMap.getValues(name);
diff --git a/apps/jetty/java/src/org/mortbay/util/ByteArrayPool.java b/apps/jetty/java/src/org/mortbay/util/ByteArrayPool.java
index 9a3f088fb6424798592105c59c8cd0f33e5de7f5..0c98dded196d1b7815315ef19fd330da7e124b65 100644
--- a/apps/jetty/java/src/org/mortbay/util/ByteArrayPool.java
+++ b/apps/jetty/java/src/org/mortbay/util/ByteArrayPool.java
@@ -29,7 +29,7 @@ public class ByteArrayPool
     public static final int __POOL_SIZE=
         Integer.getInteger("org.mortbay.util.ByteArrayPool.pool_size",8).intValue();
     
-    public static final ThreadLocal __pools=new BAThreadLocal();
+    public static final ThreadLocal<byte[][]> __pools = new BAThreadLocal();
     public static final AtomicInteger __slot = new AtomicInteger();
     
     /* ------------------------------------------------------------ */
@@ -39,7 +39,7 @@ public class ByteArrayPool
      */
     public static byte[] getByteArray(int size)
     {
-        byte[][] pool = (byte[][])__pools.get();
+        byte[][] pool = __pools.get();
         boolean full=true;
         for (int i=pool.length;i-->0;)
         {
@@ -63,7 +63,7 @@ public class ByteArrayPool
     /* ------------------------------------------------------------ */
     public static byte[] getByteArrayAtLeast(int minSize)
     {
-        byte[][] pool = (byte[][])__pools.get();
+        byte[][] pool = __pools.get();
         for (int i=pool.length;i-->0;)
         {
             if (pool[i]!=null && pool[i].length>=minSize)
@@ -84,7 +84,7 @@ public class ByteArrayPool
         if (b==null)
             return;
         
-        byte[][] pool = (byte[][])__pools.get();
+        byte[][] pool = __pools.get();
         for (int i=pool.length;i-->0;)
         {
             if (pool[i]==null)
@@ -103,9 +103,10 @@ public class ByteArrayPool
     
     /* ------------------------------------------------------------ */
     /* ------------------------------------------------------------ */
-    private static final class BAThreadLocal extends ThreadLocal
+    private static final class BAThreadLocal extends ThreadLocal<byte[][]>
     {
-        protected Object initialValue()
+        @Override
+        protected byte[][] initialValue()
             {
                 return new byte[__POOL_SIZE][];
             }
diff --git a/apps/susimail/src/src/i2p/susi/webmail/MailCache.java b/apps/susimail/src/src/i2p/susi/webmail/MailCache.java
index 45aa601b83955dc057130d28f501e01c79b659a3..278a4e120087a298a41ac843f9accbb40a55b031 100644
--- a/apps/susimail/src/src/i2p/susi/webmail/MailCache.java
+++ b/apps/susimail/src/src/i2p/susi/webmail/MailCache.java
@@ -109,6 +109,7 @@ class MailCache {
 	 * @param mode CACHE_ONLY to not pull from pop server
 	 * @return An e-mail or null
 	 */
+        @SuppressWarnings({"unchecked", "rawtypes"})
 	public Mail getMail(String uidl, FetchMode mode) {
 		
 		Mail mail = null, newMail = null;
@@ -163,6 +164,7 @@ class MailCache {
 	 * @return true if any were fetched
 	 * @since 0.9.13
 	 */
+        @SuppressWarnings({"unchecked", "rawtypes"})
 	public boolean getMail(FetchMode mode) {
 		if (mode == FetchMode.CACHE_ONLY)
 			throw new IllegalArgumentException();
diff --git a/apps/susimail/src/src/i2p/susi/webmail/WebMail.java b/apps/susimail/src/src/i2p/susi/webmail/WebMail.java
index 5f6975bc510bff9358693b972495915db2ed6d6b..9ff4b933b74cff3016131aba49029f1d7e97568d 100644
--- a/apps/susimail/src/src/i2p/susi/webmail/WebMail.java
+++ b/apps/susimail/src/src/i2p/susi/webmail/WebMail.java
@@ -288,7 +288,7 @@ public class WebMail extends HttpServlet
 	 */
 	private static class SenderSorter extends SorterBase {
 
-		private final Comparator collator = Collator.getInstance();
+		private final Comparator<Object> collator = Collator.getInstance();
 
 		public SenderSorter( MailCache mailCache )
 		{
@@ -307,7 +307,7 @@ public class WebMail extends HttpServlet
 	 * @author susi
 	 */
 	private static class SubjectSorter extends SorterBase {
-		private final Comparator collator = Collator.getInstance();
+		private final Comparator<Object> collator = Collator.getInstance();
 
 		public SubjectSorter( MailCache mailCache )
 		{
@@ -2299,7 +2299,7 @@ public class WebMail extends HttpServlet
 	/**
 	 *  first prev next last
 	 */
-	private static void showPageButtons(PrintWriter out, Folder folder) {
+	private static void showPageButtons(PrintWriter out, Folder<?> folder) {
 		out.println(
 			"<br>" +
 			( folder.isFirstPage() ?
diff --git a/core/java/src/net/i2p/client/naming/MetaNamingService.java b/core/java/src/net/i2p/client/naming/MetaNamingService.java
index ffae355a57b1c648e69058ab0df46ef168ebd025..5a4ebd275d299763f5dcb39f683944706a3f4a9b 100644
--- a/core/java/src/net/i2p/client/naming/MetaNamingService.java
+++ b/core/java/src/net/i2p/client/naming/MetaNamingService.java
@@ -41,8 +41,8 @@ public class MetaNamingService extends DummyNamingService {
         while (tok.hasMoreTokens()) {
             try {
                 Class<?> cls = Class.forName(tok.nextToken());
-                Constructor<?> con = cls.getConstructor(new Class[] { I2PAppContext.class });
-                addNamingService((NamingService)con.newInstance(new Object[] { context }), false);
+                Constructor<?> con = cls.getConstructor(I2PAppContext.class);
+                addNamingService((NamingService)con.newInstance(), false);
             } catch (Exception ex) {
             }
         }
diff --git a/core/java/src/net/i2p/client/naming/NamingService.java b/core/java/src/net/i2p/client/naming/NamingService.java
index be9e598c215f1f41a41367f49bc90ee3ef0f2217..78e04232d491b537e06676f43c49a97fa15901c4 100644
--- a/core/java/src/net/i2p/client/naming/NamingService.java
+++ b/core/java/src/net/i2p/client/naming/NamingService.java
@@ -537,7 +537,7 @@ public abstract class NamingService {
         try {
             Class<?> cls = Class.forName(impl);
             Constructor<?> con = cls.getConstructor(I2PAppContext.class);
-            instance = (NamingService)con.newInstance(new Object[] { context });
+            instance = (NamingService)con.newInstance(context);
         } catch (Exception ex) {
             Log log = context.logManager().getLog(NamingService.class);
             // Blockfile may throw RuntimeException but HostsTxt won't
diff --git a/core/java/src/net/i2p/crypto/CryptoConstants.java b/core/java/src/net/i2p/crypto/CryptoConstants.java
index 94facd366bb36bac43e4b676f5f7be6474acd842..b9e0327dd385009896a94bf651046dde3348e763 100644
--- a/core/java/src/net/i2p/crypto/CryptoConstants.java
+++ b/core/java/src/net/i2p/crypto/CryptoConstants.java
@@ -92,8 +92,8 @@ public class CryptoConstants {
         if (ECConstants.isBCAvailable()) {
             try {
                 Class<?> cls = Class.forName("org.bouncycastle.jce.spec.ElGamalParameterSpec");
-                Constructor<?> con = cls.getConstructor(new Class[] {BigInteger.class, BigInteger.class});
-                spec = (AlgorithmParameterSpec)con.newInstance(new Object[] {elgp, elgg});
+                Constructor<?> con = cls.getConstructor(BigInteger.class, BigInteger.class);
+                spec = (AlgorithmParameterSpec)con.newInstance(elgp, elgg);
                 //System.out.println("BC ElG spec loaded");
             } catch (Exception e) {
                 //System.out.println("BC ElG spec failed");
diff --git a/core/java/src/net/i2p/crypto/ECConstants.java b/core/java/src/net/i2p/crypto/ECConstants.java
index affe6e4e8b58fe94e42b43d9e78b224148f8cb11..d9b111e234e26df3235c6fe1146854913ccbadaa 100644
--- a/core/java/src/net/i2p/crypto/ECConstants.java
+++ b/core/java/src/net/i2p/crypto/ECConstants.java
@@ -42,8 +42,8 @@ class ECConstants {
         if (Security.getProvider("BC") == null) {
             try {
                 Class<?> cls = Class.forName("org.bouncycastle.jce.provider.BouncyCastleProvider");
-                Constructor<?> con = cls.getConstructor(new Class[0]);
-                Provider bc = (Provider)con.newInstance(new Object[0]);
+                Constructor<?> con = cls.getConstructor();
+                Provider bc = (Provider)con.newInstance();
                 Security.addProvider(bc);
                 log("Added BC provider");
                 loaded = true;
diff --git a/core/java/src/net/i2p/data/ByteArray.java b/core/java/src/net/i2p/data/ByteArray.java
index 1801b122e7256beb3eb42b8eafe2f97409f5f62c..50670c760d1299d59174ebb9daf34328d1020545 100644
--- a/core/java/src/net/i2p/data/ByteArray.java
+++ b/core/java/src/net/i2p/data/ByteArray.java
@@ -16,7 +16,7 @@ import java.io.Serializable;
  * maps, and the like.
  *
  */
-public class ByteArray implements Serializable, Comparable {
+public class ByteArray implements Serializable, Comparable<ByteArray> {
     private byte[] _data;
     private int _valid;
     private int _offset;
@@ -85,9 +85,8 @@ public class ByteArray implements Serializable, Comparable {
         return (llen == rlen) && DataHelper.eq(lhs, loff, rhs, roff, llen);
     }
     
-    public final int compareTo(Object obj) {
-        if (obj.getClass() != getClass()) throw new ClassCastException("invalid object: " + obj);
-        return DataHelper.compareTo(_data, ((ByteArray)obj).getData());
+    public final int compareTo(ByteArray ba) {
+        return DataHelper.compareTo(_data, ba.getData());
     }
     
     @Override
diff --git a/core/java/src/net/i2p/util/FileUtil.java b/core/java/src/net/i2p/util/FileUtil.java
index eeca4416feba3bcd2a644d4e41b8de995e795c23..296030818d892924a31b11d5738f755661470e40 100644
--- a/core/java/src/net/i2p/util/FileUtil.java
+++ b/core/java/src/net/i2p/util/FileUtil.java
@@ -300,9 +300,9 @@ public class FileUtil {
         if (!_failedOracle) {
             try {
                 Class<?> p200 = Class.forName("java.util.jar.Pack200", true, ClassLoader.getSystemClassLoader());
-                Method newUnpacker = p200.getMethod("newUnpacker", (Class[]) null);
+                Method newUnpacker = p200.getMethod("newUnpacker");
                 Object unpacker = newUnpacker.invoke(null,(Object[])  null);
-                Method unpack = unpacker.getClass().getMethod("unpack", new Class[] {InputStream.class, JarOutputStream.class});
+                Method unpack = unpacker.getClass().getMethod("unpack", InputStream.class, JarOutputStream.class);
                 // throws IOException
                 unpack.invoke(unpacker, new Object[] {in, out});
                 return;
@@ -321,9 +321,9 @@ public class FileUtil {
         if (!_failedApache) {
             try {
                 Class<?> p200 = Class.forName("org.apache.harmony.unpack200.Archive", true, ClassLoader.getSystemClassLoader());
-                Constructor<?> newUnpacker = p200.getConstructor(new Class[] {InputStream.class, JarOutputStream.class});
-                Object unpacker = newUnpacker.newInstance(new Object[] {in, out});
-                Method unpack = unpacker.getClass().getMethod("unpack", (Class[]) null);
+                Constructor<?> newUnpacker = p200.getConstructor(InputStream.class, JarOutputStream.class);
+                Object unpacker = newUnpacker.newInstance(in, out);
+                Method unpack = unpacker.getClass().getMethod("unpack");
                 // throws IOException or Pack200Exception
                 unpack.invoke(unpacker, (Object[]) null);
                 return;