Index: applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSLayer.java
===================================================================
--- applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSLayer.java	(revision 18761)
+++ applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSLayer.java	(revision 18762)
@@ -87,4 +87,12 @@
         WMSGrabber.getProjection(baseURL, true);
         mv = Main.map.mapView;
+
+        // quick hack to predefine the PixelDensity to reuse the cache
+        int codeIndex = getName().indexOf("#PPD=");
+        if (codeIndex != -1) {
+            pixelPerDegree = Double.valueOf(getName().substring(codeIndex+5));
+        } else {
+            pixelPerDegree = getPPD();
+        }
         resolution = mv.getDist100PixelText();
         pixelPerDegree = getPPD();
@@ -117,5 +125,5 @@
         try {
             executor.shutdownNow();
-            // Might not be initalized, so catch NullPointer as well
+            // Might not be initialized, so catch NullPointer as well
         } catch(Exception x) {
             x.printStackTrace();
@@ -269,4 +277,5 @@
                 new JMenuItem(new LoadWmsAction()),
                 new JMenuItem(new SaveWmsAction()),
+                new JMenuItem(new BookmarkWmsAction()),
                 new JSeparator(),
                 startstop,
@@ -318,5 +327,5 @@
             // Delete small files, because they're probably blank tiles.
             // See https://josm.openstreetmap.de/ticket/2307
-            WMSPlugin.cache.customCleanUp(CacheFiles.CLEAN_SMALL_FILES, 2048);
+            WMSPlugin.cache.customCleanUp(CacheFiles.CLEAN_SMALL_FILES, 4096);
 
             for (int x = 0; x < dax; ++x) {
@@ -428,3 +437,30 @@
         }
     }
+    /**
+     * This action will add a WMS layer menu entry with the current WMS layer URL and name extended by the current resolution.
+     * When using the menu entry again, the WMS cache will be used properly.
+     */
+    public class BookmarkWmsAction extends AbstractAction {
+        public BookmarkWmsAction() {
+            super(tr("Set WMS Bookmark"));
+        }
+        public void actionPerformed(ActionEvent ev) {
+            int i = 0;
+            while (Main.pref.hasKey("wmsplugin.url."+i+".url")) {
+                i++;
+            }
+            String baseName;
+            // cut old parameter
+            int parameterIndex = getName().indexOf("#PPD=");
+            if (parameterIndex != -1) {
+                baseName = getName().substring(0,parameterIndex);
+            }
+            else {
+                baseName = getName();
+            }
+            Main.pref.put("wmsplugin.url."+ i +".url",baseURL );
+            Main.pref.put("wmsplugin.url."+String.valueOf(i)+".name", baseName + "#" + getPPD() );
+            WMSPlugin.refreshMenu();
+        }
+    }
 }
