Index: /trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java	(revision 3214)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingComboBox.java	(revision 3215)
@@ -18,4 +18,5 @@
 import javax.swing.text.JTextComponent;
 import javax.swing.text.PlainDocument;
+import javax.swing.text.StyleConstants;
 
 /**
@@ -57,4 +58,7 @@
                 return;
             if (!autocompleteEnabled)
+                return;
+            // input method for non-latin characters (e.g. scim)
+            if (a != null && a.isDefined(StyleConstants.ComposedTextAttribute))
                 return;
 
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingTextField.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingTextField.java	(revision 3214)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletingTextField.java	(revision 3215)
@@ -19,4 +19,5 @@
 import javax.swing.text.Document;
 import javax.swing.text.PlainDocument;
+import javax.swing.text.StyleConstants;
 
 import org.openstreetmap.josm.gui.tagging.ac.AutoCompletionList;
@@ -52,4 +53,10 @@
             }
 
+            // input method for non-latin characters (e.g. scim)
+            if (a != null && a.isDefined(StyleConstants.ComposedTextAttribute)) {
+                super.insertString(offs, str, a);
+                return;
+            }
+
             // if the current offset isn't at the end of the document we don't autocomplete.
             // If a highlighted autocompleted suffix was present and we get here Swing has
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionListItem.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionListItem.java	(revision 3214)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionListItem.java	(revision 3215)
@@ -25,4 +25,14 @@
      * constructor
      */
+    public AutoCompletionListItem(String value, AutoCompletionItemPritority priority) {
+        this.value = value;
+        this.priority = priority;
+    }
+
+    public AutoCompletionListItem(String value) {
+        this.value = value;
+        priority = AutoCompletionItemPritority.UNKNOWN;
+    }
+
     public AutoCompletionListItem() {
         value = "";
@@ -30,8 +40,4 @@
     }
 
-    public AutoCompletionListItem(String value, AutoCompletionItemPritority priority) {
-        this.value = value;
-        this.priority = priority;
-    }
 
     /**
Index: /trunk/src/org/openstreetmap/josm/gui/widgets/ComboBoxHistory.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/widgets/ComboBoxHistory.java	(revision 3214)
+++ /trunk/src/org/openstreetmap/josm/gui/widgets/ComboBoxHistory.java	(revision 3215)
@@ -35,5 +35,7 @@
 import javax.swing.DefaultComboBoxModel;
 
-public class ComboBoxHistory extends DefaultComboBoxModel implements Iterable<String> {
+import org.openstreetmap.josm.gui.tagging.ac.*;
+
+public class ComboBoxHistory extends DefaultComboBoxModel implements Iterable<AutoCompletionListItem> {
 
     private int maxSize = 10;
@@ -50,10 +52,14 @@
     @Override
     public void addElement(Object o) {
-        String newEntry = (String)o;
+        if (o instanceof String) {
+            o = new AutoCompletionListItem((String) o);
+        }
+
+        String newEntry = ((AutoCompletionListItem)o).getValue();
 
         // if history contains this object already, delete it,
         // so that it looks like a move to the top
         for (int i = 0; i < getSize(); i++) {
-            String oldEntry = (String) getElementAt(i);
+            String oldEntry = ((AutoCompletionListItem) getElementAt(i)).getValue();
             if(oldEntry.equals(newEntry)) {
                 removeElementAt(i);
@@ -75,6 +81,6 @@
     }
 
-    public Iterator<String> iterator() {
-        return new Iterator<String>() {
+    public Iterator<AutoCompletionListItem> iterator() {
+        return new Iterator<AutoCompletionListItem>() {
 
             private int position = -1;
@@ -90,7 +96,7 @@
             }
 
-            public String next() {
+            public AutoCompletionListItem next() {
                 position++;
-                return getElementAt(position).toString();
+                return (AutoCompletionListItem)getElementAt(position);
             }
 
@@ -98,17 +104,15 @@
     }
 
-    public void setItems(List<String> items) {
+    public void setItemsAsString(List<String> items) {
         removeAllElements();
-        Collections.reverse(items);
-        for (String item : items) {
-            addElement(item);
+        for (int i = items.size()-1; i>=0; i--) {
+            addElement(new AutoCompletionListItem(items.get(i)));
         }
-        Collections.reverse(items);
     }
 
-    public List<String> asList() {
+    public List<String> asStringList() {
         List<String> list = new ArrayList<String>(maxSize);
-        for (String item : this) {
-            list.add(item);
+        for (AutoCompletionListItem item : this) {
+            list.add(item.getValue());
         }
         return list;
@@ -125,5 +129,5 @@
     private void fireHistoryChanged() {
         for (HistoryChangedListener l : listeners) {
-            l.historyChanged(asList());
+            l.historyChanged(asStringList());
         }
     }
Index: /trunk/src/org/openstreetmap/josm/gui/widgets/HistoryComboBox.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/widgets/HistoryComboBox.java	(revision 3214)
+++ /trunk/src/org/openstreetmap/josm/gui/widgets/HistoryComboBox.java	(revision 3215)
@@ -32,9 +32,9 @@
 
     public void setHistory(List<String> history) {
-        model.setItems(history);
+        model.setItemsAsString(history);
     }
 
     public List<String> getHistory() {
-        return model.asList();
+        return model.asStringList();
     }
 }
