diff --git a/build.properties b/build.properties
index d31351d0b824cb0f384338606aba67f950f38448..8ee39009bf7974679e9663f602e51b838fd40ed2 100644
--- a/build.properties
+++ b/build.properties
@@ -46,6 +46,27 @@ javac.version=1.6
 # This one keeps gcj a lot quieter
 #javac.compilerargs=-warn:-unchecked,raw,unused,serial
 
+#
+# Note to packagers, embedders, distributors:
+#
+# Strictly speaking, you must either use the compiler for the minimum Java version you are
+# targeting (default 1.6, see above), or specify a bootclasspath, which means you need
+# the JRE for the target version installed as well.
+#
+# However, in practice, you can compile with 1.7 and target 1.6 without specifying a bootclasspath,
+# and it all works fine.
+#
+# But you cannot compile with 1.8 and target 1.6 or 1.7 without bootclasspath,
+# or your users will get runtime errors.
+# Below is an example of a bootclasspath that works on Ubuntu.
+#
+# For more info:
+#    http://zzz.i2p/topics/1668
+#    https://gist.github.com/AlainODea/1375759b8720a3f9f094
+#
+#javac.compilerargs=-bootclasspath /usr/lib/jvm/java-6-openjdk-amd64/jre/lib/rt.jar:/usr/lib/jvm/java-6-openjdk-amd64/jre/lib/jce.jar
+
+
 ### UnitTests ##
 # Location of the libraries required for the ScalaTest tests.
 # Define this in override.properties or pass in on the command line.
diff --git a/router/java/src/net/i2p/router/tunnel/pool/BuildExecutor.java b/router/java/src/net/i2p/router/tunnel/pool/BuildExecutor.java
index 3ff080fd7fbbfcdc80f4adbec6834e2ed1d9bb52..b771589a1f7474f0d408be4a5b52571007bcc039 100644
--- a/router/java/src/net/i2p/router/tunnel/pool/BuildExecutor.java
+++ b/router/java/src/net/i2p/router/tunnel/pool/BuildExecutor.java
@@ -285,6 +285,26 @@ class BuildExecutor implements Runnable {
 
     public void run() {
         _isRunning = true;
+        try {
+            run2();
+        } catch (NoSuchMethodError nsme) {
+            // http://zzz.i2p/topics/1668
+            // https://gist.github.com/AlainODea/1375759b8720a3f9f094
+            // at ObjectCounter.objects()
+            String s = "Fatal error:" +
+                       "\nJava 8 compiler used with JRE version " + System.getProperty("java.version") +
+                       " and no bootclasspath specified." +
+                       "\nUpdate to Java 8 or contact packager." +
+                       "\nStop I2P now, it will not build tunnels.";
+            _log.log(Log.CRIT, s, nsme);
+            System.out.println(s);
+            throw nsme;
+        } finally {
+            _isRunning = false;
+        }
+    }
+
+    private void run2() {
         List<TunnelPool> wanted = new ArrayList<TunnelPool>(MAX_CONCURRENT_BUILDS);
         List<TunnelPool> pools = new ArrayList<TunnelPool>(8);
         
@@ -423,7 +443,6 @@ class BuildExecutor implements Runnable {
         
         if (_log.shouldLog(Log.WARN))
             _log.warn("Done building");
-        _isRunning = false;
     }
     
     /**