Index: trunk/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java	(revision 18987)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java	(revision 18988)
@@ -17,4 +17,5 @@
 import java.beans.PropertyChangeListener;
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
@@ -46,4 +47,5 @@
 import org.openstreetmap.josm.gui.util.WindowGeometry;
 import org.openstreetmap.josm.gui.widgets.AutoAdjustingSplitPane;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -517,5 +519,9 @@
         tagModel.populate(tagsToEdit, completeWayTags.getKeysWithMultipleValues(), false);
         relModel.populate(parentRelations, primitives, false);
-        tagModel.prepareDefaultTagDecisions(false);
+        if (Config.getPref().getBoolean("combine-conflict-precise", true)) {
+            tagModel.prepareDefaultTagDecisions(getResolvableKeys(tagsOfPrimitives.getKeys(), primitives));
+        } else {
+            tagModel.prepareDefaultTagDecisions(false);
+        }
         relModel.prepareDefaultRelationDecisions(false);
 
@@ -590,5 +596,5 @@
 
         if (!ConditionalOptionPaneUtil.showConfirmationDialog(
-                "combine_tags",
+                "combine_relation_member",
                 MainApplication.getMainFrame(),
                 "<html>" + msg + "</html>",
@@ -643,4 +649,40 @@
     }
 
+    /**
+     * See #23305: Find those tag keys for which no conflict exists.
+     * @param keysToDecide the keys of tags which might be shown in the conflict dialog
+     * @param primitives the collection of primitives
+     * @return the keys which can be resolved using the only available value
+     */
+    private static Set<String> getResolvableKeys(Set<String> keysToDecide, Collection<? extends OsmPrimitive> primitives) {
+        Set<String> easyKeys = new HashSet<>();
+        // determine the number of objects which have any of the tags which require a decision
+        int countTagged = 0;
+        for (OsmPrimitive p : primitives) {
+            for (String key : keysToDecide) {
+                if (p.hasTag(key)) {
+                    ++countTagged;
+                    break;
+                }
+            }
+        }
+        for (String key : keysToDecide) {
+            Set<String> values = new HashSet<>();
+            int num = 0;
+            for (OsmPrimitive p : primitives) {
+                String val = p.get(key);
+                if (val != null) {
+                    num++;
+                    values.add(val);
+                }
+            }
+            if (values.size() == 1 && num == countTagged) {
+                // there is only one value and all tagged objects have that value -> easy to solve
+                easyKeys.add(key);
+            }
+        }
+        return easyKeys;
+    }
+
     @Override
     public void dispose() {
Index: trunk/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolverModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolverModel.java	(revision 18987)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolverModel.java	(revision 18988)
@@ -276,5 +276,5 @@
      * Prepare the default decisions for the current model
      * @param fireEvent {@code true} to call {@code fireTableDataChanged} (can be a slow operation)
-     * @since 11626
+     * @since 11627
      */
     void prepareDefaultTagDecisions(boolean fireEvent) {
@@ -293,4 +293,21 @@
 
     /**
+     * Prepare the default decisions for the current model.
+     * @param decidedKeys set of tag keys for which the first value should be used
+     * @since xxx
+     */
+    public void prepareDefaultTagDecisions(Set<String> decidedKeys) {
+        for (MultiValueResolutionDecision decision : decisions.values()) {
+            if (!decidedKeys.contains(decision.getKey()))
+                continue;
+            List<String> values = decision.getValues();
+            if (!values.isEmpty()) {
+                decision.keepOne(values.iterator().next());
+            }
+        }
+        rebuild(false);
+    }
+
+    /**
      * Returns the set of keys in conflict.
      * @return the set of keys in conflict.
