Index: trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java	(revision 9717)
+++ trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java	(revision 9719)
@@ -1690,5 +1690,4 @@
                         TMSCachedTileLoader.getNewThreadPoolExecutor("Precache downloader"));
             }
-
         }
 
@@ -1718,8 +1717,10 @@
         @Override
         public void tileLoadingFinished(Tile tile, boolean success) {
+            int processed = this.processedCount.incrementAndGet();
             if (success) {
-                int processed = this.processedCount.incrementAndGet();
                 this.progressMonitor.worked(1);
                 this.progressMonitor.setCustomText(tr("Downloaded {0}/{1} tiles", processed, totalCount));
+            } else {
+                Main.warn("Tile loading failure: " + tile + " - " + tile.getErrorMessage());
             }
         }
Index: trunk/src/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackAction.java	(revision 9717)
+++ trunk/src/org/openstreetmap/josm/gui/layer/gpx/DownloadWmsAlongTrackAction.java	(revision 9719)
@@ -36,6 +36,6 @@
 
 /**
- * Class downloading WMS and TMS along the GPX track
- *
+ * Class downloading WMS and TMS along the GPX track.
+ * @since 5715
  */
 public class DownloadWmsAlongTrackAction extends AbstractAction {
@@ -51,7 +51,49 @@
     }
 
-    @Override
-    public void actionPerformed(ActionEvent e) {
-        final List<LatLon> points = new ArrayList<>();
+    static class PrecacheWmsTask extends PleaseWaitRunnable {
+
+        private final AbstractTileSourceLayer layer;
+        private final List<LatLon> points;
+        private PrecacheTask precacheTask;
+
+        protected PrecacheWmsTask(AbstractTileSourceLayer layer, List<LatLon> points) {
+            super(tr("Precaching WMS"));
+            this.layer = layer;
+            this.points = points;
+        }
+
+        @Override
+        protected void realRun() throws SAXException, IOException, OsmTransferException {
+            precacheTask = layer.new PrecacheTask(progressMonitor);
+            layer.downloadAreaToCache(precacheTask, points, 0, 0);
+            while (!precacheTask.isFinished() && !progressMonitor.isCanceled()) {
+                synchronized (this) {
+                    try {
+                        wait(200);
+                    } catch (InterruptedException ex) {
+                        Main.warn("InterruptedException in "+getClass().getSimpleName()+" while precaching WMS");
+                    }
+                }
+            }
+        }
+
+        @Override
+        protected void finish() {
+            // Do nothing
+        }
+
+        @Override
+        protected void cancel() {
+            precacheTask.cancel();
+        }
+
+        @Override
+        public ProgressTaskId canRunInBackground() {
+            return ProgressTaskIds.PRECACHE_WMS;
+        }
+    }
+
+    PrecacheWmsTask createTask() {
+        List<LatLon> points = new ArrayList<>();
         for (GpxTrack trk : data.tracks) {
             for (GpxTrackSegment segment : trk.getSegments()) {
@@ -64,38 +106,12 @@
             points.add(p.getCoor());
         }
-        final AbstractTileSourceLayer layer = askedLayer();
-        if (layer != null) {
-            PleaseWaitRunnable task = new PleaseWaitRunnable(tr("Precaching WMS")) {
-                private PrecacheTask precacheTask;
+        AbstractTileSourceLayer layer = askedLayer();
+        return layer != null ? new PrecacheWmsTask(layer, points) : null;
+    }
 
-                @Override
-                protected void realRun() throws SAXException, IOException, OsmTransferException {
-                    precacheTask = layer.new PrecacheTask(progressMonitor);
-                    layer.downloadAreaToCache(precacheTask, points, 0, 0);
-                    while (!precacheTask.isFinished() && !progressMonitor.isCanceled()) {
-                        synchronized (this) {
-                            try {
-                                wait(200);
-                            } catch (InterruptedException ex) {
-                                Main.warn("InterruptedException in "+getClass().getSimpleName()+" while precaching WMS");
-                            }
-                        }
-                    }
-                }
-
-                @Override
-                protected void finish() {
-                }
-
-                @Override
-                protected void cancel() {
-                    precacheTask.cancel();
-                }
-
-                @Override
-                public ProgressTaskId canRunInBackground() {
-                    return ProgressTaskIds.PRECACHE_WMS;
-                }
-            };
+    @Override
+    public void actionPerformed(ActionEvent e) {
+        PrecacheWmsTask task = createTask();
+        if (task != null) {
             Main.worker.execute(task);
         }
@@ -103,4 +119,7 @@
 
     protected AbstractTileSourceLayer askedLayer() {
+        if (!Main.isDisplayingMapView()) {
+            return null;
+        }
         List<AbstractTileSourceLayer> targetLayers = Main.map.mapView.getLayersOfType(AbstractTileSourceLayer.class);
         if (targetLayers.isEmpty()) {
