Index: applications/editors/josm/plugins/utilsplugin2/src/org/openstreetmap/josm/plugins/utilsplugin2/replacegeometry/ReplaceGeometryUtils.java
===================================================================
--- applications/editors/josm/plugins/utilsplugin2/src/org/openstreetmap/josm/plugins/utilsplugin2/replacegeometry/ReplaceGeometryUtils.java	(revision 28335)
+++ applications/editors/josm/plugins/utilsplugin2/src/org/openstreetmap/josm/plugins/utilsplugin2/replacegeometry/ReplaceGeometryUtils.java	(revision 28350)
@@ -17,5 +17,5 @@
 /**
  *
- * @author Josh
+ * @author joshdoe
  */
 public final class ReplaceGeometryUtils {
@@ -34,7 +34,7 @@
             return buildReplaceWayWithNewCommand(Arrays.asList((Way) firstObject, (Way) secondObject));
         } else if (firstObject instanceof Node) {
-            return createUpgradeNodeCommand((Node) firstObject, secondObject);
+            return buildUpgradeNodeCommand((Node) firstObject, secondObject);
         } else if (secondObject instanceof Node) {
-            return createUpgradeNodeCommand((Node) secondObject, firstObject);
+            return buildUpgradeNodeCommand((Node) secondObject, firstObject);
         } else {
             throw new IllegalArgumentException(tr("This tool can only replace a node, upgrade a node to a way or a multipolygon, or replace a way with a way."));
@@ -56,8 +56,8 @@
             return buildReplaceWayCommand((Way) subjectObject, (Way) referenceSubject);
         } else if (subjectObject instanceof Node) {
-            return createUpgradeNodeCommand((Node) subjectObject, referenceSubject);
+            return buildUpgradeNodeCommand((Node) subjectObject, referenceSubject);
         } else if (referenceSubject instanceof Node) {
             // TODO: fix this illogical reversal?
-            return createUpgradeNodeCommand((Node) referenceSubject, subjectObject);
+            return buildUpgradeNodeCommand((Node) referenceSubject, subjectObject);
         } else {
             throw new IllegalArgumentException(tr("This tool can only replace a node, upgrade a node to a way or a multipolygon, or replace a way with a way."));
@@ -108,5 +108,5 @@
      * @param referenceObject object with greater spatial quality
      */
-    public static ReplaceGeometryCommand createUpgradeNodeCommand(Node subjectNode, OsmPrimitive referenceObject) {
+    public static ReplaceGeometryCommand buildUpgradeNodeCommand(Node subjectNode, OsmPrimitive referenceObject) {
         if (!OsmPrimitive.getFilteredList(subjectNode.getReferrers(), Way.class).isEmpty()) {
             throw new ReplaceGeometryException(tr("Node belongs to way(s), cannot replace."));
@@ -429,4 +429,13 @@
      */
     protected static List<Command> getTagConflictResolutionCommands(OsmPrimitive source, OsmPrimitive target) {
+        // determine if the same key in each object has different values
+        boolean keysWithMultipleValues;
+        Set<OsmPrimitive> set = new HashSet<OsmPrimitive>();
+        set.add(source);
+        set.add(target);
+        TagCollection tagCol = TagCollection.unionOfAllPrimitives(set);
+        Set<String> keys = tagCol.getKeysWithMultipleValues();
+        keysWithMultipleValues = !keys.isEmpty();
+            
         Collection<OsmPrimitive> primitives = Arrays.asList(source, target);
         
@@ -448,6 +457,8 @@
 
         // conflict resolution is necessary if there are conflicts in the merged tags
-        // or if at least one of the merged nodes is referred to by a relation
-        if (!tags.isApplicableToPrimitive() || relationToNodeReferences.size() > 1) {
+        // or if both objects have relation memberships
+        if (keysWithMultipleValues || 
+                (!RelationToChildReference.getRelationToChildReferences(source).isEmpty() &&
+                 !RelationToChildReference.getRelationToChildReferences(target).isEmpty())) {
             dialog.setVisible(true);
             if (dialog.isCanceled()) {
