Index: trunk/src/org/openstreetmap/josm/command/conflict/RelationMemberConflictResolverCommand.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/conflict/RelationMemberConflictResolverCommand.java	(revision 11316)
+++ trunk/src/org/openstreetmap/josm/command/conflict/RelationMemberConflictResolverCommand.java	(revision 11318)
@@ -11,4 +11,5 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.conflict.Conflict;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
@@ -19,25 +20,20 @@
 /**
  * Represents the resolution of conflicts in the member list of two {@link Relation}s.
- *
+ * @since 1631
  */
 public class RelationMemberConflictResolverCommand extends ConflictResolveCommand {
-    /** my relation */
-    private final Relation my;
-    /** their relation */
-    private final Relation their;
-    /** the list of merged nodes. This becomes the list of news of my way after the
-     *  command is executed
-     */
+    /** the conflict to resolve */
+    private final Conflict<Relation> conflict;
+    /** the list of merged nodes. This becomes the list of news of my way after the command is executed */
     private final List<RelationMember> mergedMembers;
 
     /**
-     *
-     * @param my my relation
-     * @param their their relation
+     * Constructs a new {@code RelationMemberConflictResolverCommand}.
+     * @param conflict the conflict to resolve
      * @param mergedMembers the list of merged relation members
      */
-    public RelationMemberConflictResolverCommand(Relation my, Relation their, List<RelationMember> mergedMembers) {
-        this.my = my;
-        this.their = their;
+    @SuppressWarnings("unchecked")
+    public RelationMemberConflictResolverCommand(Conflict<? extends OsmPrimitive> conflict, List<RelationMember> mergedMembers) {
+        this.conflict = (Conflict<Relation>) conflict;
         this.mergedMembers = mergedMembers;
     }
@@ -45,5 +41,5 @@
     @Override
     public String getDescriptionText() {
-        return tr("Resolve conflicts in member list of relation {0}", my.getId());
+        return tr("Resolve conflicts in member list of relation {0}", conflict.getMy().getId());
     }
 
@@ -61,5 +57,5 @@
         // replace the list of members of 'my' relation by the list of merged members
         //
-        my.setMembers(mergedMembers);
+        conflict.getMy().setMembers(mergedMembers);
 
         return true;
@@ -69,5 +65,5 @@
     public void fillModifiedData(Collection<OsmPrimitive> modified, Collection<OsmPrimitive> deleted,
             Collection<OsmPrimitive> added) {
-        modified.add(my);
+        modified.add(conflict.getMy());
     }
 
@@ -92,6 +88,6 @@
         // restore a conflict if necessary
         //
-        if (!editLayer.getConflicts().hasConflictForMy(my)) {
-            editLayer.getConflicts().add(my, their);
+        if (!editLayer.getConflicts().hasConflictForMy(conflict.getMy())) {
+            editLayer.getConflicts().add(conflict);
         }
     }
@@ -99,5 +95,5 @@
     @Override
     public int hashCode() {
-        return Objects.hash(super.hashCode(), my, their, mergedMembers);
+        return Objects.hash(super.hashCode(), conflict, mergedMembers);
     }
 
@@ -108,7 +104,6 @@
         if (!super.equals(obj)) return false;
         RelationMemberConflictResolverCommand that = (RelationMemberConflictResolverCommand) obj;
-        return Objects.equals(my, that.my) &&
-                Objects.equals(their, that.their) &&
-                Objects.equals(mergedMembers, that.mergedMembers);
+        return Objects.equals(conflict, that.conflict) &&
+               Objects.equals(mergedMembers, that.mergedMembers);
     }
 }
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/ConflictResolver.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/ConflictResolver.java	(revision 11316)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/ConflictResolver.java	(revision 11318)
@@ -24,9 +24,7 @@
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Way;
-import org.openstreetmap.josm.gui.conflict.pair.nodes.NodeListMergeModel;
 import org.openstreetmap.josm.gui.conflict.pair.nodes.NodeListMerger;
 import org.openstreetmap.josm.gui.conflict.pair.properties.PropertiesMergeModel;
 import org.openstreetmap.josm.gui.conflict.pair.properties.PropertiesMerger;
-import org.openstreetmap.josm.gui.conflict.pair.relation.RelationMemberListMergeModel;
 import org.openstreetmap.josm.gui.conflict.pair.relation.RelationMemberMerger;
 import org.openstreetmap.josm.gui.conflict.pair.tags.TagMergeModel;
@@ -46,5 +44,5 @@
  *   their primitive</li>
  * </ul>
- *
+ * @since 1622
  */
 public class ConflictResolver extends JPanel implements PropertyChangeListener {
@@ -274,6 +272,5 @@
 
     /**
-     * Builds the resolution command(s) for the resolved conflicts in this
-     * ConflictResolver
+     * Builds the resolution command(s) for the resolved conflicts in this ConflictResolver
      *
      * @return the resolution command
@@ -287,9 +284,7 @@
         commands.addAll(propertiesMerger.getModel().buildResolveCommand(conflict));
         if (my instanceof Way && nodeListMerger.getModel().isFrozen()) {
-            NodeListMergeModel model = (NodeListMergeModel) nodeListMerger.getModel();
-            commands.add(model.buildResolveCommand(conflict));
+            commands.add(nodeListMerger.getModel().buildResolveCommand(conflict));
         } else if (my instanceof Relation && relationMemberMerger.getModel().isFrozen()) {
-            RelationMemberListMergeModel model = (RelationMemberListMergeModel) relationMemberMerger.getModel();
-            commands.add(model.buildResolveCommand((Relation) my, (Relation) their));
+            commands.add(relationMemberMerger.getModel().buildResolveCommand(conflict));
         }
         if (isResolvedCompletely()) {
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMergeModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMergeModel.java	(revision 11316)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMergeModel.java	(revision 11318)
@@ -29,4 +29,6 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.command.conflict.ConflictResolveCommand;
+import org.openstreetmap.josm.data.conflict.Conflict;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -69,8 +71,9 @@
  * A ListMergeModel is used in combination with a {@link ListMerger}.
  *
- * @param <T>  the type of the list entries
+ * @param <T> the type of the list entries
+ * @param <C> the type of conflict resolution command
  * @see ListMerger
  */
-public abstract class ListMergeModel<T extends PrimitiveId> extends ChangeNotifier {
+public abstract class ListMergeModel<T extends PrimitiveId, C extends ConflictResolveCommand> extends ChangeNotifier {
     public static final String FROZEN_PROP = ListMergeModel.class.getName() + ".frozen";
 
@@ -614,5 +617,9 @@
         }
 
-        public ListMergeModel<T> getListMergeModel() {
+        /**
+         * Returns the list merge model.
+         * @return the list merge model
+         */
+        public ListMergeModel<T, C> getListMergeModel() {
             return ListMergeModel.this;
         }
@@ -861,3 +868,12 @@
         }
     }
+
+    /**
+     * Builds the command to resolve conflicts in the list.
+     *
+     * @param conflict the conflict data set
+     * @return the command
+     * @throws IllegalStateException if the merge is not yet frozen
+     */
+    public abstract C buildResolveCommand(Conflict<? extends OsmPrimitive> conflict);
 }
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMerger.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMerger.java	(revision 11316)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMerger.java	(revision 11318)
@@ -32,4 +32,5 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.command.conflict.ConflictResolveCommand;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.PrimitiveId;
@@ -46,13 +47,15 @@
  *
  * @param <T> the type of the entries
+ * @param <C> the type of conflict resolution command
  * @see ListMergeModel
  * @since 1631
  */
-public abstract class ListMerger<T extends PrimitiveId> extends JPanel implements PropertyChangeListener, ChangeListener, IConflictResolver {
+public abstract class ListMerger<T extends PrimitiveId, C extends ConflictResolveCommand> extends JPanel
+implements PropertyChangeListener, ChangeListener, IConflictResolver {
     protected OsmPrimitivesTable myEntriesTable;
     protected OsmPrimitivesTable mergedEntriesTable;
     protected OsmPrimitivesTable theirEntriesTable;
 
-    protected transient ListMergeModel<T> model;
+    protected transient ListMergeModel<T, C> model;
 
     private CopyStartLeftAction copyStartLeftAction;
@@ -406,5 +409,5 @@
      * @param model list merger model
      */
-    public ListMerger(ListMergeModel<T> model) {
+    public ListMerger(ListMergeModel<T, C> model) {
         this.model = model;
         model.addChangeListener(this);
@@ -861,5 +864,9 @@
     }
 
-    public ListMergeModel<T> getModel() {
+    /**
+     * Returns the model.
+     * @return the model
+     */
+    public ListMergeModel<T, C> getModel() {
         return model;
     }
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/PairTable.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/PairTable.java	(revision 11316)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/PairTable.java	(revision 11318)
@@ -6,4 +6,5 @@
 import javax.swing.table.TableColumnModel;
 
+import org.openstreetmap.josm.command.conflict.ConflictResolveCommand;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.PrimitiveId;
@@ -14,5 +15,5 @@
 public abstract class PairTable extends OsmPrimitivesTable {
 
-    private final transient ListMergeModel<? extends PrimitiveId> model;
+    private final transient ListMergeModel<? extends PrimitiveId, ? extends ConflictResolveCommand> model;
 
     /**
@@ -24,5 +25,5 @@
      * @param sm selection model
      */
-    public PairTable(String name, ListMergeModel<? extends PrimitiveId> model,
+    public PairTable(String name, ListMergeModel<? extends PrimitiveId, ? extends ConflictResolveCommand> model,
             OsmPrimitivesTableModel dm, TableColumnModel cm, ListSelectionModel sm) {
         super(dm, cm, sm);
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMergeModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMergeModel.java	(revision 11316)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMergeModel.java	(revision 11318)
@@ -18,5 +18,9 @@
 import org.openstreetmap.josm.gui.conflict.pair.ListRole;
 
-public class NodeListMergeModel extends ListMergeModel<Node> {
+/**
+ * The model for merging two lists of way nodess
+ * @since 1622
+ */
+public class NodeListMergeModel extends ListMergeModel<Node, WayNodesConflictResolverCommand> {
 
     /**
@@ -49,11 +53,5 @@
     }
 
-    /**
-     * Builds the command to resolve conflicts in the node list of a way
-     *
-     * @param conflict the conflict data set
-     * @return the command
-     * @throws IllegalStateException if the merge is not yet frozen
-     */
+    @Override
     public WayNodesConflictResolverCommand buildResolveCommand(Conflict<? extends OsmPrimitive> conflict) {
         if (!isFrozen())
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMerger.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMerger.java	(revision 11316)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListMerger.java	(revision 11318)
@@ -4,4 +4,5 @@
 import javax.swing.JScrollPane;
 
+import org.openstreetmap.josm.command.conflict.WayNodesConflictResolverCommand;
 import org.openstreetmap.josm.data.conflict.Conflict;
 import org.openstreetmap.josm.data.osm.Node;
@@ -14,5 +15,5 @@
  * @since 1622
  */
-public class NodeListMerger extends ListMerger<Node> {
+public class NodeListMerger extends ListMerger<Node, WayNodesConflictResolverCommand> {
 
     /**
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListTable.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListTable.java	(revision 11316)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListTable.java	(revision 11318)
@@ -5,4 +5,5 @@
 
 import org.openstreetmap.josm.actions.ZoomToAction;
+import org.openstreetmap.josm.command.conflict.WayNodesConflictResolverCommand;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.gui.conflict.pair.ListMergeModel;
@@ -10,4 +11,8 @@
 import org.openstreetmap.josm.gui.widgets.OsmPrimitivesTableModel;
 
+/**
+ * Node list table.
+ * @since 5297
+ */
 public class NodeListTable extends PairTable {
 
@@ -19,5 +24,6 @@
      * @param sm selection model
      */
-    public NodeListTable(String name, ListMergeModel<Node> model, OsmPrimitivesTableModel dm, ListSelectionModel sm) {
+    public NodeListTable(String name, ListMergeModel<Node, WayNodesConflictResolverCommand> model,
+            OsmPrimitivesTableModel dm, ListSelectionModel sm) {
         super(name, model, dm, new NodeListColumnModel(new NodeListTableCellRenderer()), sm);
     }
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListTableCellRenderer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListTableCellRenderer.java	(revision 11316)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/nodes/NodeListTableCellRenderer.java	(revision 11318)
@@ -12,4 +12,5 @@
 import javax.swing.table.TableCellRenderer;
 
+import org.openstreetmap.josm.command.conflict.WayNodesConflictResolverCommand;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.gui.DefaultNameFormatter;
@@ -54,5 +55,6 @@
      * @param isSelected true, if the current row is selected
      */
-    protected void renderNode(ListMergeModel<Node>.EntriesTableModel model, Node node, int row, boolean isSelected) {
+    protected void renderNode(ListMergeModel<Node, WayNodesConflictResolverCommand>.EntriesTableModel model, Node node,
+            int row, boolean isSelected) {
         setIcon(icon);
         setBorder(null);
@@ -88,5 +90,5 @@
      * @param row the row index
      */
-    protected void renderRowId(ListMergeModel<Node>.EntriesTableModel model, int row) {
+    protected void renderRowId(ListMergeModel<Node, WayNodesConflictResolverCommand>.EntriesTableModel model, int row) {
         setIcon(null);
         setBorder(rowNumberBorder);
@@ -130,6 +132,6 @@
      */
     @SuppressWarnings("unchecked")
-    protected ListMergeModel<Node>.EntriesTableModel getModel(JTable table) {
-        return (ListMergeModel<Node>.EntriesTableModel) table.getModel();
+    protected ListMergeModel<Node, WayNodesConflictResolverCommand>.EntriesTableModel getModel(JTable table) {
+        return (ListMergeModel<Node, WayNodesConflictResolverCommand>.EntriesTableModel) table.getModel();
     }
 }
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberListMergeModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberListMergeModel.java	(revision 11316)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberListMergeModel.java	(revision 11318)
@@ -4,5 +4,4 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
-import java.util.List;
 import java.util.Map;
 
@@ -10,4 +9,5 @@
 
 import org.openstreetmap.josm.command.conflict.RelationMemberConflictResolverCommand;
+import org.openstreetmap.josm.data.conflict.Conflict;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.PrimitiveId;
@@ -17,9 +17,10 @@
 import org.openstreetmap.josm.gui.conflict.pair.ListRole;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
+
 /**
  * The model for merging two lists of relation members
- *
+ * @since 1631
  */
-public class RelationMemberListMergeModel extends ListMergeModel<RelationMember> {
+public class RelationMemberListMergeModel extends ListMergeModel<RelationMember, RelationMemberConflictResolverCommand> {
 
     @Override
@@ -96,21 +97,10 @@
     }
 
-    /**
-     * Builds the command to resolve conflicts in the node list of a way
-     *
-     * @param my  my relation. Must not be null.
-     * @param their  their relation. Must not be null
-     * @return the command
-     * @throws IllegalArgumentException if my is null
-     * @throws IllegalArgumentException if their is null
-     * @throws IllegalStateException if the merge is not yet frozen
-     */
-    public RelationMemberConflictResolverCommand buildResolveCommand(Relation my, Relation their) {
-        CheckParameterUtil.ensureParameterNotNull(my, "my");
-        CheckParameterUtil.ensureParameterNotNull(their, "their");
+    @Override
+    public RelationMemberConflictResolverCommand buildResolveCommand(Conflict<? extends OsmPrimitive> conflict) {
+        CheckParameterUtil.ensureParameterNotNull(conflict, "conflict");
         if (!isFrozen())
-            throw new IllegalArgumentException(tr("Merged nodes not frozen yet. Cannot build resolution command"));
-        List<RelationMember> entries = getMergedEntries();
-        return new RelationMemberConflictResolverCommand(my, their, entries);
+            throw new IllegalArgumentException(tr("Merged members not frozen yet. Cannot build resolution command"));
+        return new RelationMemberConflictResolverCommand(conflict, getMergedEntries());
     }
 }
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberMerger.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberMerger.java	(revision 11316)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberMerger.java	(revision 11318)
@@ -4,4 +4,5 @@
 import javax.swing.JScrollPane;
 
+import org.openstreetmap.josm.command.conflict.RelationMemberConflictResolverCommand;
 import org.openstreetmap.josm.data.conflict.Conflict;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -14,5 +15,5 @@
  * @since 1631
  */
-public class RelationMemberMerger extends ListMerger<RelationMember> {
+public class RelationMemberMerger extends ListMerger<RelationMember, RelationMemberConflictResolverCommand> {
 
     /**
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberTable.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberTable.java	(revision 11316)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberTable.java	(revision 11318)
@@ -5,4 +5,5 @@
 
 import org.openstreetmap.josm.actions.ZoomToAction;
+import org.openstreetmap.josm.command.conflict.RelationMemberConflictResolverCommand;
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.gui.conflict.pair.ListMergeModel;
@@ -10,4 +11,8 @@
 import org.openstreetmap.josm.gui.widgets.OsmPrimitivesTableModel;
 
+/**
+ * Relation member table.
+ * @since 5297
+ */
 public class RelationMemberTable extends PairTable {
 
@@ -19,5 +24,6 @@
      * @param sm selection model
      */
-    public RelationMemberTable(String name, ListMergeModel<RelationMember> model, OsmPrimitivesTableModel dm, ListSelectionModel sm) {
+    public RelationMemberTable(String name, ListMergeModel<RelationMember, RelationMemberConflictResolverCommand> model,
+            OsmPrimitivesTableModel dm, ListSelectionModel sm) {
         super(name, model, dm, new RelationMemberListColumnModel(), sm);
     }
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberTableCellRenderer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberTableCellRenderer.java	(revision 11316)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberTableCellRenderer.java	(revision 11318)
@@ -11,5 +11,5 @@
 import javax.swing.table.TableCellRenderer;
 
-import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.command.conflict.RelationMemberConflictResolverCommand;
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.gui.DefaultNameFormatter;
@@ -20,5 +20,5 @@
 /**
  * This is the {@link TableCellRenderer} used in the tables of {@link RelationMemberMerger}.
- *
+ * @since 1631
  */
 public class RelationMemberTableCellRenderer extends JLabel implements TableCellRenderer {
@@ -45,5 +45,6 @@
     }
 
-    protected void renderBackground(ListMergeModel<Node>.EntriesTableModel model, RelationMember member, int row, int col, boolean isSelected) {
+    protected void renderBackground(ListMergeModel<RelationMember, RelationMemberConflictResolverCommand>.EntriesTableModel model,
+            RelationMember member, int row, int col, boolean isSelected) {
         Color bgc = ConflictColors.BGCOLOR.get();
         if (col == 0) {
@@ -77,5 +78,6 @@
     }
 
-    protected void renderForeground(ListMergeModel<Node>.EntriesTableModel model, RelationMember member, int row, int col, boolean isSelected) {
+    protected void renderForeground(ListMergeModel<RelationMember, RelationMemberConflictResolverCommand>.EntriesTableModel model,
+            RelationMember member, int row, int col, boolean isSelected) {
         Color fgc = ConflictColors.FGCOLOR.get();
         if (col == 0 && model.isParticipatingInCurrentComparePair() && !model.getListMergeModel().isFrozen()) {
@@ -146,6 +148,6 @@
      */
     @SuppressWarnings("unchecked")
-    protected ListMergeModel<Node>.EntriesTableModel getModel(JTable table) {
-        return (ListMergeModel<Node>.EntriesTableModel) table.getModel();
+    protected ListMergeModel<RelationMember, RelationMemberConflictResolverCommand>.EntriesTableModel getModel(JTable table) {
+        return (ListMergeModel<RelationMember, RelationMemberConflictResolverCommand>.EntriesTableModel) table.getModel();
     }
 }
