Index: mythplugins/mythweather/mythweather/weatherSetup.cpp
===================================================================
--- mythplugins/mythweather/mythweather/weatherSetup.cpp	(revision 21298)
+++ mythplugins/mythweather/mythweather/weatherSetup.cpp	(working copy)
@@ -110,6 +110,14 @@
         m_sourceManager->findScriptsDB();
         m_sourceManager->setupSources();
     }
+    
+    // Deallocate the ScreenListInfo objects created for the active screen list.
+    for (int i=0; i < m_activeList->GetCount(); i++)
+    {
+        MythUIButtonListItem *item = m_activeList->GetItemAt(i);
+        if (item->GetData().isValid())
+            delete qVariantValue<ScreenListInfo *>(item->GetData());
+    }
 }
 
 bool ScreenSetup::Create()
@@ -264,13 +272,13 @@
 
     QStringList types;
 
-    ScreenListMap m_ScreenListMap = loadScreens();
+    ScreenListMap screenListMap = loadScreens();
 
-    ScreenListMap::const_iterator i = m_ScreenListMap.constBegin();
-    while (i != m_ScreenListMap.constEnd())
+    ScreenListMap::const_iterator i = screenListMap.constBegin();
+    while (i != screenListMap.constEnd())
     {
 
-        si = m_ScreenListMap[i.key()];
+        si = screenListMap[i.key()];
         types = si->dataTypes;
         si->units = ENG_UNITS;
 
@@ -329,20 +337,21 @@
         QString src = db.value(4).toString();
         uint draworder = db.value(5).toUInt();
 
-        si = m_ScreenListMap[name];
-        // Clear types first as we will re-insert the values from the database
-        si->types.clear();
-        types = si->dataTypes;
+        types = screenListMap[name]->dataTypes;
 
         TypeListInfo ti(dataitem, location,
                         m_sourceManager->getSourceByName(src));
 
         if (active_screens.find(draworder) == active_screens.end())
         {
+            si = new ScreenListInfo(*screenListMap[name]);
+            // Clear types first as we will re-insert the values from the database
+        		si->types.clear();
+        		si->units = units;
+            
             MythUIButtonListItem *item =
                 new MythUIButtonListItem(m_activeList, name);
-            si->units = units;
-
+            
             // Only insert types meant for this screen
             for (QStringList::Iterator type_i = types.begin();
                  type_i != types.end(); ++type_i )
Index: mythplugins/mythweather/mythweather/weatherUtils.h
===================================================================
--- mythplugins/mythweather/mythweather/weatherUtils.h	(revision 21298)
+++ mythplugins/mythweather/mythweather/weatherUtils.h	(working copy)
@@ -51,6 +51,15 @@
 class ScreenListInfo
 {
   public:
+  	ScreenListInfo() {}
+    ScreenListInfo(const ScreenListInfo &info)
+        : name(info.name), types(info.types), dataTypes(info.dataTypes),
+        helptxt(info.helptxt), sources(info.sources), units(info.units),
+        hasUnits(info.hasUnits), multiLoc(info.multiLoc)
+    {
+        types.detach();
+    }
+        
     TypeListInfo GetCurrentTypeList(void) const;
 
   public:
