Index: trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java	(revision 5645)
+++ trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java	(revision 5646)
@@ -447,4 +447,14 @@
     }
 
+    protected final void rememberWindowGeometry(WindowGeometry geometry) {
+        if (geometry != null) {
+            geometry.remember(rememberSizePref);
+        }
+    }
+    
+    protected final WindowGeometry initWindowGeometry() {
+        return new WindowGeometry(rememberSizePref, defaultWindowGeometry);
+    }
+
     /**
      * Override setVisible to be able to save the window geometry if required
@@ -459,8 +469,7 @@
         if(rememberSizePref.length() != 0 && defaultWindowGeometry != null) {
             if(visible) {
-                new WindowGeometry(rememberSizePref,
-                        defaultWindowGeometry).applySafe(this);
+                initWindowGeometry().applySafe(this);
             } else if (isShowing()) { // should fix #6438, #6981, #8295
-                new WindowGeometry(this).remember(rememberSizePref);
+                rememberWindowGeometry(new WindowGeometry(this));
             }
         }
@@ -473,5 +482,5 @@
 
     /**
-     * Call this if you want the dialog to remember the size set by the user.
+     * 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.
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java	(revision 5645)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java	(revision 5646)
@@ -8,4 +8,5 @@
 import java.awt.Component;
 import java.awt.Cursor;
+import java.awt.Dimension;
 import java.awt.FlowLayout;
 import java.awt.Font;
@@ -24,5 +25,4 @@
 import java.awt.event.MouseEvent;
 import java.awt.image.BufferedImage;
-import java.security.KeyStore;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -37,4 +37,5 @@
 import java.util.Map;
 import java.util.Vector;
+
 import javax.swing.AbstractAction;
 import javax.swing.Action;
@@ -50,4 +51,5 @@
 import javax.swing.table.DefaultTableModel;
 import javax.swing.text.JTextComponent;
+
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.JosmAction;
@@ -67,4 +69,5 @@
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Shortcut;
+import org.openstreetmap.josm.tools.WindowGeometry;
 
 /**
@@ -206,7 +209,5 @@
     
         
-    public class EditTagDialog extends ExtendedDialog {
-        AutoCompletingComboBox keys;
-        AutoCompletingComboBox values;
+    public class EditTagDialog extends AbstractTagsDialog {
         String oldValue;
         String key;
@@ -257,10 +258,4 @@
             this.m = map;
             
-            // TODO : How to remember position, allowing autosizing?
-            // setRememberWindowGeometry(getClass().getName() + ".geometry",
-            //    WindowGeometry.centerInWindow(Main.parent, new Dimension(270, 180)));
-            //setRememberWindowGeometry(getClass().getName() + ".geometry",
-            //        WindowGeometry.centerInWindow(Main.parent, new Dimension(270, 180)));
-            
             JPanel mainPanel = new JPanel(new BorderLayout());
                     
@@ -315,16 +310,16 @@
             //    @Override public void selectInitialValue() {
             Clipboard sysSel = Toolkit.getDefaultToolkit().getSystemSelection();
-                if(sysSel != null) {
-                    Transferable old = sysSel.getContents(null);
-                    values.requestFocusInWindow();
-                    values.getEditor().selectAll();
-                    sysSel.setContents(old, null);
-                } else {
-                    values.requestFocusInWindow();
-                    values.getEditor().selectAll();
-                }
-        }
-        
-           /**
+            if(sysSel != null) {
+                Transferable old = sysSel.getContents(null);
+                values.requestFocusInWindow();
+                values.getEditor().selectAll();
+                sysSel.setContents(old, null);
+            } else {
+                values.requestFocusInWindow();
+                values.getEditor().selectAll();
+            }
+        }
+        
+        /**
          * Edit tags of multiple selected objects according to selected ComboBox values
          * If value == "", tag will be deleted
@@ -399,8 +394,39 @@
         }
     }
-    
-    class AddTagsDialog extends ExtendedDialog {
+
+    abstract class AbstractTagsDialog extends ExtendedDialog {
         AutoCompletingComboBox keys;
         AutoCompletingComboBox values;
+        
+        public AbstractTagsDialog(Component parent, String title, String[] buttonTexts) {
+            super(parent, title, buttonTexts);
+        }
+
+        @Override
+        public void setupDialog() {
+            setResizable(false);
+            super.setupDialog();
+            
+            setRememberWindowGeometry(getClass().getName() + ".geometry",
+                WindowGeometry.centerInWindow(Main.parent, getSize()));
+        }
+
+        @Override
+        public void setVisible(boolean visible) {
+            // Do not want dialog to be resizable, but its size may increase each time because of the recently added tags
+            // So need to modify the stored geometry (size part only) in order to use the automatic positioning mechanism
+            if (visible) {
+                WindowGeometry geometry = initWindowGeometry();
+                Dimension storedSize = geometry.getSize();
+                if (!storedSize.equals(getSize())) {
+                    storedSize.setSize(getSize());
+                    rememberWindowGeometry(geometry);
+                }
+            }
+            super.setVisible(visible);
+        }
+    }
+
+    class AddTagsDialog extends AbstractTagsDialog {
         List<JosmAction> recentTagsActions = new ArrayList<JosmAction>();
         
@@ -412,8 +438,4 @@
             setButtonIcons(new String[] {"ok","cancel"});
             setCancelButton(2);
-            
-            // TODO : How to remember position, allowing autosizing?
-            // setRememberWindowGeometry(getClass().getName() + ".geometry",
-            //    WindowGeometry.centerInWindow(Main.parent, new Dimension(270, 180)));
             
             JPanel mainPanel = new JPanel(new GridBagLayout());
@@ -486,19 +508,17 @@
             setContent(mainPanel, false);
             
-            // TODO: Is it correct place for thois code - was in 
+            // TODO: Is it correct place for this code - was in 
             //  new JOptionPane(p, JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION) {
             //    @Override public void selectInitialValue() {
             Clipboard sysSel = Toolkit.getDefaultToolkit().getSystemSelection();
-                if(sysSel != null) {
-                    Transferable old = sysSel.getContents(null);
-                    values.requestFocusInWindow();
-                    values.getEditor().selectAll();
-                    sysSel.setContents(old, null);
-                } else {
-                    values.requestFocusInWindow();
-                    values.getEditor().selectAll();
-                }
-                
-            
+            if(sysSel != null) {
+                Transferable old = sysSel.getContents(null);
+                values.requestFocusInWindow();
+                values.getEditor().selectAll();
+                sysSel.setContents(old, null);
+            } else {
+                values.requestFocusInWindow();
+                values.getEditor().selectAll();
+            }
         }
 
