Index: trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java	(revision 10953)
+++ trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java	(revision 10957)
@@ -146,4 +146,12 @@
     }
 
+    /**
+     * Same as above but lets you define if the dialog should be disposed on close.
+     * @param parent The parent element that will be used for position and maximum size
+     * @param title The text that will be shown in the window titlebar
+     * @param buttonTexts String Array of the text that will appear on the buttons. The first button is the default one.
+     * @param modal Set it to {@code true} if you want the dialog to be modal
+     * @param disposeOnClose whether to call {@link #dispose} when closing the dialog
+     */
     public ExtendedDialog(Component parent, String title, String[] buttonTexts, boolean modal, boolean disposeOnClose) {
         super(searchRealParent(parent), title, modal ? ModalityType.DOCUMENT_MODAL : ModalityType.MODELESS);
@@ -329,13 +337,5 @@
 
         for (int i = 0; i < bTexts.length; i++) {
-            final int finalI = i;
-            Action action = new AbstractAction(bTexts[i]) {
-                @Override
-                public void actionPerformed(ActionEvent evt) {
-                    buttonAction(finalI, evt);
-                }
-            };
-
-            button = new JButton(action);
+            button = new JButton(createButtonAction(i));
             if (i == defaultButtonIdx-1) {
                 defaultButton = button;
@@ -430,4 +430,13 @@
         setSize(d);
         setLocationRelativeTo(parent);
+    }
+
+    protected Action createButtonAction(final int i) {
+        return new AbstractAction(bTexts[i]) {
+            @Override
+            public void actionPerformed(ActionEvent evt) {
+                buttonAction(i, evt);
+            }
+        };
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java	(revision 10953)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java	(revision 10957)
@@ -222,5 +222,5 @@
         ConflictResolutionDialog dialog = new ConflictResolutionDialog(Main.parent);
         dialog.getConflictResolver().populate(c);
-        dialog.setVisible(true);
+        dialog.showDialog();
 
         lstConflicts.setSelectedIndex(index);
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialog.java	(revision 10953)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialog.java	(revision 10957)
@@ -7,6 +7,4 @@
 import java.awt.BorderLayout;
 import java.awt.Component;
-import java.awt.Dimension;
-import java.awt.FlowLayout;
 import java.awt.event.ActionEvent;
 import java.beans.PropertyChangeEvent;
@@ -15,22 +13,16 @@
 import javax.swing.AbstractAction;
 import javax.swing.Action;
-import javax.swing.BorderFactory;
-import javax.swing.JButton;
-import javax.swing.JDialog;
 import javax.swing.JLabel;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
-import javax.swing.WindowConstants;
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.DefaultNameFormatter;
+import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.conflict.pair.ConflictResolver;
 import org.openstreetmap.josm.gui.help.HelpBrowser;
 import org.openstreetmap.josm.gui.help.HelpUtil;
-import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.tools.ImageProvider;
-import org.openstreetmap.josm.tools.WindowGeometry;
 
 /**
@@ -38,99 +30,10 @@
  * @since 1622
  */
-public class ConflictResolutionDialog extends JDialog implements PropertyChangeListener {
+public class ConflictResolutionDialog extends ExtendedDialog implements PropertyChangeListener {
     /** the conflict resolver component */
-    private ConflictResolver resolver;
-    private JLabel titleLabel;
-
-    private ApplyResolutionAction applyResolutionAction;
-
-    @Override
-    public void removeNotify() {
-        super.removeNotify();
-        unregisterListeners();
-    }
-
-    @Override
-    public void addNotify() {
-        super.addNotify();
-        registerListeners();
-    }
-
-    @Override
-    public void setVisible(boolean isVisible) {
-        String geom = getClass().getName() + ".geometry";
-        if (isVisible) {
-            toFront();
-            new WindowGeometry(geom, WindowGeometry.centerInWindow(Main.parent,
-                new Dimension(600, 400))).applySafe(this);
-        } else {
-            if (isShowing()) { // Avoid IllegalComponentStateException like in #8775
-                new WindowGeometry(this).remember(geom);
-            }
-        }
-        super.setVisible(isVisible);
-    }
-
-    private void closeDialog() {
-        setVisible(false);
-        dispose();
-    }
-
-    /**
-     * builds the sub panel with the control buttons
-     *
-     * @return the panel
-     */
-    protected JPanel buildButtonRow() {
-        JPanel pnl = new JPanel(new FlowLayout(FlowLayout.CENTER));
-
-        applyResolutionAction = new ApplyResolutionAction();
-        JButton btn = new JButton(applyResolutionAction);
-        btn.setName("button.apply");
-        pnl.add(btn);
-
-        btn = new JButton(new CancelAction());
-        btn.setName("button.cancel");
-        pnl.add(btn);
-
-        btn = new JButton(new HelpAction());
-        btn.setName("button.help");
-        pnl.add(btn);
-
-        pnl.setBorder(BorderFactory.createLoweredBevelBorder());
-        return pnl;
-    }
-
-    private void registerListeners() {
-        resolver.addPropertyChangeListener(applyResolutionAction);
-        resolver.registerListeners();
-    }
-
-    private void unregisterListeners() {
-        resolver.removePropertyChangeListener(applyResolutionAction);
-        resolver.unregisterListeners();
-    }
-
-    /**
-     * builds the GUI
-     */
-    protected void build() {
-        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
-        getContentPane().setLayout(new BorderLayout());
-
-        titleLabel = new JLabel();
-        titleLabel.setHorizontalAlignment(JLabel.CENTER);
-        getContentPane().add(titleLabel, BorderLayout.NORTH);
-
-        updateTitle();
-
-        resolver = new ConflictResolver();
-        resolver.setName("panel.conflictresolver");
-        getContentPane().add(resolver, BorderLayout.CENTER);
-        getContentPane().add(buildButtonRow(), BorderLayout.SOUTH);
-
-        resolver.addPropertyChangeListener(this);
-        HelpUtil.setHelpContext(this.getRootPane(), ht("Dialog/Conflict"));
-    }
+    private final ConflictResolver resolver = new ConflictResolver();
+    private final JLabel titleLabel = new JLabel("", null, JLabel.CENTER);
+
+    private final ApplyResolutionAction applyResolutionAction = new ApplyResolutionAction();
 
     /**
@@ -139,9 +42,63 @@
      */
     public ConflictResolutionDialog(Component parent) {
-        super(GuiHelper.getFrameForComponent(parent), ModalityType.DOCUMENT_MODAL);
+        // We define our own actions, but need to give a hint about number of buttons
+        super(parent, tr("Resolve conflicts"), new String[] {null, null, null});
+        setDefaultButton(1);
+        setCancelButton(2);
         build();
         pack();
         if (getInsets().top > 0) {
             titleLabel.setVisible(false);
+        }
+    }
+
+    @Override
+    public void removeNotify() {
+        super.removeNotify();
+        unregisterListeners();
+    }
+
+    @Override
+    public void addNotify() {
+        super.addNotify();
+        registerListeners();
+    }
+
+    private void registerListeners() {
+        resolver.addPropertyChangeListener(applyResolutionAction);
+        resolver.registerListeners();
+    }
+
+    private void unregisterListeners() {
+        resolver.removePropertyChangeListener(applyResolutionAction);
+        resolver.unregisterListeners();
+    }
+
+    /**
+     * builds the GUI
+     */
+    protected void build() {
+        JPanel p = new JPanel(new BorderLayout());
+
+        p.add(titleLabel, BorderLayout.NORTH);
+
+        updateTitle();
+
+        resolver.setName("panel.conflictresolver");
+        p.add(resolver, BorderLayout.CENTER);
+
+        resolver.addPropertyChangeListener(this);
+        HelpUtil.setHelpContext(this.getRootPane(), ht("Dialog/Conflict"));
+
+        setContent(p);
+    }
+
+    @Override
+    protected Action createButtonAction(int i) {
+        switch (i) {
+            case 0: return applyResolutionAction;
+            case 1: return new CancelAction();
+            case 2: return new HelpAction();
+            default: return super.createButtonAction(i);
         }
     }
@@ -167,6 +124,6 @@
 
         @Override
-        public void actionPerformed(ActionEvent arg0) {
-            closeDialog();
+        public void actionPerformed(ActionEvent evt) {
+            buttonAction(2, evt);
         }
     }
@@ -184,5 +141,5 @@
 
         @Override
-        public void actionPerformed(ActionEvent arg0) {
+        public void actionPerformed(ActionEvent evt) {
             HelpBrowser.setUrlForHelpTopic(ht("/Dialog/Conflict"));
         }
@@ -206,5 +163,5 @@
 
         @Override
-        public void actionPerformed(ActionEvent arg0) {
+        public void actionPerformed(ActionEvent evt) {
             if (!resolver.isResolvedCompletely()) {
                 Object[] options = {
@@ -229,5 +186,5 @@
                 switch(ret) {
                 case JOptionPane.YES_OPTION:
-                    closeDialog();
+                    buttonAction(1, evt);
                     break;
                 default:
@@ -235,7 +192,6 @@
                 }
             }
-            Command cmd = resolver.buildResolveCommand();
-            Main.main.undoRedo.add(cmd);
-            closeDialog();
+            Main.main.undoRedo.add(resolver.buildResolveCommand());
+            buttonAction(1, evt);
         }
 
