Index: libs/libmythtv/tv_rec.cpp
===================================================================
--- libs/libmythtv/tv_rec.cpp	(revision 7433)
+++ libs/libmythtv/tv_rec.cpp	(working copy)
@@ -185,6 +185,9 @@
         channel = new DBox2Channel(this, &dboxOpt, cardid);
         channel->Open();
         InitChannel(genOpt.defaultinput, startchannel);
+        connect(GetDBox2Channel(), SIGNAL(ChannelChanged()),
+                this, SLOT(DBox2ChannelChanged()));
+
         init_run = true;
 #endif
     }
@@ -2835,7 +2838,8 @@
     }
 
     // Clear the RingBuffer reset flag, in case we wait for a reset below
-    ClearFlags(kFlagRingBufferReset);
+    // Also clear DBox2ChannelChanged flag, in case tuning proc waits on DBox2
+    ClearFlags(kFlagRingBufferReset | kFlagDBox2ChannelChanged);
 
     // Actually add the tuning request to the queue, and
     // then wait for it to start tuning
@@ -3290,8 +3294,19 @@
         ClearFlags(kFlagWaitingForRecPause);
         if (ringBuffer)
             ringBuffer->Reset();
+        TuningFrequency(lastTuningRequest);
+
+        // BEGIN UGLY Hack! DBOX should use signal monitor class
+        // instead of the ChannelChanged signal.
+        while (GetDBox2Channel() && !HasFlags(kFlagDBox2ChannelChanged))
+        {
+            stateChangeLock.unlock();
+            triggerEventLoop.wait(1000 /* ms */);
+            stateChangeLock.lock();
+        }
+        // END UGLY Hack
+
         SetFlags(kFlagRingBufferReset);
-        TuningFrequency(lastTuningRequest);
     }
 
     if (HasFlags(kFlagWaitingForSignal))
Index: libs/libmythtv/tv_rec.h
===================================================================
--- libs/libmythtv/tv_rec.h	(revision 7433)
+++ libs/libmythtv/tv_rec.h	(working copy)
@@ -253,6 +253,7 @@
         { QMutexLocker lock(&stateChangeLock); triggerEventLoop.wakeAll(); }
 
   public slots:
+    void DBox2ChannelChanged()  { SetFlags(kFlagDBox2ChannelChanged); }
     void SignalMonitorAllGood() { triggerEventLoop.wakeAll(); }
     void SetPMTObject(const PMTObject*) 
         { QMutexLocker lock(&stateChangeLock); triggerEventLoop.wakeAll(); }
@@ -448,12 +449,13 @@
     static const uint kFlagSIParserRunning      = 0x02000000;
     static const uint kFlagEITScannerRunning    = 0x04000000;
 
-    static const uint kFlagDummyRecorderRunning = 0x10000000;
-    static const uint kFlagRecorderRunning      = 0x20000000;
-    static const uint kFlagAnyRecRunning        = 0x30000000;
-    static const uint kFlagAnyRunning           = 0x3F000000;
+    static const uint kFlagDummyRecorderRunning = 0x08000000;
+    static const uint kFlagRecorderRunning      = 0x10000000;
+    static const uint kFlagAnyRecRunning        = 0x18000000;
+    static const uint kFlagAnyRunning           = 0x1F000000;
 
     // Tuning state
+    static const uint kFlagDBox2ChannelChanged  = 0x20000000;
     static const uint kFlagRingBufferReset      = 0x40000000;
     static const uint kFlagDetect               = 0x80000000;
 };
