Index: libs/libmyth/settings.cpp
===================================================================
--- libs/libmyth/settings.cpp	(revision 23492)
+++ libs/libmyth/settings.cpp	(working copy)
@@ -643,32 +643,25 @@
     for(unsigned int i = 0 ; i < labels.size() ; ++i)
         cbwidget->insertItem(labels[i]);
 
+    cbwidget->setMaxCount(cbwidget->count() + rw);
+
     if (isSet)
         cbwidget->setCurrentIndex(current);
 
     if (1 < step)
         cbwidget->setStep(step);
 
+    connect(cbwidget, SIGNAL(highlighted(int)),
+            this, SLOT(setValue(int)));
+    connect(cbwidget, SIGNAL(activated(int)),
+            this, SLOT(setValue(int)));
+    connect(this, SIGNAL(selectionsCleared()),
+            cbwidget, SLOT(clear()));
+
     if (rw)
-    {
-        connect(cbwidget, SIGNAL(highlighted(const QString &)),
-                this, SLOT(setValue(const QString &)));
-        connect(cbwidget, SIGNAL(activated(const QString &)),
-                this, SLOT(setValue(const QString &)));
         connect(cbwidget, SIGNAL(editTextChanged(const QString &)),
-                this, SLOT(setValue(const QString &)));
-    }
-    else
-    {
-        connect(cbwidget, SIGNAL(highlighted(int)),
-                this, SLOT(setValue(int)));
-        connect(cbwidget, SIGNAL(activated(int)),
-                this, SLOT(setValue(int)));
-    }
+                this, SLOT(editTextChanged(const QString &)));
 
-    connect(this, SIGNAL(selectionsCleared()),
-            cbwidget, SLOT(clear()));
-
     if (cg)
         connect(cbwidget, SIGNAL(changeHelpText(QString)), cg,
                 SIGNAL(changeHelpText(QString)));
@@ -728,14 +721,14 @@
         if (cbwidget)
             cbwidget->setCurrentIndex(current);
     }
-};
+}
 
 void ComboBoxSetting::setValue(int which)
 {
     if (cbwidget)
         cbwidget->setCurrentIndex(which);
     SelectSetting::setValue(which);
-};
+}
 
 void ComboBoxSetting::addSelection(
     const QString &label, QString value, bool select)
@@ -771,6 +764,30 @@
     return false;
 }
 
+void ComboBoxSetting::editTextChanged(const QString &newText)
+{
+    if (cbwidget)
+    {
+        for (uint i = 0; i < labels.size(); i++)
+            if (labels[i] == newText)
+                return;
+
+        if (labels.size() == static_cast<size_t>(cbwidget->maxCount()))
+        {
+            SelectSetting::removeSelection(labels[cbwidget->maxCount() - 1],
+                                           values[cbwidget->maxCount() - 1]);
+            cbwidget->setItemText(cbwidget->maxCount() - 1, newText);
+        }
+        else
+        {
+            cbwidget->insertItem(newText);
+        }
+
+        SelectSetting::addSelection(newText, newText, true);
+        cbwidget->setCurrentIndex(cbwidget->maxCount() - 1);
+    }
+}
+
 void ComboBoxSetting::setHelpText(const QString &str)
 {
     if (cbwidget)
Index: libs/libmyth/settings.h
===================================================================
--- libs/libmyth/settings.h	(revision 23492)
+++ libs/libmyth/settings.h	(working copy)
@@ -341,6 +341,7 @@
                       bool select = false);
     bool removeSelection(const QString &label,
                          QString value = QString::null);
+    void editTextChanged(const QString &newText);
 
 private:
     bool rw;
