Index: applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/OsbLayer.java
===================================================================
--- applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/OsbLayer.java	(revision 20679)
+++ applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/OsbLayer.java	(revision 20682)
@@ -38,5 +38,7 @@
 import java.awt.event.MouseListener;
 import java.awt.image.ImageObserver;
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 
 import javax.swing.Icon;
@@ -237,6 +239,11 @@
                 Node n = getNearestNode(e.getPoint());
                 if(n != null && data.getNodes().contains(n)) {
-                    dialog.setSelectedNode(n);
+                    List<OsmPrimitive> selected = new ArrayList<OsmPrimitive>();
+                    selected.add(n);
+                    data.setSelected(selected);
+                } else {
+                    data.setSelected(new ArrayList<OsmPrimitive>());
                 }
+                data.fireSelectionChanged();
             }
         }
Index: applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/OsbPlugin.java
===================================================================
--- applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/OsbPlugin.java	(revision 20679)
+++ applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/OsbPlugin.java	(revision 20682)
@@ -38,4 +38,5 @@
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.MapView;
@@ -160,4 +161,7 @@
 
     public void updateData() {
+        // store the current selected node
+        Node selectedNode = getDialog().getSelectedNode();
+        
         // determine the bounds of the currently visible area
         Bounds bounds = null;
@@ -190,4 +194,7 @@
             }
         }
+        
+        // restore node selection
+        dialog.setSelectedNode(selectedNode);
     }
 
Index: applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/gui/OsbDialog.java
===================================================================
--- applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/gui/OsbDialog.java	(revision 20679)
+++ applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/gui/OsbDialog.java	(revision 20682)
@@ -38,4 +38,5 @@
 import java.awt.event.MouseListener;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
@@ -57,12 +58,20 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.SelectionChangedListener;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent;
+import org.openstreetmap.josm.data.osm.event.DataChangedEvent;
+import org.openstreetmap.josm.data.osm.event.DataSetListener;
+import org.openstreetmap.josm.data.osm.event.NodeMovedEvent;
+import org.openstreetmap.josm.data.osm.event.PrimitivesAddedEvent;
+import org.openstreetmap.josm.data.osm.event.PrimitivesRemovedEvent;
+import org.openstreetmap.josm.data.osm.event.RelationMembersChangedEvent;
+import org.openstreetmap.josm.data.osm.event.TagsChangedEvent;
+import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent;
 import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
 import org.openstreetmap.josm.gui.dialogs.ToggleDialog;
-import org.openstreetmap.josm.gui.layer.DataChangeListener;
 import org.openstreetmap.josm.gui.layer.Layer;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.plugins.osb.ConfigKeys;
 import org.openstreetmap.josm.plugins.osb.OsbObserver;
@@ -79,6 +88,6 @@
 import org.openstreetmap.josm.tools.Shortcut;
 
-public class OsbDialog extends ToggleDialog implements OsbObserver, ListSelectionListener, LayerChangeListener,
-DataChangeListener, MouseListener, OsbActionObserver {
+public class OsbDialog extends ToggleDialog implements OsbObserver, ListSelectionListener, LayerChangeListener, 
+DataSetListener, SelectionChangedListener, MouseListener, OsbActionObserver {
 
     private static final long serialVersionUID = 1L;
@@ -216,14 +225,8 @@
         closeIssueAction.addActionObserver(this);
         setConnectionMode(offline);
+        DataSet.selListeners.add(this);
     }
 
     public synchronized void update(final DataSet dataset) {
-        // store the last selection
-        OsbListItem listItem = (OsbListItem) bugList.getSelectedValue();
-        Node lastNode = null;
-        if(listItem != null) {
-            lastNode = listItem.getNode();
-        }
-
         // create a new list model
         bugListModel = new DefaultListModel();
@@ -236,9 +239,4 @@
         }
         bugList.setModel(bugListModel);
-
-        // restore the last selection 
-        if(lastNode != null) {
-            bugList.setSelectedValue(new OsbListItem(lastNode), true);
-        }
     }
 
@@ -302,8 +300,4 @@
             bugListModel.removeAllElements();
         }
-    }
-
-    public void dataChanged(OsmDataLayer l) {
-        update(l.data);
     }
 
@@ -401,9 +395,17 @@
 
     public Node getSelectedNode() {
-        return ((OsbListItem)bugList.getSelectedValue()).getNode();
+        if(bugList.getSelectedValue() != null) {
+            return ((OsbListItem)bugList.getSelectedValue()).getNode();
+        } else {
+            return null;
+        }
     }
 
     public void setSelectedNode(Node node) {
-        bugList.setSelectedValue(new OsbListItem(node), true);
+        if(node == null) {
+            bugList.clearSelection();
+        } else {
+            bugList.setSelectedValue(new OsbListItem(node), true);
+        }
     }
 
@@ -413,3 +415,34 @@
         toggleConnectionMode.setSelected(offline);
     }
+
+    public void dataChanged(DataChangedEvent event) {
+        update(event.getDataset());
+    }
+
+    public void nodeMoved(NodeMovedEvent event) {}
+
+    public void otherDatasetChange(AbstractDatasetChangedEvent event) {}
+
+    public void primtivesAdded(PrimitivesAddedEvent event) {}
+
+    public void primtivesRemoved(PrimitivesRemovedEvent event) {}
+
+    public void relationMembersChanged(RelationMembersChangedEvent event) {}
+
+    public void tagsChanged(TagsChangedEvent event) {}
+
+    public void wayNodesChanged(WayNodesChangedEvent event) {}
+
+    public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
+        if(newSelection.size() == 1 && newSelection.iterator().next() instanceof Node) {
+            Node selectedNode = (Node) newSelection.iterator().next();
+            if(osbPlugin.getLayer().getDataSet().getNodes().contains(selectedNode)) {
+                setSelectedNode(selectedNode);
+            } else {
+                bugList.clearSelection();
+            }
+        } else {
+            bugList.clearSelection();
+        }
+    }
 }
