Index: playbackbox.cpp
===================================================================
--- playbackbox.cpp	(revision 7718)
+++ playbackbox.cpp	(working copy)
@@ -45,7 +45,8 @@
     waiting_for_playlists_timer = NULL;
     playlist_tree = NULL;
     playlist_popup = NULL;    
-    
+    progress = NULL;
+
     lcd_volume_visible = false; 
     isplaying = false;
     tree_is_done = false;
@@ -800,6 +801,13 @@
     if (all_playlists->doneLoading() &&
         all_music->doneLoading())
     {
+        if (progress)
+        {
+            progress->Close();
+            delete progress;
+            progress = NULL;
+            progress_type = kProgressNone;
+        }
         if (tree_is_done)
         {
             if (scan_for_cd)
@@ -829,6 +837,25 @@
     else
     {
         // Visual Feedback ...
+
+        if (!all_music->doneLoading())
+        {
+            if (all_music->count() < 250) return;
+
+            if (!progress)
+            {
+                progress = new MythProgressDialog(
+                    QObject::tr("Loading Music"), all_music->count());
+                progress_type = kProgressMusic;
+            }
+            progress->setProgress(all_music->countLoaded());
+        } else if (progress_type == kProgressMusic)
+        {
+            progress->Close();
+            delete progress;
+            progress = NULL;
+            progress_type = kProgressNone;
+        }
     }
 }
 
Index: metadata.cpp
===================================================================
--- metadata.cpp	(revision 7718)
+++ metadata.cpp	(working copy)
@@ -681,6 +681,8 @@
 {
     startdir = a_startdir;
     done_loading = false;
+
+    numPcs = numLoaded = 0;
     
     cd_title = QObject::tr("CD -- none");
 
@@ -778,6 +780,9 @@
     query.exec(aquery);
 
     all_music.clear();
+
+    numPcs = query.size() * 2;
+    numLoaded = 0;
     
     if (query.isActive() && query.size() > 0)
     {
@@ -819,13 +824,14 @@
                 lastplayMin  = min(temp->LastPlay(),  lastplayMin);
                 lastplayMax  = max(temp->LastPlay(),  lastplayMax);
             }
+            numLoaded++;
         }
     }
     else
     {
         cerr << "metadata.o: You don't seem to have any tracks. That's ok with me if it's ok with you." << endl; 
     }    
- 
+
     //  To find this data quickly, build a map
     //  (a map to pointers!)
     
@@ -906,6 +913,7 @@
         if (inserter->isVisible())
             intoTree(inserter);
         ++an_iterator;
+        numLoaded++;
     }
 }
 
@@ -273,6 +288,8 @@
     QString     getLabel(int an_id, bool *error_flag);
     Metadata*   getMetadata(int an_id);
     bool        updateMetadata(int an_id, Metadata *the_track);
+    int         count() { return numPcs; }
+    int         countLoaded() { return numLoaded; }
     void        save();
     bool        startLoading(void);
     void        resync();   //  After a CD rip, for example
@@ -302,8 +319,8 @@
     MetadataPtrList     all_music;
     MusicNodePtrList    top_nodes;
     MusicNode           *root_node;
-    
-    
+    int                 numPcs;
+    int                 numLoaded;
 
     //  NB: While a QMap is VALUE BASED the
     //  values we are copying here are pointers,
Index: playbackbox.h
===================================================================
--- playbackbox.h	(revision 7718)
+++ playbackbox.h	(working copy)
@@ -207,6 +207,8 @@
     UITextButtonType      *pledit_button;
     UITextButtonType      *vis_button;
 
+    MythProgressDialog    *progress;
+    enum { kProgressNone, kProgressMusic } progress_type;
 };
 
 
