Index: applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/GeorefImage.java
===================================================================
--- applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/GeorefImage.java	(revision 18289)
+++ applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/GeorefImage.java	(revision 18312)
@@ -129,22 +129,24 @@
     }
 
-    /*
-     * Method required by BufferedImage serialization
+    /**
+     * Method required by BufferedImage serialization.
+     * Save only primitives to keep cache independent of software changes.
      */
     private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
-        max = new EastNorth((Double)in.readObject(), (Double)in.readObject());
-        min = new EastNorth((Double)in.readObject(), (Double)in.readObject());
+        max = new EastNorth(in.readDouble(), in.readDouble());
+        min = new EastNorth(in.readDouble(), in.readDouble());
         image = (BufferedImage) ImageIO.read(ImageIO.createImageInputStream(in));
         updatePixelPer();
     }
 
-    /*
-     * Method required by BufferedImage serialization
+    /**
+     * Method required by BufferedImage serialization.
+     * Cache uses only primitives to stay independent of software changes.
      */
     private void writeObject(ObjectOutputStream out) throws IOException {
-        out.writeObject(max.getX());
-        out.writeObject(max.getY());
-        out.writeObject(min.getX());
-        out.writeObject(min.getY());
+        out.writeDouble(max.getX());
+        out.writeDouble(max.getY());
+        out.writeDouble(min.getX());
+        out.writeDouble(min.getY());
         ImageIO.write(image, "png", ImageIO.createImageOutputStream(out));
     }
Index: applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/WMSLayer.java
===================================================================
--- applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/WMSLayer.java	(revision 18289)
+++ applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/WMSLayer.java	(revision 18312)
@@ -356,5 +356,6 @@
 
     /**
-     * Called by CacheControl when a new cache file is created on disk
+     * Called by CacheControl when a new cache file is created on disk.
+     * Save only primitives to keep cache independent of software changes.
      * @param oos
      * @throws IOException
@@ -362,18 +363,24 @@
     public void write(ObjectOutputStream oos) throws IOException {
         oos.writeInt(this.serializeFormatVersion);
-        oos.writeObject(this.location);
-        oos.writeObject(this.codeCommune);
+        oos.writeObject(this.location);    // String
+        oos.writeObject(this.codeCommune); // String
         oos.writeInt(this.lambertZone);
         oos.writeBoolean(this.isRaster);
         if (this.isRaster) {
-            oos.writeObject(this.rasterMin);
-            oos.writeObject(this.rasterMax);
+            oos.writeDouble(this.rasterMin.getX());
+            oos.writeDouble(this.rasterMin.getY());
+            oos.writeDouble(this.rasterMax.getX());
+            oos.writeDouble(this.rasterMax.getY());
             oos.writeDouble(this.rasterRatio);
         }
-        oos.writeObject(this.communeBBox);
-    }
-
-    /**
-     * Called by CacheControl when a cache file is read from disk
+        oos.writeObject(this.communeBBox.min.getX());
+        oos.writeObject(this.communeBBox.min.getY());
+        oos.writeObject(this.communeBBox.max.getX());
+        oos.writeObject(this.communeBBox.max.getY());
+    }
+
+    /**
+     * Called by CacheControl when a cache file is read from disk.
+     * Cache uses only primitives to stay independent of software changes.
      * @param ois
      * @throws IOException
@@ -392,9 +399,17 @@
         this.setRaster(ois.readBoolean());
         if (this.isRaster) {
-            this.rasterMin = (EastNorth) ois.readObject();
-            this.rasterMax = (EastNorth) ois.readObject();
+            double X = ois.readDouble();
+            double Y = ois.readDouble();
+            this.rasterMin = new EastNorth(X, Y);
+            X = ois.readDouble();
+            Y = ois.readDouble();
+            this.rasterMax = new EastNorth(X, Y);
             this.rasterRatio = ois.readDouble();
         }
-        this.communeBBox = (EastNorthBound) ois.readObject();
+        double minX = ois.readDouble();
+        double minY = ois.readDouble();
+        double maxX = ois.readDouble();
+        double maxY = ois.readDouble();
+        this.communeBBox =  new EastNorthBound(new EastNorth(minX, minY), new EastNorth(maxX, maxY));
         if (this.lambertZone != currentLambertZone && currentLambertZone != -1) {
             JOptionPane.showMessageDialog(Main.parent, tr("Lambert zone {0} in cache "+
