Index: trunk/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java	(revision 2711)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java	(revision 2712)
@@ -15,6 +15,8 @@
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
+import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Set;
 
 import javax.swing.AbstractAction;
@@ -31,4 +33,5 @@
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.TagCollection;
 import org.openstreetmap.josm.data.osm.Way;
@@ -130,19 +133,11 @@
         }
         if (targetPrimitive instanceof Way) {
-            setTitle(
-                    tr(
-                            "Conflicts when combining ways - combined way is ''{0}''",
-                            targetPrimitive.getDisplayName(DefaultNameFormatter.getInstance())
-                    )
-            );
+            setTitle(tr("Conflicts when combining ways - combined way is ''{0}''", targetPrimitive
+                    .getDisplayName(DefaultNameFormatter.getInstance())));
             helpAction.setHelpTopic(ht("/Action/CombineWay#ResolvingConflicts"));
             getRootPane().putClientProperty("help", ht("/Action/CombineWay#ResolvingConflicts"));
         } else if (targetPrimitive instanceof Node) {
-            setTitle(
-                    tr(
-                            "Conflicts when merging nodes - target node is ''{0}''",
-                            targetPrimitive.getDisplayName(DefaultNameFormatter.getInstance())
-                    )
-            );
+            setTitle(tr("Conflicts when merging nodes - target node is ''{0}''", targetPrimitive
+                    .getDisplayName(DefaultNameFormatter.getInstance())));
             helpAction.setHelpTopic(ht("/Action/MergeNodes#ResolvingConflicts"));
             getRootPane().putClientProperty("help", ht("/Action/MergeNodes#ResolvingConflicts"));
@@ -195,5 +190,5 @@
 
     public CombinePrimitiveResolverDialog(Component owner) {
-        super(JOptionPane.getFrameForComponent(owner),true /* modal */);
+        super(JOptionPane.getFrameForComponent(owner), true /* modal */);
         build();
     }
@@ -227,5 +222,5 @@
         List<Command> cmds = new LinkedList<Command>();
 
-        if (getTagConflictResolverModel().getNumDecisions() >0) {
+        if (getTagConflictResolverModel().getNumDecisions() > 0) {
             TagCollection tc = getTagConflictResolverModel().getResolution();
             cmds.addAll(buildTagChangeCommand(targetPrimitive, tc));
@@ -235,11 +230,10 @@
         }
 
-        if (getRelationMemberConflictResolverModel().getNumDecisions() >0) {
+        if (getRelationMemberConflictResolverModel().getNumDecisions() > 0) {
             cmds.addAll(getRelationMemberConflictResolverModel().buildResolutionCommands(targetPrimitive));
         }
 
-        Command cmd = pnlRelationMemberConflictResolver.buildTagApplyCommands(
-                getRelationMemberConflictResolverModel().getModifiedRelations(targetPrimitive)
-        );
+        Command cmd = pnlRelationMemberConflictResolver.buildTagApplyCommands(getRelationMemberConflictResolverModel()
+                .getModifiedRelations(targetPrimitive));
         if (cmd != null) {
             cmds.add(cmd);
@@ -250,5 +244,5 @@
     protected void prepareDefaultTagDecisions() {
         TagConflictResolverModel model = getTagConflictResolverModel();
-        for (int i =0; i< model.getRowCount(); i++) {
+        for (int i = 0; i < model.getRowCount(); i++) {
             MultiValueResolutionDecision decision = model.getDecision(i);
             List<String> values = decision.getValues();
@@ -265,6 +259,13 @@
     protected void prepareDefaultRelationDecisions() {
         RelationMemberConflictResolverModel model = getRelationMemberConflictResolverModel();
-        for (int i=0; i < model.getNumDecisions(); i++) {
-            model.getDecision(i).decide(RelationMemberConflictDecisionType.KEEP);
+        Set<Relation> relations = new HashSet<Relation>();
+        for (int i = 0; i < model.getNumDecisions(); i++) {
+            RelationMemberConflictDecision decision = model.getDecision(i);
+            if (!relations.contains(decision.getRelation())) {
+                decision.decide(RelationMemberConflictDecisionType.KEEP);
+                relations.add(decision.getRelation());
+            } else {
+                decision.decide(RelationMemberConflictDecisionType.REMOVE);
+            }
         }
         model.refresh();
@@ -298,5 +299,5 @@
             //
             getContentPane().add(pnlRelationMemberConflictResolver, BorderLayout.CENTER);
-        } else if (tagModel.getNumDecisions() >0) {
+        } else if (tagModel.getNumDecisions() > 0) {
             // tag conflicts only
             //
@@ -310,5 +311,5 @@
         int numTagDecisions = getTagConflictResolverModel().getNumDecisions();
         int numRelationDecisions = getRelationMemberConflictResolverModel().getNumDecisions();
-        if (numTagDecisions > 0 &&  numRelationDecisions > 0) {
+        if (numTagDecisions > 0 && numRelationDecisions > 0) {
             spTagConflictTypes.setDividerLocation(0.5);
         }
@@ -328,11 +329,6 @@
         if (visible) {
             prepareGUIBeforeConflictResolutionStarts();
-            new WindowGeometry(
-                    getClass().getName()  + ".geometry",
-                    WindowGeometry.centerInWindow(
-                            Main.parent,
-                            new Dimension(600,400)
-                    )
-            ).applySafe(this);
+            new WindowGeometry(getClass().getName() + ".geometry", WindowGeometry.centerInWindow(Main.parent,
+                    new Dimension(600, 400))).applySafe(this);
             setCancelled(false);
             btnApply.requestFocusInWindow();
@@ -372,8 +368,6 @@
 
         protected void updateEnabledState() {
-            setEnabled(
-                    pnlTagConflictResolver.getModel().getNumConflicts() == 0
-                    && pnlRelationMemberConflictResolver.getModel().getNumConflicts() == 0
-            );
+            setEnabled(pnlTagConflictResolver.getModel().getNumConflicts() == 0
+                    && pnlRelationMemberConflictResolver.getModel().getNumConflicts() == 0);
         }
 
@@ -393,5 +387,5 @@
             int numTagDecisions = getTagConflictResolverModel().getNumDecisions();
             int numRelationDecisions = getRelationMemberConflictResolverModel().getNumDecisions();
-            if (numTagDecisions > 0 &&  numRelationDecisions > 0) {
+            if (numTagDecisions > 0 && numRelationDecisions > 0) {
                 spTagConflictTypes.setDividerLocation(0.5);
             }
@@ -404,10 +398,10 @@
         public AutoAdjustingSplitPane(int newOrientation) {
             super(newOrientation);
-            addPropertyChangeListener(JSplitPane.DIVIDER_LOCATION_PROPERTY,this);
+            addPropertyChangeListener(JSplitPane.DIVIDER_LOCATION_PROPERTY, this);
             addHierarchyBoundsListener(this);
         }
 
         public void ancestorResized(HierarchyEvent e) {
-            setDividerLocation((int)(dividerLocation * getHeight()));
+            setDividerLocation((int) (dividerLocation * getHeight()));
         }
 
@@ -418,7 +412,7 @@
         public void propertyChange(PropertyChangeEvent evt) {
             if (evt.getPropertyName().equals(JSplitPane.DIVIDER_LOCATION_PROPERTY)) {
-                int newVal = (Integer)evt.getNewValue();
+                int newVal = (Integer) evt.getNewValue();
                 if (getHeight() != 0) {
-                    dividerLocation = (double)newVal / (double)getHeight();
+                    dividerLocation = (double) newVal / (double) getHeight();
                 }
             }
Index: trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolver.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolver.java	(revision 2711)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolver.java	(revision 2712)
@@ -121,20 +121,24 @@
 
     public void initForWayCombining() {
-       lblHeader.setText(tr("<html>The combined ways are members in one ore more relations. "
-                + "Please decide whether your want to <strong>keep</strong> these memberships "
+        lblHeader.setText(tr("<html>The combined ways are members in one ore more relations. "
+                + "Please decide whether you want to <strong>keep</strong> these memberships "
                 + "for the combined way or whether you want to <strong>remove</strong> them.<br>"
-                + "The default is to <strong>keep</strong> them: the combined way will take the place of the original way in the membership."
-                        + "</html>"));
-       invalidate();
+                + "The default is to <strong>keep</strong> the first way and <strong>remove</strong> "
+                + "the other ways that are members of the same relation: the combined way will "
+                + "take the place of the original way in the membership."
+                + "</html>"));
+        invalidate();
     }
 
     public void initForNodeMerging() {
         lblHeader.setText(tr("<html>The merged nodes are members in one ore more relations. "
-                 + "Please decide whether your want to <strong>keep</strong> these memberships "
-                 + "for the target node or whether you want to <strong>remove</strong> them.<br>"
-                 + "The default is to <strong>keep</strong> them: the target node will take the place of the original node in the membership."
-                         + "</html>"));
+                + "Please decide whether you want to <strong>keep</strong> these memberships "
+                + "for the target node or whether you want to <strong>remove</strong> them.<br>"
+                + "The default is to <strong>keep</strong> the first node and <strong>remove</strong> "
+                + "the other nodes that are members of the same relation: the target node will "
+                + "take the place of the original node in the membership."
+                + "</html>"));
         invalidate();
-     }
+    }
 
     class ApplyRoleAction extends AbstractAction {
@@ -183,6 +187,5 @@
         AutoCompletionCache.getCacheForLayer(Main.main.getEditLayer()).populateWithMemberRoles(acList);
         tfRole.setAutoCompletionList(acList);
-        AutoCompletingTextField editor = (AutoCompletingTextField) tblResolver.getColumnModel().getColumn(2)
-                .getCellEditor();
+        AutoCompletingTextField editor = (AutoCompletingTextField) tblResolver.getColumnModel().getColumn(2).getCellEditor();
         if (editor != null) {
             editor.setAutoCompletionList(acList);
