Index: trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmChangeTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmChangeTask.java	(revision 5170)
+++ trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmChangeTask.java	(revision 5171)
@@ -3,6 +3,8 @@
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Set;
 import java.util.concurrent.Future;
 
@@ -83,5 +85,5 @@
             try {
                 // A changeset does not contain all referred primitives, this is the list of incomplete ones
-                List<OsmPrimitive> toLoad = new ArrayList<OsmPrimitive>();
+                Set<OsmPrimitive> toLoad = new HashSet<OsmPrimitive>();
                 // For each incomplete primitive, we'll have to get its state at date it was referred
                 List<Pair<OsmPrimitive, Date>> toMonitor = new ArrayList<Pair<OsmPrimitive, Date>>();
@@ -95,6 +97,7 @@
                             }
                         }
-                        toLoad.add(p);
-                        toMonitor.add(new Pair<OsmPrimitive, Date>(p, timestamp));
+                        if (toLoad.add(p)) {
+                            toMonitor.add(new Pair<OsmPrimitive, Date>(p, timestamp));
+                        }
                     }
                 }
@@ -151,5 +154,9 @@
 
                         data.setUser(hp.getUser());
-                        data.setVisible(hp.isVisible());
+                        try {
+                            data.setVisible(hp.isVisible());
+                        } catch (IllegalStateException e) {
+                            System.err.println("Cannot change visibility for "+pair.a+": "+e.getMessage());
+                        }
                         data.setTimestamp(hp.getTimestamp());
                         data.setKeys(hp.getTags());
Index: trunk/src/org/openstreetmap/josm/data/osm/history/History.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/history/History.java	(revision 5170)
+++ trunk/src/org/openstreetmap/josm/data/osm/history/History.java	(revision 5171)
@@ -160,5 +160,5 @@
      * @return the primitive id
      */
-    public PrimitiveId getPrimitmiveId() {
+    public PrimitiveId getPrimitiveId() {
         return new SimplePrimitiveId(id, type);
     }
Index: trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialog.java	(revision 5170)
+++ trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialog.java	(revision 5171)
@@ -123,6 +123,6 @@
     /* ---------------------------------------------------------------------------------- */
     public void historyUpdated(HistoryDataSet source, PrimitiveId primitiveId) {
-        if (primitiveId == null || primitiveId.equals(browser.getHistory().getPrimitmiveId())) {
-            browser.populate(source.getHistory(browser.getHistory().getPrimitmiveId()));
+        if (primitiveId == null || primitiveId.equals(browser.getHistory().getPrimitiveId())) {
+            browser.populate(source.getHistory(browser.getHistory().getPrimitiveId()));
         }
     }
Index: trunk/src/org/openstreetmap/josm/gui/history/HistoryLoadTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/HistoryLoadTask.java	(revision 5170)
+++ trunk/src/org/openstreetmap/josm/gui/history/HistoryLoadTask.java	(revision 5171)
@@ -120,5 +120,5 @@
     public HistoryLoadTask add(History history) {
         CheckParameterUtil.ensureParameterNotNull(history, "history");
-        toLoad.add(history.getPrimitmiveId());
+        toLoad.add(history.getPrimitiveId());
         return this;
     }
