Index: mythplugins/mythweather/mythweather/sourceManager.h
===================================================================
--- mythplugins/mythweather/mythweather/sourceManager.h	(revision 14458)
+++ mythplugins/mythweather/mythweather/sourceManager.h	(working copy)
@@ -40,6 +40,7 @@
     QPtrList<WeatherSource> m_sources; //in-use scripts
     QIntDict<WeatherSource> m_sourcemap;
     units_t m_units;
+    void recurseDirs(QDir dir);
 };
 
 #endif
Index: mythplugins/mythweather/mythweather/weatherSource.cpp
===================================================================
--- mythplugins/mythweather/mythweather/weatherSource.cpp	(revision 14458)
+++ mythplugins/mythweather/mythweather/weatherSource.cpp	(working copy)
@@ -386,6 +386,7 @@
     QStringList locs;
 
     m_proc->clearArguments();
+    m_proc->setWorkingDirectory(m_info->file->dir(true));
     m_proc->addArgument(m_info->file->absFilePath());
     m_proc->addArgument("-l");
     m_proc->addArgument(str);
@@ -421,6 +422,7 @@
     VERBOSE(VB_GENERAL, "Starting update of " + m_info->name);
     m_data.clear();
     m_proc->clearArguments();
+    m_proc->setWorkingDirectory(m_info->file->dir(true));
     m_proc->addArgument("nice");
     m_proc->addArgument(m_info->file->absFilePath());
     m_proc->addArgument("-u");
Index: mythplugins/mythweather/mythweather/sourceManager.cpp
===================================================================
--- mythplugins/mythweather/mythweather/sourceManager.cpp	(revision 14458)
+++ mythplugins/mythweather/mythweather/sourceManager.cpp	(working copy)
@@ -71,10 +71,9 @@
 {
     QString path =  gContext->GetShareDir() + "mythweather/scripts/";
     QDir dir(path);
-    dir.setFilter(QDir::Executable | QDir::Files);
+    dir.setFilter(QDir::Executable | QDir::Files | QDir::Dirs);
     // this kinda goes against idea of keeping ui separate, but oh well
-    MythProgressDialog bsydlg(tr("Searching for scripts"), dir.count());
-    int progress = 0;
+    MythProgressDialog bsydlg(tr("Searching for scripts"), 1);
 
     if (!dir.exists())
     {
@@ -82,26 +81,10 @@
         return false;
     }
 
-    const QFileInfoList *files = dir.entryInfoList();
-    if (!files)
-        return false;
+    bsydlg.setProgress(0);
+    recurseDirs(dir);
+    bsydlg.setProgress(1);
 
-    QFileInfoListIterator itr(*files);
-    QFileInfo *file;
-    while ((file = itr.current()))
-    {
-        ++itr;
-        if (file->isExecutable())
-        {
-            ScriptInfo *info = WeatherSource::probeScript(*file);
-            if (info)
-            {
-                m_scripts.append(info);
-                VERBOSE(VB_GENERAL, "found script " + file->absFilePath());
-            }
-        }
-        bsydlg.setProgress(++progress);
-    }
     // run through and see if any scripts have been deleted
     MSqlQuery db(MSqlQuery::InitCon());
     QString query = "SELECT sourceid, path FROM weathersourcesettings "
@@ -307,3 +290,42 @@
     WeatherSource *ws = m_sourcemap[screen->getId()];
     ws->disconnectScreen(screen);
 }
+
+// Recurses dir for script files
+void SourceManager::recurseDirs( QDir dir )
+{
+    if (!dir.exists()) 
+        return;
+
+    dir.setFilter(QDir::Executable | QDir::Files | QDir::Dirs);
+    const QFileInfoList *files = dir.entryInfoList();
+    if (!files)
+        return;
+
+    QFileInfoListIterator itr(*files);
+    QFileInfo *file;
+
+    while ((file = itr.current())) 
+    {
+        ++itr;
+        if (file->isDir()) 
+        {
+            if (file->fileName() == QString("..")) continue;
+            if (file->fileName() == QString("."))  continue;
+            QDir recurseTo(file->filePath());
+            recurseDirs(recurseTo);
+        }
+
+        if (file->isExecutable() && !(file->isDir())) 
+        {
+            ScriptInfo *info = WeatherSource::probeScript(*file);
+            if (info)
+            {
+                m_scripts.append(info);
+                VERBOSE(VB_GENERAL, "found script " + file->absFilePath());
+            }
+        }
+    }
+
+    return;    
+}
