Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/ConflictResolver.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/ConflictResolver.java	(revision 9439)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/ConflictResolver.java	(revision 9440)
@@ -347,3 +347,17 @@
         relationMemberMerger.unlinkAsListener();
     }
+
+    public void decideRemaining(MergeDecisionType decision) {
+        propertiesMerger.decideRemaining(decision);
+        tagMerger.decideRemaining(decision);
+        if (my instanceof Way) {
+            nodeListMerger.decideRemaining(decision);
+        } else if (my instanceof Relation) {
+            relationMemberMerger.decideRemaining(decision);
+        }
+        updateResolvedCompletely();
+        if (!isResolvedCompletely()) {
+            throw new AssertionError();
+        }
+    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/IConflictResolver.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/IConflictResolver.java	(revision 9439)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/IConflictResolver.java	(revision 9440)
@@ -10,3 +10,5 @@
 
     void populate(Conflict<? extends OsmPrimitive> conflict);
+
+    void decideRemaining(MergeDecisionType decision);
 }
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMerger.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMerger.java	(revision 9439)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMerger.java	(revision 9440)
@@ -917,3 +917,9 @@
         return null;
     }
+
+    public void decideRemaining(MergeDecisionType decision) {
+        if (!model.isFrozen()) {
+            model.copyAll(MergeDecisionType.KEEP_MINE.equals(decision) ? ListRole.MY_ENTRIES : ListRole.THEIR_ENTRIES);
+        }
+    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMerger.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMerger.java	(revision 9439)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/properties/PropertiesMerger.java	(revision 9440)
@@ -508,3 +508,13 @@
         model.populate(conflict);
     }
+
+    @Override
+    public void decideRemaining(MergeDecisionType decision) {
+        if (!model.isDecidedCoord()) {
+            model.decideDeletedStateConflict(decision);
+        }
+        if (!model.isDecidedCoord()) {
+            model.decideCoordsConflict(decision);
+        }
+    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeModel.java	(revision 9439)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMergeModel.java	(revision 9440)
@@ -202,4 +202,11 @@
     }
 
+    public void decideRemaining(MergeDecisionType decision) {
+        for (TagMergeItem item: tagMergeItems) {
+            if (item.getMergeDecision().equals(MergeDecisionType.UNDECIDED))
+                item.decide(decision);
+        }
+    }
+
     public int getNumResolvedConflicts() {
         int n = 0;
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMerger.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMerger.java	(revision 9439)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMerger.java	(revision 9440)
@@ -443,3 +443,8 @@
         }
     }
+
+    @Override
+    public void decideRemaining(MergeDecisionType decision) {
+        model.decideRemaining(decision);
+    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java	(revision 9439)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java	(revision 9440)
@@ -13,8 +13,10 @@
 import java.awt.event.KeyEvent;
 import java.awt.event.MouseEvent;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.LinkedList;
+import java.util.List;
 import java.util.Set;
 import java.util.concurrent.CopyOnWriteArrayList;
@@ -22,4 +24,5 @@
 import javax.swing.AbstractAction;
 import javax.swing.JList;
+import javax.swing.JMenuItem;
 import javax.swing.JOptionPane;
 import javax.swing.JPopupMenu;
@@ -30,7 +33,12 @@
 import javax.swing.event.ListSelectionEvent;
 import javax.swing.event.ListSelectionListener;
+import javax.swing.event.PopupMenuEvent;
+import javax.swing.event.PopupMenuListener;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.AbstractSelectAction;
+import org.openstreetmap.josm.actions.ExpertToggleAction;
+import org.openstreetmap.josm.command.Command;
+import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.SelectionChangedListener;
 import org.openstreetmap.josm.data.conflict.Conflict;
@@ -52,4 +60,6 @@
 import org.openstreetmap.josm.gui.PopupMenuHandler;
 import org.openstreetmap.josm.gui.SideButton;
+import org.openstreetmap.josm.gui.conflict.pair.ConflictResolver;
+import org.openstreetmap.josm.gui.conflict.pair.MergeDecisionType;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.util.GuiHelper;
@@ -118,4 +128,29 @@
 
         popupMenuHandler.addAction(Main.main.menu.autoScaleActions.get("conflict"));
+
+        final ResolveTpMyVersionAction resolveTpMyVersionAction = new ResolveTpMyVersionAction();
+        final ResolveToTheirVersionAction resolveToTheirVersionAction = new ResolveToTheirVersionAction();
+        addListSelectionListener(resolveTpMyVersionAction);
+        addListSelectionListener(resolveToTheirVersionAction);
+        final JMenuItem btnResolveMy = popupMenuHandler.addAction(resolveTpMyVersionAction);
+        final JMenuItem btnResolveTheir = popupMenuHandler.addAction(resolveToTheirVersionAction);
+
+        popupMenuHandler.addListener(new PopupMenuListener() {
+            @Override
+            public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
+                btnResolveMy.setVisible(ExpertToggleAction.isExpert());
+                btnResolveTheir.setVisible(ExpertToggleAction.isExpert());
+            }
+
+            @Override
+            public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
+                // Do nothing
+            }
+
+            @Override
+            public void popupMenuCanceled(PopupMenuEvent e) {
+                // Do nothing
+            }
+        });
     }
 
@@ -319,4 +354,9 @@
     }
 
+    private boolean isConflictSelected() {
+        final ListSelectionModel model = lstConflicts.getSelectionModel();
+        return model.getMinSelectionIndex() >= 0 && model.getMaxSelectionIndex() >= model.getMinSelectionIndex();
+    }
+
     @Override
     public void onConflictsAdded(ConflictCollection conflicts) {
@@ -445,8 +485,5 @@
         @Override
         public void valueChanged(ListSelectionEvent e) {
-            ListSelectionModel model = (ListSelectionModel) e.getSource();
-            boolean enabled = model.getMinSelectionIndex() >= 0
-            && model.getMaxSelectionIndex() >= model.getMinSelectionIndex();
-            setEnabled(enabled);
+            setEnabled(isConflictSelected());
         }
     }
@@ -471,8 +508,46 @@
         @Override
         public void valueChanged(ListSelectionEvent e) {
-            ListSelectionModel model = (ListSelectionModel) e.getSource();
-            boolean enabled = model.getMinSelectionIndex() >= 0
-            && model.getMaxSelectionIndex() >= model.getMinSelectionIndex();
-            setEnabled(enabled);
+            setEnabled(isConflictSelected());
+        }
+    }
+
+    abstract class ResolveToAction extends ResolveAction {
+        private final String name;
+        private final MergeDecisionType type;
+
+        ResolveToAction(String name, String description, MergeDecisionType type) {
+            this.name = name;
+            this.type = type;
+            putValue(NAME, name);
+            putValue(SHORT_DESCRIPTION,  description);
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            final ConflictResolver resolver = new ConflictResolver();
+            final List<Command> commands = new ArrayList<>();
+            for (OsmPrimitive osmPrimitive : lstConflicts.getSelectedValuesList()) {
+                Conflict<? extends OsmPrimitive> c = conflicts.getConflictForMy(osmPrimitive);
+                resolver.populate(c);
+                resolver.decideRemaining(type);
+                commands.add(resolver.buildResolveCommand());
+            }
+            Main.main.undoRedo.add(new SequenceCommand(name, commands));
+            refreshView();
+            Main.map.mapView.repaint();
+        }
+    }
+
+    class ResolveTpMyVersionAction extends ResolveToAction {
+        public ResolveTpMyVersionAction() {
+            super(tr("Resolve to my versions"), tr("Resolves all unresolved conflicts to ''my'' version"),
+                    MergeDecisionType.KEEP_MINE);
+        }
+    }
+
+    class ResolveToTheirVersionAction extends ResolveToAction {
+        public ResolveToTheirVersionAction() {
+            super(tr("Resolve to their versions"), tr("Resolves all unresolved conflicts to ''their'' version"),
+                    MergeDecisionType.KEEP_THEIR);
         }
     }
