Index: trunk/src/org/openstreetmap/josm/data/osm/DataSet.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 3502)
+++ trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 3503)
@@ -69,5 +69,5 @@
     }
 
-    private Storage<OsmPrimitive> allPrimitives = new Storage<OsmPrimitive>(new IdHash(), 16, true);
+    private Storage<OsmPrimitive> allPrimitives = new Storage<OsmPrimitive>(new IdHash(), true);
     private Map<PrimitiveId, OsmPrimitive> primitivesMap = allPrimitives.foreignKey(new IdHash());
     private CopyOnWriteArrayList<DataSetListener> listeners = new CopyOnWriteArrayList<DataSetListener>();
Index: trunk/src/org/openstreetmap/josm/data/osm/Storage.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Storage.java	(revision 3502)
+++ trunk/src/org/openstreetmap/josm/data/osm/Storage.java	(revision 3503)
@@ -93,9 +93,10 @@
     private transient volatile int modCount = 0;
     private float loadFactor = 0.6f;
+    private static final int DEFAULT_CAPACITY = 16;
     private final boolean safeIterator;
     private boolean arrayCopyNecessary;
 
     public Storage() {
-        this(Storage.<T>defaultHash());
+        this(Storage.<T>defaultHash(), DEFAULT_CAPACITY, false);
     }
 
@@ -105,7 +106,31 @@
 
     public Storage(Hash<? super T,? super T> ha) {
-        this(ha, 16, false);
-    }
-
+        this(ha, DEFAULT_CAPACITY, false);
+    }
+
+    public Storage(boolean safeIterator) {
+        this(Storage.<T>defaultHash(), DEFAULT_CAPACITY, safeIterator);
+    }
+
+    public Storage(int capacity, boolean safeIterator) {
+        this(Storage.<T>defaultHash(), capacity, safeIterator);
+    }
+
+    public Storage(Hash<? super T,? super T> ha, boolean safeIterator) {
+        this(ha, DEFAULT_CAPACITY, safeIterator);
+    }
+
+    public Storage(Hash<? super T, ? super T> ha, int capacity) {
+        this(ha, capacity, false);
+    }
+    /**
+     * constructor
+     * @param ha
+     * @param capacity
+     * @param safeIterator If set to false, you must not modify the Storage
+     *          while iterating over it. If set to true, you can savely
+     *          modify, but the read-only iteration will happen on a copy
+     *          of the unmodified Storage.
+     */
     public Storage(Hash<? super T, ? super T> ha, int capacity, boolean safeIterator) {
         this.hash = ha;
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetListModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetListModel.java	(revision 3502)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetListModel.java	(revision 3503)
@@ -25,5 +25,5 @@
 
     private final List<Changeset> data = new ArrayList<Changeset>();
-    private final Storage<Changeset> shownChangesets = new Storage<Changeset>();
+    private final Storage<Changeset> shownChangesets = new Storage<Changeset>(true);
     private DefaultListSelectionModel selectionModel;
 
