Index: libs/libmythtv/dvbsignalmonitor.h
===================================================================
--- libs/libmythtv/dvbsignalmonitor.h	(revision 12360)
+++ libs/libmythtv/dvbsignalmonitor.h	(working copy)
@@ -26,6 +26,7 @@
     bool UpdateFiltersFromStreamData(void);
 
     virtual void SetRotorTarget(float target);
+    bool isRotorMoving(void) const;
 
   public slots:
     void deleteLater(void);
Index: libs/libmythtv/scanwizardhelpers.h
===================================================================
--- libs/libmythtv/scanwizardhelpers.h	(revision 12360)
+++ libs/libmythtv/scanwizardhelpers.h	(working copy)
@@ -66,6 +66,7 @@
   protected:
     ScanSignalMeter   *ss;
     ScanSignalMeter   *sn;
+    ScanSignalMeter   *pos;
     ScanSignalMeter   *progressBar;
 
     TransLabelSetting *sl;
@@ -77,6 +78,7 @@
     void exec(ScanWizardScanner *parent);
     void signalToNoise(int value);
     void signalStrength(int value);
+    void rotorPosition(int value);
     void dvbLock(int value);
     void status(const QString& value);
 
@@ -96,6 +98,7 @@
         DVBSNR,
         DVBSignalStrength,
         DVBLock,
+        DVBRotorPosition,
     };
 
     ScannerEvent(TYPE t) : QCustomEvent(t + QEvent::User) { ; }
Index: libs/libmythtv/scanwizardscanner.cpp
===================================================================
--- libs/libmythtv/scanwizardscanner.cpp	(revision 12360)
+++ libs/libmythtv/scanwizardscanner.cpp	(working copy)
@@ -172,6 +172,9 @@
         case ScannerEvent::DVBSignalStrength:
             popupProgress->signalStrength(scanEvent->intValue());
             break;
+        case ScannerEvent::DVBRotorPosition:
+            popupProgress->rotorPosition(scanEvent->intValue());
+            break;
     }
 }
 
@@ -229,6 +232,11 @@
     dvbSignalStrength(val.GetNormalizedValue(0, 65535));
 }
 
+void ScanWizardScanner::dvbRotorPosition(const SignalMonitorValue &val)
+{
+    dvbRotorPosition(val.GetNormalizedValue(0, 65535));
+}
+
 void ScanWizardScanner::dvbLock(int locked)
 {
     ScannerEvent* e = new ScannerEvent(ScannerEvent::DVBLock);
@@ -250,6 +258,13 @@
     QApplication::postEvent(this, e);
 }
 
+void ScanWizardScanner::dvbRotorPosition(int i)
+{
+    ScannerEvent* e = new ScannerEvent(ScannerEvent::DVBRotorPosition);
+    e->intValue(i);
+    QApplication::postEvent(this, e);
+}
+
 // full scan of existing transports broken
 // existing transport scan broken
 void ScanWizardScanner::Scan(
@@ -557,6 +572,10 @@
                 SIGNAL(StatusSignalStrength(const SignalMonitorValue&)),
                 this,
                 SLOT(  dvbSignalStrength(   const SignalMonitorValue&)));
+        connect(monitor,
+                SIGNAL(StatusRotorPosition(const SignalMonitorValue&)),
+                this,
+                SLOT(  dvbRotorPosition(   const SignalMonitorValue&)));
     }
 
 #ifdef USING_DVB
Index: libs/libmythtv/siscan.cpp
===================================================================
--- libs/libmythtv/siscan.cpp	(revision 12360)
+++ libs/libmythtv/siscan.cpp	(working copy)
@@ -623,6 +623,15 @@
     // ok the tables haven't timed out, but have we hit the signal timeout?
     if (timer.elapsed() > (int)(*current).timeoutTune)
     {
+#ifdef USING_DVB
+        // If the rotor is still moving, reset the timer and keep waiting
+        if (GetDVBSignalMonitor() && GetDVBSignalMonitor()->isRotorMoving())
+        {
+            timer.restart();
+            return false;
+        }
+#endif // USING_DVB
+
         // If we don't have a signal in timeoutTune msec, continue..
         SignalMonitor *sm = GetSignalMonitor();
         if (NULL == sm || sm->HasSignalLock())
Index: libs/libmythtv/scanwizardscanner.h
===================================================================
--- libs/libmythtv/scanwizardscanner.h	(revision 12360)
+++ libs/libmythtv/scanwizardscanner.h	(working copy)
@@ -92,6 +92,7 @@
     void dvbLock(const SignalMonitorValue&);
     void dvbSNR(const SignalMonitorValue&);
     void dvbSignalStrength(const SignalMonitorValue&);
+    void dvbRotorPosition(const SignalMonitorValue&);
 
     void serviceScanPctComplete(int pct);
 
@@ -106,6 +107,7 @@
     void dvbLock(int);
     void dvbSNR(int);
     void dvbSignalStrength(int);
+    void dvbRotorPosition(int);
     void customEvent(QCustomEvent *e);
 
   public:
Index: libs/libmythtv/dvbsignalmonitor.cpp
===================================================================
--- libs/libmythtv/dvbsignalmonitor.cpp	(revision 12360)
+++ libs/libmythtv/dvbsignalmonitor.cpp	(working copy)
@@ -130,6 +130,12 @@
     rotorPosition.SetThreshold((int)roundf(100 * target));
 }
 
+bool DVBSignalMonitor::isRotorMoving(void) const
+{
+    QMutexLocker locker(&statusLock);
+    return HasFlags(kDVBSigMon_WaitForPos) && !rotorPosition.IsGood();
+}
+
 /** \fn DVBSignalMonitor::GetDVBCardNum(void) const
  *  \brief Returns DVB Card Number from DVBChannel.
  */
Index: libs/libmythtv/scanwizardhelpers.cpp
===================================================================
--- libs/libmythtv/scanwizardhelpers.cpp	(revision 12360)
+++ libs/libmythtv/scanwizardhelpers.cpp	(working copy)
@@ -105,8 +105,10 @@
     {
         addChild(ss = new ScanSignalMeter(65535));
         addChild(sn = new ScanSignalMeter(65535));
+        addChild(pos = new ScanSignalMeter(65535));
         ss->setLabel(tr("Signal Strength"));
         sn->setLabel(tr("Signal/Noise"));
+        pos->setLabel(tr("Rotor Movement"));
     }
 
     TransButtonSetting *cancel = new TransButtonSetting();
@@ -136,6 +138,11 @@
     ss->setValue(value);
 }
 
+void ScanProgressPopup::rotorPosition(int value)
+{
+    pos->setValue(value);
+}
+
 void ScanProgressPopup::dvbLock(int value)
 {
     sl->setValue((value) ? tr("Locked") : tr("No Lock"));
