Index: src/org/openstreetmap/josm/actions/OpenLocationAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/OpenLocationAction.java	(revision 14977)
+++ src/org/openstreetmap/josm/actions/OpenLocationAction.java	(working copy)
@@ -11,7 +11,6 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Objects;
 import java.util.concurrent.Future;
@@ -109,12 +108,8 @@
      * @param cbHistory the history combo box
      */
     protected void restoreUploadAddressHistory(HistoryComboBox cbHistory) {
-        List<String> cmtHistory = new LinkedList<>(Config.getPref().getList(getClass().getName() + ".uploadAddressHistory",
-                new LinkedList<String>()));
-        // we have to reverse the history, because ComboBoxHistory will reverse it again in addElement()
-        //
-        Collections.reverse(cmtHistory);
-        cbHistory.setPossibleItems(cmtHistory);
+        cbHistory.setPossibleItemsTopDown(Config.getPref().getList(getClass().getName() + ".uploadAddressHistory",
+                Collections.emptyList()));
     }
 
     /**
Index: src/org/openstreetmap/josm/actions/SearchNotesDownloadAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/SearchNotesDownloadAction.java	(revision 14977)
+++ src/org/openstreetmap/josm/actions/SearchNotesDownloadAction.java	(working copy)
@@ -7,8 +7,6 @@
 import java.awt.GridBagLayout;
 import java.awt.event.ActionEvent;
 import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
 import java.util.Optional;
 
 import javax.swing.JLabel;
@@ -42,9 +40,7 @@
     @Override
     public void actionPerformed(ActionEvent e) {
         HistoryComboBox searchTermBox = new HistoryComboBox();
-        List<String> searchHistory = new LinkedList<>(Config.getPref().getList(HISTORY_KEY, new LinkedList<String>()));
-        Collections.reverse(searchHistory);
-        searchTermBox.setPossibleItems(searchHistory);
+        searchTermBox.setPossibleItemsTopDown(Config.getPref().getList(HISTORY_KEY, Collections.emptyList()));
 
         JPanel contentPanel = new JPanel(new GridBagLayout());
         GridBagConstraints gc = new GridBagConstraints();
Index: src/org/openstreetmap/josm/gui/dialogs/OsmIdSelectionDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/OsmIdSelectionDialog.java	(revision 14977)
+++ src/org/openstreetmap/josm/gui/dialogs/OsmIdSelectionDialog.java	(working copy)
@@ -13,7 +13,6 @@
 import java.util.Collection;
 import java.util.Collections;
 import java.util.EnumSet;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -179,11 +178,8 @@
      * @param cbHistory the {@link HistoryComboBox} to which the history is restored to
      */
     protected void restorePrimitivesHistory(HistoryComboBox cbHistory) {
-        List<String> cmtHistory = new LinkedList<>(
-                Config.getPref().getList(getClass().getName() + ".primitivesHistory", new LinkedList<String>()));
-        // we have to reverse the history, because ComboBoxHistory will reverse it again in addElement()
-        Collections.reverse(cmtHistory);
-        cbHistory.setPossibleItems(cmtHistory);
+        cbHistory.setPossibleItemsTopDown(
+                Config.getPref().getList(getClass().getName() + ".primitivesHistory", Collections.emptyList()));
     }
 
     /**
Index: src/org/openstreetmap/josm/gui/download/OverpassQueryWizardDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/download/OverpassQueryWizardDialog.java	(revision 14977)
+++ src/org/openstreetmap/josm/gui/download/OverpassQueryWizardDialog.java	(working copy)
@@ -94,9 +94,7 @@
         if (!items.isEmpty()) {
             queryWizard.setText(items.get(0));
         }
-        // HistoryComboBox needs the reversed list
-        Collections.reverse(items);
-        queryWizard.setPossibleItems(items);
+        queryWizard.setPossibleItemsTopDown(items);
 
         setCancelButton(CANCEL + 1);
         setDefaultButton(BUILD_AN_EXECUTE_QUERY + 1);
Index: src/org/openstreetmap/josm/gui/download/PlaceSelection.java
===================================================================
--- src/org/openstreetmap/josm/gui/download/PlaceSelection.java	(revision 14977)
+++ src/org/openstreetmap/josm/gui/download/PlaceSelection.java	(working copy)
@@ -17,7 +17,6 @@
 import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.StringTokenizer;
 
@@ -114,9 +113,7 @@
 
         cbSearchExpression = new HistoryComboBox();
         cbSearchExpression.setToolTipText(tr("Enter a place name to search for"));
-        List<String> cmtHistory = new LinkedList<>(Config.getPref().getList(HISTORY_KEY, new LinkedList<String>()));
-        Collections.reverse(cmtHistory);
-        cbSearchExpression.setPossibleItems(cmtHistory);
+        cbSearchExpression.setPossibleItemsTopDown(Config.getPref().getList(HISTORY_KEY, Collections.emptyList()));
         lpanel.add(cbSearchExpression);
 
         panel.add(lpanel, GBC.std().fill(GBC.HORIZONTAL).insets(5, 5, 0, 5));
Index: src/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanel.java
===================================================================
--- src/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanel.java	(revision 14977)
+++ src/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanel.java	(working copy)
@@ -13,7 +13,6 @@
 import java.awt.event.KeyAdapter;
 import java.awt.event.KeyEvent;
 import java.util.Arrays;
-import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Objects;
@@ -113,9 +112,7 @@
     }
 
     private static void populateHistoryComboBox(HistoryComboBox hcb, String historyKey, List<String> defaultValues) {
-        List<String> cmtHistory = new LinkedList<>(Config.getPref().getList(historyKey, defaultValues));
-        Collections.reverse(cmtHistory); // we have to reverse the history, because ComboBoxHistory will reverse it again in addElement()
-        hcb.setPossibleItems(cmtHistory);
+        hcb.setPossibleItemsTopDown(Config.getPref().getList(historyKey, defaultValues));
         hcb.discardAllUndoableEdits();
     }
 
Index: src/org/openstreetmap/josm/gui/preferences/projection/CustomProjectionChoice.java
===================================================================
--- src/org/openstreetmap/josm/gui/preferences/projection/CustomProjectionChoice.java	(revision 14977)
+++ src/org/openstreetmap/josm/gui/preferences/projection/CustomProjectionChoice.java	(working copy)
@@ -10,7 +10,6 @@
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.LinkedList;
 import java.util.List;
 
 import javax.swing.JButton;
@@ -74,9 +73,7 @@
             List<String> samples = Arrays.asList(
                     "+proj=lonlat +ellps=WGS84 +datum=WGS84 +bounds=-180,-90,180,90",
                     "+proj=tmerc +lat_0=0 +lon_0=9 +k_0=1 +x_0=3500000 +y_0=0 +ellps=bessel +nadgrids=BETA2007.gsb");
-            List<String> inputHistory = new LinkedList<>(Config.getPref().getList("projection.custom.value.history", samples));
-            Collections.reverse(inputHistory);
-            cbInput.setPossibleItems(inputHistory);
+            cbInput.setPossibleItemsTopDown(Config.getPref().getList("projection.custom.value.history", samples));
             cbInput.setText(initialText == null ? "" : initialText);
 
             final HtmlPanel errorsPanel = new HtmlPanel();
Index: src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java
===================================================================
--- src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java	(revision 14977)
+++ src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java	(working copy)
@@ -8,6 +8,8 @@
 import java.awt.event.FocusListener;
 import java.awt.im.InputContext;
 import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedList;
 import java.util.Locale;
 
 import javax.swing.ComboBoxEditor;
@@ -287,7 +289,7 @@
     }
 
     /**
-     * Sets the items of the combobox to the given {@code String}s.
+     * Sets the items of the combobox to the given {@code String}s in reversed order (last element first).
      * @param elems String items
      */
     public void setPossibleItems(Collection<String> elems) {
@@ -297,13 +299,26 @@
         for (String elem : elems) {
             model.addElement(new AutoCompletionItem(elem, AutoCompletionPriority.UNKNOWN));
         }
+        this.setSelectedItem(null);
         // disable autocomplete to prevent unnecessary actions in AutoCompletingComboBoxDocument#insertString
         autocompleteEnabled = false;
-        this.getEditor().setItem(oldValue); // Do not use setSelectedItem(oldValue); (fix #8013)
+        this.setSelectedItem(oldValue);
         autocompleteEnabled = true;
     }
 
     /**
+     * Sets the items of the combobox to the given {@code String}s in top down order.
+     * @param elems Collection of String items (is not changed)
+     * @since xxx
+     */
+    public void setPossibleItemsTopDown(Collection<String> elems) {
+        // We have to reverse the history, because ComboBoxHistory will reverse it again in addElement()
+        LinkedList<String> reversed = new LinkedList<>(elems);
+        Collections.reverse(reversed);
+        setPossibleItems(reversed);
+    }
+
+    /**
      * Sets the items of the combobox to the given {@code AutoCompletionItem}s.
      * @param elems AutoCompletionItem items
      * @since 12859
