diff --git a/src/org/openstreetmap/josm/gui/widgets/HistoryComboBox.java b/src/org/openstreetmap/josm/gui/widgets/HistoryComboBox.java
index 3b03f7f77c..03ec845ed3 100644
--- a/src/org/openstreetmap/josm/gui/widgets/HistoryComboBox.java
+++ b/src/org/openstreetmap/josm/gui/widgets/HistoryComboBox.java
@@ -5,6 +5,7 @@ import java.util.List;
 
 import javax.swing.text.JTextComponent;
 
+import org.openstreetmap.josm.data.tagging.ac.AutoCompletionItem;
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletingComboBox;
 import org.openstreetmap.josm.spi.preferences.Config;
 
@@ -54,7 +55,14 @@ public class HistoryComboBox extends AutoCompletingComboBox {
      * @see ComboBoxHistory#addElement(java.lang.String)
      */
     public void addCurrentItemToHistory() {
-        model.addElement((String) getEditor().getItem());
+        Object item = getEditor().getItem();
+        if (item instanceof String) {
+            model.addElement((String) item);
+        } else if (item instanceof AutoCompletionItem) {
+            model.addElement(((AutoCompletionItem) item).getValue());
+        } else {
+            throw new IllegalArgumentException(item.getClass().getSimpleName() + " is not supported in addCurrentItemToHistory");
+        }
     }
 
     /**
diff --git a/test/unit/org/openstreetmap/josm/gui/widgets/HistoryComboBoxTest.java b/test/unit/org/openstreetmap/josm/gui/widgets/HistoryComboBoxTest.java
new file mode 100644
index 0000000000..5fdbe9afbb
--- /dev/null
+++ b/test/unit/org/openstreetmap/josm/gui/widgets/HistoryComboBoxTest.java
@@ -0,0 +1,53 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.widgets;
+
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+import java.util.stream.Stream;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.openstreetmap.josm.data.tagging.ac.AutoCompletionItem;
+import org.openstreetmap.josm.testutils.annotations.FullPreferences;
+
+/**
+ * Test class for {@link HistoryComboBox}
+ * @author Taylor Smock
+ */
+@FullPreferences
+class HistoryComboBoxTest {
+    static Stream<Arguments> testNonRegression21203() {
+        return Stream.of(Arguments.of("Hello world"), Arguments.of(new AutoCompletionItem("Hello world2")));
+    }
+
+    /**
+     * Non-regression test for #21203
+     */
+    @ParameterizedTest
+    @MethodSource
+    void testNonRegression21203(final Object object) {
+        final HistoryComboBox historyComboBox = new HistoryComboBox();
+        // Sanity check
+        assertEquals(0, historyComboBox.getModel().getSize());
+        historyComboBox.getEditor().setItem(object);
+        assertDoesNotThrow(historyComboBox::addCurrentItemToHistory);
+    }
+
+    /**
+     * This ensures that we do throw on unknown objects for #21203
+     */
+    @Test
+    void testNonRegression21203Throws() {
+        final HistoryComboBox historyComboBox = new HistoryComboBox();
+        // Sanity check
+        assertEquals(0, historyComboBox.getModel().getSize());
+        historyComboBox.getEditor().setItem(new Object());
+        IllegalArgumentException illegalArgumentException = assertThrows(IllegalArgumentException.class,
+                historyComboBox::addCurrentItemToHistory);
+        assertEquals("Object is not supported in addCurrentItemToHistory", illegalArgumentException.getMessage());
+    }
+}
