Index: trunk/src/org/openstreetmap/josm/data/conflict/Conflict.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/conflict/Conflict.java	(revision 5297)
+++ trunk/src/org/openstreetmap/josm/data/conflict/Conflict.java	(revision 5298)
@@ -1,4 +1,6 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.conflict;
+
+import java.util.Map;
 
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -22,4 +24,7 @@
     private final T their;
     private final boolean isMyDeleted;
+    
+    // mergedMap is only set if the conflict results from merging two layers
+    private Map<PrimitiveId, PrimitiveId> mergedMap;
 
     public Conflict(T my, T their) {
@@ -111,3 +116,11 @@
         return isMyDeleted;
     }
+
+    public final Map<PrimitiveId, PrimitiveId> getMergedMap() {
+        return mergedMap;
+    }
+
+    public final void setMergedMap(Map<PrimitiveId, PrimitiveId> mergedMap) {
+        this.mergedMap = mergedMap;
+    }
 }
Index: trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java	(revision 5297)
+++ trunk/src/org/openstreetmap/josm/data/osm/DataSetMerger.java	(revision 5298)
@@ -134,4 +134,13 @@
             return null;
         return targetDataSet.getPrimitiveById(targetId);
+    }
+    
+    protected void addConflict(Conflict<?> c) {
+        c.setMergedMap(mergedMap);
+        conflicts.add(c);
+    }
+
+    protected void addConflict(OsmPrimitive my, OsmPrimitive their) {
+        addConflict(new Conflict<OsmPrimitive>(my, their));
     }
 
@@ -188,5 +197,5 @@
                         // add a conflict and don't delete the object
                         if (!objectsToDelete.contains(referrer)) {
-                            conflicts.add(target, source);
+                            addConflict(target, source);
                             it.remove();
                             flag = true;
@@ -235,5 +244,5 @@
                 newNodes.add(targetNode);
                 if (targetNode.isDeleted() && !conflicts.hasConflictForMy(targetNode)) {
-                    conflicts.add(new Conflict<OsmPrimitive>(targetNode, sourceNode, true));
+                    addConflict(new Conflict<OsmPrimitive>(targetNode, sourceNode, true));
                     targetNode.setDeleted(false);
                 }
@@ -263,5 +272,5 @@
             newMembers.add(newMember);
             if (targetMember.isDeleted() && !conflicts.hasConflictForMy(targetMember)) {
-                conflicts.add(new Conflict<OsmPrimitive>(targetMember, sourceMember.getMember(), true));
+                addConflict(new Conflict<OsmPrimitive>(targetMember, sourceMember.getMember(), true));
                 targetMember.setDeleted(false);
             }
@@ -317,5 +326,5 @@
             for (OsmPrimitive referrer: source.getReferrers()) {
                 if (targetDataSet.getPrimitiveById(referrer.getPrimitiveId()) == null) {
-                    conflicts.add(new Conflict<OsmPrimitive>(target, source, true));
+                    addConflict(new Conflict<OsmPrimitive>(target, source, true));
                     target.setDeleted(false);
                     break;
@@ -352,10 +361,10 @@
             // this have to be resolved manually.
             //
-            conflicts.add(target,source);
+            addConflict(target,source);
         } else if (! target.hasEqualSemanticAttributes(source)) {
             // target is modified and is not semantically equal with source. Can't automatically
             // resolve the differences
             // =>  create a conflict
-            conflicts.add(target,source);
+            addConflict(target,source);
         } else {
             // clone from other. mergeFrom will mainly copy
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMergeModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMergeModel.java	(revision 5297)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMergeModel.java	(revision 5298)
@@ -15,4 +15,5 @@
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Observable;
 
@@ -21,8 +22,11 @@
 import javax.swing.DefaultListSelectionModel;
 import javax.swing.JOptionPane;
+import javax.swing.JTable;
+import javax.swing.ListSelectionModel;
 import javax.swing.table.DefaultTableModel;
 import javax.swing.table.TableModel;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.PrimitiveId;
@@ -30,4 +34,5 @@
 import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.gui.widgets.OsmPrimitivesTableModel;
+import org.openstreetmap.josm.tools.CheckParameterUtil;
 
 /**
@@ -63,5 +68,5 @@
  * @see ListMerger
  */
-public abstract class ListMergeModel<T> extends Observable {
+public abstract class ListMergeModel<T extends PrimitiveId> extends Observable {
     public static final String FROZEN_PROP = ListMergeModel.class.getName() + ".frozen";
 
@@ -81,4 +86,7 @@
     private boolean isFrozen = false;
     private final ComparePairListModel comparePairListModel;
+    
+    private DataSet myDataset;
+    private Map<PrimitiveId, PrimitiveId> mergedMap;
 
     /**
@@ -118,5 +126,21 @@
      * @return Primitive from my dataset referenced by entry
      */
-    protected abstract OsmPrimitive getMyPrimitive(T entry);
+    protected OsmPrimitive getMyPrimitive(T entry) {
+        return getMyPrimitiveDefault(entry);
+    }
+    
+    protected final OsmPrimitive getMyPrimitiveDefault(PrimitiveId entry) {
+        OsmPrimitive result = myDataset.getPrimitiveById(entry);
+        if (result == null && mergedMap != null) {
+            PrimitiveId id = mergedMap.get(entry);
+            if (id == null && entry instanceof OsmPrimitive) {
+                id = mergedMap.get(((OsmPrimitive)entry).getPrimitiveId());
+            }
+            if (id != null) {
+                result = myDataset.getPrimitiveById(id);
+            }
+        }
+        return result;
+    }
 
     protected void buildMyEntriesTableModel() {
@@ -310,4 +334,14 @@
         getMergedEntries().clear();
         fireModelDataChanged();
+    }
+    
+    protected final void initPopulate(OsmPrimitive my, OsmPrimitive their, Map<PrimitiveId, PrimitiveId> mergedMap) {
+        CheckParameterUtil.ensureParameterNotNull(my, "my");
+        CheckParameterUtil.ensureParameterNotNull(their, "their");
+        this.myDataset = my.getDataSet();
+        this.mergedMap = mergedMap;
+        getMergedEntries().clear();
+        getMyEntries().clear();
+        getTheirEntries().clear();
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMerger.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMerger.java	(revision 5297)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMerger.java	(revision 5298)
@@ -36,4 +36,5 @@
 import javax.swing.event.ListSelectionListener;
 
+import org.openstreetmap.josm.data.osm.PrimitiveId;
 import org.openstreetmap.josm.gui.widgets.OsmPrimitivesTable;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
@@ -46,5 +47,5 @@
  * @see ListMergeModel
  */
-public abstract class ListMerger<T> extends JPanel implements PropertyChangeListener, Observer {
+public abstract class ListMerger<T extends PrimitiveId> extends JPanel implements PropertyChangeListener, Observer {
     protected OsmPrimitivesTable myEntriesTable;
     protected OsmPrimitivesTable mergedEntriesTable;
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMergeModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMergeModel.java	(revision 5297)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMergeModel.java	(revision 5298)
@@ -5,4 +5,5 @@
 
 import java.util.ArrayList;
+import java.util.Map;
 
 import javax.swing.table.DefaultTableModel;
@@ -10,14 +11,12 @@
 import org.openstreetmap.josm.command.WayNodesConflictResolverCommand;
 import org.openstreetmap.josm.data.conflict.Conflict;
-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.PrimitiveId;
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.gui.conflict.pair.ListMergeModel;
 import org.openstreetmap.josm.gui.conflict.pair.ListRole;
-import org.openstreetmap.josm.tools.CheckParameterUtil;
 
 public class NodeListMergeModel extends ListMergeModel<Node>{
-    private DataSet myDataset;
 
     /**
@@ -27,15 +26,11 @@
      * @param my  my way (i.e. the way in the local dataset)
      * @param their their way (i.e. the way in the server dataset)
+     * @param mergedMap The map of merged primitives if the conflict results from merging two layers
      * @exception IllegalArgumentException thrown, if my is null
      * @exception IllegalArgumentException  thrown, if their is null
      */
-    public void populate(Way my, Way their) {
-        this.myDataset = my.getDataSet();
+    public void populate(Way my, Way their, Map<PrimitiveId, PrimitiveId> mergedMap) {
+        initPopulate(my, their, mergedMap);
 
-        CheckParameterUtil.ensureParameterNotNull(my, "my");
-        CheckParameterUtil.ensureParameterNotNull(their, "their");
-        getMergedEntries().clear();
-        getMyEntries().clear();
-        getTheirEntries().clear();
         for (Node n : my.getNodes()) {
             getMyEntries().add(n);
@@ -85,9 +80,3 @@
         return (Node) getMyPrimitive(entry);
     }
-
-    @Override
-    protected OsmPrimitive getMyPrimitive(Node entry) {
-        return myDataset.getPrimitiveById(entry);
-    }
-
 }
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMerger.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMerger.java	(revision 5297)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMerger.java	(revision 5298)
@@ -57,5 +57,5 @@
         Way myWay = (Way)conflict.getMy();
         Way theirWay = (Way)conflict.getTheir();
-        ((NodeListMergeModel)model).populate(myWay, theirWay);
+        ((NodeListMergeModel)model).populate(myWay, theirWay, conflict.getMergedMap());
         myEntriesTable.setLayer(findLayerFor(myWay));
         theirEntriesTable.setLayer(findLayerFor(theirWay));
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberListMergeModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberListMergeModel.java	(revision 5297)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberListMergeModel.java	(revision 5298)
@@ -5,10 +5,11 @@
 
 import java.util.List;
+import java.util.Map;
 
 import javax.swing.table.DefaultTableModel;
 
 import org.openstreetmap.josm.command.RelationMemberConflictResolverCommand;
-import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.PrimitiveId;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
@@ -21,5 +22,4 @@
  */
 public class RelationMemberListMergeModel extends ListMergeModel<RelationMember>{
-    private DataSet myDataset;
 
     @Override
@@ -60,17 +60,11 @@
      * @param my my relation. Must not be null.
      * @param their their relation. Must not be null.
+     * @param mergedMap The map of merged primitives if the conflict results from merging two layers
      *
      * @throws IllegalArgumentException if my is null
      * @throws IllegalArgumentException if their is null
      */
-    public void populate(Relation my, Relation their) {
-        this.myDataset = my.getDataSet();
-
-        CheckParameterUtil.ensureParameterNotNull(my, "my");
-        CheckParameterUtil.ensureParameterNotNull(their, "their");
-
-        getMergedEntries().clear();
-        getMyEntries().clear();
-        getTheirEntries().clear();
+    public void populate(Relation my, Relation their, Map<PrimitiveId, PrimitiveId> mergedMap) {
+        initPopulate(my, their, mergedMap);
 
         for (RelationMember n : my.getMembers()) {
@@ -94,11 +88,10 @@
     @Override
     protected RelationMember cloneEntryForMergedList(RelationMember entry) {
-        OsmPrimitive primitive = getMyPrimitive(entry);
-        return new RelationMember(entry.getRole(), primitive);
+        return new RelationMember(entry.getRole(), getMyPrimitive(entry));
     }
 
     @Override
     protected OsmPrimitive getMyPrimitive(RelationMember entry) {
-        return myDataset.getPrimitiveById(entry.getMember());
+        return getMyPrimitiveDefault(entry.getMember());
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberMerger.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberMerger.java	(revision 5297)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberMerger.java	(revision 5298)
@@ -48,5 +48,5 @@
     public void populate(Conflict<? extends OsmPrimitive> conflict) {
         RelationMemberListMergeModel model = (RelationMemberListMergeModel)getModel();
-        model.populate((Relation)conflict.getMy(), (Relation)conflict.getTheir());
+        model.populate((Relation)conflict.getMy(), (Relation)conflict.getTheir(), conflict.getMergedMap());
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java	(revision 5297)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java	(revision 5298)
@@ -705,5 +705,5 @@
         @Override
         public void updateEnabledState() {
-            GuiHelper.runInEDT(new Runnable() {
+            GuiHelper.runInEDTAndWait(new Runnable() {
                 @Override
                 public void run() {
