Index: /trunk/src/org/openstreetmap/josm/data/osm/history/HistoryDataSet.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/history/HistoryDataSet.java	(revision 2960)
+++ /trunk/src/org/openstreetmap/josm/data/osm/history/HistoryDataSet.java	(revision 2961)
@@ -7,7 +7,11 @@
 import java.util.concurrent.CopyOnWriteArrayList;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.data.osm.PrimitiveId;
 import org.openstreetmap.josm.data.osm.SimplePrimitiveId;
+import org.openstreetmap.josm.gui.MapView;
+import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
+import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 
@@ -17,5 +21,5 @@
  *
  */
-public class HistoryDataSet {
+public class HistoryDataSet implements LayerChangeListener{
     //private final static Logger logger = Logger.getLogger(HistoryDataSet.class.getName());
 
@@ -31,4 +35,5 @@
         if (historyDataSet == null) {
             historyDataSet = new HistoryDataSet();
+            MapView.addLayerChangeListener(historyDataSet);
         }
         return  historyDataSet;
@@ -57,4 +62,10 @@
         for (HistoryDataSetListener l : listeners) {
             l.historyUpdated(this, id);
+        }
+    }
+
+    protected void fireCacheCleared() {
+        for (HistoryDataSetListener l : listeners) {
+            l.historyDataSetCleared(this);
         }
     }
@@ -151,3 +162,16 @@
         fireHistoryUpdated(null);
     }
+
+    /* ------------------------------------------------------------------------------ */
+    /* interface LayerChangeListener                                                  */
+    /* ------------------------------------------------------------------------------ */
+    public void activeLayerChange(Layer oldLayer, Layer newLayer) {/* irrelevant in this context */}
+    public void layerAdded(Layer newLayer) {/* irrelevant in this context */}
+    public void layerRemoved(Layer oldLayer) {
+        if (Main.map == null || Main.map.mapView == null) return;
+        if (Main.map.mapView.getNumLayers() == 0) {
+            data.clear();
+            fireCacheCleared();
+        }
+    }
 }
Index: /trunk/src/org/openstreetmap/josm/data/osm/history/HistoryDataSetListener.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/history/HistoryDataSetListener.java	(revision 2960)
+++ /trunk/src/org/openstreetmap/josm/data/osm/history/HistoryDataSetListener.java	(revision 2961)
@@ -5,4 +5,18 @@
 
 public interface HistoryDataSetListener {
+    /**
+     * Fired by a {@see HistoryDataSet} if the cached history of an OSM primitive with
+     * id <code>id</code> is updated
+     * 
+     * @param source the data set firing the event
+     * @param id the id of the updated primitive
+     */
     void historyUpdated(HistoryDataSet source, PrimitiveId id);
+
+    /**
+     * Fired by a {@see HistoryDataSet} if the history cached is cleared.
+     * 
+     * @param source the history data set firing the event
+     */
+    void historyDataSetCleared(HistoryDataSet source);
 }
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/HistoryDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/HistoryDialog.java	(revision 2960)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/HistoryDialog.java	(revision 2961)
@@ -43,4 +43,5 @@
 import org.openstreetmap.josm.gui.OsmPrimitivRenderer;
 import org.openstreetmap.josm.gui.SideButton;
+import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.gui.history.HistoryBrowserDialogManager;
 import org.openstreetmap.josm.gui.history.HistoryLoadTask;
@@ -71,4 +72,6 @@
         build();
         DataSet.selListeners.add(model);
+
+        HelpUtil.setHelpContext(this, HelpUtil.ht("/Dialog/HistoryDialog"));
     }
 
@@ -146,5 +149,12 @@
     }
 
+    /* ----------------------------------------------------------------------------- */
+    /* interface HistoryDataSetListener                                              */
+    /* ----------------------------------------------------------------------------- */
     public void historyUpdated(HistoryDataSet source, PrimitiveId primitiveId) {
+        model.refresh();
+    }
+
+    public void historyDataSetCleared(HistoryDataSet source) {
         model.refresh();
     }
@@ -317,6 +327,12 @@
         protected List<OsmPrimitive> filterPrimitivesWithUnloadedHistory(Collection<OsmPrimitive> primitives) {
             ArrayList<OsmPrimitive> ret = new ArrayList<OsmPrimitive>(primitives.size());
+            HistoryDataSet hds = HistoryDataSet.getInstance();
             for (OsmPrimitive p: primitives) {
-                if (HistoryDataSet.getInstance().getHistory(p.getPrimitiveId()) == null) {
+                if (hds.getHistory(p.getPrimitiveId()) == null) {
+                    // reload if the history is not in the cache yet
+                    ret.add(p);
+                } else if (!p.isNew() && hds.getHistory(p.getPrimitiveId()).getByVersion(p.getUniqueId()) == null) {
+                    // reload if the history object of the selected object is not in the cache
+                    // yet
                     ret.add(p);
                 }
Index: /trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialog.java	(revision 2960)
+++ /trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialog.java	(revision 2961)
@@ -108,4 +108,11 @@
     }
 
+    public void unlinkAsListener() {
+        getHistoryBrowser().getModel().unlinkAsListener();
+    }
+
+    /* ---------------------------------------------------------------------------------- */
+    /* interface HistoryDataSetListener                                                   */
+    /* ---------------------------------------------------------------------------------- */
     public void historyUpdated(HistoryDataSet source, PrimitiveId primitiveId) {
         if (primitiveId == null || primitiveId.equals(browser.getHistory().getPrimitmiveId())) {
@@ -114,7 +121,8 @@
     }
 
-    public void unlinkAsListener() {
-        getHistoryBrowser().getModel().unlinkAsListener();
+    public void historyDataSetCleared(HistoryDataSet source) {
+        closeAction.run();
     }
+
 
     class CloseAction extends AbstractAction {
