diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java
index 8ffde7363b9fbcf158d3009e00fbad4be62ec1fa..f882967592fd7a65fadbb148159a4170f94a5008 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java
@@ -377,7 +377,10 @@ class PeerCoordinator implements PeerListener
   public boolean needOutboundPeers() {
         //return wantedBytes != 0 && needPeers();
         // minus one to make it a little easier for new peers to get in on large swarms
-        return wantedBytes != 0 && !halted && peers.size() < getMaxConnections() - 1;
+        return wantedBytes != 0 &&
+               !halted &&
+               peers.size() < getMaxConnections() - 1 &&
+               (storage == null || !storage.isChecking());
   }
   
   /**
@@ -945,6 +948,8 @@ class PeerCoordinator implements PeerListener
   {
     if (metainfo == null || storage == null)
         return true;
+    if (storage.isChecking())
+        return true;
     int piece = pp.getPiece();
     if (halted) {
       _log.info("Got while-halted piece " + piece + "/" + metainfo.getPieces() +" from " + peer + " for " + metainfo.getName());
@@ -968,6 +973,7 @@ class PeerCoordinator implements PeerListener
         
         try
           {
+            // this takes forever if complete, as it rechecks
             if (storage.putPiece(pp))
               {
                 if (_log.shouldLog(Log.INFO))
@@ -1173,6 +1179,8 @@ class PeerCoordinator implements PeerListener
   public PartialPiece getPartialPiece(Peer peer, BitField havePieces) {
       if (metainfo == null)
           return null;
+      if (storage != null && storage.isChecking())
+          return null;
       synchronized(wantedPieces) {
           // sorts by remaining bytes, least first
           Collections.sort(partialPieces);
diff --git a/apps/i2psnark/java/src/org/klomp/snark/Storage.java b/apps/i2psnark/java/src/org/klomp/snark/Storage.java
index 21e006f5e46b3662c1669ae089479cbbce4601d2..90f6f4b555425f94f2d7649c213dcaebdcef202e 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/Storage.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/Storage.java
@@ -982,6 +982,8 @@ public class Storage
 
   /**
    * Put the piece in the Storage if it is correct.
+   * Warning - takes a LONG time if complete as it does the recheck here.
+   * TODO thread the recheck?
    *
    * @return true if the piece was correct (sha metainfo hash
    * matches), otherwise false.
diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
index 7283b14be1d5e1da6ee078a02d5a6fd92c65ae6e..d926ee2d439cad821ea3c7088183fabf19e133d0 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
@@ -1153,7 +1153,7 @@ public class I2PSnarkServlet extends DefaultServlet {
             out.write("</a>");
 
         out.write("<td align=\"right\" class=\"snarkTorrentETA " + rowClass + "\">");
-        if(isRunning && remainingSeconds > 0)
+        if(isRunning && remainingSeconds > 0 && !snark.isChecking())
             out.write(DataHelper.formatDuration2(Math.max(remainingSeconds, 10) * 1000)); // (eta 6h)
         out.write("</td>\n\t");
         out.write("<td align=\"right\" class=\"snarkTorrentDownloaded " + rowClass + "\">");