Index: trunk/src/org/openstreetmap/josm/data/osm/history/HistoryNode.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/history/HistoryNode.java	(revision 4337)
+++ trunk/src/org/openstreetmap/josm/data/osm/history/HistoryNode.java	(revision 4339)
@@ -5,4 +5,5 @@
 
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 
@@ -20,4 +21,9 @@
         super(id, version, visible, user, uid, changesetId, timestamp);
         setCoords(coords);
+    }
+
+    public HistoryNode(Node p) {
+        super(p);
+        setCoords(p.getCoor());
     }
 
Index: trunk/src/org/openstreetmap/josm/data/osm/history/HistoryOsmPrimitive.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/history/HistoryOsmPrimitive.java	(revision 4337)
+++ trunk/src/org/openstreetmap/josm/data/osm/history/HistoryOsmPrimitive.java	(revision 4339)
@@ -11,7 +11,11 @@
 import java.util.Map;
 
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.data.osm.PrimitiveId;
+import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.SimplePrimitiveId;
+import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 
@@ -70,4 +74,23 @@
     }
 
+    public HistoryOsmPrimitive(OsmPrimitive p) {
+        this(p.getId(), p.getVersion(), p.isVisible(),
+                p.getUser() == null ? null : p.getUser().getName(),
+                p.getUser() == null ? 0 : p.getUser().getId(),
+                p.getChangesetId(), p.getTimestamp());
+    }
+
+    public static HistoryOsmPrimitive forOsmPrimitive(OsmPrimitive p) {
+        if (p instanceof Node) {
+            return new HistoryNode((Node) p);
+        } else if (p instanceof Way) {
+            return new HistoryWay((Way) p);
+        } else if (p instanceof Relation) {
+            return new HistoryRelation((Relation) p);
+        } else {
+            return null;
+        }
+    }
+
     public long getId() {
         return id;
Index: trunk/src/org/openstreetmap/josm/data/osm/history/HistoryRelation.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/history/HistoryRelation.java	(revision 4337)
+++ trunk/src/org/openstreetmap/josm/data/osm/history/HistoryRelation.java	(revision 4339)
@@ -9,4 +9,5 @@
 
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
+import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 
@@ -18,5 +19,5 @@
 public class HistoryRelation extends HistoryOsmPrimitive{
 
-    private ArrayList<RelationMember> members;
+    private ArrayList<RelationMember> members = new ArrayList<RelationMember>();
 
     /**
@@ -36,5 +37,4 @@
             Date timestamp) throws IllegalArgumentException {
         super(id, version, visible, user, uid, changesetId, timestamp);
-        members = new ArrayList<RelationMember>();
     }
     /**
@@ -58,4 +58,8 @@
             this.members.addAll(members);
         }
+    }
+
+    public HistoryRelation(Relation p) {
+        super(p);
     }
 
Index: trunk/src/org/openstreetmap/josm/data/osm/history/HistoryWay.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/history/HistoryWay.java	(revision 4337)
+++ trunk/src/org/openstreetmap/josm/data/osm/history/HistoryWay.java	(revision 4339)
@@ -10,4 +10,5 @@
 
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
+import org.openstreetmap.josm.data.osm.Way;
 /**
  * Represents an immutable OSM way in the context of a historical view on
@@ -17,9 +18,8 @@
 public class HistoryWay extends HistoryOsmPrimitive {
 
-    private ArrayList<Long> nodeIds;
+    private ArrayList<Long> nodeIds = new ArrayList<Long>();
 
     public HistoryWay(long id, long version, boolean visible, String user, long uid, long changesetId, Date timestamp) {
         super(id, version, visible, user, uid, changesetId, timestamp);
-        nodeIds = new ArrayList<Long>();
     }
 
@@ -27,4 +27,8 @@
         this(id, version, visible, user, uid, changesetId, timestamp);
         this.nodeIds.addAll(nodeIdList);
+    }
+
+    public HistoryWay(Way p) {
+        super(p);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java	(revision 4337)
+++ trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java	(revision 4339)
@@ -145,8 +145,15 @@
     protected boolean canShowAsLatest(OsmPrimitive primitive) {
         if (primitive == null) return false;
-        if (primitive.isNew()) return false;
+        if (primitive.isNew() || !primitive.isUsable()) return false;
+        
+        //try creating a history primitive. if that fails, the primitive cannot be used.
+        try {
+            HistoryOsmPrimitive.forOsmPrimitive(primitive);
+        } catch (Exception ign) {
+            return false;
+        }
+
         if (history == null) return false;
-        // only show latest of the same version if it is
-        // modified
+        // only show latest of the same version if it is modified
         if (history.getByVersion(primitive.getVersion()) != null)
             return primitive.isModified();
