diff --git a/apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java b/apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java
index 17579af0b23c56f02247f114e532821bc1bf34a9..c9af416ec76324409627625ceb24657b8b55bd15 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java
@@ -73,6 +73,7 @@ public class TrackerClient implements Runnable {
   private static final String NOT_REGISTERED  = "torrent not registered"; //bytemonsoon
   private static final String NOT_REGISTERED_2  = "torrent not found";    // diftracker
   private static final String NOT_REGISTERED_3  = "torrent unauthorised"; // vuze
+  private static final String ERROR_GOT_HTML  = "received html";             // fake return
   /** this is our equivalent to router.utorrent.com for bootstrap */
   private static final String DEFAULT_BACKUP_TRACKER = "http://tracker.welterde.i2p/a";
 
@@ -579,7 +580,7 @@ public class TrackerClient implements Runnable {
                       snark.setTrackerProblems(tr.trackerProblems);
                     String tplc = tr.trackerProblems.toLowerCase(Locale.US);
                     if (tplc.startsWith(NOT_REGISTERED) || tplc.startsWith(NOT_REGISTERED_2) ||
-                        tplc.startsWith(NOT_REGISTERED_3)) {
+                        tplc.startsWith(NOT_REGISTERED_3) || tplc.startsWith(ERROR_GOT_HTML)) {
                       // Give a guy some time to register it if using opentrackers too
                       //if (trckrs.size() == 1) {
                       //  stop = true;
@@ -587,6 +588,7 @@ public class TrackerClient implements Runnable {
                       //} else { // hopefully each on the opentrackers list is really open
                         if (tr.registerFails++ > MAX_REGISTER_FAILS ||
                             !completed ||              // no use retrying if we aren't seeding
+                            tplc.startsWith(ERROR_GOT_HTML) ||   // fake msg from doRequest()
                             (!tr.isPrimary && tr.registerFails > MAX_REGISTER_FAILS / 2))
                           if (_log.shouldLog(Log.WARN))
                               _log.warn("Not longer announcing to " + tr.announce + " : " +
@@ -803,10 +805,15 @@ public class TrackerClient implements Runnable {
     tr.lastRequestTime = System.currentTimeMillis();
     // Don't wait for a response to stopped when shutting down
     boolean fast = _fastUnannounce && event.equals(STOPPED_EVENT);
-    byte[] fetched = _util.get(s, true, fast ? -1 : 0, small ? 128 : 1024, small ? 1024 : 8*1024);
-    if (fetched == null) {
-        throw new IOException("Error fetching " + s);
-    }
+    byte[] fetched = _util.get(s, true, fast ? -1 : 0, small ? 128 : 1024, small ? 1024 : 32*1024);
+    if (fetched == null)
+        throw new IOException("Error fetching");
+    if (fetched.length == 0)
+        throw new IOException("No data");
+    // The HTML check only works if we didn't exceed the maxium fetch size specified in get(),
+    // otherwise we already threw an IOE.
+    if (fetched[0] == '<')
+        throw new IOException(ERROR_GOT_HTML);
     
         InputStream in = new ByteArrayInputStream(fetched);