diff --git a/src/org/openstreetmap/josm/actions/MergeNodesAction.java b/src/org/openstreetmap/josm/actions/MergeNodesAction.java
index 4a99848..1d1ecdb 100644
--- a/src/org/openstreetmap/josm/actions/MergeNodesAction.java
+++ b/src/org/openstreetmap/josm/actions/MergeNodesAction.java
@@ -27,6 +27,7 @@ import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
 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.RelationToChildReference;
 import org.openstreetmap.josm.data.osm.TagCollection;
 import org.openstreetmap.josm.data.osm.Way;
@@ -260,11 +261,17 @@ public class MergeNodesAction extends JosmAction {
             return null;
         }
 
-        Set<RelationToChildReference> relationToNodeReferences = RelationToChildReference.getRelationToChildReferences(nodes);
+        final Set<RelationToChildReference> relationToNodeReferences = RelationToChildReference.getRelationToChildReferences(nodes);
+        final Set<Relation> relationsWithReferences = new HashSet<Relation>();
+        for (RelationToChildReference i : relationToNodeReferences) {
+            relationsWithReferences.add(i.getParent());
+        }
 
         try {
             TagCollection nodeTags = TagCollection.unionOfAllPrimitives(nodes);
-            List<Command> resultion = CombinePrimitiveResolverDialog.launchIfNecessary(nodeTags, nodes, Collections.singleton(targetNode));
+            List<Command> resolution = CombinePrimitiveResolverDialog.launchIfNecessary(
+                    nodeTags, nodes, Collections.singleton(targetNode), relationsWithReferences,
+                    1 /* safe to merge nodes being part of at most 1 relation */);
             LinkedList<Command> cmds = new LinkedList<Command>();
 
             // the nodes we will have to delete
@@ -290,7 +297,7 @@ public class MergeNodesAction extends JosmAction {
                 newTargetNode.setCoor(targetLocationNode.getCoor());
                 cmds.add(new ChangeCommand(targetNode, newTargetNode));
             }
-            cmds.addAll(resultion);
+            cmds.addAll(resolution);
             if (!nodesToDelete.isEmpty()) {
                 cmds.add(new DeleteCommand(nodesToDelete));
             }
diff --git a/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java b/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java
index 1ef4418..7bdc315 100644
--- a/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java
+++ b/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java
@@ -439,28 +439,36 @@ public class CombinePrimitiveResolverDialog extends JDialog {
             final TagCollection tagsOfPrimitives,
             final Collection<? extends OsmPrimitive> primitives,
             final Collection<? extends OsmPrimitive> targetPrimitives) throws UserCancelException {
+        return launchIfNecessary(tagsOfPrimitives, primitives, targetPrimitives, OsmPrimitive.getParentRelations(primitives), 0);
+    }
 
-        final TagCollection completeWayTags = new TagCollection(tagsOfPrimitives);
-        TagConflictResolutionUtil.combineTigerTags(completeWayTags);
-        TagConflictResolutionUtil.normalizeTagCollectionBeforeEditing(completeWayTags, primitives);
-        final TagCollection tagsToEdit = new TagCollection(completeWayTags);
+    public static List<Command> launchIfNecessary(
+            final TagCollection tagsOfPrimitives,
+            final Collection<? extends OsmPrimitive> primitives,
+            final Collection<? extends OsmPrimitive> targetPrimitives,
+            final Collection<Relation> parentRelations,
+            final int parentRelationsThreshold) throws UserCancelException {
+
+        final TagCollection normalizedTags = new TagCollection(tagsOfPrimitives);
+        TagConflictResolutionUtil.combineTigerTags(normalizedTags);
+        TagConflictResolutionUtil.normalizeTagCollectionBeforeEditing(normalizedTags, primitives);
+        final TagCollection tagsToEdit = new TagCollection(normalizedTags);
         TagConflictResolutionUtil.completeTagCollectionForEditing(tagsToEdit);
 
         final CombinePrimitiveResolverDialog dialog = CombinePrimitiveResolverDialog.getInstance();
 
-        dialog.getTagConflictResolverModel().populate(tagsToEdit, completeWayTags.getKeysWithMultipleValues());
+        dialog.getTagConflictResolverModel().populate(tagsToEdit, normalizedTags.getKeysWithMultipleValues());
 
-        final Set<Relation> parentRelations = OsmPrimitive.getParentRelations(primitives);
         dialog.getRelationMemberConflictResolverModel().populate(parentRelations, primitives);
         dialog.prepareDefaultDecisions();
 
         // show information dialog to non-experts
-        if (!completeWayTags.isApplicableToPrimitive() && !ExpertToggleAction.isExpert()) {
-            String conflicts = Utils.joinAsHtmlUnorderedList(Utils.transform(completeWayTags.getKeysWithMultipleValues(), new Function<String, String>() {
+        if (!normalizedTags.isApplicableToPrimitive() && !ExpertToggleAction.isExpert()) {
+            String conflicts = Utils.joinAsHtmlUnorderedList(Utils.transform(normalizedTags.getKeysWithMultipleValues(), new Function<String, String>() {
 
                 @Override
                 public String apply(String key) {
-                    return tr("{0} ({1})", key, Utils.join(tr(", "), Utils.transform(completeWayTags.getValues(key), new Function<String, String>() {
+                    return tr("{0} ({1})", key, Utils.join(tr(", "), Utils.transform(normalizedTags.getValues(key), new Function<String, String>() {
 
                         @Override
                         public String apply(String x) {
@@ -487,7 +495,7 @@ public class CombinePrimitiveResolverDialog extends JDialog {
             }
         }
 
-        if (!parentRelations.isEmpty() && !ExpertToggleAction.isExpert()) {
+        if (parentRelations.size() > parentRelationsThreshold && !ExpertToggleAction.isExpert()) {
             String msg = trn("You are about to combine {1} objects, "
                     + "which are part of {0} relation:<br/>{2}"
                     + "Combining these objects may break this relation. If you are unsure, please cancel this operation.<br/>"
@@ -513,7 +521,7 @@ public class CombinePrimitiveResolverDialog extends JDialog {
         }
 
         // resolve tag conflicts if necessary
-        if (!completeWayTags.isApplicableToPrimitive() || !parentRelations.isEmpty()) {
+        if (!normalizedTags.isApplicableToPrimitive() || parentRelations.size() > parentRelationsThreshold) {
             dialog.setVisible(true);
             if (dialog.isCanceled()) {
                 throw new UserCancelException();
