Index: libs/libmythtv/channeleditor.cpp
===================================================================
--- libs/libmythtv/channeleditor.cpp	(revision 11772)
+++ libs/libmythtv/channeleditor.cpp	(working copy)
@@ -251,8 +251,8 @@
     src->addChild(source);
     src->addChild(del);
 
-    sort->setValue(sort->getValueIndex(list->getSortMode()));
-    source->setValue(source->getValueIndex(list->getSourceID()));
+    sort->setCurrentValue(list->getSortMode());
+    source->setCurrentValue(list->getSourceID());
     hide->setValue(list->getHideMode());
 
     addChild(sort);
Index: libs/libmythtv/playgroup.cpp
===================================================================
--- libs/libmythtv/playgroup.cpp	(revision 11772)
+++ libs/libmythtv/playgroup.cpp	(working copy)
@@ -254,7 +254,8 @@
 
 void PlayGroupEditor::doDelete(void) 
 {
-    QString name = listbox->getValue();
+    QString name = listbox->getSelectionValues().first();
+
     if (name.isEmpty() || name == "Default")
         return;
 
@@ -274,10 +275,10 @@
         if (!query.exec())
             MythContext::DBError("PlayGroupEditor::doDelete", query);
 
-        int lastIndex = listbox->getValueIndex(name);
+        int lastIndex = listbox->getSelectionIndices().first();
         lastValue = "";
         load();
-        listbox->setValue(lastIndex);
+        listbox->setCurrent(lastIndex);
     }
 
     listbox->setFocus();
@@ -298,7 +299,7 @@
 
     listbox->addSelection(tr("(Create new group)"), "");
 
-    listbox->setValue(lastValue);
+    listbox->setCurrentValue(lastValue);
 }
 
 int PlayGroupEditor::exec(void)
Index: libs/libmythtv/scanwizardhelpers.h
===================================================================
--- libs/libmythtv/scanwizardhelpers.h	(revision 11772)
+++ libs/libmythtv/scanwizardhelpers.h	(working copy)
@@ -747,8 +747,7 @@
 
     void SetDefaultATSCFormat(const QString &d)
     {
-        int val = atsc_format->getValueIndex(d);
-        atsc_format->setValue(val);
+        atsc_format->setCurrentValue(d);
     }
 
   protected:
@@ -786,8 +785,7 @@
 
     void SetDefaultATSCFormat(const QString &d)
     {
-        int val = atsc_format->getValueIndex(d);
-        atsc_format->setValue(val);
+        atsc_format->setCurrentValue(d);
     }
 
     void SetSourceID(uint sourceid)
@@ -831,8 +829,7 @@
 
     void SetDefaultATSCFormat(const QString &d)
     {
-        int val = atsc_format->getValueIndex(d);
-        atsc_format->setValue(val);
+        atsc_format->setCurrentValue(d);
     }
 
   private:
Index: libs/libmythtv/videosource.cpp
===================================================================
--- libs/libmythtv/videosource.cpp	(revision 11772)
+++ libs/libmythtv/videosource.cpp	(working copy)
@@ -99,8 +99,7 @@
 
     if (initial_sourceid)
     {
-        if (cnt)
-            setValue(sel);
+        setCurrent(sel);
         setEnabled(false);
     }
 }
@@ -1754,7 +1753,7 @@
 
 QString CardInput::getSourceName(void) const
 {
-    return sourceid->getSelectionLabel();
+    return sourceid->getSelectionLabels().first();
 }
 
 void CardInput::SetChildCardID(uint ccid)
@@ -1890,7 +1889,7 @@
     else 
     {
         cfgGrp->load(); // new
-        cardid->setValue(QString::number(_cardid));
+        cardid->setCurrentLabel(QString::number(_cardid));
         inputname->setValue(_inputname);
     }
 }
Index: libs/libmythtv/diseqcsettings.cpp
===================================================================
--- libs/libmythtv/diseqcsettings.cpp	(revision 11772)
+++ libs/libmythtv/diseqcsettings.cpp	(working copy)
@@ -55,8 +55,7 @@
 
     virtual void load(void)
     {
-        QString tmp = QString::number((uint) m_device.GetDeviceType());
-        setValue(getValueIndex(tmp));
+        setCurrentValue(QString::number((uint) m_device.GetDeviceType()));
     }
 
     virtual void save(void)
@@ -163,7 +162,7 @@
 
     virtual void load(void)
     {
-        setValue(getValueIndex(QString::number((uint) m_switch.GetType())));
+        setCurrentValue(QString::number((uint) m_switch.GetType()));
     }
 
     virtual void save(void)
@@ -266,7 +265,7 @@
 
     virtual void load(void)
     {
-        setValue(getValueIndex(QString::number((uint)m_rotor.GetType())));
+        setCurrentValue(QString::number((uint)m_rotor.GetType()));
     }
 
     virtual void save(void)
@@ -418,7 +417,7 @@
 
 void RotorPosMap::PopulateList(void)
 {
-    int old_sel = getValueIndex(getValue());
+    int old_sel = getSelectionIndices().first();
     clearSelections();
     uint num_pos = 64;
     for (uint pos = 1; pos < num_pos; pos++)
@@ -431,7 +430,7 @@
         addSelection(DeviceTree::tr("Position #%1 (%2)").arg(pos).arg(posval),
                      QString::number(pos));
     }
-    setCurrentItem(old_sel);
+    setCurrent(old_sel);
 }
 
 //////////////////////////////////////// RotorPosConfig
@@ -583,7 +582,7 @@
 
     virtual void load(void)
     {
-        setValue(FindPreset(m_lnb));
+        setCurrent(FindPreset(m_lnb));
     }
 
     virtual void save(void)
@@ -621,7 +620,7 @@
 
     virtual void load(void)
     {
-        setValue(getValueIndex(QString::number((uint) m_lnb.GetType())));
+        setCurrentValue(QString::number((uint) m_lnb.GetType()));
     }
 
     virtual void save(void)
@@ -800,8 +799,7 @@
     }
     else
     {
-        m_type->setValue(m_type->getValueIndex(
-                             QString::number((uint)preset.type)));
+        m_type->setCurrentValue(QString::number((uint)preset.type));
         m_lof_switch->setValue(QString::number(preset.lof_sw / 1000));
         m_lof_lo->setValue(QString::number(preset.lof_lo / 1000));
         m_lof_hi->setValue(QString::number(preset.lof_hi / 1000));
@@ -1030,10 +1028,10 @@
 
 void DeviceTree::PopulateTree(void)
 {
-    int old_sel = getValueIndex(getValue());
+    int old_sel = getSelectionIndices().first();
     clearSelections();
     PopulateTree(m_tree.Root());
-    setCurrentItem(old_sel);
+    setCurrent(old_sel);
 }
 
 void DeviceTree::PopulateTree(DiSEqCDevDevice *node,
@@ -1107,7 +1105,7 @@
     virtual void load(void)
     {
         double value = m_settings.GetValue(m_node.GetDeviceID());
-        setValue((uint)value);
+        setCurrent((uint)value);
     }
 
     virtual void save(void)
@@ -1147,7 +1145,7 @@
             addSelection(AngleToString(*it), QString::number(*it));
 
         double angle = m_settings.GetValue(m_node.GetDeviceID());
-        setValue(getValueIndex(QString::number(angle)));
+        setCurrentValue(QString::number(angle));
     }
 
     virtual void save(void)
Index: libs/libmythtv/channelsettings.cpp
===================================================================
--- libs/libmythtv/channelsettings.cpp	(revision 11772)
+++ libs/libmythtv/channelsettings.cpp	(working copy)
@@ -68,7 +68,7 @@
         {
             uint which = sourceid_to_index[default_sourceid];
             if (which)
-                setValue(which);
+                setCurrent(which);
         }
     }
 
Index: libs/libmythtv/scheduledrecording.cpp
===================================================================
--- libs/libmythtv/scheduledrecording.cpp	(revision 11772)
+++ libs/libmythtv/scheduledrecording.cpp	(working copy)
@@ -630,14 +630,14 @@
             case kChannelRecord:
                 label = QString("%1 on channel %2")
                     .arg(sr.title->getValue())
-                    .arg(sr.channel->getSelectionLabel());
+                    .arg(sr.channel->getSelectionLabels().first());
                 break;
             case kWeekslotRecord:
                 weekly = QDate(sr.startDate->dateValue()).toString("dddd")+"s ";
             case kTimeslotRecord:
                 label = QString("%1 on channel %2 (%3%4 - %5)")
                     .arg(sr.title->getValue())
-                    .arg(sr.channel->getSelectionLabel())
+                    .arg(sr.channel->getSelectionLabels().first())
                     .arg(weekly)
                     .arg(sr.startTime->timeValue().toString())
                     .arg(sr.endTime->timeValue().toString());
@@ -647,7 +647,7 @@
             case kDontRecord:
                 label = QString("%1 on channel %2 (%3 %4 - %5)")
                     .arg(sr.title->getValue())
-                    .arg(sr.channel->getSelectionLabel())
+                    .arg(sr.channel->getSelectionLabels().first())
                     .arg(sr.startDate->dateValue().toString())
                     .arg(sr.startTime->timeValue().toString())
                     .arg(sr.endTime->timeValue().toString());
@@ -794,7 +794,8 @@
     title->setValue("");
     subtitle->setValue("");
     description->setValue("");
-    channel->setValue("");
+    channel->setCurrent(0);
+    channel->setState(0, false);
     station->setValue("");
     startDate->setValue(date);
     startTime->setValue(time);
@@ -860,7 +861,7 @@
         title->setValue(proginfo->title);
         subtitle->setValue(proginfo->subtitle);
         description->setValue(proginfo->description);
-        channel->setValue(proginfo->chanid);
+        channel->setCurrentValue(proginfo->chanid);
         station->setValue(proginfo->chansign);
         startDate->setValue(proginfo->startts.date());
         startTime->setValue(proginfo->startts.time());
Index: libs/libmythtv/recordingprofile.cpp
===================================================================
--- libs/libmythtv/recordingprofile.cpp	(revision 11772)
+++ libs/libmythtv/recordingprofile.cpp	(working copy)
@@ -150,7 +150,7 @@
         CodecParamStorage(this, parent, "mpeg2audbitratel1")
     {
         setLabel(QObject::tr("Bitrate"));
-        
+
         addSelection("32 kbps", "32");
         addSelection("64 kbps", "64");
         addSelection("96 kbps", "96");
@@ -165,7 +165,7 @@
         addSelection("384 kbps", "384");
         addSelection("416 kbps", "416");
         addSelection("448 kbps", "448");
-        setValue(13);
+        setCurrent(13);
         setHelpText(QObject::tr("Sets the audio bitrate"));
     };
 };
@@ -178,7 +178,7 @@
         CodecParamStorage(this, parent, "mpeg2audbitratel2")
     {
         setLabel(QObject::tr("Bitrate"));
-        
+
         addSelection("32 kbps", "32");
         addSelection("48 kbps", "48");
         addSelection("56 kbps", "56");
@@ -193,7 +193,7 @@
         addSelection("256 kbps", "256");
         addSelection("320 kbps", "320");
         addSelection("384 kbps", "384");
-        setValue(13);
+        setCurrent(13);
         setHelpText(QObject::tr("Sets the audio bitrate"));
     };
 };
@@ -236,7 +236,7 @@
         audbr->setLabel("Layer II");
         addTarget("Layer II", audbr);
         audType->addSelection("Layer II");
-        audType->setValue(1);
+        audType->setCurrent(1);
     };
 };
 
@@ -252,7 +252,7 @@
         addSelection(QObject::tr("SAP Language"),  "1");
         addSelection(QObject::tr("Dual"),          "2");
 
-        setValue(0);
+        setCurrent(0);
         setHelpText(QObject::tr(
                         "Chooses the language(s) to record when "
                         "two languages are broadcast. Only Layer II "
@@ -566,7 +566,7 @@
         CodecParamStorage(this, parent, "mpeg2streamtype")
     {
         setLabel(QObject::tr("Stream Type"));
-        
+
         addSelection("MPEG-2 PS");
         addSelection("MPEG-2 TS");
         addSelection("MPEG-1 VCD");
@@ -576,7 +576,7 @@
         addSelection("DVD");
         addSelection("DVD-Special 1");
         addSelection("DVD-Special 2");
-        setValue(0);
+        setCurrent(0);
         setHelpText(QObject::tr("Sets the type of stream generated by "
                     "your PVR."));
     };
@@ -590,12 +590,12 @@
         CodecParamStorage(this, parent, "mpeg2aspectratio")
     {
         setLabel(QObject::tr("Aspect Ratio"));
-        
+
         addSelection(QObject::tr("Square"), "Square");
         addSelection("4:3");
         addSelection("16:9");
         addSelection("2.21:1");
-        setValue(1);
+        setCurrent(1);
         setHelpText(QObject::tr("Sets the aspect ratio of stream generated "
                     "by your PVR."));
     };
@@ -625,7 +625,7 @@
         addSelection("1");
         addSelection("2");
         addSelection("4");
-        setValue(2);
+        setCurrent(2);
     };
 };
 
@@ -640,7 +640,7 @@
         addSelection("1");
         addSelection("2");
         addSelection("4");
-        setValue(2);
+        setCurrent(2);
     };
 };
 
@@ -821,7 +821,7 @@
         addSelection(QObject::tr("Normal"),     "all");
         addSelection(QObject::tr("TV Only"),    "tv");
         addSelection(QObject::tr("Audio Only"), "audio");
-        setValue(0);
+        setCurrent(0);
     };
 };
 
Index: libs/libmythtv/scanwizardhelpers.cpp
===================================================================
--- libs/libmythtv/scanwizardhelpers.cpp	(revision 11772)
+++ libs/libmythtv/scanwizardhelpers.cpp	(working copy)
@@ -291,7 +291,7 @@
     }
 
     if (cnt)
-        setValue(which);
+        setCurrent(which);
 }
 
 void InputSelector::SetSourceID(const QString &_sourceid)
@@ -724,14 +724,13 @@
     return scanConfig->GetATSCFormat(dfl);
 }
 
-LogList::LogList() : ListBoxSetting(this), n(0)
+LogList::LogList() : ListBoxSetting(this, MythListBox::NoSelection), n(0)
 {
-    setSelectionMode(MythListBox::NoSelection);
 }
 
 void LogList::updateText(const QString& status)
 {
     addSelection(status,QString::number(n));
-    setCurrentItem(n);
+    setCurrent(n);
     n++;
 }
Index: libs/libmyth/settings.cpp
===================================================================
--- libs/libmyth/settings.cpp	(revision 11772)
+++ libs/libmyth/settings.cpp	(working copy)
@@ -505,28 +505,33 @@
     return widget;
 }
 
-void SelectSetting::addSelection(const QString& label, QString value, bool select) {
+void SelectSetting::addSelection(const QString& label, QString value, bool state)
+{
     if (value == QString::null)
         value = label;
-    
-    bool found = false;
-    for(unsigned i = 0 ; i < values.size() ; ++i)
-        if ((values[i] == value) &&
-            (labels[i] == label)) {
-            found = true;
-            break;
-        }
 
-    if (!found)
+    int index = labels.findIndex(label);
+
+    if (index == -1)
     {
-        labels.push_back(label);
-        values.push_back(value);
-    
-        emit selectionAdded(label, value);
-    
-        if (select || !isSet)
-            setValue(value);
+        labels.append(label);
+        values.append(value);
+        states.append(state);
+
+        emit selectionAdded(label, value, state);
+
+        if (state)
+        {
+            selectionIndices.append(states.count() - 1);
+            selectionLabels.append(label);
+            selectionValues.append(value);
+            updateValue();
+        }
     }
+    else
+    {
+        setState(index, state);
+    }
 }
 
 void SelectSetting::fillSelectionsFromDir(const QDir& dir, bool absPath) {
@@ -544,40 +549,237 @@
              addSelection(fi->fileName());
 }
 
-void SelectSetting::clearSelections(void) {
+void SelectSetting::clearSelections()
+{
     labels.clear();
     values.clear();
-    isSet = false;
+    states.clear();
+    selectionIndices.clear();
+    selectionLabels.clear();
+    selectionValues.clear();
+    updateValue();
     emit selectionsCleared();
 }
 
-void SelectSetting::setValue(const QString& newValue)  {
-    bool found = false;
-    for(unsigned i = 0 ; i < values.size() ; ++i)
-        if (values[i] == newValue) {
-            current = i;
-            found = true;
-            isSet = true;
-            break;
+void SelectSetting::setCurrent(uint which)
+{
+    if (which < labels.count())
+    {
+        for(uint i = 0 ; i < states.size() ; ++i)
+            states[i] = false;
+        selectionIndices.clear();
+        selectionLabels.clear();
+        selectionValues.clear();
+        selectionIndices.append(which);
+        selectionLabels.append(labels[which]);
+        selectionValues.append(values[which]);
+        states[which] = true;
+        updateValue();
+    }
+    else
+    {
+        VERBOSE(VB_IMPORTANT, QString("SelectSetting(%1)::setCurrent(%2) - invalid value")
+                .arg(getName())
+                .arg(which));
+    }
+}
+
+void SelectSetting::setCurrentLabel(const QString& label)
+{
+    int index = labels.findIndex(label);
+
+    if (index == -1)
+    {
+        if (expand)
+        {
+            for(uint j = 0 ; j < states.size() ; ++j)
+                states[j] = false;
+            selectionIndices.clear();
+            selectionLabels.clear();
+            selectionValues.clear();
+
+            addSelection(label, label, true);
         }
-    if (found)
-        Setting::setValue(newValue);
+        else
+        {
+            VERBOSE(VB_IMPORTANT, QString("SelectSetting(%1)::setCurrentLabel(%2) - invalid label")
+                    .arg(getName())
+                    .arg(label));
+        }
+    }
     else
-        addSelection(newValue, newValue, true);
+    {
+        setCurrent(index);
+    }
 }
 
-void SelectSetting::setValue(int which)
+void SelectSetting::setCurrentValue(const QString& value)
 {
-    if ((unsigned)which > values.size()-1 || which < 0) {
-        VERBOSE(VB_IMPORTANT, 
-                "SelectSetting::setValue(): invalid index " << which);
-        return;
+    int index = values.findIndex(value);
+
+    if (index == -1)
+    {
+        if (expand)
+        {
+            for(uint j = 0 ; j < states.size() ; ++j)
+                states[j] = false;
+            selectionIndices.clear();
+            selectionLabels.clear();
+            selectionValues.clear();
+
+            addSelection(value, value, true);
+        }
+        else
+        {
+            VERBOSE(VB_IMPORTANT, QString("SelectSetting(%1)::setCurrent(%2) - invalid value")
+                    .arg(getName())
+                    .arg(value));
+        }
     }
-    current = which;
-    isSet = true;
-    Setting::setValue(values[current]);
+    else
+    {
+        setCurrent(index);
+    }
 }
 
+void SelectSetting::setState(uint which, bool state)
+{
+    if (which < labels.count())
+    {
+        if (states[which] != state)
+        {
+            states[which] = state;
+            if (!states[which])
+            {
+                selectionIndices.remove(which);
+                selectionLabels.remove(labels[which]);
+                selectionValues.remove(values[which]);
+            }
+            else
+            {
+                selectionIndices.append(which);
+                selectionLabels.append(labels[which]);
+                selectionValues.append(values[which]);
+            }
+            updateValue();
+        }
+    }
+    else
+    {
+        VERBOSE(VB_IMPORTANT, QString("SelectSetting(%1)::setState(%2, %3) - invalid value")
+                .arg(getName())
+                .arg(which)
+                .arg(state));
+    }
+}
+
+void SelectSetting::setStateLabel(const QString& label, bool state)
+{
+    int index = labels.findIndex(label);
+
+    if (index == -1)
+    {
+        if (expand)
+        {
+            addSelection(label, label, true);
+        }
+        else
+        {
+            VERBOSE(VB_IMPORTANT, QString("SelectSetting(%1)::setStateLabel(%2, %3) - invalid label")
+                    .arg(getName())
+                    .arg(label)
+                    .arg(state));
+        }
+    }
+    else
+    {
+        setState(index, state);
+    }
+}
+
+void SelectSetting::setStateValue(const QString& value, bool state)
+{
+    int index = values.findIndex(value);
+
+    if (index == -1)
+    {
+        if (expand)
+        {
+            addSelection(value, value, true);
+        }
+        else
+        {
+            VERBOSE(VB_IMPORTANT, QString("SelectSetting(%1)::setStateValue(%2, %3) - invalid value")
+                    .arg(getName())
+                    .arg(value)
+                    .arg(state));
+        }
+    }
+    else
+    {
+        setState(index, state);
+    }
+}
+
+void SelectSetting::setValue(const QString& newValue)
+{
+    for(uint i = 0 ; i < states.size() ; ++i)
+        states[i] = false;
+    selectionIndices.clear();
+    selectionLabels.clear();
+    selectionValues.clear();
+
+    selectionValues = QStringList::split(';', newValue);
+
+    for (QStringList::iterator iter = selectionValues.begin(); iter != selectionValues.end(); iter++)
+    {
+        int index = values.findIndex(*iter);
+
+        if (index == -1)
+        {
+            if (expand)
+            {
+                labels.append(*iter);
+                values.append(*iter);
+                states.append(true);
+
+                emit selectionAdded(*iter, *iter, true);
+
+                selectionIndices.append(states.count() - 1);
+                selectionLabels.append(*iter);
+           }
+            else
+            {
+                VERBOSE(VB_IMPORTANT,
+                        "SelectSetting(" << getName() << ")::setValue(" << *iter << "): invalid value ");
+                iter = selectionValues.erase(iter);
+                iter--;
+            }
+        }
+        else
+        {
+            selectionIndices.append(index);
+            selectionLabels.append(labels[index]);
+            states[index] = true;
+        }
+    }
+
+    updateValue();
+}
+
+void SelectSetting::updateValue()
+{
+    QString newValue("");
+    for (QStringList::const_iterator iter = selectionValues.begin(); iter != selectionValues.end(); iter++)
+    {
+        if (!newValue.isEmpty())
+            newValue.append(';');
+        newValue.append(*iter);
+     }
+     Setting::setValue(newValue);
+     emit selectionChanged();
+}
+
 QWidget* LabelSetting::configWidget(ConfigurationGroup *cg, QWidget* parent,
                                     const char* widgetName) {
     (void)cg;
@@ -779,7 +981,7 @@
     }
 
     QLabel* value = new QLabel(widget);
-    value->setText(labels[current]);
+    value->setText(getValue());
     value->setBackgroundOrigin(QWidget::WindowOrigin);
 
     connect(this, SIGNAL(valueChanged(const QString&)),
@@ -788,6 +990,18 @@
     return widget;
 }
 
+ComboBoxSetting::ComboBoxSetting(Storage *_storage, bool _rw, int _step) :
+    SelectSetting(_storage, _rw),
+    rw(_rw),
+    widget(NULL),
+    step(_step)
+{
+    connect(this, SIGNAL(selectionAdded(const QString&, const QString&, bool)),
+            this, SLOT(selectionAdded(const QString&, const QString&, bool)));
+    connect(this, SIGNAL(selectionChanged()),
+            this, SLOT(selectionChanged()));
+}
+
 QWidget* ComboBoxSetting::configWidget(ConfigurationGroup *cg, QWidget* parent,
                                        const char* widgetName) {
     QHBox* box;
@@ -816,21 +1030,19 @@
     box->setStretchFactor(widget, 1);
 
     for(unsigned int i = 0 ; i < labels.size() ; ++i)
+    {
         widget->insertItem(labels[i]);
+        if (states[i])
+            widget->setCurrentItem(i);
+    }
 
-    if (isSet)
-        widget->setCurrentItem(current);
+    setState(widget->currentItem(), true);
 
     if (1 < step)
         widget->setStep(step);
 
-    if (rw)
-        connect(widget, SIGNAL(highlighted(const QString &)),
-                this, SLOT(setValue(const QString &)));
-    else
-        connect(widget, SIGNAL(highlighted(int)),
-                this, SLOT(setValue(int)));
-
+    connect(widget, SIGNAL(highlighted(const QString &)),
+            this, SLOT(setCurrentLabel(const QString &)));
     connect(widget, SIGNAL(destroyed()),
             this, SLOT(widgetDestroyed()));
     connect(this, SIGNAL(selectionsCleared()),
@@ -863,47 +1075,44 @@
     }
 }
 
-void ComboBoxSetting::setValue(QString newValue)
+void ComboBoxSetting::selectionAdded(const QString& label, const QString&, bool)
 {
-    if (!rw)
+    if (widget)
     {
-        VERBOSE(VB_IMPORTANT, "ComboBoxSetting::setValue(QString): "
-                "BUG: attempted to set value of read-only ComboBox");
-        return;
+        widget->insertItem(label);
     }
-    Setting::setValue(newValue);
-    if (widget)
-        widget->setCurrentItem(current);
-};
+}
 
-void ComboBoxSetting::setValue(int which)
+void ComboBoxSetting::selectionChanged()
 {
     if (widget)
-        widget->setCurrentItem(which);
-    SelectSetting::setValue(which);
-};
+    {
+        widget->setCurrentItem(getSelectionIndices().first());
+    }
+}
 
 void HostRefreshRateComboBox::ChangeResolution(const QString& resolution)
 {
     clearSelections();
-    
+
     const vector<short> list = GetRefreshRates(resolution);
     addSelection(QObject::tr("Any"), "0");
     int hz50 = -1, hz60 = -1;
     for (uint i=0; i<list.size(); ++i)
-    {        
+    {
         QString sel = QString::number(list[i]);
         addSelection(sel+" Hz", sel);
         hz50 = (50 == list[i]) ? i : hz50;
         hz60 = (60 == list[i]) ? i : hz60;
     }
-    
-    setValue(0);
+
     if ("640x480" == resolution || "720x480" == resolution)
-        setValue(hz60+1);
-    if ("640x576" == resolution || "720x576" == resolution)
-        setValue(hz50+1);
-    
+        setCurrent(hz60 + 1);
+    else if ("640x576" == resolution || "720x576" == resolution)
+        setCurrent(hz50 + 1);
+    else
+        setCurrent(0);
+
     setEnabled(list.size());
 }
 
@@ -983,10 +1192,12 @@
         QRadioButton* button = new QRadioButton(widget, NULL);
         button->setBackgroundOrigin(QWidget::WindowOrigin);
         button->setText(labels[i]);
-        if (isSet && i == current)
+        if (states[i])
             button->setDown(true);
     }
 
+    setState(widget->selectedId(), true);
+
     cg = cg;
 
     return widget;
@@ -1280,11 +1491,16 @@
     save(table);
 }
 
-void ListBoxSetting::setEnabled(bool b)
+
+ListBoxSetting::ListBoxSetting(Storage *_storage, MythListBox::SelectionMode mode) :
+    SelectSetting(_storage),
+    selectionMode(mode),
+    widget(NULL)
 {
-    Configurable::setEnabled(b);
-    if (widget)
-        widget->setEnabled(b);
+    connect(this, SIGNAL(selectionAdded(const QString&, const QString&, bool)),
+            this, SLOT(selectionAdded(const QString&, const QString&, bool)));
+    connect(this, SIGNAL(selectionChanged()),
+            this, SLOT(selectionChanged()));
 }
 
 void ListBoxSetting::addSelection(
@@ -1309,12 +1525,12 @@
 
     widget = new MythListBox(box);
     widget->setBackgroundOrigin(QWidget::WindowOrigin);
+    widget->setSelectionMode(selectionMode);
     widget->setHelpText(getHelpText());
 
-    for(unsigned int i = 0 ; i < labels.size() ; ++i) {
+    for(uint i = 0 ; i < labels.size() ; ++i) {
         widget->insertItem(labels[i]);
-        if (isSet && current == i)
-            widget->setCurrentItem(i);
+        widget->setSelected(i, states[i]);
     }
 
     connect(widget, SIGNAL(destroyed()),
@@ -1329,63 +1545,53 @@
             this, SIGNAL(editButtonPressed(int)));
     connect(widget, SIGNAL(deleteButtonPressed(int)),
             this, SIGNAL(deleteButtonPressed(int)));
-    connect(this, SIGNAL(valueChanged(const QString&)),
-            widget, SLOT(setCurrentItem(const QString&)));
-    connect(widget, SIGNAL(highlighted(int)),
-            this, SLOT(setValueByIndex(int)));
+    connect(widget, SIGNAL(selectionChanged()),
+            this, SLOT(updateSelection()));
 
     if (cg)
         connect(widget, SIGNAL(changeHelpText(QString)), cg,
                 SIGNAL(changeHelpText(QString)));
 
     widget->setFocus();
-    widget->setSelectionMode(selectionMode);
 
     return box;
 }
 
-void ListBoxSetting::setSelectionMode(MythListBox::SelectionMode mode)
+void ListBoxSetting::setEnabled(bool b)
 {
-   selectionMode = mode;
-   if (widget)
-       widget->setSelectionMode(selectionMode);
+    Configurable::setEnabled(b);
+    if (widget)
+        widget->setEnabled(b);
 }
 
-void ListBoxSetting::setValueByIndex(int index)
+void ListBoxSetting::selectionAdded(const QString& label, const QString&, bool)
 {
-    if (((uint)index) < values.size())
-        setValue(values[index]);
+    if (widget)
+    {
+        widget->insertItem(label);
+    }
 }
 
-void ImageSelectSetting::addImageSelection(const QString& label,
-                                           QImage* image,
-                                           QString value,
-                                           bool select) {
-    images.push_back(image);
-    addSelection(label, value, select);
+void ListBoxSetting::selectionChanged()
+{
+    if (widget)
+        for (uint i = 0; i < states[i]; ++i)
+            widget->setSelected(i, states[i]);
 }
 
-ImageSelectSetting::~ImageSelectSetting() {
-    while (images.size() > 0) {
-        delete images.back();
-        images.pop_back();
-    }
+void ListBoxSetting::updateSelection()
+{
+    if (widget)
+        for (uint i = 0; i < widget->count(); ++i)
+            setState(i, widget->item(i)->isSelected());
 }
 
-void ImageSelectSetting::imageSet(int num)
+
+ImageSelectSetting::ImageSelectSetting(Storage *_storage) :
+    ComboBoxSetting(_storage),
+    imagelabel(NULL)
 {
-    if (num >= (int)images.size())
-        return;
-
-    if (!images[current])
-        return;
-
-    QImage temp = *(images[current]);
-    temp = temp.smoothScale((int)(184 * m_hmult), (int)(138 * m_hmult),
-                            QImage::ScaleMin);
-
-    QPixmap tmppix(temp);
-    imagelabel->setPixmap(tmppix);
+    images.setAutoDelete(true);
 }
 
 QWidget* ImageSelectSetting::configWidget(ConfigurationGroup *cg, 
@@ -1396,73 +1602,58 @@
 
     gContext->GetScreenSettings(width, m_wmult, height, m_hmult);
 
-    QHBox* box;
-    if (labelAboveWidget) 
-    {
-        box = dynamic_cast<QHBox*>(new QVBox(parent, widgetName));
-        box->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, 
-                                       QSizePolicy::Maximum));
-    } 
-    else
-        box = new QHBox(parent, widgetName);
-
+    QHBox* box = new QHBox(parent, widgetName);
     box->setBackgroundOrigin(QWidget::WindowOrigin);
+    box->setSpacing(100);
 
-    if (getLabel() != "")
-    {
-        QLabel* label = new QLabel(box);
-        label->setText(getLabel() + ":");
-        label->setBackgroundOrigin(QWidget::WindowOrigin);
-    }
+    ComboBoxSetting::configWidget(cg, box);
 
-    MythComboBox *widget = new MythComboBox(false, box);
-    widget->setBackgroundOrigin(QWidget::WindowOrigin);
-
-    QLabel *testlabel = new QLabel(box);
-    testlabel->setText("  ");
-    testlabel->setBackgroundOrigin(QWidget::WindowOrigin);
-
     imagelabel = new QLabel(box);
     imagelabel->setBackgroundOrigin(QWidget::WindowOrigin);
 
-    for (unsigned int i = 0 ; i < images.size() ; ++i)
-        widget->insertItem(labels[i]);
+    selectionChanged();
 
-    if (isSet)
-        widget->setCurrentItem(current);
-    else
-        current = 0;
+    connect(widget, SIGNAL(highlighted(int)), this, SLOT(imageSet(int)));
 
-    if (images.size() != 0 && current < images.size() && images[current])
-    { 
-        QImage temp = *(images[current]);
-        temp = temp.smoothScale((int)(184 * m_hmult), (int)(138 * m_hmult), 
-                                QImage::ScaleMin);
- 
-        QPixmap tmppix(temp);
-        imagelabel->setPixmap(tmppix);
+    return box;
+}
+
+void ImageSelectSetting::addSelection(const QString& label,
+                                      QImage* image,
+                                      QString value,
+                                      bool select)
+{
+    if (labels.find(label) == labels.end())
+    {
+        images.append(image);
+        SelectSetting::addSelection(label, value, select);
     }
-    else
+}
+
+void ImageSelectSetting::imageSet(int num)
+{
+    if (imagelabel)
     {
         QPixmap tmppix((int)(184 * m_hmult), (int)(138 * m_hmult));
-        tmppix.fill(black);
 
+        if (num < (int)images.count() && images.at(num))
+            tmppix = images.at(num)->smoothScale((int)(184 * m_hmult),
+                                                 (int)(138 * m_hmult),
+                                                  QImage::ScaleMin);
+        else
+            tmppix.fill(black);
+
         imagelabel->setPixmap(tmppix);
     }
+}
 
-    connect(widget, SIGNAL(highlighted(int)), this, SLOT(setValue(int)));
-    connect(widget, SIGNAL(highlighted(int)), this, SLOT(imageSet(int)));
+void ImageSelectSetting::selectionChanged()
+{
+    imageSet(getSelectionIndices().first());
+    ComboBoxSetting::selectionChanged();
+}
 
-    connect(this, SIGNAL(selectionsCleared()),
-            widget, SLOT(clear()));
 
-    if (cg)
-        connect(widget, SIGNAL(changeHelpText(QString)), cg, 
-                SIGNAL(changeHelpText(QString)));
-
-    return box;
-}
-
 HostnameSetting::HostnameSetting(Storage *storage) : Setting(storage)
 {
     setVisible(false);
Index: libs/libmyth/dbsettings.cpp
===================================================================
--- libs/libmyth/dbsettings.cpp	(revision 11772)
+++ libs/libmyth/dbsettings.cpp	(working copy)
@@ -74,7 +74,7 @@
     VerticalConfigurationGroup(false, true, false, false)
 {
     setLabel(QObject::tr("Database Configuration") + " 1/2");
-    
+
     info = new TransLabelSetting();
 
     MSqlQuery query(MSqlQuery::InitCon());
@@ -86,7 +86,7 @@
                                    "Please verify your database settings "
                                    "below."));
     addChild(info);
-    
+
     dbHostName = new TransLineEditSetting(true);
     dbHostName->setLabel(QObject::tr("Host name"));
     dbHostName->setHelpText(QObject::tr("The host name or IP address of "
@@ -100,7 +100,7 @@
                                     "on, if it's not the default database "
                                     "port."));
     addChild(dbPort);
-    
+
     dbName = new TransLineEditSetting(true);
     dbName->setLabel(QObject::tr("Database"));
     dbName->setHelpText(QObject::tr("The name of the database. "
@@ -113,19 +113,19 @@
                                         "connecting to the database. "
                                         "This information is required."));
     addChild(dbUserName);
-    
+
     dbPassword = new TransLineEditSetting(true);
     dbPassword->setLabel(QObject::tr("Password"));
     dbPassword->setHelpText(QObject::tr("The password to use while "
                                         "connecting to the database. "
                                         "This information is required."));
     addChild(dbPassword);
-    
+
     dbType = new TransComboBoxSetting(false);
     dbType->setLabel(QObject::tr("Database type"));
     dbType->addSelection(QObject::tr("MySQL"), "QMYSQL3");
     //dbType->addSelection(QObject::tr("PostgreSQL"), "QPSQL7");
-    dbType->setValue(0);
+    dbType->setCurrent(0);
     dbType->setHelpText(QObject::tr("The database implementation used "
                                     "for your server."));
     addChild(dbType);
@@ -203,14 +203,14 @@
 void MythDbSettings1::load()
 {
     DatabaseParams params = gContext->GetDatabaseParams();
-    
+
     if (params.dbHostName.isEmpty() ||
         params.dbUserName.isEmpty() ||
         params.dbPassword.isEmpty() ||
         params.dbName.isEmpty())
         info->setValue(info->getValue() + "\nRequired fields are marked "
                                           "with an asterisk (*).");
-    
+
     dbHostName->setValue(params.dbHostName);
     if (params.dbHostName.isEmpty())
         dbHostName->setLabel("* " + dbHostName->getLabel());
@@ -227,11 +227,11 @@
     dbName->setValue(params.dbName);
     if (params.dbName.isEmpty())
         dbName->setLabel("* " + dbName->getLabel());
-        
+
     if (params.dbType == "QMYSQL3")
-        dbType->setValue(0);
+        dbType->setCurrent(0);
     else if (params.dbType == "QPSQL7")
-        dbType->setValue(1);
+        dbType->setCurrent(1);
 }
 
 void MythDbSettings2::load()
Index: libs/libmyth/mythwidgets.cpp
===================================================================
--- libs/libmyth/mythwidgets.cpp	(revision 11772)
+++ libs/libmyth/mythwidgets.cpp	(working copy)
@@ -1242,13 +1242,13 @@
 void MythListBox::polish(void)
 {
     QListBox::polish();
-    
+
     QPalette pal = palette();
     QColorGroup::ColorRole role = QColorGroup::Highlight;
     pal.setColor(QPalette::Active, role, pal.active().button()); 
     pal.setColor(QPalette::Inactive, role, pal.active().button()); 
     pal.setColor(QPalette::Disabled, role, pal.active().button()); 
-   
+
     setPalette(pal);
 }
 
@@ -1287,15 +1287,15 @@
                 }
             }
             else
-            {    
+            {
                 if (text(i).lower() == matchText.lower())
                 {
                     setCurrentItem(i);
                     break;
                 }
-            }        
+            }
         }
-    }            
+    }
 }
 
 void MythListBox::keyPressEvent(QKeyEvent* e) 
@@ -1320,7 +1320,7 @@
                         handled = true;
                         continue;
                     }
-                    
+
                     key = Key_Up;
                 }
                 else if (action == "DOWN")
@@ -1332,18 +1332,20 @@
                         handled = true;
                         continue;
                     }
-                    
+
                     key = Key_Down;
                 }
                 else if (action == "LEFT")
                 {
-                    focusNextPrevChild(false);
+                    if (selectionMode() == Multi)
+                        toggleCurrentItem();
                     handled = true;
                     continue;
                 }
                 else if (action == "RIGHT")
                 {
-                    focusNextPrevChild(true);
+                    if (selectionMode() == Multi)
+                        toggleCurrentItem();
                     handled = true;
                     continue;
                 }
@@ -1375,12 +1377,15 @@
 
 void MythListBox::focusOutEvent(QFocusEvent *e)
 {
+    if (selectionMode() == Single)
+        setSelected(currentItem(), false);
+
     QPalette pal = palette();
     QColorGroup::ColorRole role = QColorGroup::Highlight;
     pal.setColor(QPalette::Active, role, pal.active().button()); 
     pal.setColor(QPalette::Inactive, role, pal.active().button()); 
     pal.setColor(QPalette::Disabled, role, pal.active().button()); 
-   
+
     setPalette(pal);
     QListBox::focusOutEvent(e);
 }
@@ -1388,9 +1393,12 @@
 void MythListBox::focusInEvent(QFocusEvent *e)
 {
     this->unsetPalette();
-    
+
     emit changeHelpText(helptext);
     QListBox::focusInEvent(e);
+
+    if (selectionMode() == Single)
+        setSelected(currentItem(), true);
 }
 
 /* vim: set expandtab tabstop=4 shiftwidth=4: */
Index: libs/libmyth/settings.h
===================================================================
--- libs/libmyth/settings.h	(revision 11772)
+++ libs/libmyth/settings.h	(working copy)
@@ -287,54 +287,50 @@
 {
     Q_OBJECT
 
-  protected:
-    SelectSetting(Storage *_storage) :
-        Setting(_storage), current(0), isSet(false) { }
+protected:
+    SelectSetting(Storage *_storage, bool _expand = false) :
+        Setting(_storage), expand(_expand) { };
 
-  public:
+public:
     virtual void addSelection(const QString& label,
-                              QString value=QString::null,
-                              bool select=false);
+                              QString value = QString::null,
+                              bool state = false);
 
-    virtual void clearSelections(void);
+    virtual const QValueList<uint> getSelectionIndices() const {return selectionIndices;}
+    virtual const QStringList&     getSelectionLabels() const  {return selectionLabels;}
+    virtual const QStringList&     getSelectionValues() const  {return selectionValues;}
 
+    virtual void clearSelections();
+
     virtual void fillSelectionsFromDir(const QDir& dir, bool absPath=true);
 
 signals:
-    void selectionAdded(const QString& label, QString value);
-    void selectionsCleared(void);
+    void selectionAdded(const QString& label, const QString& value, bool state);
+    void selectionChanged();
+    void selectionsCleared();
 
 public slots:
+    virtual void setCurrent(uint which);
+    virtual void setCurrentLabel(const QString& label);
+    virtual void setCurrentValue(const QString& value);
+    virtual void setState(uint which, bool state);
+    virtual void setStateLabel(const QString& label, bool state);
+    virtual void setStateValue(const QString& value, bool state);
 
+private slots:
     virtual void setValue(const QString& newValue);
-    virtual void setValue(int which);
 
-    virtual QString getSelectionLabel(void) const {
-        if (!isSet)
-            return QString::null;
-        return labels[current];
-    };
+protected:
+    virtual void updateValue();
 
-    virtual int getValueIndex(QString value) {
-        selectionList::iterator iter = values.begin();
-        int ret = 0;
-        while (iter != values.end()) {
-            if (*iter == value) {
-                return ret;
-            } else {
-                ret++;
-                iter++;
-            }
-        }
-        return 0;
-    };
-
 protected:
-    typedef vector<QString> selectionList;
-    selectionList labels;
-    selectionList values;
-    unsigned current;
-    bool isSet;
+    bool             expand;            // whether to expand selections via 'set' calls
+    QStringList      labels;            // strings that are displayed
+    QStringList      values;            // strings that are used internally
+    QValueList<bool> states;            // states of possible selections
+    QValueList<uint> selectionIndices;  // indices of currently selected items
+    QStringList      selectionLabels;   // labels of currently selected items
+    QStringList      selectionValues;   // values of currently selected items
 };
 
 class MPUBLIC SelectLabelSetting : public SelectSetting
@@ -350,14 +346,10 @@
 class MPUBLIC ComboBoxSetting: public SelectSetting {
     Q_OBJECT
 
-protected:
-    ComboBoxSetting(Storage *_storage, bool _rw = false, int _step = 1) :
-        SelectSetting(_storage), rw(_rw), widget(NULL), step(_step) { }
-
 public:
-    virtual void setValue(QString newValue);
-    virtual void setValue(int which);
+    ComboBoxSetting(Storage *_storage, bool _rw = false, int _step = 1);
 
+public:
     virtual QWidget* configWidget(ConfigurationGroup *cg, QWidget* parent, 
                                   const char* widgetName = 0);
 
@@ -366,39 +358,28 @@
     virtual void setEnabled(bool b);
     virtual void setVisible(bool b);
 
-public slots:
-    void addSelection(const QString& label,
-                      QString value=QString::null,
-                      bool select=false) {
-        if (widget != NULL)
-            widget->insertItem(label);
-        SelectSetting::addSelection(label, value, select);
-    };
 protected slots:
+    virtual void selectionAdded(const QString& label, const QString&, bool state);
+    virtual void selectionChanged();
     void widgetDestroyed() { widget=NULL; };
 
-private:
+protected:
     bool rw;
     MythComboBox *widget;
-
-protected:
     int step;
 };
 
 class MPUBLIC ListBoxSetting: public SelectSetting {
     Q_OBJECT
+
 public:
-    ListBoxSetting(Storage *_storage) :
-        SelectSetting(_storage), widget(NULL),
-        selectionMode(MythListBox::Single) { }
+    ListBoxSetting(Storage *_storage, MythListBox::SelectionMode mode = MythListBox::Single);
 
+public:
     virtual QWidget* configWidget(ConfigurationGroup *cg, QWidget* parent, 
                                   const char* widgetName = 0);
 
     void setFocus() { if (widget) widget->setFocus(); }
-    void setSelectionMode(MythListBox::SelectionMode mode);
-    void setCurrentItem(int i) { if (widget) widget->setCurrentItem(i); }
-    void setCurrentItem(const QString& str)  { if (widget) widget->setCurrentItem(str); }
 
     virtual void setEnabled(bool b);
 
@@ -414,11 +395,15 @@
                       bool           select = false);
 
 protected slots:
-    void setValueByIndex(int index);
+    virtual void selectionAdded(const QString& label, const QString&, bool state);
+    virtual void selectionChanged();
+    virtual void updateSelection();
+
     void widgetDestroyed() { widget=NULL; };
+
 protected:
-    MythListBox* widget;
     MythListBox::SelectionMode selectionMode;
+    MythListBox* widget;
 };
 
 class MPUBLIC RadioSetting : public SelectSetting
@@ -429,24 +414,30 @@
                                   const char* widgetName = 0);
 };
 
-class MPUBLIC ImageSelectSetting: public SelectSetting {
+class MPUBLIC ImageSelectSetting: public ComboBoxSetting {
     Q_OBJECT
+
+protected:
+    ImageSelectSetting(Storage *_storage);
+
 public:
-    ImageSelectSetting(Storage *_storage) : SelectSetting(_storage) { }
-    virtual ~ImageSelectSetting();
     virtual QWidget* configWidget(ConfigurationGroup *cg, QWidget* parent, 
                                   const char* widgetName = 0);
 
-    virtual void addImageSelection(const QString& label,
-                                   QImage* image,
-                                   QString value=QString::null,
-                                   bool select=false);
+    virtual void addSelection(const QString& label,
+                              QImage* image,
+                              QString value = QString::null,
+                              bool select = false);
+private:
+    virtual void addSelection(const QString&, QString, bool) {}
+
 protected slots:
+    virtual void selectionChanged();
     void imageSet(int);
 
 protected:
-    vector<QImage*> images;
-    QLabel *imagelabel;
+    QPtrList<QImage> images;
+    QLabel* imagelabel;
     float m_hmult, m_wmult;
 };
 
@@ -738,6 +729,13 @@
         LineEditSetting(this, rw), HostDBStorage(this, name) { }
 };
 
+class MPUBLIC HostListBox: public ListBoxSetting, public HostDBStorage
+{
+  public:
+    HostListBox(const QString &name, MythListBox::SelectionMode mode = MythListBox::Single) :
+        ListBoxSetting(this, mode), HostDBStorage(this, name) { }
+};
+
 class MPUBLIC HostImageSelect : public ImageSelectSetting, public HostDBStorage
 {
   public:
Index: libs/libmyth/mythwidgets.h
===================================================================
--- libs/libmyth/mythwidgets.h	(revision 11772)
+++ libs/libmyth/mythwidgets.h	(working copy)
@@ -356,7 +356,8 @@
     void focusInEvent(QFocusEvent *e);
 };
 
-class MPUBLIC MythListBox: public QListBox {
+class MPUBLIC MythListBox: public QListBox
+{
     Q_OBJECT
   public:
     MythListBox(QWidget* parent);
Index: programs/mythfrontend/globalsettings.cpp
===================================================================
--- programs/mythfrontend/globalsettings.cpp	(revision 11772)
+++ programs/mythfrontend/globalsettings.cpp	(working copy)
@@ -541,7 +541,7 @@
                                 "shows to delete first.  LiveTV recordings "
                                 "will always expire before normal "
                                 "recordings."));
-    bc->setValue(1);
+    bc->setCurrent(1);
     return bc;
 }
 
@@ -700,7 +700,7 @@
     for (int i = 0; i < 4; i++)
         gc->addSelection(str[i], QString::number(i));
 
-    gc->setValue(1);
+    gc->setCurrent(1);
     gc->setHelpText(help);
 
     return gc;
@@ -1446,7 +1446,7 @@
         gc->addSelection(QString::number(i), QString::number(i));
     gc->addSelection(QObject::tr("All"), QString::number(-1));
     gc->setLabel(QObject::tr("Xinerama screen"));
-    gc->setValue(0);
+    gc->setCurrent(0);
     gc->setHelpText(QObject::tr("Run on the specified screen or "
                     "spanning all screens."));
     return gc;
@@ -1625,7 +1625,7 @@
         DisplayResScreen dscr(w, h, -1, -1, -1.0, 0);
         short rate = -1;
         int i = DisplayResScreen::FindBestMatch(scr, dscr, rate);
-        gc->setValue((i >= 0) ? i : scr.size()-1);
+        gc->setCurrent((i >= 0) ? i : scr.size()-1);
     }
 
     return gc;
@@ -1924,10 +1924,10 @@
             continue;
         }
 
-        addImageSelection(theme->fileName(), previewImage);
+        addSelection(theme->fileName(), previewImage);
     }
 
-    setValue("G.A.N.T.");
+    setCurrent(0);
 }
 
 class StyleSetting: public HostComboBox {
@@ -1968,7 +1968,7 @@
     gc->addSelection(QObject::tr("callsign"), "<sign>");
     gc->addSelection(QObject::tr("name"), "<name>");
     gc->setHelpText(QObject::tr("Your preferred channel format."));
-    gc->setValue(1);
+    gc->setCurrent(1);
     return gc;
 }
 
@@ -1982,7 +1982,7 @@
     gc->addSelection(QObject::tr("callsign"), "<sign>");
     gc->addSelection(QObject::tr("name"), "<name>");
     gc->setHelpText(QObject::tr("Your preferred long channel format."));
-    gc->setValue(2);
+    gc->setCurrent(2);
     return gc;
 }
 
Index: programs/mythfrontend/main.cpp
===================================================================
--- programs/mythfrontend/main.cpp	(revision 11772)
+++ programs/mythfrontend/main.cpp	(working copy)
@@ -505,7 +505,7 @@
         themename = themelist[rand() % themelist.size()];
 
     ThemeSelector Theme;
-    Theme.setValue(themename);
+    Theme.setCurrentValue(themename);
     Theme.save();
 
     return themename;
Index: programs/mythtv-setup/backendsettings.cpp
===================================================================
--- programs/mythtv-setup/backendsettings.cpp	(revision 11772)
+++ programs/mythtv-setup/backendsettings.cpp	(working copy)
@@ -227,7 +227,7 @@
     GlobalComboBox *gc = new GlobalComboBox("EITTimeOffset");
     gc->setLabel(QObject::tr("Time offset for EIT listings"));
     init_time_offsets(gc);
-    gc->setValue(1);
+    gc->setCurrent(1);
     QString helptext = QObject::tr(
         "Adjust the relative timezone of the EIT EPG data.  "
         "'Auto' converts the EIT time to local time using your "
