Index: trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 2487)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 2488)
@@ -45,4 +45,5 @@
 import org.openstreetmap.josm.gui.dialogs.relation.GenericRelationEditor;
 import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor;
+import org.openstreetmap.josm.gui.layer.DataChangeListener;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
@@ -59,5 +60,5 @@
  * objects are visible on the map and can be selected there. Relations are not.
  */
-public class RelationListDialog extends ToggleDialog implements LayerChangeListener, DataSetListener {
+public class RelationListDialog extends ToggleDialog implements LayerChangeListener, DataSetListener, DataChangeListener {
     //private static final Logger logger = Logger.getLogger(RelationListDialog.class.getName());
 
@@ -522,4 +523,5 @@
 
         public synchronized void setRelations(Collection<Relation> relations) {
+            List<Relation> sel =  getSelectedRelations();
             if (relations == null) {
                 this.relations = null;
@@ -534,5 +536,5 @@
             sort();
             fireIntervalAdded(this, 0, getSize());
-            selectionModel.clearSelection();
+            setSelectedRelations(sel);
         }
 
@@ -631,4 +633,5 @@
         public List<Relation> getSelectedNonNewRelations() {
             ArrayList<Relation> ret = new ArrayList<Relation>();
+            if (relations == null) return ret;
             for (int i=0; i<getSize();i++) {
                 if (!selectionModel.isSelectedIndex(i)) {
@@ -651,4 +654,5 @@
         public List<Relation> getSelectedRelations() {
             ArrayList<Relation> ret = new ArrayList<Relation>();
+            if (relations == null) return ret;
             for (int i=0; i<getSize();i++) {
                 if (!selectionModel.isSelectedIndex(i)) {
@@ -706,7 +710,9 @@
         if (a != null && a instanceof OsmDataLayer) {
             ((OsmDataLayer)a).data.removeDataSetListener(this);
+            ((OsmDataLayer)a).listenerDataChanged.remove(this);
         }
         if (b != null && b instanceof OsmDataLayer) {
             ((OsmDataLayer)b).data.addDataSetListener(this);
+            ((OsmDataLayer)b).listenerDataChanged.add(this);
         }
 
@@ -786,3 +792,12 @@
         }
     }
+
+    /* ---------------------------------------------------------------------------------- */
+    /* DataSetListener                                                                    */
+    /* ---------------------------------------------------------------------------------- */
+    public void dataChanged(OsmDataLayer l) {
+        if (l != null && l == Main.main.getEditLayer()) {
+            initFromLayer(l);
+        }
+    }
 }
