diff --git a/src/org/openstreetmap/josm/data/osm/history/HistoryNode.java b/src/org/openstreetmap/josm/data/osm/history/HistoryNode.java
index bd45a5d..81eb6ec 100644
--- a/src/org/openstreetmap/josm/data/osm/history/HistoryNode.java
+++ b/src/org/openstreetmap/josm/data/osm/history/HistoryNode.java
@@ -4,6 +4,7 @@ package org.openstreetmap.josm.data.osm.history;
 import java.util.Date;
 
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 
 /**
@@ -18,7 +19,12 @@ public class HistoryNode extends HistoryOsmPrimitive {
 
     public HistoryNode(long id, long version, boolean visible, String user, long uid, long changesetId, Date timestamp, LatLon coords) {
         super(id, version, visible, user, uid, changesetId, timestamp);
-        setCoords(coords);
+        this.coords = coords;
+    }
+
+    public HistoryNode(Node p) {
+        super(p);
+        this.coords = p.getCoor();
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/data/osm/history/HistoryOsmPrimitive.java b/src/org/openstreetmap/josm/data/osm/history/HistoryOsmPrimitive.java
index c22e6c9..78181c9 100644
--- a/src/org/openstreetmap/josm/data/osm/history/HistoryOsmPrimitive.java
+++ b/src/org/openstreetmap/josm/data/osm/history/HistoryOsmPrimitive.java
@@ -10,9 +10,13 @@ import java.util.HashMap;
 import java.util.Locale;
 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;
 
 /**
@@ -69,6 +73,25 @@ public abstract class HistoryOsmPrimitive implements Comparable<HistoryOsmPrimit
         tags = new HashMap<String, String>();
     }
 
+    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;
     }
diff --git a/src/org/openstreetmap/josm/data/osm/history/HistoryRelation.java b/src/org/openstreetmap/josm/data/osm/history/HistoryRelation.java
index 86258c0..c632a2f 100644
--- a/src/org/openstreetmap/josm/data/osm/history/HistoryRelation.java
+++ b/src/org/openstreetmap/josm/data/osm/history/HistoryRelation.java
@@ -8,6 +8,7 @@ import java.util.Date;
 import java.util.List;
 
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
+import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 
 /**
@@ -17,7 +18,7 @@ import org.openstreetmap.josm.tools.CheckParameterUtil;
  */
 public class HistoryRelation extends HistoryOsmPrimitive{
 
-    private ArrayList<RelationMember> members;
+    private ArrayList<RelationMember> members = new ArrayList<RelationMember>();
 
     /**
      * constructor
@@ -35,7 +36,6 @@ public class HistoryRelation extends HistoryOsmPrimitive{
     public HistoryRelation(long id, long version, boolean visible, String user, long uid, long changesetId,
             Date timestamp) throws IllegalArgumentException {
         super(id, version, visible, user, uid, changesetId, timestamp);
-        members = new ArrayList<RelationMember>();
     }
     /**
      * constructor
@@ -59,6 +59,10 @@ public class HistoryRelation extends HistoryOsmPrimitive{
         }
     }
 
+    public HistoryRelation(Relation p) {
+        super(p);
+    }
+
     /**
      * replies an immutable list of members of this relation
      *
diff --git a/src/org/openstreetmap/josm/data/osm/history/HistoryWay.java b/src/org/openstreetmap/josm/data/osm/history/HistoryWay.java
index 83b9d08..2d4e249 100644
--- a/src/org/openstreetmap/josm/data/osm/history/HistoryWay.java
+++ b/src/org/openstreetmap/josm/data/osm/history/HistoryWay.java
@@ -9,6 +9,7 @@ import java.util.Date;
 import java.util.List;
 
 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
  * OSM data.
@@ -16,11 +17,10 @@ import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
  */
 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>();
     }
 
     public HistoryWay(long id, long version, boolean visible, String user, long uid, long changesetId, Date timestamp, ArrayList<Long> nodeIdList) {
@@ -28,6 +28,10 @@ public class HistoryWay extends HistoryOsmPrimitive {
         this.nodeIds.addAll(nodeIdList);
     }
 
+    public HistoryWay(Way p) {
+        super(p);
+    }
+
     /**
      * replies the number of nodes in this way
      * @return the number of nodes
diff --git a/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java b/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java
index 222c8ad..4614c68 100644
--- a/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java
+++ b/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java
@@ -144,10 +144,17 @@ public class HistoryBrowserModel extends Observable implements LayerChangeListen
     }
     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();
 
