Index: trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java	(revision 11944)
+++ trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java	(revision 11945)
@@ -73,5 +73,5 @@
  * </pre>
  */
-public class ExtendedDialog extends JDialog {
+public class ExtendedDialog extends JDialog implements IExtendedDialog {
     private final boolean disposeOnClose;
     private volatile int result;
@@ -173,9 +173,5 @@
     }
 
-    /**
-     * Allows decorating the buttons with icons.
-     * @param buttonIcons The button icons
-     * @return {@code this}
-     */
+    @Override
     public ExtendedDialog setButtonIcons(Icon... buttonIcons) {
         this.bIcons = Utils.copyArray(buttonIcons);
@@ -183,9 +179,5 @@
     }
 
-    /**
-     * Convenience method to provide image names instead of images.
-     * @param buttonIcons The button icon names
-     * @return {@code this}
-     */
+    @Override
     public ExtendedDialog setButtonIcons(String... buttonIcons) {
         bIcons = new Icon[buttonIcons.length];
@@ -196,11 +188,5 @@
     }
 
-    /**
-     * Allows decorating the buttons with tooltips. Expects a String array with
-     * translated tooltip texts.
-     *
-     * @param toolTipTexts the tool tip texts. Ignored, if null.
-     * @return {@code this}
-     */
+    @Override
     public ExtendedDialog setToolTipTexts(String... toolTipTexts) {
         this.bToolTipTexts = Utils.copyArray(toolTipTexts);
@@ -208,27 +194,10 @@
     }
 
-    /**
-     * Sets the content that will be displayed in the message dialog.
-     *
-     * Note that depending on your other settings more UI elements may appear.
-     * The content is played on top of the other elements though.
-     *
-     * @param content Any element that can be displayed in the message dialog
-     * @return {@code this}
-     */
+    @Override
     public ExtendedDialog setContent(Component content) {
         return setContent(content, true);
     }
 
-    /**
-     * Sets the content that will be displayed in the message dialog.
-     *
-     * Note that depending on your other settings more UI elements may appear.
-     * The content is played on top of the other elements though.
-     *
-     * @param content Any element that can be displayed in the message dialog
-     * @param placeContentInScrollPane if true, places the content in a JScrollPane
-     * @return {@code this}
-     */
+    @Override
     public ExtendedDialog setContent(Component content, boolean placeContentInScrollPane) {
         this.content = content;
@@ -237,24 +206,10 @@
     }
 
-    /**
-     * Sets the message that will be displayed. The String will be automatically
-     * wrapped if it is too long.
-     *
-     * Note that depending on your other settings more UI elements may appear.
-     * The content is played on top of the other elements though.
-     *
-     * @param message The text that should be shown to the user
-     * @return {@code this}
-     */
+    @Override
     public ExtendedDialog setContent(String message) {
         return setContent(string2label(message), false);
     }
 
-    /**
-     * Decorate the dialog with an icon that is shown on the left part of
-     * the window area. (Similar to how it is done in {@link JOptionPane})
-     * @param icon The icon to display
-     * @return {@code this}
-     */
+    @Override
     public ExtendedDialog setIcon(Icon icon) {
         this.icon = icon;
@@ -262,9 +217,5 @@
     }
 
-    /**
-     * Convenience method to allow values that would be accepted by {@link JOptionPane} as messageType.
-     * @param messageType The {@link JOptionPane} messageType
-     * @return {@code this}
-     */
+    @Override
     public ExtendedDialog setIcon(int messageType) {
         switch (messageType) {
@@ -284,9 +235,5 @@
     }
 
-    /**
-     * Show the dialog to the user. Call this after you have set all options
-     * for the dialog. You can retrieve the result using {@link #getValue()}.
-     * @return {@code this}
-     */
+    @Override
     public ExtendedDialog showDialog() {
         // Check if the user has set the dialog to not be shown again
@@ -309,11 +256,5 @@
     }
 
-    /**
-     * Retrieve the user choice after the dialog has been closed.
-     *
-     * @return <ul> <li>The selected button. The count starts with 1.</li>
-     *              <li>A return value of {@link #DialogClosedOtherwise} means the dialog has been closed otherwise.</li>
-     *         </ul>
-     */
+    @Override
     public int getValue() {
         return result;
@@ -322,8 +263,5 @@
     private boolean setupDone;
 
-    /**
-     * This is called by {@link #showDialog()}.
-     * Only invoke from outside if you need to modify the contentPane
-     */
+    @Override
     public void setupDialog() {
         if (setupDone)
@@ -523,18 +461,5 @@
     }
 
-    /**
-     * Call this if you want the dialog to remember the geometry (size and position) set by the user.
-     * Set the pref to <code>null</code> or to an empty string to disable again.
-     * By default, it's disabled.
-     *
-     * Note: If you want to set the width of this dialog directly use the usual
-     * setSize, setPreferredSize, setMaxSize, setMinSize
-     *
-     * @param pref  The preference to save the dimension to
-     * @param wg    The default window geometry that should be used if no
-     *              existing preference is found (only takes effect if
-     *              <code>pref</code> is not null or empty
-     * @return {@code this}
-     */
+    @Override
     public ExtendedDialog setRememberWindowGeometry(String pref, WindowGeometry wg) {
         rememberSizePref = pref == null ? "" : pref;
@@ -543,12 +468,5 @@
     }
 
-    /**
-     * Calling this will offer the user a "Do not show again" checkbox for the
-     * dialog. Default is to not offer the choice; the dialog will be shown
-     * every time.
-     * Currently, this is not supported for non-modal dialogs.
-     * @param togglePref  The preference to save the checkbox state to
-     * @return {@code this}
-     */
+    @Override
     public ExtendedDialog toggleEnable(String togglePref) {
         if (!modal) {
@@ -560,9 +478,5 @@
     }
 
-    /**
-     * Sets the button that will react to ENTER.
-     * @param defaultButtonIdx The button index (starts to 1)
-     * @return {@code this}
-     */
+    @Override
     public ExtendedDialog setDefaultButton(int defaultButtonIdx) {
         this.defaultButtonIdx = defaultButtonIdx;
@@ -570,10 +484,5 @@
     }
 
-    /**
-     * Used in combination with toggle:
-     * If the user presses 'cancel' the toggle settings are ignored and not saved to the pref
-     * @param cancelButtonIdx index of the button that stands for cancel, accepts multiple values
-     * @return {@code this}
-     */
+    @Override
     public ExtendedDialog setCancelButton(Integer... cancelButtonIdx) {
         this.cancelButtonIdx = new HashSet<>(Arrays.<Integer>asList(cancelButtonIdx));
@@ -581,9 +490,5 @@
     }
 
-    /**
-     * Makes default button request initial focus or not.
-     * @param focus {@code true} to make default button request initial focus
-     * @since 7407
-     */
+    @Override
     public void setFocusOnDefaultButton(boolean focus) {
         focusOnDefaultButton = focus;
@@ -596,8 +501,5 @@
     }
 
-    /**
-     * This function returns true if the dialog has been set to "do not show again"
-     * @return true if dialog should not be shown again
-     */
+    @Override
     public final boolean toggleCheckState() {
         toggleable = togglePref != null && !togglePref.isEmpty();
@@ -634,18 +536,5 @@
     }
 
-    /**
-     * Configures how this dialog support for context sensitive help.
-     * <ul>
-     *  <li>if helpTopic is null, the dialog doesn't provide context sensitive help</li>
-     *  <li>if helpTopic != null, the dialog redirect user to the help page for this helpTopic when
-     *  the user clicks F1 in the dialog</li>
-     *  <li>if showHelpButton is true, the dialog displays "Help" button (rightmost button in
-     *  the button row)</li>
-     * </ul>
-     *
-     * @param helpTopic the help topic
-     * @param showHelpButton true, if the dialog displays a help button
-     * @return {@code this}
-     */
+    @Override
     public ExtendedDialog configureContextsensitiveHelp(String helpTopic, boolean showHelpButton) {
         this.helpTopic = helpTopic;
Index: trunk/src/org/openstreetmap/josm/gui/IExtendedDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/IExtendedDialog.java	(revision 11945)
+++ trunk/src/org/openstreetmap/josm/gui/IExtendedDialog.java	(revision 11945)
@@ -0,0 +1,181 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui;
+
+import java.awt.Component;
+
+import javax.swing.Icon;
+import javax.swing.JOptionPane;
+
+import org.openstreetmap.josm.tools.WindowGeometry;
+
+/**
+ * Extracted interface of {@link ExtendedDialog} class.
+ * @since 11945
+ */
+public interface IExtendedDialog {
+
+    /**
+     * Allows decorating the buttons with icons.
+     * @param buttonIcons The button icons
+     * @return {@code this}
+     */
+    ExtendedDialog setButtonIcons(Icon... buttonIcons);
+
+    /**
+     * Convenience method to provide image names instead of images.
+     * @param buttonIcons The button icon names
+     * @return {@code this}
+     */
+    ExtendedDialog setButtonIcons(String... buttonIcons);
+
+    /**
+     * Allows decorating the buttons with tooltips. Expects a String array with
+     * translated tooltip texts.
+     *
+     * @param toolTipTexts the tool tip texts. Ignored, if null.
+     * @return {@code this}
+     */
+    ExtendedDialog setToolTipTexts(String... toolTipTexts);
+
+    /**
+     * Sets the content that will be displayed in the message dialog.
+     *
+     * Note that depending on your other settings more UI elements may appear.
+     * The content is played on top of the other elements though.
+     *
+     * @param content Any element that can be displayed in the message dialog
+     * @return {@code this}
+     */
+    ExtendedDialog setContent(Component content);
+
+    /**
+     * Sets the content that will be displayed in the message dialog.
+     *
+     * Note that depending on your other settings more UI elements may appear.
+     * The content is played on top of the other elements though.
+     *
+     * @param content Any element that can be displayed in the message dialog
+     * @param placeContentInScrollPane if true, places the content in a JScrollPane
+     * @return {@code this}
+     */
+    ExtendedDialog setContent(Component content, boolean placeContentInScrollPane);
+
+    /**
+     * Sets the message that will be displayed. The String will be automatically
+     * wrapped if it is too long.
+     *
+     * Note that depending on your other settings more UI elements may appear.
+     * The content is played on top of the other elements though.
+     *
+     * @param message The text that should be shown to the user
+     * @return {@code this}
+     */
+    ExtendedDialog setContent(String message);
+
+    /**
+     * Decorate the dialog with an icon that is shown on the left part of
+     * the window area. (Similar to how it is done in {@link JOptionPane})
+     * @param icon The icon to display
+     * @return {@code this}
+     */
+    ExtendedDialog setIcon(Icon icon);
+
+    /**
+     * Convenience method to allow values that would be accepted by {@link JOptionPane} as messageType.
+     * @param messageType The {@link JOptionPane} messageType
+     * @return {@code this}
+     */
+    ExtendedDialog setIcon(int messageType);
+
+    /**
+     * Show the dialog to the user. Call this after you have set all options
+     * for the dialog. You can retrieve the result using {@link #getValue()}.
+     * @return {@code this}
+     */
+    ExtendedDialog showDialog();
+
+    /**
+     * Retrieve the user choice after the dialog has been closed.
+     *
+     * @return <ul> <li>The selected button. The count starts with 1.</li>
+     *              <li>A return value of {@link ExtendedDialog#DialogClosedOtherwise} means the dialog has been closed otherwise.</li>
+     *         </ul>
+     */
+    int getValue();
+
+    /**
+     * This is called by {@link #showDialog()}.
+     * Only invoke from outside if you need to modify the contentPane
+     */
+    void setupDialog();
+
+    /**
+     * Call this if you want the dialog to remember the geometry (size and position) set by the user.
+     * Set the pref to <code>null</code> or to an empty string to disable again.
+     * By default, it's disabled.
+     *
+     * Note: If you want to set the width of this dialog directly use the usual
+     * setSize, setPreferredSize, setMaxSize, setMinSize
+     *
+     * @param pref  The preference to save the dimension to
+     * @param wg    The default window geometry that should be used if no
+     *              existing preference is found (only takes effect if
+     *              <code>pref</code> is not null or empty
+     * @return {@code this}
+     */
+    ExtendedDialog setRememberWindowGeometry(String pref, WindowGeometry wg);
+
+    /**
+     * Calling this will offer the user a "Do not show again" checkbox for the
+     * dialog. Default is to not offer the choice; the dialog will be shown
+     * every time.
+     * Currently, this is not supported for non-modal dialogs.
+     * @param togglePref  The preference to save the checkbox state to
+     * @return {@code this}
+     */
+    ExtendedDialog toggleEnable(String togglePref);
+
+    /**
+     * Sets the button that will react to ENTER.
+     * @param defaultButtonIdx The button index (starts to 1)
+     * @return {@code this}
+     */
+    ExtendedDialog setDefaultButton(int defaultButtonIdx);
+
+    /**
+     * Used in combination with toggle:
+     * If the user presses 'cancel' the toggle settings are ignored and not saved to the pref
+     * @param cancelButtonIdx index of the button that stands for cancel, accepts multiple values
+     * @return {@code this}
+     */
+    ExtendedDialog setCancelButton(Integer... cancelButtonIdx);
+
+    /**
+     * Makes default button request initial focus or not.
+     * @param focus {@code true} to make default button request initial focus
+     * @since 7407
+     */
+    void setFocusOnDefaultButton(boolean focus);
+
+    /**
+     * This function returns true if the dialog has been set to "do not show again"
+     * @return true if dialog should not be shown again
+     */
+    boolean toggleCheckState();
+
+    /**
+     * Configures how this dialog support for context sensitive help.
+     * <ul>
+     *  <li>if helpTopic is null, the dialog doesn't provide context sensitive help</li>
+     *  <li>if helpTopic != null, the dialog redirect user to the help page for this helpTopic when
+     *  the user clicks F1 in the dialog</li>
+     *  <li>if showHelpButton is true, the dialog displays "Help" button (rightmost button in
+     *  the button row)</li>
+     * </ul>
+     *
+     * @param helpTopic the help topic
+     * @param showHelpButton true, if the dialog displays a help button
+     * @return {@code this}
+     */
+    ExtendedDialog configureContextsensitiveHelp(String helpTopic, boolean showHelpButton);
+}
Index: trunk/src/org/openstreetmap/josm/gui/SelectionManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/SelectionManager.java	(revision 11944)
+++ trunk/src/org/openstreetmap/josm/gui/SelectionManager.java	(revision 11945)
@@ -16,4 +16,6 @@
 import java.util.LinkedList;
 
+import javax.swing.Action;
+
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.SelectByInternalPointAction;
@@ -60,5 +62,5 @@
      * @author imi
      */
-    public interface SelectionEnded {
+    public interface SelectionEnded extends Action {
         /**
          * Called, when the left mouse button was released.
@@ -69,17 +71,4 @@
          */
         void selectionEnded(Rectangle r, MouseEvent e);
-
-        /**
-         * Called to register the selection manager for "active" property.
-         * @param listener The listener to register
-         */
-        void addPropertyChangeListener(PropertyChangeListener listener);
-
-        /**
-         * Called to remove the selection manager from the listener list
-         * for "active" property.
-         * @param listener The listener to register
-         */
-        void removePropertyChangeListener(PropertyChangeListener listener);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java	(revision 11944)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java	(revision 11945)
@@ -76,4 +76,5 @@
 import org.openstreetmap.josm.data.preferences.StringProperty;
 import org.openstreetmap.josm.gui.ExtendedDialog;
+import org.openstreetmap.josm.gui.IExtendedDialog;
 import org.openstreetmap.josm.gui.datatransfer.ClipboardUtils;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
@@ -241,4 +242,8 @@
     }
 
+    /**
+     * Returns a new {@code AddTagsDialog}.
+     * @return a new {@code AddTagsDialog}
+     */
     protected AddTagsDialog getAddTagsDialog() {
         return new AddTagsDialog();
@@ -267,9 +272,13 @@
     }
 
-    protected interface IEditTagDialog {
-        ExtendedDialog showDialog();
-
-        int getValue();
-
+    /**
+     * Extracted interface of {@link EditTagDialog}.
+     */
+    protected interface IEditTagDialog extends IExtendedDialog {
+        /**
+         * Edit tags of multiple selected objects according to selected ComboBox values
+         * If value == "", tag will be deleted
+         * Confirmations may be needed.
+         */
         void performTagEdit();
     }
@@ -483,9 +492,4 @@
         }
 
-        /**
-         * Edit tags of multiple selected objects according to selected ComboBox values
-         * If value == "", tag will be deleted
-         * Confirmations may be needed.
-         */
         @Override
         public void performTagEdit() {
