Index: libs/libmythtv/channeleditor.cpp
===================================================================
--- libs/libmythtv/channeleditor.cpp	(revision 13310)
+++ libs/libmythtv/channeleditor.cpp	(working copy)
@@ -19,6 +19,7 @@
 #include "sourceutil.h"
 
 #include "scanwizard.h"
+#include "importicons.h"
 
 ChannelWizard::ChannelWizard(int id, int default_sourceid)
              : ConfigurationWizard() {
@@ -110,12 +111,13 @@
         return 0;
 }
 
-void ChannelListSetting::fillSelections(void) 
+int ChannelListSetting::fillSelections(void) 
 {
     QString currentValue = getValue();
     clearSelections();
     addSelection(QObject::tr("(New Channel)"));
     bool fAllSources = true;
+    int nCount = 0;
 
     QString querystr = "SELECT channel.name,channum,chanid ";
 
@@ -184,8 +186,10 @@
                 name += " (" + sourceid  + ")";
 
             addSelection(name, chanid, (chanid == currentValue) ? true : false);
+            nCount++;
         }
     }
+    return nCount;
 }
 
 class SourceSetting : public ComboBoxSetting, public Storage
@@ -268,6 +272,10 @@
     buttonScan->setHelpText(QObject::tr("Starts the channel scanner."));
     buttonScan->setEnabled(SourceUtil::IsAnySourceScanable());
 
+    buttonImportIcon = new TransButtonSetting();
+    buttonImportIcon->setLabel(QObject::tr("Icon Import"));
+    buttonImportIcon->setHelpText(QObject::tr("Starts the icon importer"));
+
     buttonTransportEditor = new TransButtonSetting();
     buttonTransportEditor->setLabel(QObject::tr("Transport Editor"));
     buttonTransportEditor->setHelpText(
@@ -279,6 +287,7 @@
     HorizontalConfigurationGroup *h = 
         new HorizontalConfigurationGroup(false, false);
     h->addChild(buttonScan);
+    h->addChild(buttonImportIcon);
     h->addChild(buttonTransportEditor);
     addChild(h);
 
@@ -294,6 +303,8 @@
             this, SLOT(menu(int)));
     connect(buttonScan, SIGNAL(pressed()),
             this, SLOT(scan()));
+    connect(buttonImportIcon,  SIGNAL(pressed()),
+            this, SLOT(channelIconImport()));
     connect(buttonTransportEditor, SIGNAL(pressed()),
             this, SLOT(transportEditor()));
     connect(del,  SIGNAL(pressed()),
@@ -355,7 +366,7 @@
     if (!query.exec())
         MythContext::DBError("ChannelEditor Delete Channels", query);
 
-    list->fillSelections();
+    buttonImportIcon->setEnabled(list->fillSelections()==0 ? false:true);
 }
 
 MythDialog* ChannelEditor::dialogWidget(MythMainWindow* parent,
@@ -379,7 +390,7 @@
     ChannelWizard cw(id, source->getValue().toUInt());
     cw.exec();
 
-    list->fillSelections();
+    buttonImportIcon->setEnabled(list->fillSelections()==0 ? false:true);
     list->setFocus();
 }
 
@@ -406,7 +417,7 @@
         if (!query.exec() || !query.isActive())
             MythContext::DBError("ChannelEditor Delete Channel", query);
 
-        list->fillSelections();
+        buttonImportIcon->setEnabled(list->fillSelections()==0 ? false:true);
     }
 }
 
@@ -441,7 +452,7 @@
     scanwizard->exec(false, true);
     scanwizard->deleteLater();
 
-    list->fillSelections();
+    buttonImportIcon->setEnabled(list->fillSelections()==0 ? false:true);
     list->setFocus();
 #else
     VERBOSE(VB_IMPORTANT,  "You must compile the backend "
@@ -457,6 +468,39 @@
     editor->exec();
     editor->deleteLater();
 
-    list->fillSelections();
+    buttonImportIcon->setEnabled(list->fillSelections()==0 ? false:true);
     list->setFocus();
 }
+
+void ChannelEditor::channelIconImport(void)
+{
+    int val = MythPopupBox::show2ButtonPopup(gContext->GetMainWindow(),
+                                             "",
+                                             tr("Channel Icon Import"),
+                                             tr("Import all icons.."),
+                                             tr("Rescan for missing icons.."),
+                                             0);
+
+    if (val == 0)
+        emit iconImportFull();
+    else if (val == 1)
+        emit iconImportRescan();
+    else
+        list->setFocus();
+}
+
+void ChannelEditor::iconImportFull(void)
+{
+    ImportIconsWizard box(false);
+    if (!box.initialise())
+       return;
+    box.exec();
+}
+
+void ChannelEditor::iconImportRescan(void)
+{
+    ImportIconsWizard box(true);
+    if (!box.initialise())
+       return;
+    box.exec();
+}
Index: libs/libmythtv/libmythtv.pro
===================================================================
--- libs/libmythtv/libmythtv.pro	(revision 13310)
+++ libs/libmythtv/libmythtv.pro	(working copy)
@@ -148,6 +148,7 @@
 HEADERS += playgroup.h              progdetails.h
 HEADERS += channeleditor.h          channelsettings.h
 HEADERS += previewgenerator.h       transporteditor.h
+HEADERS += importicons.h
 
 SOURCES += programinfo.cpp          proglist.cpp
 SOURCES += storagegroup.cpp
@@ -170,6 +171,7 @@
 SOURCES += progdetails.cpp
 SOURCES += channeleditor.cpp        channelsettings.cpp
 SOURCES += previewgenerator.cpp     transporteditor.cpp
+SOURCES += importicons.cpp
 
 # DiSEqC
 HEADERS += diseqc.h                 diseqcsettings.h
Index: libs/libmythtv/channeleditor.h
===================================================================
--- libs/libmythtv/channeleditor.h	(revision 13310)
+++ libs/libmythtv/channeleditor.h	(working copy)
@@ -22,14 +22,18 @@
     void edit();
     void edit(int);
     void scan(void);
-    void transportEditor();
-    void deleteChannels();
+    void transportEditor(void);
+    void channelIconImport(void);
+    void deleteChannels(void);
+    void iconImportFull(void);
+    void iconImportRescan(void);
 
 private:
     int                 id;
     SourceSetting      *source;
     ChannelListSetting *list;
     TransButtonSetting *buttonScan;
+    TransButtonSetting *buttonImportIcon;
     TransButtonSetting *buttonTransportEditor;
 };
 
@@ -68,7 +72,7 @@
     bool getHideMode() { return currentHideMode; };
 
 public slots:
-    void fillSelections(void);
+    int fillSelections(void);
     void setSortMode(const QString& sort) {
         if (currentSortMode != sort) {
             currentSortMode = sort;
Index: libs/libmyth/settings.h
===================================================================
--- libs/libmyth/settings.h	(revision 13310)
+++ libs/libmyth/settings.h	(working copy)
@@ -658,6 +658,13 @@
                        special_value_text), TransientStorage() { }
 };
 
+class MPUBLIC TransListBoxSetting :
+    public ListBoxSetting, public TransientStorage
+{
+  public:
+    TransListBoxSetting() : ListBoxSetting(this), TransientStorage() { }
+};
+
 ///////////////////////////////////////////////////////////////////////////////
 
 class MPUBLIC HostSlider : public SliderSetting, public HostDBStorage
