Index: /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 10308)
+++ /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 10309)
@@ -132,8 +132,6 @@
      */
     public DataSet() {
-        /*
-         * Transparently register as projection change lister. No need to explicitly remove the
-         * the listener, projection change listeners are managed as WeakReferences.
-         */
+        // Transparently register as projection change listener. No need to explicitly remove
+        // the listener, projection change listeners are managed as WeakReferences.
         Main.addProjectionChangeListener(this);
     }
@@ -879,5 +877,6 @@
         getReadLock().lock();
         try {
-            DataSet ds = new DataSet();
+            DataSet ds = (DataSet) super.clone();
+            Main.addProjectionChangeListener(ds);
             Map<OsmPrimitive, OsmPrimitive> primMap = new HashMap<>();
             for (Node n : nodes) {
@@ -917,4 +916,6 @@
             ds.version = version;
             return ds;
+        } catch (CloneNotSupportedException e) {
+            throw new IllegalStateException(e);
         } finally {
             getReadLock().unlock();
Index: /trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java	(revision 10308)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java	(revision 10309)
@@ -312,11 +312,9 @@
     @Override
     public ImageEntry clone() {
-        Object c;
-        try {
-            c = super.clone();
+        try {
+            return (ImageEntry) super.clone();
         } catch (CloneNotSupportedException e) {
-            throw new RuntimeException(e);
-        }
-        return (ImageEntry) c;
+            throw new IllegalStateException(e);
+        }
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/mappaint/Cascade.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/mappaint/Cascade.java	(revision 10308)
+++ /trunk/src/org/openstreetmap/josm/gui/mappaint/Cascade.java	(revision 10309)
@@ -197,9 +197,13 @@
     @Override
     public Cascade clone() {
-        @SuppressWarnings("unchecked")
-        Map<String, Object> clonedProp = (Map<String, Object>) ((HashMap) this.prop).clone();
-        Cascade c = new Cascade();
-        c.prop = clonedProp;
-        return c;
+        try {
+            Cascade c = (Cascade) super.clone();
+            @SuppressWarnings({ "unchecked", "rawtypes" })
+            Map<String, Object> clonedProp = (Map<String, Object>) ((HashMap) this.prop).clone();
+            c.prop = clonedProp;
+            return c;
+        } catch (CloneNotSupportedException e) {
+            throw new IllegalStateException(e);
+        }
     }
 
Index: /trunk/src/org/openstreetmap/josm/tools/CopyList.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/tools/CopyList.java	(revision 10308)
+++ /trunk/src/org/openstreetmap/josm/tools/CopyList.java	(revision 10309)
@@ -18,5 +18,5 @@
  * @param <E> the type of elements in this list
  */
-public final class CopyList<E> extends AbstractList<E> implements RandomAccess, Cloneable {
+public final class CopyList<E> extends AbstractList<E> implements RandomAccess {
     private E[] array;
     private int size;
@@ -113,14 +113,4 @@
 
     // helpers:
-    /**
-     * Returns another independent copy-on-write copy of this <tt>List</tt>
-     * instance. Neither the elements nor the backing storage are copied.
-     *
-     * @return a clone of this <tt>CopyList</tt> instance
-     */
-    @Override
-    public Object clone() {
-        return new CopyList<>(array, size);
-    }
 
     private void rangeCheck(int index) {
