Index: trunk/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java	(revision 7128)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java	(revision 7129)
@@ -18,7 +18,9 @@
 import java.beans.PropertyChangeListener;
 import java.util.Collection;
-import java.util.HashSet;
+import java.util.Collections;
+import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
@@ -49,4 +51,6 @@
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.MultiMap;
+import org.openstreetmap.josm.tools.Predicates;
 import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.Utils.Function;
@@ -297,13 +301,29 @@
 
     protected void prepareDefaultRelationDecisions() {
-        RelationMemberConflictResolverModel model = getRelationMemberConflictResolverModel();
-        Set<Relation> relations = new HashSet<>();
+        final RelationMemberConflictResolverModel model = getRelationMemberConflictResolverModel();
+        final Map<Relation, Integer> numberOfKeepResolutions = new HashMap<>();
+        final MultiMap<OsmPrimitive, Relation> resolvedRelationsPerPrimitive = new MultiMap<>();
+
         for (int i = 0; i < model.getNumDecisions(); i++) {
-            RelationMemberConflictDecision decision = model.getDecision(i);
-            if (!relations.contains(decision.getRelation())) {
+            final RelationMemberConflictDecision decision = model.getDecision(i);
+            final Relation r = decision.getRelation();
+            final OsmPrimitive p = decision.getOriginalPrimitive();
+            if (!numberOfKeepResolutions.containsKey(r)) {
                 decision.decide(RelationMemberConflictDecisionType.KEEP);
-                relations.add(decision.getRelation());
+                numberOfKeepResolutions.put(r, 1);
+                resolvedRelationsPerPrimitive.put(p, r);
+                continue;
+            }
+
+            final Integer keepResolutions = numberOfKeepResolutions.get(r);
+            final Collection<Relation> resolvedRelations = Utils.firstNonNull(resolvedRelationsPerPrimitive.get(p), Collections.<Relation>emptyList());
+            if (keepResolutions <= Utils.filter(resolvedRelations, Predicates.equalTo(r)).size()) {
+                // old relation contains one primitive more often than the current resolution => keep the current member
+                decision.decide(RelationMemberConflictDecisionType.KEEP);
+                numberOfKeepResolutions.put(r, keepResolutions + 1);
+                resolvedRelationsPerPrimitive.put(p, r);
             } else {
                 decision.decide(RelationMemberConflictDecisionType.REMOVE);
+                resolvedRelationsPerPrimitive.put(p, r);
             }
         }
@@ -552,5 +572,5 @@
         /* I18n: object count < 2 is not possible */
         String msg = trn("You are about to combine {1} object, "
-                + "which are part of {0} relation:<br/>{2}"
+                + "which is part of {0} relation:<br/>{2}"
                 + "Combining these objects may break this relation. If you are unsure, please cancel this operation.<br/>"
                 + "If you want to continue, you are shown a dialog to decide how to adapt the relation.<br/><br/>"
Index: trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverModel.java	(revision 7128)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverModel.java	(revision 7129)
@@ -230,19 +230,18 @@
 
     protected Command buildResolveCommand(Relation relation, OsmPrimitive newPrimitive) {
-        Relation modifiedRelation = new Relation(relation);
+        final Relation modifiedRelation = new Relation(relation);
         modifiedRelation.setMembers(null);
         boolean isChanged = false;
         for (int i=0; i < relation.getMembersCount(); i++) {
-            RelationMember rm = relation.getMember(i);
-            RelationMember rmNew;
+            final RelationMember member = relation.getMember(i);
             RelationMemberConflictDecision decision = getDecision(relation, i);
             if (decision == null) {
-                modifiedRelation.addMember(rm);
+                modifiedRelation.addMember(member);
             } else {
                 switch(decision.getDecision()) {
                 case KEEP:
-                    rmNew = new RelationMember(decision.getRole(),newPrimitive);
-                    modifiedRelation.addMember(rmNew);
-                    isChanged |= ! rm.equals(rmNew);
+                    final RelationMember newMember = new RelationMember(decision.getRole(),newPrimitive);
+                    modifiedRelation.addMember(newMember);
+                    isChanged |= ! member.equals(newMember);
                     break;
                 case REMOVE:
