Index: trunk/src/org/openstreetmap/josm/actions/DownloadPrimitiveAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/DownloadPrimitiveAction.java	(revision 6447)
+++ trunk/src/org/openstreetmap/josm/actions/DownloadPrimitiveAction.java	(revision 6448)
@@ -56,5 +56,5 @@
 
         DownloadObjectDialog dialog = new DownloadObjectDialog();
-        if (dialog.showDialog().getValue() != 1) return;
+        if (dialog.showDialog().getValue() != dialog.getContinueButtonIndex()) return;
 
         processItems(dialog.isNewLayerRequested(), dialog.getOsmIds(), dialog.isReferrersRequested(), dialog.isFullRelationRequested());
Index: trunk/src/org/openstreetmap/josm/actions/HistoryInfoAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/HistoryInfoAction.java	(revision 6447)
+++ trunk/src/org/openstreetmap/josm/actions/HistoryInfoAction.java	(revision 6448)
@@ -4,9 +4,8 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
-import java.util.Collection;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.gui.dialogs.OsmIdSelectionDialog;
 import org.openstreetmap.josm.gui.history.HistoryBrowserDialogManager;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -21,8 +20,9 @@
                 tr("Display history information about OSM ways, nodes, or relations."),
                 Shortcut.registerShortcut("core:historyinfo",
-                tr("History"), KeyEvent.VK_H, Shortcut.CTRL), false);
+                        tr("History"), KeyEvent.VK_H, Shortcut.CTRL), false);
         putValue("help", ht("/Action/ObjectHistory"));
         putValue("toolbar", "action/historyinfo");
         Main.toolbar.register(this);
+        setEnabled(true);
     }
 
@@ -30,21 +30,22 @@
     public void actionPerformed(ActionEvent ae) {
         DataSet set = getCurrentDataSet();
-        if (set != null) {
+        if (set != null && !set.getAllSelected().isEmpty()) {
             HistoryBrowserDialogManager.getInstance().showHistory(set.getAllSelected());
+        } else {
+            HistoryObjectIDDialog dialog = new HistoryObjectIDDialog();
+            if (dialog.showDialog().getValue() == dialog.getContinueButtonIndex()) {
+                HistoryBrowserDialogManager.getInstance().showHistory(dialog.getOsmIds());
+            }
         }
     }
 
-    @Override
-    public void updateEnabledState() {
-        if (getCurrentDataSet() == null) {
-            setEnabled(false);
-        } else {
-            updateEnabledState(getCurrentDataSet().getAllSelected());
+    public static class HistoryObjectIDDialog extends OsmIdSelectionDialog {
+
+        public HistoryObjectIDDialog() {
+            super(Main.parent, tr("Show history"), new String[]{tr("Show history"), tr("Cancel")});
+            setButtonIcons(new String[]{"dialogs/history.png", "cancel.png"});
+            init();
         }
     }
 
-    @Override
-    protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) {
-        setEnabled(!selection.isEmpty());
-    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/OsmIdSelectionDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/OsmIdSelectionDialog.java	(revision 6448)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/OsmIdSelectionDialog.java	(revision 6448)
@@ -0,0 +1,230 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.dialogs;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.PrimitiveId;
+import org.openstreetmap.josm.gui.ExtendedDialog;
+import org.openstreetmap.josm.gui.widgets.HistoryComboBox;
+import org.openstreetmap.josm.gui.widgets.HtmlPanel;
+import org.openstreetmap.josm.gui.widgets.JosmTextField;
+import org.openstreetmap.josm.gui.widgets.OsmIdTextField;
+import org.openstreetmap.josm.gui.widgets.OsmPrimitiveTypesComboBox;
+import org.openstreetmap.josm.tools.Utils;
+
+import javax.swing.BorderFactory;
+import javax.swing.GroupLayout;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.KeyStroke;
+import javax.swing.border.EtchedBorder;
+import javax.swing.plaf.basic.BasicComboBoxEditor;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.WindowEvent;
+import java.awt.event.WindowListener;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+import static org.openstreetmap.josm.tools.I18n.trc;
+
+/**
+ * Dialog prompt to user to let him choose OSM primitives by specifying their type and IDs.
+ * @since 6448, split from DownloadObjectDialog
+ */
+public class OsmIdSelectionDialog extends ExtendedDialog implements WindowListener {
+
+    protected final JPanel panel = new JPanel();
+    protected final OsmPrimitiveTypesComboBox cbType = new OsmPrimitiveTypesComboBox();
+    protected final OsmIdTextField tfId = new OsmIdTextField();
+    protected final HistoryComboBox cbId = new HistoryComboBox();
+    protected final GroupLayout layout = new GroupLayout(panel);
+
+    public OsmIdSelectionDialog(Component parent, String title, String[] buttonTexts) {
+        super(parent, title, buttonTexts);
+    }
+
+    public OsmIdSelectionDialog(Component parent, String title, String[] buttonTexts, boolean modal) {
+        super(parent, title, buttonTexts, modal);
+    }
+
+    public OsmIdSelectionDialog(Component parent, String title, String[] buttonTexts, boolean modal, boolean disposeOnClose) {
+        super(parent, title, buttonTexts, modal, disposeOnClose);
+    }
+
+    protected void init() {
+        panel.setLayout(layout);
+        layout.setAutoCreateGaps(true);
+        layout.setAutoCreateContainerGaps(true);
+
+        JLabel lbl1 = new JLabel(tr("Object type:"));
+
+        cbType.addItem(trc("osm object types", "mixed"));
+        cbType.setToolTipText(tr("Choose the OSM object type"));
+        JLabel lbl2 = new JLabel(tr("Object ID:"));
+
+        cbId.setEditor(new BasicComboBoxEditor() {
+            @Override
+            protected JosmTextField createEditorComponent() {
+                return tfId;
+            }
+        });
+        cbId.setToolTipText(tr("Enter the ID of the object that should be downloaded"));
+        restorePrimitivesHistory(cbId);
+
+        // forward the enter key stroke to the download button
+        tfId.getKeymap().removeKeyStrokeBinding(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, false));
+        tfId.setPreferredSize(new Dimension(400, tfId.getPreferredSize().height));
+
+        HtmlPanel help = new HtmlPanel(tr("Object IDs can be separated by comma or space.<br/>"
+                + " Examples: <b><ul><li>1 2 5</li><li>1,2,5</li></ul><br/></b>"
+                + " In mixed mode, specify objects like this: <b>w123, n110, w12, r15</b><br/>"));
+        help.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
+
+        cbType.addItemListener(new ItemListener() {
+            @Override
+            public void itemStateChanged(ItemEvent e) {
+                tfId.setType(cbType.getType());
+                tfId.performValidation();
+            }
+        });
+
+        final GroupLayout.SequentialGroup sequentialGroup = layout.createSequentialGroup()
+                .addGroup(layout.createParallelGroup()
+                        .addComponent(lbl1)
+                        .addComponent(cbType, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE))
+                .addGroup(layout.createParallelGroup()
+                        .addComponent(lbl2)
+                        .addComponent(cbId, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE));
+
+        final GroupLayout.ParallelGroup parallelGroup = layout.createParallelGroup()
+                .addGroup(layout.createSequentialGroup()
+                        .addGroup(layout.createParallelGroup()
+                                .addComponent(lbl1)
+                                .addComponent(lbl2)
+                        )
+                        .addGroup(layout.createParallelGroup()
+                                .addComponent(cbType)
+                                .addComponent(cbId))
+                );
+
+        for (Component i : getComponentsBeforeHelp()) {
+            sequentialGroup.addComponent(i);
+            parallelGroup.addComponent(i);
+        }
+
+        layout.setVerticalGroup(sequentialGroup.addComponent(help));
+        layout.setHorizontalGroup(parallelGroup.addComponent(help));
+    }
+
+    /**
+     * Let subclasses add custom components between the id input field and the help text
+     * @return the collections to add
+     */
+    protected Collection<Component> getComponentsBeforeHelp() {
+        return Collections.emptySet();
+    }
+
+    /**
+     * Allows subclasses to specify a different continue button index. If this button is pressed, the history is updated.
+     * @return the button index
+     */
+    public int getContinueButtonIndex() {
+        return 1;
+    }
+
+    /**
+     * Restore the current history from the preferences
+     *
+     * @param cbHistory the {@link HistoryComboBox} to which the history is restored to
+     */
+    protected void restorePrimitivesHistory(HistoryComboBox cbHistory) {
+        java.util.List<String> cmtHistory = new LinkedList<String>(Main.pref.getCollection(getClass().getName() + ".primitivesHistory", new LinkedList<String>()));
+        // we have to reverse the history, because ComboBoxHistory will reverse it again in addElement()
+        Collections.reverse(cmtHistory);
+        cbHistory.setPossibleItems(cmtHistory);
+    }
+
+    /**
+     * Remind the current history in the preferences
+     *
+     * @param cbHistory the {@link HistoryComboBox} of which to restore the history
+     */
+    protected void remindPrimitivesHistory(HistoryComboBox cbHistory) {
+        cbHistory.addCurrentItemToHistory();
+        Main.pref.putCollection(getClass().getName() + ".primitivesHistory", cbHistory.getHistory());
+    }
+
+    /**
+     * Gets the requested OSM object IDs.
+     *
+     * @return The list of requested OSM object IDs
+     */
+    public final List<PrimitiveId> getOsmIds() {
+        return tfId.getIds();
+    }
+
+    @Override
+    public void setupDialog() {
+        setContent(panel, false);
+        cbType.setSelectedIndex(Main.pref.getInteger("downloadprimitive.lasttype", 0));
+        tfId.setType(cbType.getType());
+        if (Main.pref.getBoolean("downloadprimitive.autopaste", true)) {
+            tryToPasteFromClipboard(tfId, cbType);
+        }
+        setDefaultButton(getContinueButtonIndex());
+        addWindowListener(this);
+        super.setupDialog();
+    }
+
+    protected void tryToPasteFromClipboard(OsmIdTextField tfId, OsmPrimitiveTypesComboBox cbType) {
+        String buf = Utils.getClipboardContent();
+        if (buf != null) {
+            if (buf.contains("node")) cbType.setSelectedIndex(0);
+            if (buf.contains("way")) cbType.setSelectedIndex(1);
+            if (buf.contains("relation")) cbType.setSelectedIndex(2);
+            String[] res = buf.split("/");
+            String txt;
+            if (res.length > 0) {
+                txt = res[res.length - 1];
+                if (txt.isEmpty() && txt.length() > 1) txt = res[res.length - 2];
+            } else {
+                txt = buf;
+            }
+            if (buf.length() <= Main.pref.getInteger("downloadprimitive.max-autopaste-length", 2000)) {
+                tfId.tryToPasteFrom(txt);
+            }
+        }
+    }
+
+    @Override public void windowClosed(WindowEvent e) {
+        if (e != null && e.getComponent() == this && getValue() == getContinueButtonIndex()) {
+            Main.pref.putInteger("downloadprimitive.lasttype", cbType.getSelectedIndex());
+
+            if (!tfId.readIds()) {
+                JOptionPane.showMessageDialog(getParent(),
+                        tr("Invalid ID list specified\n"
+                                + "Cannot continue."),
+                        tr("Information"),
+                        JOptionPane.INFORMATION_MESSAGE
+                );
+                return;
+            }
+
+            remindPrimitivesHistory(cbId);
+        }
+    }
+
+    @Override public void windowOpened(WindowEvent e) {}
+    @Override public void windowClosing(WindowEvent e) {}
+    @Override public void windowIconified(WindowEvent e) {}
+    @Override public void windowDeiconified(WindowEvent e) {}
+    @Override public void windowActivated(WindowEvent e) {}
+    @Override public void windowDeactivated(WindowEvent e) {}
+}
Index: trunk/src/org/openstreetmap/josm/gui/download/DownloadObjectDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/download/DownloadObjectDialog.java	(revision 6447)
+++ trunk/src/org/openstreetmap/josm/gui/download/DownloadObjectDialog.java	(revision 6448)
@@ -3,37 +3,17 @@
 
 import static org.openstreetmap.josm.tools.I18n.tr;
-import static org.openstreetmap.josm.tools.I18n.trc;
 
 import java.awt.Component;
-import java.awt.Dimension;
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
-import java.awt.event.KeyEvent;
 import java.awt.event.WindowEvent;
-import java.awt.event.WindowListener;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
+import java.util.Arrays;
+import java.util.Collection;
 
-import javax.swing.BorderFactory;
-import javax.swing.GroupLayout;
 import javax.swing.JCheckBox;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.KeyStroke;
-import javax.swing.border.EtchedBorder;
-import javax.swing.plaf.basic.BasicComboBoxEditor;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
-import org.openstreetmap.josm.data.osm.PrimitiveId;
-import org.openstreetmap.josm.gui.ExtendedDialog;
-import org.openstreetmap.josm.gui.widgets.HistoryComboBox;
-import org.openstreetmap.josm.gui.widgets.HtmlPanel;
-import org.openstreetmap.josm.gui.widgets.OsmIdTextField;
-import org.openstreetmap.josm.gui.widgets.OsmPrimitiveTypesComboBox;
-import org.openstreetmap.josm.tools.Utils;
-import org.openstreetmap.josm.gui.widgets.JosmTextField;
+import org.openstreetmap.josm.gui.dialogs.OsmIdSelectionDialog;
 
 /**
@@ -41,15 +21,10 @@
  * @since 5765
  */
-public class DownloadObjectDialog extends ExtendedDialog implements WindowListener {
+public class DownloadObjectDialog extends OsmIdSelectionDialog {
 
-    protected final JPanel panel = new JPanel();
-    protected final OsmPrimitiveTypesComboBox cbType = new OsmPrimitiveTypesComboBox();
-    protected final OsmIdTextField tfId = new OsmIdTextField();
-    protected final HistoryComboBox cbId = new HistoryComboBox();
-    
     protected final JCheckBox referrers = new JCheckBox(tr("Download referrers (parent relations)"));
     protected final JCheckBox fullRel   = new JCheckBox(tr("Download relation members"));
     protected final JCheckBox newLayer  = new JCheckBox(tr("Separate Layer"));
-    
+
     /**
      * Constructs a new DownloadObjectDialog with Main.parent as parent component.
@@ -64,66 +39,28 @@
      */
     public DownloadObjectDialog(Component parent) {
-        super(parent, tr("Download object"), new String[] {tr("Download object"), tr("Cancel")});
+        super(parent, tr("Download object"), new String[]{tr("Download object"), tr("Cancel")});
         init();
+        setButtonIcons(new String[]{"download.png", "cancel.png"});
+        setToolTipTexts(new String[]{
+                tr("Start downloading"),
+                tr("Close dialog and cancel downloading")
+        });
+        configureContextsensitiveHelp("/Action/DownloadObject", true /* show help button */);
     }
-    
-    protected void init() {
-        GroupLayout layout = new GroupLayout(panel);
-        panel.setLayout(layout);
-        layout.setAutoCreateGaps(true);
-        layout.setAutoCreateContainerGaps(true);
 
-        JLabel lbl1 = new JLabel(tr("Object type:"));
-        
-        cbType.addItem(trc("osm object types", "mixed"));
-        cbType.setToolTipText(tr("Choose the OSM object type"));
-        JLabel lbl2 = new JLabel(tr("Object ID:"));
-        
-        cbId.setEditor(new BasicComboBoxEditor() {
-            @Override
-            protected JosmTextField createEditorComponent() {
-                return tfId;
-            }
-        });
-        cbId.setToolTipText(tr("Enter the ID of the object that should be downloaded"));
-        restorePrimitivesHistory(cbId);
-        
-        // forward the enter key stroke to the download button
-        tfId.getKeymap().removeKeyStrokeBinding(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, false));
-        tfId.setPreferredSize(new Dimension(400, tfId.getPreferredSize().height));
-        
+    protected Collection<Component> getComponentsBeforeHelp() {
         newLayer.setToolTipText(tr("Select if the data should be downloaded into a new layer"));
         newLayer.setSelected(Main.pref.getBoolean("download.newlayer"));
-        
+
         referrers.setToolTipText(tr("Select if the referrers of the object should be downloaded as well, i.e.,"
                 + "parent relations and for nodes, additionally, parent ways"));
         referrers.setSelected(Main.pref.getBoolean("downloadprimitive.referrers", true));
-        
+
         fullRel.setToolTipText(tr("Select if the members of a relation should be downloaded as well"));
         fullRel.setSelected(Main.pref.getBoolean("downloadprimitive.full", true));
-        
-        HtmlPanel help = new HtmlPanel(tr("Object IDs can be separated by comma or space.<br/>"
-                + " Examples: <b><ul><li>1 2 5</li><li>1,2,5</li></ul><br/></b>"
-                + " In mixed mode, specify objects like this: <b>w123, n110, w12, r15</b><br/>"));
-        help.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
-
-        layout.setVerticalGroup(layout.createSequentialGroup()
-            .addGroup(layout.createParallelGroup()
-                .addComponent(lbl1)
-                .addComponent(cbType, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE))
-            .addGroup(layout.createParallelGroup()
-                .addComponent(lbl2)
-                .addComponent(cbId, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE))
-            .addComponent(referrers)
-            .addComponent(fullRel)
-            .addComponent(newLayer)
-            .addComponent(help)
-        );
 
         cbType.addItemListener(new ItemListener() {
             @Override
             public void itemStateChanged(ItemEvent e) {
-                tfId.setType(cbType.getType());
-                tfId.performValidation();
                 referrers.setText(cbType.getType() == OsmPrimitiveType.NODE
                         ? tr("Download referrers (parent relations and ways)")
@@ -132,83 +69,7 @@
         });
 
-        layout.setHorizontalGroup(layout.createParallelGroup()
-            .addGroup(layout.createSequentialGroup()
-                .addGroup(layout.createParallelGroup()
-                    .addComponent(lbl1)
-                    .addComponent(lbl2)
-                )
-                .addGroup(layout.createParallelGroup()
-                    .addComponent(cbType)
-                    .addComponent(cbId))
-                )
-            .addComponent(referrers)
-            .addComponent(fullRel)
-            .addComponent(newLayer)
-            .addComponent(help)
-        );
+        return Arrays.<Component>asList(referrers, fullRel, newLayer);
     }
 
-    @Override
-    public void setupDialog() {
-        
-        setContent(panel, false);
-        setButtonIcons(new String[] {"download.png", "cancel.png"});
-        setToolTipTexts(new String[] {
-                tr("Start downloading"),
-                tr("Close dialog and cancel downloading")
-        });
-        setDefaultButton(1);
-        configureContextsensitiveHelp("/Action/DownloadObject", true /* show help button */);
-        cbType.setSelectedIndex(Main.pref.getInteger("downloadprimitive.lasttype", 0));
-        tfId.setType(cbType.getType());
-        if (Main.pref.getBoolean("downloadprimitive.autopaste", true)) { 
-            tryToPasteFromClipboard(tfId, cbType);
-        }
-        
-        addWindowListener(this);
-        super.setupDialog();
-    }
-    
-    /**
-     * Restore the current history from the preferences
-     *
-     * @param cbHistory
-     */
-    protected void restorePrimitivesHistory(HistoryComboBox cbHistory) {
-        List<String> cmtHistory = new LinkedList<String>(Main.pref.getCollection(getClass().getName() + ".primitivesHistory", new LinkedList<String>()));
-        // we have to reverse the history, because ComboBoxHistory will reverse it again in addElement()
-        Collections.reverse(cmtHistory);
-        cbHistory.setPossibleItems(cmtHistory);
-    }
-    
-    /**
-     * Remind the current history in the preferences
-     * @param cbHistory
-     */
-    protected void remindPrimitivesHistory(HistoryComboBox cbHistory) {
-        cbHistory.addCurrentItemToHistory();
-        Main.pref.putCollection(getClass().getName() + ".primitivesHistory", cbHistory.getHistory());
-    }
-
-    protected void tryToPasteFromClipboard(OsmIdTextField tfId, OsmPrimitiveTypesComboBox cbType) {
-        String buf = Utils.getClipboardContent();
-        if (buf != null) {
-            if (buf.contains("node")) cbType.setSelectedIndex(0);
-            if (buf.contains("way")) cbType.setSelectedIndex(1);
-            if (buf.contains("relation")) cbType.setSelectedIndex(2);
-            String[] res = buf.split("/");
-            String txt;
-            if (res.length>0) {
-                txt = res[res.length-1];
-                if (txt.isEmpty() && txt.length()>1) txt=res[res.length-2];
-            } else {
-                txt=buf;
-            }
-            if (buf.length() <= Main.pref.getInteger("downloadprimitive.max-autopaste-length", 2000)) {
-                tfId.tryToPasteFrom(txt);
-            }
-        }
-    }
-    
     /**
      * Determines if a new layer has been requested.
@@ -218,5 +79,5 @@
         return newLayer.isSelected();
     }
-    
+
     /**
      * Determines if relation members have been requested.
@@ -226,5 +87,5 @@
         return fullRel.isSelected();
     }
-    
+
     /**
      * Determines if referrers have been requested.
@@ -234,39 +95,13 @@
         return referrers.isSelected();
     }
-    
-    /**
-     * Gets the requested OSM object IDs.
-     * @return The list of requested OSM object IDs
-     */
-    public final List<PrimitiveId> getOsmIds() {
-        return tfId.getIds();
-    }
 
-    @Override public void windowClosed(WindowEvent e) {
+    @Override
+    public void windowClosed(WindowEvent e) {
+        super.windowClosed(e);
         if (e != null && e.getComponent() == this && getValue() == 1) {
-            Main.pref.putInteger("downloadprimitive.lasttype", cbType.getSelectedIndex());
             Main.pref.put("downloadprimitive.referrers", referrers.isSelected());
             Main.pref.put("downloadprimitive.full", fullRel.isSelected());
             Main.pref.put("download.newlayer", newLayer.isSelected());
-            
-            if (!tfId.readIds()) {
-                JOptionPane.showMessageDialog(getParent(),
-                        tr("Invalid ID list specified\n"
-                        + "Cannot download object."),
-                        tr("Information"),
-                        JOptionPane.INFORMATION_MESSAGE
-                );
-                return;
-            }
-            
-            remindPrimitivesHistory(cbId);
         }
     }
-
-    @Override public void windowOpened(WindowEvent e) {}
-    @Override public void windowClosing(WindowEvent e) {}
-    @Override public void windowIconified(WindowEvent e) {}
-    @Override public void windowDeiconified(WindowEvent e) {}
-    @Override public void windowActivated(WindowEvent e) {}
-    @Override public void windowDeactivated(WindowEvent e) {}
 }
Index: trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java	(revision 6447)
+++ trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java	(revision 6448)
@@ -17,4 +17,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.PrimitiveId;
 import org.openstreetmap.josm.data.osm.history.History;
 import org.openstreetmap.josm.data.osm.history.HistoryDataSet;
@@ -139,6 +140,6 @@
     }
 
-    public void showHistory(final Collection<OsmPrimitive> primitives) {
-        final Collection<OsmPrimitive> notNewPrimitives = Utils.filter(primitives, notNewPredicate);
+    public void showHistory(final Collection<? extends PrimitiveId> primitives) {
+        final Collection<? extends PrimitiveId> notNewPrimitives = Utils.filter(primitives, notNewPredicate);
         if (notNewPrimitives.isEmpty()) {
             JOptionPane.showMessageDialog(
@@ -150,8 +151,10 @@
         }
 
-        Collection<OsmPrimitive> toLoad = Utils.filter(primitives, unloadedHistoryPredicate);
+        Collection<PrimitiveId> toLoad = Utils.filter(primitives, unloadedHistoryPredicate);
         if (!toLoad.isEmpty()) {
             HistoryLoadTask task = new HistoryLoadTask();
-            task.add(notNewPrimitives);
+            for (PrimitiveId p : notNewPrimitives) {
+                task.add(p);
+            }
             Main.worker.submit(task);
         }
@@ -162,6 +165,6 @@
             public void run() {
                 try {
-                    for (OsmPrimitive p : notNewPrimitives) {
-                        final History h = HistoryDataSet.getInstance().getHistory(p.getPrimitiveId());
+                    for (PrimitiveId p : notNewPrimitives) {
+                        final History h = HistoryDataSet.getInstance().getHistory(p);
                         if (h == null) {
                             continue;
@@ -183,11 +186,11 @@
     }
 
-    private final Predicate<OsmPrimitive> unloadedHistoryPredicate = new Predicate<OsmPrimitive>() {
+    private final Predicate<PrimitiveId> unloadedHistoryPredicate = new Predicate<PrimitiveId>() {
 
         HistoryDataSet hds = HistoryDataSet.getInstance();
 
         @Override
-        public boolean evaluate(OsmPrimitive p) {
-            History h = hds.getHistory(p.getPrimitiveId());
+        public boolean evaluate(PrimitiveId p) {
+            History h = hds.getHistory(p);
             if (h == null)
                 // reload if the history is not in the cache yet
@@ -201,8 +204,8 @@
     };
 
-    private final Predicate<OsmPrimitive> notNewPredicate = new Predicate<OsmPrimitive>() {
+    private final Predicate<PrimitiveId> notNewPredicate = new Predicate<PrimitiveId>() {
 
         @Override
-        public boolean evaluate(OsmPrimitive p) {
+        public boolean evaluate(PrimitiveId p) {
             return !p.isNew();
         }
