Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java	(revision 15834)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java	(revision 15835)
@@ -89,5 +89,4 @@
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingComboBox;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionManager;
-import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
 import org.openstreetmap.josm.gui.util.GuiHelper;
@@ -96,4 +95,5 @@
 import org.openstreetmap.josm.io.XmlWriter;
 import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.PlatformManager;
@@ -501,4 +501,6 @@
             addFocusAdapter(autocomplete, usedValuesAwareComparator);
 
+            addUpdateIconListener();
+
             setContent(mainPanel, false);
 
@@ -517,10 +519,10 @@
         @Override
         public void performTagEdit() {
-            String value = Utils.removeWhiteSpaces(values.getEditor().getItem().toString());
+            String value = values.getEditItem();
             value = Normalizer.normalize(value, Normalizer.Form.NFC);
             if (value.isEmpty()) {
                 value = null; // delete the key
             }
-            String newkey = Utils.removeWhiteSpaces(keys.getEditor().getItem().toString());
+            String newkey = keys.getEditItem();
             newkey = Normalizer.normalize(newkey, Normalizer.Form.NFC);
             if (newkey.isEmpty()) {
@@ -610,4 +612,5 @@
                 }
                 keys.setFixedLocale(PROPERTY_FIX_TAG_LOCALE.get());
+                updateOkButtonIcon();
             }
             super.setVisible(visible);
@@ -672,15 +675,25 @@
         }
 
-        private Optional<ImageIcon> findIcon(Tag tag) {
-            // Find and display icon
-            ImageIcon icon = MapPaintStyles.getNodeIcon(tag, false); // Filters deprecated icon
-            if (icon != null) {
-                return Optional.of(icon);
-            }
-            // If no icon found in map style look at presets
-            return TaggingPresets.getMatchingPresets(null, tag.getKeys(), false).stream()
-                    .map(TaggingPreset::getIcon)
+        protected void addUpdateIconListener() {
+            keys.addActionListener(ignore -> updateOkButtonIcon());
+            values.addActionListener(ignore -> updateOkButtonIcon());
+        }
+
+        private void updateOkButtonIcon() {
+            if (buttons.isEmpty()) {
+                return;
+            }
+            final Tag tag = new Tag(keys.getSelectedOrEditItem(), values.getSelectedOrEditItem());
+            buttons.get(0).setIcon(findIcon(tag)
+                    .orElse(ImageProvider.get("ok", ImageProvider.ImageSizes.LARGEICON)));
+        }
+
+        protected Optional<ImageIcon> findIcon(Tag tag) {
+            final Optional<ImageIcon> taggingPresetIcon = TaggingPresets.getMatchingPresets(null, tag.getKeys(), false).stream()
+                    .map(preset -> preset.getIcon(Action.LARGE_ICON_KEY))
                     .filter(Objects::nonNull)
                     .findFirst();
+            // Java 9: use Optional.or
+            return taggingPresetIcon.isPresent() ? taggingPresetIcon : Optional.ofNullable(MapPaintStyles.getNodeIcon(tag, false));
         }
 
@@ -755,4 +768,6 @@
             // fire focus event in advance or otherwise the popup list will be too small at first
             focus.focusGained(null);
+
+            addUpdateIconListener();
 
             // Add tag on Shift-Enter
@@ -1078,6 +1093,6 @@
          */
         public final void performTagAdding() {
-            String key = Utils.removeWhiteSpaces(keys.getEditor().getItem().toString());
-            String value = Utils.removeWhiteSpaces(values.getEditor().getItem().toString());
+            String key = keys.getEditItem();
+            String value = values.getEditItem();
             if (key.isEmpty() || value.isEmpty())
                 return;
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java	(revision 15834)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java	(revision 15835)
@@ -33,4 +33,5 @@
 import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.Logging;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -386,4 +387,31 @@
 
     /**
+     * Returns the edited item with whitespaces removed
+     * @return the edited item with whitespaces removed
+     * @since 15835
+     */
+    public String getEditItem() {
+        return Utils.removeWhiteSpaces(getEditor().getItem().toString());
+    }
+
+    /**
+     * Returns the selected item or the edited item as string
+     * @return the selected item or the edited item as string
+     * @see #getSelectedItem()
+     * @see #getEditItem()
+     * @since 15835
+     */
+    public String getSelectedOrEditItem() {
+        final Object selectedItem = getSelectedItem();
+        if (selectedItem instanceof AutoCompletionItem) {
+            return ((AutoCompletionItem) selectedItem).getValue();
+        } else if (selectedItem instanceof String) {
+            return (String) selectedItem;
+        } else {
+            return getEditItem();
+        }
+    }
+
+    /**
      * ListCellRenderer for AutoCompletingComboBox
      * renders an AutoCompletionListItem by showing only the string value part
