Index: /trunk/src/org/openstreetmap/josm/data/osm/Relation.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 17356)
+++ /trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 17357)
@@ -194,5 +194,6 @@
 
     /**
-     * Constructs an identical clone of the argument.
+     * Constructs an identical clone of the argument and links members to it.
+     * See #19885 for possible memory leaks.
      * @param clone The relation to clone
      * @param clearMetadata If {@code true}, clears the OSM id and other metadata as defined by {@link #clearOsmMetadata}.
@@ -210,5 +211,6 @@
 
     /**
-     * Constructs an identical clone of the argument.
+     * Constructs an identical clone of the argument and links members to it.
+     * See #19885 for possible memory leaks.
      * @param clone The relation to clone
      * @param clearMetadata If {@code true}, clears the OSM id and other metadata as defined by {@link #clearOsmMetadata}.
@@ -220,5 +222,6 @@
 
     /**
-     * Create an identical clone of the argument (including the id)
+     * Create an identical clone of the argument (including the id) and links members to it.
+     * See #19885 for possible memory leaks.
      * @param clone The relation to clone, including its id
      */
Index: /trunk/src/org/openstreetmap/josm/data/osm/Way.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 17356)
+++ /trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 17357)
@@ -31,9 +31,10 @@
 
     static final UniqueIdGenerator idGenerator = new UniqueIdGenerator();
+    private static final Node[] EMPTY_NODES = new Node[0];
 
     /**
      * All way nodes in this way
      */
-    private Node[] nodes = new Node[0];
+    private Node[] nodes = EMPTY_NODES;
     private BBox bbox;
 
@@ -53,8 +54,8 @@
             }
 
-            if (nodes == null) {
-                this.nodes = new Node[0];
+            if (nodes == null || nodes.isEmpty()) {
+                this.nodes = EMPTY_NODES;
             } else {
-                this.nodes = nodes.toArray(new Node[0]);
+                this.nodes = nodes.toArray(EMPTY_NODES);
             }
             for (Node node: this.nodes) {
@@ -196,4 +197,5 @@
     /**
      * Constructs a new {@code Way} from an existing {@code Way}.
+     * This  adds links from all way nodes to the clone. See #19885 for possible memory leaks.
      * @param original The original {@code Way} to be identically cloned. Must not be null
      * @param clearMetadata If {@code true}, clears the OSM id and other metadata as defined by {@link #clearOsmMetadata}.
@@ -212,4 +214,5 @@
     /**
      * Constructs a new {@code Way} from an existing {@code Way}.
+     * This  adds links from all way nodes to the clone. See #19885 for possible memory leaks.
      * @param original The original {@code Way} to be identically cloned. Must not be null
      * @param clearMetadata If {@code true}, clears the OSM id and other metadata as defined by {@link #clearOsmMetadata}.
@@ -223,4 +226,5 @@
     /**
      * Constructs a new {@code Way} from an existing {@code Way} (including its id).
+     * This  adds links from all way nodes to the clone. See #19885 for possible memory leaks.
      * @param original The original {@code Way} to be identically cloned. Must not be null
      * @since 86
