diff --git a/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java b/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java
index 1f261b97dc89979b587222492bff5df1be5e095e..24633f495ccd21ffe2b8cd57ffcb6870f24a0bc9 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java
@@ -832,7 +832,7 @@ public class PluginStarter implements Runnable {
      */
     private static void addPath(URL u) throws Exception {
         URLClassLoader urlClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
-        Class urlClass = URLClassLoader.class;
+        Class<URLClassLoader> urlClass = URLClassLoader.class;
         Method method = urlClass.getDeclaredMethod("addURL", new Class[]{URL.class});
         method.setAccessible(true);
         method.invoke(urlClassLoader, new Object[]{u});
diff --git a/apps/susimail/src/src/i2p/susi/webmail/encoding/EncodingFactory.java b/apps/susimail/src/src/i2p/susi/webmail/encoding/EncodingFactory.java
index 76723ef910057d37d41a7753281e560a526e16df..fbc6d1a4b86223455253f87acf722e150af28a4f 100644
--- a/apps/susimail/src/src/i2p/susi/webmail/encoding/EncodingFactory.java
+++ b/apps/susimail/src/src/i2p/susi/webmail/encoding/EncodingFactory.java
@@ -46,7 +46,7 @@ public class EncodingFactory {
 			String[] classNames = list.split( ";" );
 			for( int i = 0; i < classNames.length; i++ ) {
 				try {
-					Class c = Class.forName( classNames[i] );
+					Class<?> c = Class.forName( classNames[i] );
 					Encoding e = (Encoding)c.newInstance();
 					encodings.put( e.getName(), e );
 					Debug.debug( Debug.DEBUG, "Registered " + e.getClass().getName() );
diff --git a/core/java/src/net/i2p/client/naming/MetaNamingService.java b/core/java/src/net/i2p/client/naming/MetaNamingService.java
index 03e0ef7f9bc959e593de9ab2bd13562c108c1be4..fab433a8dfc35f59a255dfc1d7492022a0be8759 100644
--- a/core/java/src/net/i2p/client/naming/MetaNamingService.java
+++ b/core/java/src/net/i2p/client/naming/MetaNamingService.java
@@ -38,8 +38,8 @@ public class MetaNamingService extends DummyNamingService {
         _services = new CopyOnWriteArrayList<NamingService>();
         while (tok.hasMoreTokens()) {
             try {
-                Class cls = Class.forName(tok.nextToken());
-                Constructor con = cls.getConstructor(new Class[] { I2PAppContext.class });
+                Class<?> cls = Class.forName(tok.nextToken());
+                Constructor<?> con = cls.getConstructor(new Class[] { I2PAppContext.class });
                 addNamingService((NamingService)con.newInstance(new Object[] { context }), 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 ceade7e317cebf6a9112edb0e3e3ff23baa3440f..001cc421b9b44c32bcc358ea2f765892a64547e4 100644
--- a/core/java/src/net/i2p/client/naming/NamingService.java
+++ b/core/java/src/net/i2p/client/naming/NamingService.java
@@ -462,8 +462,8 @@ public abstract class NamingService {
         NamingService instance = null;
         String impl = context.getProperty(PROP_IMPL, DEFAULT_IMPL);
         try {
-            Class cls = Class.forName(impl);
-            Constructor con = cls.getConstructor(new Class[] { I2PAppContext.class });
+            Class<?> cls = Class.forName(impl);
+            Constructor<?> con = cls.getConstructor(new Class[] { I2PAppContext.class });
             instance = (NamingService)con.newInstance(new Object[] { context });
         } catch (Exception ex) {
             Log log = context.logManager().getLog(NamingService.class);
diff --git a/core/java/src/net/i2p/crypto/ECConstants.java b/core/java/src/net/i2p/crypto/ECConstants.java
index 2e9de224d8d612195d8c80e61d0e1ad758e64246..b1d7e8d1222c82f8daf4842cbcf520ae8cbac9ae 100644
--- a/core/java/src/net/i2p/crypto/ECConstants.java
+++ b/core/java/src/net/i2p/crypto/ECConstants.java
@@ -41,8 +41,8 @@ class ECConstants {
         boolean loaded;
         if (Security.getProvider("BC") == null) {
             try {
-                Class cls = Class.forName("org.bouncycastle.jce.provider.BouncyCastleProvider");
-                Constructor con = cls.getConstructor(new Class[0]);
+                Class<?> cls = Class.forName("org.bouncycastle.jce.provider.BouncyCastleProvider");
+                Constructor<?> con = cls.getConstructor(new Class[0]);
                 Provider bc = (Provider)con.newInstance(new Object[0]);
                 Security.addProvider(bc);
                 log("Added BC provider");
diff --git a/core/java/src/net/i2p/util/FileUtil.java b/core/java/src/net/i2p/util/FileUtil.java
index 382be5441616521b46ae62664cb04fec18061bc9..0e77b9eb183d7aed9ec3d84c7265e13f54b60e09 100644
--- a/core/java/src/net/i2p/util/FileUtil.java
+++ b/core/java/src/net/i2p/util/FileUtil.java
@@ -295,7 +295,7 @@ public class FileUtil {
         //Pack200.newUnpacker().unpack(in, out);
         if (!_failedOracle) {
             try {
-                Class p200 = Class.forName("java.util.jar.Pack200", true, ClassLoader.getSystemClassLoader());
+                Class<?> p200 = Class.forName("java.util.jar.Pack200", true, ClassLoader.getSystemClassLoader());
                 Method newUnpacker = p200.getMethod("newUnpacker", (Class[]) null);
                 Object unpacker = newUnpacker.invoke(null,(Object[])  null);
                 Method unpack = unpacker.getClass().getMethod("unpack", new Class[] {InputStream.class, JarOutputStream.class});
@@ -316,8 +316,8 @@ public class FileUtil {
         //(new Archive(in, out)).unpack();
         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});
+                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);
                 // throws IOException or Pack200Exception
diff --git a/core/java/src/net/i2p/util/Log.java b/core/java/src/net/i2p/util/Log.java
index 42f54b06aa0fe8cdeaae12b6a3c0df2330ac0962..5f6d06e5197c0afddff421dcab6395419a76211b 100644
--- a/core/java/src/net/i2p/util/Log.java
+++ b/core/java/src/net/i2p/util/Log.java
@@ -25,7 +25,7 @@ import net.i2p.I2PAppContext;
  * @author jrandom
  */
 public class Log {
-    private final Class _class;
+    private final Class<?> _class;
     private final String _className;
     private final String _name;
     private int _minPriority;
@@ -75,7 +75,7 @@ public class Log {
      *  Warning - not recommended.
      *  Use I2PAppContext.getGlobalContext().logManager().getLog(cls)
      */
-    public Log(Class cls) {
+    public Log(Class<?> cls) {
         this(I2PAppContext.getGlobalContext().logManager(), cls, null);
         _manager.addLog(this);
     }
@@ -89,7 +89,7 @@ public class Log {
         _manager.addLog(this);
     }
 
-    Log(LogManager manager, Class cls) {
+    Log(LogManager manager, Class<?> cls) {
         this(manager, cls, null);
     }
 
@@ -97,7 +97,7 @@ public class Log {
         this(manager, null, name);
     }
 
-    Log(LogManager manager, Class cls, String name) {
+    Log(LogManager manager, Class<?> cls, String name) {
         _manager = manager;
         _class = cls;
         _className = cls != null ? cls.getName() : null;
@@ -229,7 +229,7 @@ public class Log {
     /** @return the LogScope (private class) */
     public Object getScope() { return _scope; }
 
-    static String getScope(String name, Class cls) { 
+    static String getScope(String name, Class<?> cls) { 
         if ( (name == null) && (cls == null) ) return "f00";
         if (cls == null) return name;
         if (name == null) return cls.getName();
@@ -239,7 +239,7 @@ public class Log {
     private static final class LogScope {
         private final String _scopeCache;
 
-        public LogScope(String name, Class cls) {
+        public LogScope(String name, Class<?> cls) {
             _scopeCache = getScope(name, cls);
         }
 
diff --git a/core/java/src/net/i2p/util/LogManager.java b/core/java/src/net/i2p/util/LogManager.java
index f9a98757fbfa9708b5f18dc790aaeed2852b0946..871037b65d5b5f72ce7f95c818b1e54f6509811d 100644
--- a/core/java/src/net/i2p/util/LogManager.java
+++ b/core/java/src/net/i2p/util/LogManager.java
@@ -166,9 +166,9 @@ public class LogManager {
         t.start();
     }
 
-    public Log getLog(Class cls) { return getLog(cls, null); }
+    public Log getLog(Class<?> cls) { return getLog(cls, null); }
     public Log getLog(String name) { return getLog(null, name); }
-    public Log getLog(Class cls, String name) {
+    public Log getLog(Class<?> cls, String name) {
         String scope = Log.getScope(name, cls);
         boolean isNew = false;
         Log rv = _logs.get(scope);
diff --git a/core/java/src/net/i2p/util/LogRecord.java b/core/java/src/net/i2p/util/LogRecord.java
index cf6b34728f7c617d1a6bef7d1c0267f7a7828918..5d45314a861400b7bdb4d3788cb844e0903b2c15 100644
--- a/core/java/src/net/i2p/util/LogRecord.java
+++ b/core/java/src/net/i2p/util/LogRecord.java
@@ -15,14 +15,14 @@ package net.i2p.util;
  */
 class LogRecord {
     private final long _date;
-    private final Class _source;
+    private final Class<?> _source;
     private final String _name;
     private final String _threadName;
     private final int _priority;
     private final String _message;
     private final Throwable _throwable;
 
-    public LogRecord(Class src, String name, String threadName, int priority, String msg, Throwable t) {
+    public LogRecord(Class<?> src, String name, String threadName, int priority, String msg, Throwable t) {
         _date = Clock.getInstance().now();
         _source = src;
         _name = name;
@@ -36,7 +36,7 @@ class LogRecord {
         return _date;
     }
 
-    public Class getSource() {
+    public Class<?> getSource() {
         return _source;
     }
 
diff --git a/core/java/src/net/i2p/util/SystemVersion.java b/core/java/src/net/i2p/util/SystemVersion.java
index 80114d0a7e27582349637f54a2d40820484ccf6d..639bab00b653d8fc6e3837b08fc4e87c8e6d9398 100644
--- a/core/java/src/net/i2p/util/SystemVersion.java
+++ b/core/java/src/net/i2p/util/SystemVersion.java
@@ -47,7 +47,7 @@ public abstract class SystemVersion {
         int sdk = 0;
         if (_isAndroid) {
             try {
-                Class ver = Class.forName("android.os.Build.VERSION", true, ClassLoader.getSystemClassLoader());
+                Class<?> ver = Class.forName("android.os.Build.VERSION", true, ClassLoader.getSystemClassLoader());
                 Field field = ver.getField("SDK_INT");
                 sdk = field.getInt(null);
             } catch (Exception e) {}
diff --git a/router/java/src/net/i2p/router/JobQueue.java b/router/java/src/net/i2p/router/JobQueue.java
index ffe74725afb617f855f77fce670b688cef0784ed..f5578cc179a11bdc217919fc64af6fb8501a958a 100644
--- a/router/java/src/net/i2p/router/JobQueue.java
+++ b/router/java/src/net/i2p/router/JobQueue.java
@@ -277,7 +277,7 @@ public class JobQueue {
         if (_maxWaitingJobs <= 0) return false; // dont ever drop jobs
         if (!_allowParallelOperation) return false; // dont drop during startup [duh]
         if (numReady > _maxWaitingJobs) {
-            Class cls = job.getClass();
+            Class<? extends Job> cls = job.getClass();
             // lets not try to drop too many tunnel messages...
             //if (cls == HandleTunnelMessageJob.class)
             //    return true;
diff --git a/router/java/src/net/i2p/router/startup/LoadClientAppsJob.java b/router/java/src/net/i2p/router/startup/LoadClientAppsJob.java
index e34a71173ac06ac9095f9862ff6f3d866273fc3a..2cd538fe16ff0d9d8db684e3206170d400b70cb5 100644
--- a/router/java/src/net/i2p/router/startup/LoadClientAppsJob.java
+++ b/router/java/src/net/i2p/router/startup/LoadClientAppsJob.java
@@ -197,7 +197,7 @@ public class LoadClientAppsJob extends JobImpl {
             log.info("Loading up the client application " + clientName + ": " + className + " " + Arrays.toString(args));
         if (args == null)
             args = new String[0];
-        Class cls = Class.forName(className, true, cl);
+        Class<?> cls = Class.forName(className, true, cl);
         Method method = cls.getMethod("main", new Class[] { String[].class });
         method.invoke(cls, new Object[] { args });
     }
@@ -264,15 +264,15 @@ public class LoadClientAppsJob extends JobImpl {
 
         public void run() {
             try {
-                Class cls = Class.forName(_className, true, _cl);
+                Class<?> cls = Class.forName(_className, true, _cl);
                 if (isRouterApp(cls)) {
-                    Constructor con = cls.getConstructor(RouterContext.class, ClientAppManager.class, String[].class);
+                    Constructor<?> con = cls.getConstructor(RouterContext.class, ClientAppManager.class, String[].class);
                     RouterAppManager mgr = _ctx.clientAppManager();
                     Object[] conArgs = new Object[] {_ctx, _ctx.clientAppManager(), _args};
                     RouterApp app = (RouterApp) con.newInstance(conArgs);
                     mgr.addAndStart(app, _args);
                 } else if (isClientApp(cls)) {
-                    Constructor con = cls.getConstructor(I2PAppContext.class, ClientAppManager.class, String[].class);
+                    Constructor<?> con = cls.getConstructor(I2PAppContext.class, ClientAppManager.class, String[].class);
                     RouterAppManager mgr = _ctx.clientAppManager();
                     Object[] conArgs = new Object[] {_ctx, _ctx.clientAppManager(), _args};
                     ClientApp app = (ClientApp) con.newInstance(conArgs);
@@ -288,17 +288,17 @@ public class LoadClientAppsJob extends JobImpl {
                 _log.info("Done running client application " + _appName);
         }
 
-        private static boolean isRouterApp(Class cls) {
+        private static boolean isRouterApp(Class<?> cls) {
             return isInterface(cls, RouterApp.class);
         }
 
-        private static boolean isClientApp(Class cls) {
+        private static boolean isClientApp(Class<?> cls) {
             return isInterface(cls, ClientApp.class);
         }
 
-        private static boolean isInterface(Class cls, Class intfc) {
+        private static boolean isInterface(Class<?> cls, Class<?> intfc) {
             try {
-                Class[] intfcs = cls.getInterfaces();
+                Class<?>[] intfcs = cls.getInterfaces();
                 for (int i = 0; i < intfcs.length; i++) {
                     if (intfcs[i] == intfc)
                         return true;