Index: plications/editors/josm/plugins/wmsplugin/src/wmsplugin/DownloadWMSTask.java
===================================================================
--- /applications/editors/josm/plugins/wmsplugin/src/wmsplugin/DownloadWMSTask.java	(revision 10703)
+++ 	(revision )
@@ -1,47 +1,0 @@
-package wmsplugin;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import java.io.IOException;
-import java.util.*;
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.actions.DownloadAction;
-import org.openstreetmap.josm.gui.PleaseWaitRunnable;
-import org.openstreetmap.josm.gui.MapView;
-import org.openstreetmap.josm.data.Bounds;
-import org.openstreetmap.josm.data.coor.LatLon;
-import org.openstreetmap.josm.gui.layer.Layer;
-
-public class DownloadWMSTask extends PleaseWaitRunnable {
-
-	private WMSLayer wmsLayer;
-	private Bounds bounds;
-	private double pixelPerDegree;
-	
-	public DownloadWMSTask(WMSLayer wmsLayer, Bounds bounds, double pixelPerDegree) {
-		super(tr("Downloading {0}", wmsLayer.name));
-
-		this.wmsLayer = wmsLayer;
-		this.bounds = bounds;
-		this.pixelPerDegree = pixelPerDegree;
-	}
-	
-	@Override public void realRun() throws IOException {
-		Main.pleaseWaitDlg.currentAction.setText(tr("Contacting WMS Server..."));
-		wmsLayer.grab(bounds, pixelPerDegree);
-	}
-
-	@Override protected void cancel() {}
-	@Override protected void finish() {}
-
-	public static void download(WMSLayer wmsLayer) {
-		MapView mv = Main.map.mapView;
-
-		Bounds b = new Bounds(
-			mv.getLatLon(0, mv.getHeight()),
-			mv.getLatLon(mv.getWidth(), 0));
-
-		Main.worker.execute(new DownloadWMSTask(wmsLayer, b,
-			mv.getWidth() / (b.max.lon() - b.min.lon())));
-	}
-}
Index: /applications/editors/josm/plugins/wmsplugin/src/wmsplugin/Map_Rectifier_WMSmenuAction.java
===================================================================
--- /applications/editors/josm/plugins/wmsplugin/src/wmsplugin/Map_Rectifier_WMSmenuAction.java	(revision 10703)
+++ /applications/editors/josm/plugins/wmsplugin/src/wmsplugin/Map_Rectifier_WMSmenuAction.java	(revision 10704)
@@ -28,6 +28,6 @@
 			"&srs=EPSG:4326&Service=WMS&Version=1.1.0&Request=GetMap&format=image/png";
 
-			DownloadWMSTask.download(WMSDownloadAction.getLayer(
-				new WMSInfo(tr("rectifier id={0}",newid), newURL, -1)));
+			WMSLayer wmsLayer = new WMSLayer(tr("rectifier id={0}",newid), newURL);
+			Main.main.addLayer(wmsLayer);
 		}
 	}
Index: /applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSDownloadAction.java
===================================================================
--- /applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSDownloadAction.java	(revision 10703)
+++ /applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSDownloadAction.java	(revision 10704)
@@ -23,23 +23,9 @@
 		System.out.println(info.url);
 		
-		WMSLayer wmsLayer = getLayer(info);
-		MapView mv = Main.map.mapView;
-
-		Bounds b = new Bounds(
-			mv.getLatLon(0, mv.getHeight()),
-			mv.getLatLon(mv.getWidth(), 0));
-		double pixelPerDegree = mv.getWidth() / (b.max.lon() - b.min.lon());
-
-		wmsLayer.grab(b, pixelPerDegree);
+		WMSLayer wmsLayer = new WMSLayer(info.name, info.url);
+		Main.main.addLayer(wmsLayer);
 	}
 
 	public static WMSLayer getLayer(WMSInfo info) {
-		// simply check if we already have a layer created. if not, create; if yes, reuse.
-		for (Layer l : Main.main.map.mapView.getAllLayers()) {
-			if (l instanceof WMSLayer && l.name.equals(info.name)) {
-				return (WMSLayer) l;
-			}
-		}
-
 		// FIXME: move this to WMSPlugin/WMSInfo/preferences.
 		WMSLayer wmsLayer = new WMSLayer(info.name, info.url);
@@ -48,3 +34,2 @@
 	}
 };
-
Index: /applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSLayer.java
===================================================================
--- /applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSLayer.java	(revision 10703)
+++ /applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSLayer.java	(revision 10704)
@@ -49,4 +49,6 @@
 
 	public int messageNum = 5; //limit for messages per layer
+	protected MapView mv;
+	protected String resolution;
 	protected boolean stopAfterPaint = false;
 	protected int ImageSize = 500;
@@ -56,5 +58,5 @@
 	protected double pixelPerDegree;
 	protected GeorefImage[][] images = new GeorefImage[dax][day];
-        JCheckBoxMenuItem startstop = new JCheckBoxMenuItem(tr("Automatic downloading"), true);
+	JCheckBoxMenuItem startstop = new JCheckBoxMenuItem(tr("Automatic downloading"), true);
 
 	protected String baseURL;
@@ -66,4 +68,5 @@
 		this(tr("Blank Layer"), null);
 		initializeImages();
+		mv = Main.map.mapView;
 	}
 
@@ -72,6 +75,12 @@
 		initializeImages();
 		this.baseURL = baseURL;
+		mv = Main.map.mapView;
+		getPPD();
 		
 		executor = Executors.newFixedThreadPool(3);
+	}
+
+	public void getPPD(){
+		pixelPerDegree = mv.getWidth() / (bounds().max.lon() - bounds().min.lon());
 	}
 
@@ -83,23 +92,20 @@
 	}
 
-	public void grab(Bounds b, double _pixelPerDegree) {
-		if (baseURL == null) return;
-		//set resolution
-		if(startstop.isSelected() || Math.round(pixelPerDegree/10000) != Math.round(_pixelPerDegree/10000))
-			initializeImages();
-		pixelPerDegree = _pixelPerDegree;
-		if(!startstop.isSelected()) stopAfterPaint = true;
-		startstop.setSelected(true);
-	}
-
 	@Override public Icon getIcon() {
 		return icon;
 	}
 
+	public String scale(){
+		LatLon ll1 = mv.getLatLon(0,0);
+		LatLon ll2 = mv.getLatLon(100,0);
+		double dist = ll1.greatCircleDistance(ll2);
+		return dist > 1000 ? (Math.round(dist/100)/10.0)+" km" : Math.round(dist*10)/10+" m";
+	}
+
 	@Override public String getToolTipText() {
 		if(startstop.isSelected())
-			return tr("WMS layer ({0}), automaticaly downloading in zoom {1}", name, Math.round(pixelPerDegree/10000));
+			return tr("WMS layer ({0}), automaticaly downloading in zoom {1}", name, resolution);
 		else
-			return tr("WMS layer ({0}), downloading in zoom {1}", name, Math.round(pixelPerDegree/10000));
+			return tr("WMS layer ({0}), downloading in zoom {1}", name, resolution);
 	}
 
@@ -125,4 +131,5 @@
 
 	@Override public void paint(Graphics g, final MapView mv) {
+		if(baseURL == null) return;
 		Bounds b = new Bounds(
 			mv.getLatLon(0, mv.getHeight()),
@@ -152,8 +159,4 @@
 			}
 		}
-		if(stopAfterPaint){
-			startstop.setSelected(false);
-			stopAfterPaint = false;
-		}
 	}
 
@@ -180,7 +183,8 @@
 				new JSeparator(),
 				startstop,
+				new JMenuItem(new changeResolutionAction()),
 				new JSeparator(),
-				new JMenuItem(new LayerListPopup.InfoAction(this))};
-
+				new JMenuItem(new LayerListPopup.InfoAction(this))
+		};
 	}
 
@@ -196,4 +200,15 @@
 	}
 
+	public class changeResolutionAction extends AbstractAction {
+		public changeResolutionAction() {
+			super(tr("Change resolution"));
+		}
+		public void actionPerformed(ActionEvent ev) {
+			initializeImages();
+			resolution = scale();
+			getPPD();
+			mv.repaint();
+		}
+	}
 
 	public class SaveWmsAction extends AbstractAction {
