Index: utils/josm/plugins/landsat/src/landsat/LandsatPlugin.java
===================================================================
--- utils/josm/plugins/landsat/src/landsat/LandsatPlugin.java	(revision 2022)
+++ utils/josm/plugins/landsat/src/landsat/LandsatPlugin.java	(revision 2096)
@@ -28,6 +28,9 @@
 			"New Popular Edition maps - " +
 			"see npemap.org.uk for conditions of use");
+
+		/* can now do these always
 		task.setEnabled(false);
 		npeTask.setEnabled(false);
+		*/
 		Main.main.menu.download.downloadTasks.add(task);
 		Main.main.menu.download.downloadTasks.add(npeTask);
@@ -35,4 +38,5 @@
 
 	public void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame) {
+		/* don't do anything now
 		if(oldFrame==null && newFrame!=null) { 
 			task.setEnabled(true);
@@ -54,4 +58,5 @@
 			npeTask.setEnabled(false);
 		}
+		*/
 	}
 }
Index: utils/josm/plugins/landsat/src/landsat/OSGBLayer.java
===================================================================
--- utils/josm/plugins/landsat/src/landsat/OSGBLayer.java	(revision 2022)
+++ utils/josm/plugins/landsat/src/landsat/OSGBLayer.java	(revision 2096)
@@ -15,4 +15,5 @@
 	throws IOException {
 		MapView mv = Main.map.mapView;
+		initMapView(mv);
 		OSGBImage npeImage = new OSGBImage(url);
 		npeImage.grab(mv,minlat,minlon,maxlat,maxlon);
Index: utils/josm/plugins/landsat/src/landsat/WMSLayer.java
===================================================================
--- utils/josm/plugins/landsat/src/landsat/WMSLayer.java	(revision 2022)
+++ utils/josm/plugins/landsat/src/landsat/WMSLayer.java	(revision 2096)
@@ -65,7 +65,57 @@
 	{
 		MapView mv = Main.map.mapView;
+		initMapView(mv);
 		WMSImage wmsImage = new WMSImage(url);
 		wmsImage.grab(mv,minlat,minlon,maxlat,maxlon);
 		wmsImages.add(wmsImage);
+	}
+
+	protected void initMapView(MapView mv)
+	{
+		// If there is no data we need to initialise the centre and scale
+		// of the map view, so that we can display the Landsat/OSGB image.
+		// To do this, we centre the map in the centre point of the requested
+		// data, and set the scale so that the requested data is just
+		// completely within the visible area, even if it's a non-square area.
+
+		if(mv.getCenter()==null)
+		{
+			EastNorth centre = Main.proj.latlon2eastNorth
+			 			(new LatLon(minlat+(maxlat-minlat)/2 , 
+						minlon+(maxlon-minlon)/2)),
+				oldBottomLeft = Main.proj.latlon2eastNorth
+						(new LatLon(minlat,minlon)),
+				oldTopRight = Main.proj.latlon2eastNorth
+						(new LatLon(maxlat,maxlon)),
+				bottomLeft,
+				topRight;
+
+			if(oldTopRight.north-oldBottomLeft.north < 
+					oldTopRight.east-oldBottomLeft.east)
+			{	
+				bottomLeft = new EastNorth 
+					( oldBottomLeft.east(), centre.north() - 
+							(oldTopRight.east()-oldBottomLeft.east()/2);
+				topRight = new EastNorth 
+					( oldTopRight.east(), centre.north() + 
+							(oldTopRight.east()-oldBottomLeft.east()/2);
+			}
+			else
+			{
+				bottomLeft = new EastNorth 
+					( centre.east() - 
+							(oldTopRight.north()-oldBottomLeft.north()/2),
+						oldBottomLeft.north() );
+				topRight = new EastNorth 
+					( centre.east() + 
+							(oldTopRight.north()-oldBottomLeft.north()/2),
+						oldTopRight.north() );
+			}
+
+			// scale is enPerPixel
+			double scale = (topRight.east()-bottomLeft.east())/
+									mapView.getWidth();
+			mv.zoomTo(centre,scale);
+		}
 	}
 
