Index: /applications/editors/josm/plugins/wmsplugin/src/wmsplugin/Grabber.java
===================================================================
--- /applications/editors/josm/plugins/wmsplugin/src/wmsplugin/Grabber.java	(revision 10682)
+++ /applications/editors/josm/plugins/wmsplugin/src/wmsplugin/Grabber.java	(revision 10683)
@@ -1,10 +1,5 @@
 package wmsplugin;
-import java.io.IOException;
-import org.openstreetmap.josm.data.Bounds;
-import org.openstreetmap.josm.data.projection.Projection;
-import java.util.ArrayList;
-import org.openstreetmap.josm.gui.MapView;
 
-public interface Grabber {
-	public void start();
+public interface Grabber extends Runnable {
+	
 }
Index: /applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSGrabber.java
===================================================================
--- /applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSGrabber.java	(revision 10682)
+++ /applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSGrabber.java	(revision 10683)
@@ -24,5 +24,5 @@
 
 
-public class WMSGrabber extends Thread implements Grabber{
+public class WMSGrabber implements Grabber {
 	protected String baseURL;
 
@@ -43,6 +43,4 @@
 		mv = _mv;
 		layer = _layer;
-		this.setDaemon(true);
-		this.setPriority(Thread.MIN_PRIORITY);
 	}
 
@@ -92,15 +90,11 @@
 
 	protected BufferedImage grab(URL url) throws IOException {
-			InputStream is = new ProgressInputStream(
-				url.openConnection(), null);
-			BufferedImage img;
-		synchronized (layer){ //download only one tile in one moment
-			if(!image.isVisible(mv)){
-				return null;
-			}
-			img = ImageIO.read(is);
-		}
-			is.close();
-			return img;
+		InputStream is = new ProgressInputStream(
+			url.openConnection(), null);
+		if(!image.isVisible(mv))
+			return null;
+		BufferedImage img = ImageIO.read(is);
+		is.close();
+		return img;
 	}
 }
Index: /applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSLayer.java
===================================================================
--- /applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSLayer.java	(revision 10682)
+++ /applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSLayer.java	(revision 10683)
@@ -36,4 +36,7 @@
 import org.openstreetmap.josm.gui.MapView;
 import java.util.ArrayList;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
 import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
 import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
@@ -63,4 +66,6 @@
 	protected String baseURL;
 	protected final int serializeFormatVersion = 3;
+	
+	private ExecutorService executor;
 
 	public WMSLayer() {
@@ -73,4 +78,6 @@
 		initializeImages();
 		this.baseURL = baseURL;
+		
+		executor = Executors.newFixedThreadPool(3);
 	}
 
@@ -147,5 +154,5 @@
 						img.image = null;
 						Grabber gr = WMSPlugin.getGrabber(baseURL, XYtoBounds(x,y), Main.main.proj, pixelPerDegree, img, mv, this);
-						gr.start();
+						executor.submit(gr);
 				}
 			}
@@ -160,8 +167,8 @@
 		for(int x = 0; x<dax; ++x)
 			for(int y = 0; y<day; ++y)
-					if(images[x][y]!=null){
-						v.visit(images[x][y].min);
-						v.visit(images[x][y].max);
-					}
+				if(images[x][y]!=null){
+					v.visit(images[x][y].min);
+					v.visit(images[x][y].max);
+				}
 	}
 
Index: /applications/editors/josm/plugins/wmsplugin/src/wmsplugin/YAHOOGrabber.java
===================================================================
--- /applications/editors/josm/plugins/wmsplugin/src/wmsplugin/YAHOOGrabber.java	(revision 10682)
+++ /applications/editors/josm/plugins/wmsplugin/src/wmsplugin/YAHOOGrabber.java	(revision 10683)
@@ -34,5 +34,5 @@
 
 
-public class YAHOOGrabber extends Thread implements Grabber{
+public class YAHOOGrabber implements Grabber{
 	protected String baseURL;
 	protected String browserCmd;
@@ -56,6 +56,4 @@
 		this.mv = _mv;
 		this.layer = _layer;
-		this.setDaemon(true);
-		this.setPriority(Thread.MIN_PRIORITY);
 	}
 
@@ -74,13 +72,11 @@
 				image.min = proj.latlon2eastNorth(b.min);
 				image.max = proj.latlon2eastNorth(b.max);
-				synchronized (layer) {
-					if(!image.isVisible(mv)){
-						image.downloadingStarted = false;
-						return;
-					}
-					Process browser = browse(url.toString());;
-					image.image =  new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
-					img = ImageIO.read(browser.getInputStream()).getScaledInstance(width, height, Image.SCALE_FAST);
+				if(!image.isVisible(mv)){ //don't download, if the image isn't visible already
+					image.downloadingStarted = false;
+					return;
 				}
+				Process browser = browse(url.toString());;
+				image.image =  new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
+				img = ImageIO.read(browser.getInputStream()).getScaledInstance(width, height, Image.SCALE_FAST);
 				image.image.getGraphics().drawImage(img, 0 , 0, null);
 
