diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java
index 9dbe74836dd391cfd4830d54447254799ddcde36..83c3329b6b796a6eb3feca590788a3562d211df3 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java
@@ -511,11 +511,12 @@ public class PeerCoordinator implements PeerListener
           {
             // Unchoke some random other peer
             unchokePeer();
-            
-            // Don't count disconnected peers for the rarest-first calculations
-            for(Iterator iter = wantedPieces.iterator(); iter.hasNext(); ) {
-                Piece piece = (Piece)iter.next();
-                piece.removePeer(peer);                
+            synchronized(wantedPieces) {
+                // Don't count disconnected peers for the rarest-first calculations
+                for(Iterator iter = wantedPieces.iterator(); iter.hasNext(); ) {
+                    Piece piece = (Piece)iter.next();
+                    piece.removePeer(peer);
+                }
             }
           }
       }
diff --git a/apps/i2psnark/java/src/org/klomp/snark/Piece.java b/apps/i2psnark/java/src/org/klomp/snark/Piece.java
index c6189eb634d456d7632da6bf0c961e7e073d2565..6e3cb2344c01ad5e14270bd518bb11d18edbaae8 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/Piece.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/Piece.java
@@ -2,6 +2,7 @@ package org.klomp.snark;
 
 import java.util.Set;
 import java.util.HashSet;
+import java.util.Collections;
 
 public class Piece implements Comparable {
 
@@ -11,7 +12,7 @@ public class Piece implements Comparable {
     
     public Piece(int id) {
         this.id = id;
-        this.peers = new HashSet();
+        this.peers = Collections.synchronizedSet(new HashSet());
         this.requested = false;
     }