Index: libs/libmyth/settings.cpp
===================================================================
--- libs/libmyth/settings.cpp	(revision 14801)
+++ libs/libmyth/settings.cpp	(working copy)
@@ -187,6 +187,22 @@
     return widget;
 }
 
+void VerticalConfigurationGroup::widgetInvalid(QObject *obj)
+{
+    widget = (widget == obj) ? NULL : widget;
+}
+
+void VerticalConfigurationGroup::deleteLater(void)
+{
+    for (uint i = 0; i < childwidget.size() && i < children.size(); i++)
+    {
+        if (children[i] && childwidget[i])
+            children[i]->widgetInvalid(childwidget[i]);
+    }
+    childwidget.clear();
+    ConfigurationGroup::deleteLater();
+}
+
 bool VerticalConfigurationGroup::replaceChild(
     Configurable *old_child, Configurable *new_child)
 {
@@ -207,17 +223,21 @@
         if (childwidget[i])
         {
             layout->remove(childwidget[i]);
+            old_child->widgetInvalid(childwidget[i]);
             childwidget[i]->deleteLater();
             childwidget[i] = NULL;
         }
 
+        bool was_visible = old_child->isVisible();
+        bool was_enabled = old_child->isEnabled();
+
         old_child->deleteLater();
 
-        if (children[i]->isVisible())
+        if (was_visible)
         {
-            childwidget[i] = children[i]->configWidget(confgrp, widget, NULL);
+            childwidget[i] = new_child->configWidget(confgrp, widget, NULL);
             layout->add(childwidget[i]);
-            children[i]->setEnabled(children[i]->isEnabled());
+            new_child->setEnabled(was_enabled);
             childwidget[i]->resize(1,1);
             childwidget[i]->show();
         }
@@ -353,6 +373,28 @@
     return widget;
 }
 
+StackedConfigurationGroup::~StackedConfigurationGroup()
+{
+    for (uint i = 0; i < childwidget.size() && i < children.size(); i++)
+    {
+        if (children[i] && childwidget[i])
+            children[i]->widgetInvalid(childwidget[i]);
+    }
+    childwidget.clear();
+    ConfigurationGroup::deleteLater();
+}
+
+void StackedConfigurationGroup::deleteLater(void)
+{
+    for (uint i = 0; i < childwidget.size() && i < children.size(); i++)
+    {
+        if (children[i] && childwidget[i])
+            children[i]->widgetInvalid(childwidget[i]);
+    }
+    childwidget.clear();
+    ConfigurationGroup::deleteLater();
+}
+
 QWidget* StackedConfigurationGroup::configWidget(ConfigurationGroup *cg, 
                                                  QWidget* parent,
                                                  const char* widgetName) 
@@ -401,6 +443,11 @@
     }
 }
 
+void StackedConfigurationGroup::widgetInvalid(QObject *obj)
+{
+    widget = (widget == obj) ? NULL : widget;
+}
+
 void StackedConfigurationGroup::removeChild(Configurable *child)
 {
     childList::iterator it = find(children.begin(), children.end(), child);
@@ -418,7 +465,10 @@
     childwidget.erase(cit);
 
     if (widget && cw)
+    {
+        child->widgetInvalid(cw);
         widget->removeWidget(cw);
+    }
 }
 
 QWidget* TabbedConfigurationGroup::configWidget(ConfigurationGroup *cg, 
@@ -626,6 +676,11 @@
     return widget;
 }
 
+void TriggeredConfigurationGroup::widgetInvalid(QObject *obj)
+{
+    widget = (widget == obj) ? NULL : widget;
+}
+
 int SelectSetting::findSelection(const QString &label, QString value) const
 {
     value = (value.isEmpty()) ? label : value;
@@ -1081,8 +1136,6 @@
         connect(widget, SIGNAL(highlighted(int)),
                 this, SLOT(setValue(int)));
 
-    connect(widget, SIGNAL(destroyed()),
-            this, SLOT(widgetDestroyed()));
     connect(this, SIGNAL(selectionsCleared()),
             widget, SLOT(clear()));
 
@@ -1093,6 +1146,11 @@
     return box;
 }
 
+void ComboBoxSetting::widgetInvalid(QObject *obj)
+{
+    widget = (widget == obj) ? NULL : widget;
+}
+
 void ComboBoxSetting::setEnabled(bool b)
 {
     Configurable::setEnabled(b);
@@ -1302,6 +1360,11 @@
     return widget;
 }
 
+void CheckBoxSetting::widgetInvalid(QObject *obj)
+{
+    widget = (widget == obj) ? NULL : widget;
+}
+
 void CheckBoxSetting::setEnabled(bool fEnabled)
 {
     BooleanSetting::setEnabled(fEnabled);
@@ -1337,6 +1400,17 @@
         MythDialog::keyPressEvent(e);
 }
 
+ConfigurationDialog::~ConfigurationDialog()
+{
+    for (uint i = 0; (i < childwidget.size()) && (i < cfgChildren.size()); i++)
+    {
+        if (cfgChildren[i] && childwidget[i])
+            cfgChildren[i]->widgetInvalid(childwidget[i]);
+    }
+    childwidget.clear();
+    cfgGrp->deleteLater();
+}
+
 MythDialog* ConfigurationDialog::dialogWidget(MythMainWindow *parent,
                                               const char *widgetName) 
 {
@@ -1349,10 +1423,15 @@
     QVBoxLayout *layout = new QVBoxLayout(dialog, (int)(20 * hmult));
 
     ChildList::iterator it = cfgChildren.begin();
-    for (; it != cfgChildren.end(); ++it)
+    childwidget.clear();
+    childwidget.resize(cfgChildren.size());
+    for (uint i = 0; it != cfgChildren.end(); ++it, ++i)
     {
         if ((*it)->isVisible())
-            layout->addWidget((*it)->configWidget(cfgGrp, dialog));
+        {
+            childwidget[i] = (*it)->configWidget(cfgGrp, dialog);
+            layout->addWidget(childwidget[i]);
+        }
     }
 
     return dialog;
@@ -1373,6 +1452,13 @@
     if ((QDialog::Accepted == ret) && saveOnAccept)
         save();
 
+    for (uint i = 0; (i < childwidget.size()) && (i < cfgChildren.size()); i++)
+    {
+        if (cfgChildren[i] && childwidget[i])
+            cfgChildren[i]->widgetInvalid(childwidget[i]);
+    }
+    childwidget.clear();
+
     dialog->deleteLater();
     dialog = NULL;
 
@@ -1442,6 +1528,27 @@
     }
 }
 
+JumpConfigurationWizard::~JumpConfigurationWizard()
+{
+    for (uint i = 0; i < childwidget.size() && i < cfgChildren.size(); i++)
+    {
+        if (cfgChildren[i] && childwidget[i])
+            cfgChildren[i]->widgetInvalid(childwidget[i]);
+    }
+    childwidget.clear();
+}
+
+void JumpConfigurationWizard::deleteLater(void)
+{
+    for (uint i = 0; i < childwidget.size() && i < cfgChildren.size(); i++)
+    {
+        if (cfgChildren[i] && childwidget[i])
+            cfgChildren[i]->widgetInvalid(childwidget[i]);
+    }
+    childwidget.clear();
+    QObject::deleteLater();
+}
+
 MythDialog *JumpConfigurationWizard::dialogWidget(MythMainWindow *parent,
                                                   const char *widgetName)
 {
@@ -1451,13 +1558,13 @@
     QObject::connect(cfgGrp, SIGNAL(changeHelpText(QString)),
                      wizard, SLOT(  setHelpText(   QString)));
 
-    childWidgets.clear();
+    childwidget.clear();
     QStringList labels, helptext;
     for (uint i = 0; i < cfgChildren.size(); i++)
     {
         if (cfgChildren[i]->isVisible())
         {
-            childWidgets.push_back(cfgChildren[i]->configWidget(cfgGrp, parent));
+            childwidget.push_back(cfgChildren[i]->configWidget(cfgGrp, parent));
             labels.push_back(cfgChildren[i]->getLabel());
             helptext.push_back(cfgChildren[i]->getHelpText());
         }
@@ -1470,10 +1577,10 @@
     connect(jumppane, SIGNAL(pressed( QString)),
             this,     SLOT(  showPage(QString)));
 
-    for (uint i = 0; i < childWidgets.size(); i++)
+    for (uint i = 0; i < childwidget.size(); i++)
     {
-        wizard->addPage(childWidgets[i], labels[i]);
-        wizard->setFinishEnabled(childWidgets[i], true);
+        wizard->addPage(childwidget[i], labels[i]);
+        wizard->setFinishEnabled(childwidget[i], true);
     }
 
     return wizard;
@@ -1482,9 +1589,9 @@
 void JumpConfigurationWizard::showPage(QString page)
 {
     uint pagenum = page.toUInt();
-    if (pagenum >= childWidgets.size() || !dialog)
+    if (pagenum >= childwidget.size() || !dialog)
         return;
-    ((MythJumpWizard*)(dialog))->showPage(childWidgets[pagenum]);
+    ((MythJumpWizard*)(dialog))->showPage(childwidget[pagenum]);
 }
 
 void SimpleDBStorage::load() 
@@ -1594,6 +1701,8 @@
 
 void ListBoxSetting::clearSelections(void)
 {
+    VERBOSE(VB_IMPORTANT, "clearSelections(void) widget: "
+            <<bxwidget<<":"<<widget);
     SelectSetting::clearSelections();
     if (widget)
         widget->clear();
@@ -1612,9 +1721,15 @@
 
 QWidget* ListBoxSetting::configWidget(ConfigurationGroup *cg, QWidget* parent, 
                                       const char* widgetName) {
+    if (bxwidget)
+        VERBOSE(VB_IMPORTANT, "configWidget called while there "
+                "is an existing widget: "<<bxwidget);
+
     QWidget* box = new QVBox(parent, widgetName);
     box->setBackgroundOrigin(QWidget::WindowOrigin);
 
+    VERBOSE(VB_IMPORTANT, "configWidget->"<<box);
+
     if (getLabel() != "")
     {
         QLabel* label = new QLabel(box);
@@ -1622,6 +1737,7 @@
         label->setBackgroundOrigin(QWidget::WindowOrigin);
     }
 
+    bxwidget = box;
     widget = new MythListBox(box);
     widget->setBackgroundOrigin(QWidget::WindowOrigin);
     widget->setHelpText(getHelpText());
@@ -1654,9 +1770,20 @@
     widget->setFocus();
     widget->setSelectionMode(selectionMode);
 
-    return box;
+    return bxwidget;
 }
 
+void ListBoxSetting::widgetInvalid(QObject *obj)
+{
+    VERBOSE(VB_IMPORTANT, "widgetInvalid("<<obj<<") == "
+            <<bxwidget<<":"<<widget<<"?");
+    if (bxwidget == obj)
+    {
+        widget   = NULL;
+        bxwidget = NULL;
+    }
+}
+
 void ListBoxSetting::setSelectionMode(MythListBox::SelectionMode mode)
 {
    selectionMode = mode;
Index: libs/libmyth/mythcontext.h
===================================================================
--- libs/libmyth/mythcontext.h	(revision 14801)
+++ libs/libmyth/mythcontext.h	(working copy)
@@ -209,7 +209,7 @@
 
 /// Update this whenever the plug-in API changes.
 /// Including changes in the libmythtv class methods used by plug-ins.
-#define MYTH_BINARY_VERSION "0.21.20071104-1"
+#define MYTH_BINARY_VERSION "0.21.20071105-2"
 
 /** \brief Increment this whenever the MythTV network protocol changes.
  *
Index: libs/libmyth/settings.h
===================================================================
--- libs/libmyth/settings.h	(revision 14801)
+++ libs/libmyth/settings.h	(working copy)
@@ -135,6 +135,8 @@
 
     Storage *GetStorage(void) { return storage; }
 
+    virtual void widgetInvalid(QObject*) { }
+
   public slots:
     virtual void enableOnSet(const QString &val);
     virtual void enableOnUnset(const QString &val);
@@ -380,6 +382,8 @@
     virtual void setEnabled(bool b);
     virtual void setVisible(bool b);
 
+    virtual void widgetInvalid(QObject *obj);
+
 public slots:
     void addSelection(const QString &label,
                       QString value = QString::null,
@@ -387,9 +391,6 @@
     bool removeSelection(const QString &label,
                          QString value = QString::null);
 
-protected slots:
-    void widgetDestroyed() { widget=NULL; };
-
 private:
     bool rw;
     MythComboBox *widget;
@@ -402,7 +403,7 @@
     Q_OBJECT
 public:
     ListBoxSetting(Storage *_storage) :
-        SelectSetting(_storage), widget(NULL),
+        SelectSetting(_storage), bxwidget(NULL), widget(NULL),
         selectionMode(MythListBox::Single) { }
 
     virtual QWidget* configWidget(ConfigurationGroup *cg, QWidget* parent, 
@@ -417,6 +418,8 @@
 
     virtual void clearSelections(void);
 
+    virtual void widgetInvalid(QObject *obj);
+
 signals:
     void accepted(int);
     void menuButtonPressed(int);
@@ -428,9 +431,9 @@
                       QString        value  = QString::null,
                       bool           select = false);
 
-protected slots:
     void setValueByIndex(int index);
 protected:
+    QWidget*     bxwidget;
     MythListBox* widget;
     MythListBox::SelectionMode selectionMode;
 };
@@ -493,6 +496,9 @@
     virtual QWidget* configWidget(ConfigurationGroup *cg, QWidget* parent,
                                   const char* widgetName = 0);
     virtual void setEnabled(bool b);
+
+    virtual void widgetInvalid(QObject*);
+
 protected:
     MythCheckBox *widget;
 };
@@ -894,6 +900,8 @@
     {
     }
 
+    virtual void deleteLater(void);
+
     virtual QWidget *configWidget(ConfigurationGroup *cg,
                                   QWidget            *parent,
                                   const char         *widgetName);
@@ -901,6 +909,8 @@
     bool replaceChild(Configurable *old_child, Configurable *new_child);
     void repaint(void);
 
+    virtual void widgetInvalid(QObject *obj);
+
   protected:
     /// You need to call deleteLater to delete QObject
     virtual ~VerticalConfigurationGroup() { }
@@ -967,6 +977,8 @@
     {
     }
 
+    virtual void deleteLater(void);
+
     virtual QWidget* configWidget(ConfigurationGroup *cg, QWidget* parent,
                                   const char* widgetName = 0);
 
@@ -979,13 +991,14 @@
 
     void addChild(Configurable*);
     void removeChild(Configurable*);
+    virtual void widgetInvalid(QObject *obj);
 
   signals:
     void raiseWidget(int);
 
   protected:
     /// You need to call deleteLater to delete QObject
-    virtual ~StackedConfigurationGroup() { }
+    virtual ~StackedConfigurationGroup();
 
   protected:
     vector<QWidget*>    childwidget;
@@ -1034,6 +1047,8 @@
 
     void repaint(void);
 
+    virtual void widgetInvalid(QObject *obj);
+
     // Sets
 
     void SetVertical(bool vert);
@@ -1163,7 +1178,7 @@
 {
   public:
     ConfigurationDialog() : dialog(NULL), cfgGrp(new ConfigurationGroup()) { }
-    virtual ~ConfigurationDialog() { cfgGrp->deleteLater(); }
+    virtual ~ConfigurationDialog();
 
     // Make a modal dialog containing configWidget
     virtual MythDialog *dialogWidget(MythMainWindow *parent,
@@ -1187,6 +1202,7 @@
     typedef vector<Configurable*> ChildList;
 
     ChildList           cfgChildren;
+    vector<QWidget*>    childwidget;
     MythDialog         *dialog;
     ConfigurationGroup *cfgGrp;
 };
@@ -1216,15 +1232,14 @@
     virtual MythDialog *dialogWidget(MythMainWindow *parent,
                                      const char     *widgetName);
 
+    virtual void deleteLater(void);
+
   protected slots:
     void showPage(QString);
 
   protected:
     /// You need to call deleteLater to delete QObject
-    virtual ~JumpConfigurationWizard() { }
-
-  protected:
-    vector<QWidget*> childWidgets;
+    virtual ~JumpConfigurationWizard();
 };
 
 class MPUBLIC JumpPane : public VerticalConfigurationGroup
