Index: /trunk/src/org/openstreetmap/josm/data/conflict/ConflictCollection.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/conflict/ConflictCollection.java	(revision 2948)
+++ /trunk/src/org/openstreetmap/josm/data/conflict/ConflictCollection.java	(revision 2949)
@@ -34,5 +34,5 @@
  */
 public class ConflictCollection implements Iterable<Conflict<?>>{
-    private ArrayList<Conflict<?>> conflicts;
+    private final List<Conflict<?>> conflicts;
     private CopyOnWriteArrayList<IConflictListener> listeners;
 
@@ -313,3 +313,8 @@
         return size() == 0;
     }
+
+    @Override
+    public String toString() {
+        return conflicts.toString();
+    }
 }
Index: /trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMergeModel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMergeModel.java	(revision 2948)
+++ /trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMergeModel.java	(revision 2949)
@@ -20,6 +20,10 @@
 import javax.swing.ComboBoxModel;
 import javax.swing.DefaultListSelectionModel;
+import javax.swing.JOptionPane;
 import javax.swing.table.DefaultTableModel;
 import javax.swing.table.TableModel;
+
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.PrimitiveId;
 
 /**
@@ -60,4 +64,6 @@
     public static final String FROZEN_PROP = ListMergeModel.class.getName() + ".frozen";
 
+    private static final int MAX_DELETED_PRIMITIVE_IN_DIALOG = 5;
+
     protected HashMap<ListRole, ArrayList<T>> entries;
 
@@ -104,4 +110,11 @@
      */
     protected abstract void setValueAt(DefaultTableModel model, Object value, int row, int col);
+
+    /**
+     * 
+     * @param entry
+     * @return Primitive from my dataset referenced by entry
+     */
+    protected abstract OsmPrimitive getMyPrimitive(T entry);
 
     protected void buildMyEntriesTableModel() {
@@ -300,18 +313,37 @@
         List<T> newItems = new ArrayList<T>(rows.length);
         List<T> source = entries.get(sourceRole);
+        List<PrimitiveId> deletedIds = new ArrayList<PrimitiveId>();
         for (int row: rows) {
-            T clone = cloneEntryForMergedList(source.get(row));
-            if (clone != null) {
+            T entry = source.get(row);
+            OsmPrimitive primitive = getMyPrimitive(entry);
+            if (!primitive.isDeleted()) {
+                T clone = cloneEntryForMergedList(entry);
                 newItems.add(clone);
+            } else {
+                deletedIds.add(primitive.getPrimitiveId());
             }
         }
         getMergedEntries().addAll(position, newItems);
         fireModelDataChanged();
+        if (!deletedIds.isEmpty()) {
+            List<String> items = new ArrayList<String>();
+            for (int i=0; i<Math.min(MAX_DELETED_PRIMITIVE_IN_DIALOG, deletedIds.size()); i++) {
+                items.add(deletedIds.get(i).toString());
+            }
+            if (deletedIds.size() > MAX_DELETED_PRIMITIVE_IN_DIALOG) {
+                items.add(tr("{0} more...", deletedIds.size() - MAX_DELETED_PRIMITIVE_IN_DIALOG));
+            }
+            JOptionPane.showMessageDialog(null, tr("Following primitives could not be added because they are deleted: {0}", items));
+        }
     }
 
     public void copyAll(ListRole source) {
         getMergedEntries().clear();
-        getMergedEntries().addAll(entries.get(source));
-        fireModelDataChanged();
+
+        int[] rows = new int[entries.get(source).size()];
+        for (int i=0; i<rows.length; i++) {
+            rows[i] = i;
+        }
+        copy(source, rows, 0);
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMergeModel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMergeModel.java	(revision 2948)
+++ /trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMergeModel.java	(revision 2949)
@@ -6,5 +6,4 @@
 import java.util.ArrayList;
 
-import javax.swing.JOptionPane;
 import javax.swing.table.DefaultTableModel;
 
@@ -12,6 +11,6 @@
 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.Way;
-import org.openstreetmap.josm.gui.DefaultNameFormatter;
 import org.openstreetmap.josm.gui.conflict.pair.ListMergeModel;
 import org.openstreetmap.josm.gui.conflict.pair.ListRole;
@@ -89,10 +88,11 @@
     @Override
     protected Node cloneEntryForMergedList(Node entry) {
-        Node node = (Node) myDataset.getPrimitiveById(entry);
-        if (node.isDeleted()) {
-            JOptionPane.showMessageDialog(null, tr("Node {0} cannot be added to the way because it was deleted", node.getDisplayName(DefaultNameFormatter.getInstance())));
-            return null;
-        } else
-            return node;
+        return (Node) getMyPrimitive(entry);
     }
+
+    @Override
+    protected OsmPrimitive getMyPrimitive(Node entry) {
+        return myDataset.getPrimitiveById(entry);
+    }
+
 }
Index: /trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberListMergeModel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberListMergeModel.java	(revision 2948)
+++ /trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberListMergeModel.java	(revision 2949)
@@ -6,5 +6,4 @@
 import java.util.List;
 
-import javax.swing.JOptionPane;
 import javax.swing.table.DefaultTableModel;
 
@@ -14,5 +13,4 @@
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
-import org.openstreetmap.josm.gui.DefaultNameFormatter;
 import org.openstreetmap.josm.gui.conflict.pair.ListMergeModel;
 import org.openstreetmap.josm.gui.conflict.pair.ListRole;
@@ -98,12 +96,11 @@
     @Override
     protected RelationMember cloneEntryForMergedList(RelationMember entry) {
-        OsmPrimitive primitive = myDataset.getPrimitiveById(entry.getMember());
-        if (primitive.isDeleted()) {
-            JOptionPane.showMessageDialog(null,
-                    tr("Primitive {0} cannot be added to the relation because it was deleted.",
-                            primitive.getDisplayName(DefaultNameFormatter.getInstance())));
-            return null;
-        } else
-            return new RelationMember(entry.getRole(), primitive);
+        OsmPrimitive primitive = getMyPrimitive(entry);
+        return new RelationMember(entry.getRole(), primitive);
+    }
+
+    @Override
+    protected OsmPrimitive getMyPrimitive(RelationMember entry) {
+        return myDataset.getPrimitiveById(entry.getMember());
     }
 
