Index: src/org/openstreetmap/josm/gui/layer/WMSLayer.java
===================================================================
--- src/org/openstreetmap/josm/gui/layer/WMSLayer.java	(revision 5388)
+++ src/org/openstreetmap/josm/gui/layer/WMSLayer.java	(working copy)
@@ -105,6 +105,7 @@
     public static final BooleanProperty PROP_OVERLAP = new BooleanProperty("imagery.wms.overlap", false);
     public static final IntegerProperty PROP_OVERLAP_EAST = new IntegerProperty("imagery.wms.overlapEast", 14);
     public static final IntegerProperty PROP_OVERLAP_NORTH = new IntegerProperty("imagery.wms.overlapNorth", 4);
+    public static final IntegerProperty PROP_IMAGE_SIZE = new IntegerProperty("imagery.wms.imageSize", 500);
 
     public int messageNum = 5; //limit for messages per layer
     protected String resolution;
@@ -168,7 +169,7 @@
                 }
             }
             if (cache == null) {
-                cache = new WmsCache(info.getUrl(), imageSize);
+                cache = new WmsCache(info.getUrl(), PROP_IMAGE_SIZE.get());
                 cache.loadIndex();
             }
         }
@@ -343,19 +344,19 @@
     }
 
     public int getImageXIndex(double coord) {
-        return (int)Math.floor( ((coord - dx) * info.getPixelPerDegree()) / imageSize);
+        return (int)Math.floor( ((coord - dx) * info.getPixelPerDegree()) / PROP_IMAGE_SIZE.get());
     }
 
     public int getImageYIndex(double coord) {
-        return (int)Math.floor( ((coord - dy) * info.getPixelPerDegree()) / imageSize);
+        return (int)Math.floor( ((coord - dy) * info.getPixelPerDegree()) / PROP_IMAGE_SIZE.get());
     }
 
     public int getImageX(int imageIndex) {
-        return (int)(imageIndex * imageSize * (getPPD() / info.getPixelPerDegree()) + dx * getPPD());
+        return (int)(imageIndex * PROP_IMAGE_SIZE.get() * (getPPD() / info.getPixelPerDegree()) + dx * getPPD());
     }
 
     public int getImageY(int imageIndex) {
-        return (int)(imageIndex * imageSize * (getPPD() / info.getPixelPerDegree()) + dy * getPPD());
+        return (int)(imageIndex * PROP_IMAGE_SIZE.get() * (getPPD() / info.getPixelPerDegree()) + dy * getPPD());
     }
 
     public int getImageWidth(int xIndex) {
@@ -371,8 +372,8 @@
      * @return Size of image in original zoom
      */
     public int getBaseImageWidth() {
-        int overlap = PROP_OVERLAP.get() ? (PROP_OVERLAP_EAST.get() * imageSize / 100) : 0;
-        return imageSize + overlap;
+        int overlap = PROP_OVERLAP.get() ? (PROP_OVERLAP_EAST.get() * PROP_IMAGE_SIZE.get() / 100) : 0;
+        return PROP_IMAGE_SIZE.get() + overlap;
     }
 
     /**
@@ -380,12 +381,12 @@
      * @return Size of image in original zoom
      */
     public int getBaseImageHeight() {
-        int overlap = PROP_OVERLAP.get() ? (PROP_OVERLAP_NORTH.get() * imageSize / 100) : 0;
-        return imageSize + overlap;
+        int overlap = PROP_OVERLAP.get() ? (PROP_OVERLAP_NORTH.get() * PROP_IMAGE_SIZE.get() / 100) : 0;
+        return PROP_IMAGE_SIZE.get() + overlap;
     }
 
     public int getImageSize() {
-        return imageSize;
+        return PROP_IMAGE_SIZE.get();
     }
 
     public boolean isOverlapEnabled() {
@@ -399,9 +400,9 @@
     public BufferedImage normalizeImage(BufferedImage img) {
         if (isOverlapEnabled()) {
             BufferedImage copy = img;
-            img = new BufferedImage(imageSize, imageSize, copy.getType());
-            img.createGraphics().drawImage(copy, 0, 0, imageSize, imageSize,
-                    0, copy.getHeight() - imageSize, imageSize, copy.getHeight(), null);
+            img = new BufferedImage(PROP_IMAGE_SIZE.get(), PROP_IMAGE_SIZE.get(), copy.getType());
+            img.createGraphics().drawImage(copy, 0, 0, PROP_IMAGE_SIZE.get(), PROP_IMAGE_SIZE.get(),
+                    0, copy.getHeight() - PROP_IMAGE_SIZE.get(), PROP_IMAGE_SIZE.get(), copy.getHeight(), null);
         }
         return img;
     }
@@ -413,7 +414,7 @@
      * @return Real EastNorth of given tile. dx/dy is not counted in
      */
     public EastNorth getEastNorth(int xIndex, int yIndex) {
-        return new EastNorth((xIndex * imageSize) / info.getPixelPerDegree(), (yIndex * imageSize) / info.getPixelPerDegree());
+        return new EastNorth((xIndex * PROP_IMAGE_SIZE.get()) / info.getPixelPerDegree(), (yIndex * PROP_IMAGE_SIZE.get()) / info.getPixelPerDegree());
     }
 
     protected void downloadAndPaintVisible(Graphics g, final MapView mv, boolean real){
@@ -986,7 +987,8 @@
         } else if (
                 event.getKey().equals(PROP_OVERLAP.getKey())
                 || event.getKey().equals(PROP_OVERLAP_EAST.getKey())
-                || event.getKey().equals(PROP_OVERLAP_NORTH.getKey())) {
+                || event.getKey().equals(PROP_OVERLAP_NORTH.getKey())
+                || event.getKey().equals(PROP_IMAGE_SIZE.getKey())) {
             for (int i=0; i<images.length; i++) {
                 for (int k=0; k<images[i].length; k++) {
                     images[i][k] = new GeorefImage(this);
