Index: /trunk/src/org/openstreetmap/josm/data/osm/history/HistoryDataSet.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/history/HistoryDataSet.java	(revision 16459)
+++ /trunk/src/org/openstreetmap/josm/data/osm/history/HistoryDataSet.java	(revision 16460)
@@ -13,5 +13,4 @@
 
 import org.openstreetmap.josm.data.osm.Changeset;
-import org.openstreetmap.josm.data.osm.IPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.data.osm.PrimitiveId;
@@ -166,7 +165,5 @@
      */
     public History getHistory(PrimitiveId pid) {
-        PrimitiveId key = pid instanceof IPrimitive ? ((IPrimitive) pid).getPrimitiveId()
-                        : pid instanceof HistoryOsmPrimitive ? ((HistoryOsmPrimitive) pid).getPrimitiveId()
-                        : pid;
+        PrimitiveId key = new SimplePrimitiveId(pid.getUniqueId(), pid.getType());
         List<HistoryOsmPrimitive> versions = data.get(Objects.requireNonNull(key, "key"));
         if (versions == null)
Index: /trunk/src/org/openstreetmap/josm/gui/history/NodeListViewer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/history/NodeListViewer.java	(revision 16459)
+++ /trunk/src/org/openstreetmap/josm/gui/history/NodeListViewer.java	(revision 16460)
@@ -56,5 +56,5 @@
         table.addMouseListener(new ShowHistoryAction.DoubleClickAdapter(e -> {
             int row = table.rowAtPoint(e.getPoint());
-            return row <= 0 ? null : primitiveIdAtRow(tableModel, row);
+            return row < 0 ? null : primitiveIdAtRow(tableModel, row);
         }));
         return table;
Index: /trunk/src/org/openstreetmap/josm/gui/history/RelationMemberListViewer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/history/RelationMemberListViewer.java	(revision 16459)
+++ /trunk/src/org/openstreetmap/josm/gui/history/RelationMemberListViewer.java	(revision 16460)
@@ -38,5 +38,5 @@
         table.addMouseListener(new ShowHistoryAction.DoubleClickAdapter(e -> {
             int row = table.rowAtPoint(e.getPoint());
-            return row <= 0 ? null : (RelationMemberData) tableModel.getValueAt(row, 0).value;
+            return row < 0 ? null : (RelationMemberData) tableModel.getValueAt(row, 0).value;
         }));
         return table;
Index: /trunk/src/org/openstreetmap/josm/gui/history/ShowHistoryAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/history/ShowHistoryAction.java	(revision 16459)
+++ /trunk/src/org/openstreetmap/josm/gui/history/ShowHistoryAction.java	(revision 16460)
@@ -7,4 +7,5 @@
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
+import java.util.Collections;
 import java.util.function.Function;
 
@@ -12,12 +13,8 @@
 
 import org.openstreetmap.josm.data.osm.PrimitiveId;
-import org.openstreetmap.josm.data.osm.history.History;
-import org.openstreetmap.josm.data.osm.history.HistoryDataSet;
-import org.openstreetmap.josm.gui.MainApplication;
-import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
- * Open a history browser with the history of this node
+ * Open a history browser with the history of an object.
  */
 class ShowHistoryAction extends AbstractAction {
@@ -29,5 +26,5 @@
     ShowHistoryAction() {
         putValue(NAME, tr("Show history"));
-        putValue(SHORT_DESCRIPTION, tr("Open a history browser with the history of this node"));
+        putValue(SHORT_DESCRIPTION, tr("Display the history of the selected object."));
         new ImageProvider("dialogs", "history").getResource().attachImageIcon(this, true);
     }
@@ -46,13 +43,5 @@
 
     public void run() {
-        if (HistoryDataSet.getInstance().getHistory(primitiveId) == null) {
-            MainApplication.worker.submit(new HistoryLoadTask().add(primitiveId));
-        }
-        MainApplication.worker.submit(() -> {
-            final History h = HistoryDataSet.getInstance().getHistory(primitiveId);
-            if (h == null)
-                return;
-            GuiHelper.runInEDT(() -> HistoryBrowserDialogManager.getInstance().show(h));
-        });
+        HistoryBrowserDialogManager.getInstance().showHistory(Collections.singleton(primitiveId));
     }
 
