Index: src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java	(revision 19444)
+++ src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java	(working copy)
@@ -146,9 +146,12 @@
     /** The preference storage of recent tags */
     public static final ListProperty PROPERTY_RECENT_TAGS = new ListProperty("properties.recent-tags",
             Collections.emptyList());
-    /** The preference list of tags which should not be remembered, since r9940 */
+    /** The preference filter of tags which should not be remembered, since r9940 */
     public static final StringProperty PROPERTY_TAGS_TO_IGNORE = new StringProperty("properties.recent-tags.ignore",
             new SearchSetting().writeToString());
+    /** The preference filter for tag keys for which values should not be auto-completed, since xxx */
+    public static final StringProperty NO_AUTOCOMPLETE_KEYS = new StringProperty("properties.autocomplete.exclude-keys",
+            new SearchSetting().writeToString());
 
     /**
      * What to do with recent tags where keys already exist
@@ -182,6 +185,7 @@
 
     final RecentTagCollection recentTags = new RecentTagCollection(MAX_LRU_TAGS_NUMBER);
     SearchSetting tagsToIgnore;
+    SearchSetting noAutocomplete;
 
     /**
      * Copy of recently added tags in sorted from newest to oldest order.
@@ -240,6 +244,7 @@
         this.tagTable = tagTable;
         this.tagData = propertyData;
         this.valueCount = valueCount;
+        this.noAutocomplete = SearchSetting.readFromString(NO_AUTOCOMPLETE_KEYS.get());
     }
 
     /**
@@ -736,6 +741,23 @@
             }
         }
 
+        /**
+         * Check if values should be auto-completed for the given tag key.
+         * @param key the key
+         * @return false if auto-completion is disabled or if the key matches the exclusion filter, true else
+         */
+        private boolean autocompleteValuesForKey(String key) {
+            if (!AUTOCOMPLETE_VALUES.get())
+                return false;
+            if (noAutocomplete == null || Utils.isEmpty(noAutocomplete.text))
+                return true;
+            try {
+                return !SearchCompiler.compile(noAutocomplete).match(new Tag(key));
+            } catch (SearchParseError parseError) {
+                throw new IllegalStateException(parseError);
+            }
+        }
+
         protected void addEventListeners() {
             // OK on Enter in values
             values.getEditor().addActionListener(e -> buttonAction(0, null));
@@ -777,6 +799,8 @@
         public void focusLost(FocusEvent e) {
             // update the values combobox orientation if the key changed
             values.applyComponentOrientation(OrientationAction.getNamelikeOrientation(keys.getText()));
+            // update the auto-completion setting for the given tag key
+            values.setAutocompleteEnabled(autocompleteValuesForKey(keys.getText()));
         }
 
         protected void updateOkButtonIcon() {
@@ -1162,6 +1186,7 @@
                 add(new IgnoreTagAction(tr("Ignore key ''{0}''", t.getKey()), new Tag(t.getKey(), "")));
                 add(new IgnoreTagAction(tr("Ignore tag ''{0}''", t), t));
                 add(new EditIgnoreTagsAction());
+                add(new EditExcludeAutocompleteValues(t));
             }
         }
 
@@ -1208,6 +1233,28 @@
             }
         }
 
+        class EditExcludeAutocompleteValues extends AbstractAction {
+            final transient Tag tag;
+
+            EditExcludeAutocompleteValues(Tag tag) {
+                super(tr("Edit stop-autocomplete values filter"));
+                this.tag = tag;
+                setEnabled(AUTOCOMPLETE_VALUES.get());
+            }
+
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                SearchSetting initFilter = SearchSetting.fromString('"' + tag.getKey() + '"');
+                if (noAutocomplete != null && !Utils.isEmpty(noAutocomplete.text))
+                    initFilter = noAutocomplete;
+                final SearchSetting newNoAutocomplete = SearchAction.showSearchDialog(initFilter);
+                if (newNoAutocomplete != null) {
+                    noAutocomplete = newNoAutocomplete;
+                    NO_AUTOCOMPLETE_KEYS.put(noAutocomplete.writeToString());
+                }
+            }
+        }
+
         /**
          * Destroy the recentTagsActions.
          */
