Index: trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 2098)
+++ trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 2099)
@@ -104,5 +104,21 @@
     }
 
-    protected void completeTagCollectionWithMissingTags(TagCollection tc, Collection<Way> combinedWays) {
+    protected static void completeTagCollectionWithMissingTags(TagCollection tc, Collection<? extends OsmPrimitive> merged) {
+        for (String key: tc.getKeys()) {
+            // make sure the empty value is in the tag set if a tag is not present
+            // on all merged nodes
+            //
+            for (OsmPrimitive p: merged) {
+                if (p.get(key) == null) {
+                    tc.add(new Tag(key)); // add a tag with key and empty value
+                }
+            }
+        }
+        // remove irrelevant tags
+        //
+        tc.removeByKey("created_by");
+    }
+
+    protected static void completeTagCollectionForEditing(TagCollection tc) {
         for (String key: tc.getKeys()) {
             // make sure the empty value is in the tag set such that we can delete the tag
@@ -110,13 +126,5 @@
             //
             tc.add(new Tag(key,""));
-            for (Way w: combinedWays) {
-                if (w.get(key) == null) {
-                    tc.add(new Tag(key)); // add a tag with key and empty value
-                }
-            }
-        }
-        // remove irrelevant tags
-        //
-        tc.removeByKey("created_by");
+        }
     }
 
@@ -165,7 +173,9 @@
         TagCollection completeWayTags = new TagCollection(wayTags);
         completeTagCollectionWithMissingTags(completeWayTags, ways);
+        TagCollection tagsToEdit = new TagCollection(completeWayTags);
+        completeTagCollectionForEditing(tagsToEdit);
 
         CombinePrimitiveResolverDialog dialog = CombinePrimitiveResolverDialog.getInstance();
-        dialog.getTagConflictResolverModel().populate(completeWayTags);
+        dialog.getTagConflictResolverModel().populate(tagsToEdit);
         dialog.setTargetPrimitive(targetWay);
         dialog.getRelationMemberConflictResolverModel().populate(
@@ -177,11 +187,9 @@
         // resolve tag conflicts if necessary
         //
-        if (!wayTags.isApplicableToPrimitive() || !referringRelations.getRelations().isEmpty()) {
+        if (!completeWayTags.isApplicableToPrimitive() || !referringRelations.getRelations().isEmpty()) {
             dialog.setVisible(true);
             if (dialog.isCancelled())
                 return;
         }
-
-
 
         LinkedList<Command> cmds = new LinkedList<Command>();
Index: trunk/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java	(revision 2098)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java	(revision 2099)
@@ -36,11 +36,12 @@
 
 /**
- * This dialog helps to resolve conflicts occuring when combining or merging primitives.
+ * This dialog helps to resolve conflicts occurring when ways are combined ore
+ * primitives are merged.
  * 
  * There is a singleton instance of this dialog which can be retrieved using
  * {@see #getInstance()}.
  * 
- * The dialog uses two model: one model for resolving tag conflicts, the other model
- * for resolving conflicts in relation membership. For both models there are accessors,
+ * The dialog uses two models: one  for resolving tag conflicts, the other
+ * for resolving conflicts in relation memberships. For both models there are accessors,
  * i.e {@see #getTagConflictResolverModel()} and {@see #getRelationMemberConflictResolverModel()}.
  * 
@@ -54,8 +55,8 @@
  * 
  * You should also set the target primitive which other primitives (ways or nodes) are
- * merged to. Use {@see #setTargetPrimitive(OsmPrimitive)}.
+ * merged to, see {@see #setTargetPrimitive(OsmPrimitive)}.
  * 
  * After the dialog closed use {@see #isCancelled()} to check whether the user cancelled
- * the dialog. If it wasn't cancelled you may build a collection of {@see Command} objects
+ * the dialog. If it wasn't canceled you may build a collection of {@see Command} objects
  * which reflect the conflict resolution decisions the user made in the dialog:
  * see {@see #buildResolutionCommands()}
@@ -259,4 +260,5 @@
             spTagConflictTypes.setDividerLocation(0.5);
         }
+        pnlRelationMemberConflictResolver.prepareForEditing();
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueCellRenderer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueCellRenderer.java	(revision 2098)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/tags/MultiValueCellRenderer.java	(revision 2099)
@@ -7,5 +7,7 @@
 import java.awt.Font;
 
+import javax.swing.DefaultComboBoxModel;
 import javax.swing.ImageIcon;
+import javax.swing.JComboBox;
 import javax.swing.JLabel;
 import javax.swing.JTable;
@@ -15,8 +17,15 @@
 import org.openstreetmap.josm.tools.ImageProvider;
 
+/**
+ * This is a {@see TableCellRenderer} for {@see MultiValueResolutionDecision}s.
+ * 
+
+ */
 public class MultiValueCellRenderer extends JLabel implements TableCellRenderer {
 
     private ImageIcon iconDecided;
     private ImageIcon iconUndecided;
+    private DefaultComboBoxModel model;
+    private JComboBox cbDecisionRenderer;
 
     public MultiValueCellRenderer() {
@@ -24,4 +33,5 @@
         iconDecided = ImageProvider.get("dialogs/conflict", "tagconflictresolved");
         iconUndecided = ImageProvider.get("dialogs/conflict", "tagconflictunresolved");
+        cbDecisionRenderer = new JComboBox(model = new DefaultComboBoxModel());
     }
 
@@ -37,30 +47,35 @@
 
     protected void renderValue(MultiValueResolutionDecision decision) {
+        model.removeAllElements();
         switch(decision.getDecisionType()) {
-            case UNDECIDED:
-                setText(tr("Choose a value"));
-                setFont(getFont().deriveFont(Font.ITALIC));
-                setToolTipText(tr("Please decided which values to keep"));
-                break;
-            case KEEP_ONE:
-                setText(decision.getChosenValue());
-                setToolTipText(tr("Value ''{0}'' is going to be applied for key ''{1}''", decision.getChosenValue(), decision.getKey()));
-                break;
-            case KEEP_NONE:
-                setText(tr("deleted"));
-                setFont(getFont().deriveFont(Font.ITALIC));
-                setToolTipText(tr("The key ''{0}'' and all it's values are going to be removed", decision.getKey()));
-                break;
-            case KEEP_ALL:
-                setText(decision.getChosenValue());
-                setToolTipText(tr("All values joined as ''{0}'' are going to be applied for key ''{1}''", decision.getChosenValue(), decision.getKey()));
-                break;
+        case UNDECIDED:
+            model.addElement(tr("Choose a value"));
+            setFont(getFont().deriveFont(Font.ITALIC));
+            setToolTipText(tr("Please decided which values to keep"));
+            cbDecisionRenderer.setSelectedIndex(0);
+            break;
+        case KEEP_ONE:
+            model.addElement(decision.getChosenValue());
+            setToolTipText(tr("Value ''{0}'' is going to be applied for key ''{1}''", decision.getChosenValue(), decision.getKey()));
+            cbDecisionRenderer.setSelectedIndex(0);
+            break;
+        case KEEP_NONE:
+            model.addElement(tr("deleted"));
+            setFont(getFont().deriveFont(Font.ITALIC));
+            setToolTipText(tr("The key ''{0}'' and all it's values are going to be removed", decision.getKey()));
+            cbDecisionRenderer.setSelectedIndex(0);
+            break;
+        case KEEP_ALL:
+            model.addElement(decision.getChosenValue());
+            setToolTipText(tr("All values joined as ''{0}'' are going to be applied for key ''{1}''", decision.getChosenValue(), decision.getKey()));
+            cbDecisionRenderer.setSelectedIndex(0);
+            break;
         }
     }
 
     protected void reset() {
+        setFont(UIManager.getFont("Table.font"));
         setIcon(null);
         setText("");
-        setFont(UIManager.getFont("Table.font"));
     }
 
@@ -72,19 +87,19 @@
         MultiValueResolutionDecision decision = (MultiValueResolutionDecision)value;
         switch(column) {
-            case 0:
-                if (decision.isDecided()) {
-                    setIcon(iconDecided);
-                } else {
-                    setIcon(iconUndecided);
-                }
-                break;
+        case 0:
+            if (decision.isDecided()) {
+                setIcon(iconDecided);
+            } else {
+                setIcon(iconUndecided);
+            }
+            return this;
 
-            case 1:
-                setText(decision.getKey());
-                break;
+        case 1:
+            setText(decision.getKey());
+            return this;
 
-            case 2:
-                renderValue(decision);
-                break;
+        case 2:
+            renderValue(decision);
+            return cbDecisionRenderer;
         }
         return this;
Index: trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecisionRenderer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecisionRenderer.java	(revision 2098)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecisionRenderer.java	(revision 2099)
@@ -44,4 +44,7 @@
     }
 
+    /* --------------------------------------------------------------------------------- */
+    /* ListCellRenderer                                                                  */
+    /* --------------------------------------------------------------------------------- */
     public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
             boolean cellHasFocus) {
Index: trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecisionType.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecisionType.java	(revision 2098)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictDecisionType.java	(revision 2099)
@@ -6,4 +6,6 @@
 import java.awt.Font;
 
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JComboBox;
 import javax.swing.JLabel;
 
@@ -28,16 +30,38 @@
     static public void prepareLabel(RelationMemberConflictDecisionType decision, JLabel label) {
         switch(decision) {
-            case REMOVE:
-                label.setText(tr("Remove"));
-                label.setToolTipText(tr("Remove this relation member from the relation"));
-                break;
-            case REPLACE:
-                label.setText(tr("Replace"));
-                label.setToolTipText(tr("Replace the way this member refers with the combined way"));
-                break;
-            case UNDECIDED:
-                label.setText(tr("Undecided"));
-                label.setToolTipText(tr("Not decided yet"));
-                break;
+        case REMOVE:
+            label.setText(tr("Remove"));
+            label.setToolTipText(tr("Remove this relation member from the relation"));
+            break;
+        case REPLACE:
+            label.setText(tr("Replace"));
+            label.setToolTipText(tr("Replace the way this member refers to with the combined way"));
+            break;
+        case UNDECIDED:
+            label.setText(tr("Undecided"));
+            label.setToolTipText(tr("Not decided yet"));
+            break;
+        }
+    }
+
+    static public void prepareComboBox(RelationMemberConflictDecisionType decision, JComboBox comboBox) {
+        DefaultComboBoxModel model = (DefaultComboBoxModel)comboBox.getModel();
+        model.removeAllElements();
+        switch(decision) {
+        case REMOVE:
+            model.addElement(tr("Remove"));
+            comboBox.setToolTipText(tr("Remove this relation member from the relation"));
+            comboBox.setSelectedIndex(0);
+            break;
+        case REPLACE:
+            model.addElement(tr("Replace"));
+            comboBox.setToolTipText(tr("Replace the way this member refers to with the combined way"));
+            comboBox.setSelectedIndex(0);
+            break;
+        case UNDECIDED:
+            model.addElement(tr("Undecided"));
+            comboBox.setToolTipText(tr("Not decided yet"));
+            comboBox.setSelectedIndex(0);
+            break;
         }
     }
Index: trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolver.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolver.java	(revision 2098)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolver.java	(revision 2099)
@@ -8,6 +8,4 @@
 import java.awt.event.ActionEvent;
 import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
 
 import javax.swing.AbstractAction;
@@ -24,8 +22,11 @@
 import javax.swing.event.ChangeListener;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.ChangePropertyCommand;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.tagging.AutoCompletingTextField;
+import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionCache;
+import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionList;
 import org.openstreetmap.josm.tools.ImageProvider;
 
@@ -37,9 +38,10 @@
     private JCheckBox cbTagRelations;
     private RelationMemberConflictResolverModel model;
+    private RelationMemberConflictResolverTable tblResolver;
 
     protected void build() {
         setLayout(new BorderLayout());
         model=new RelationMemberConflictResolverModel();
-        add (new JScrollPane(new RelationMemberConflictResolverTable(model)), BorderLayout.CENTER);
+        add (new JScrollPane(tblResolver = new RelationMemberConflictResolverTable(model)), BorderLayout.CENTER);
         JPanel pnl = new JPanel();
         pnl.setLayout(new BoxLayout(pnl, BoxLayout.Y_AXIS));
@@ -111,3 +113,17 @@
         return new ChangePropertyCommand(primitives, tfKey.getText(), tfValue.getText());
     }
+
+    public void prepareForEditing() {
+        AutoCompletionCache.getCacheForLayer(Main.main.getEditLayer()).initFromDataSet();
+        AutoCompletionList acList = new AutoCompletionList();
+        AutoCompletionCache.getCacheForLayer(Main.main.getEditLayer()).populateWithMemberRoles(acList);
+        tfRole.setAutoCompletionList(acList);
+        AutoCompletingTextField editor = (AutoCompletingTextField)tblResolver.getColumnModel().getColumn(2).getCellEditor();
+        if (editor != null) {
+            editor.setAutoCompletionList(acList);
+        }
+        AutoCompletionList acList2 = new AutoCompletionList();
+        AutoCompletionCache.getCacheForLayer(Main.main.getEditLayer()).populateWithKeys(acList2, false /* don't append */);
+        tfKey.setAutoCompletionList(acList2);
+    }
 }
