Index: libs/libmythtv/dvbsignalmonitor.cpp
===================================================================
--- libs/libmythtv/dvbsignalmonitor.cpp	(revision 10424)
+++ libs/libmythtv/dvbsignalmonitor.cpp	(working copy)
@@ -509,32 +509,37 @@
     }
 
     // Rotor position
-    const DiSEqCDevRotor *rotor = dvbchan->GetRotor();
-    if (rotor && rotor->IsPositionKnown())
+    if (HasFlags(kDVBSigMon_WaitForPos))
     {
-        double progress = rotor->GetProgress();
-        QMutexLocker locker(&statusLock);
-        if (progress >= 1.0 && !rotorPosition.IsGood())
+        const DiSEqCDevRotor *rotor = dvbchan->GetRotor();
+        if (rotor)
         {
-            DBG_SM("UpdateValues", "Retuning for rotor completion");
-            dvbchan->Retune();
+            bool was_moving, is_moving;
+            {
+                QMutexLocker locker(&statusLock);
+                was_moving = rotorPosition.GetValue() < 100;
+                rotorPosition.SetValue((int)truncf(rotor->GetProgress() * 100));
+                is_moving  = rotorPosition.GetValue() < 100;
+            }
+            
+            // Retune if move completes normally
+            if (was_moving && !is_moving)
+            {
+                DBG_SM("UpdateValues", "Retuning for rotor completion");
+                dvbchan->Retune();
 
-            rotorPosition.SetValue(100);
+                // No need to wait for SDT anymore
+                RemoveFlags(kDTVSigMon_WaitForSDT);
+            }
         }
-        else if (progress < 1.0)
+        
+        // If no rotor is present, pretend the movement is completed
+        else 
         {
-            if (rotorPosition.IsGood())
-                DBG_SM("UpdateValues", "Rotor is moving");
-
             QMutexLocker locker(&statusLock);
-            rotorPosition.SetValue((int)truncf(progress * 100));
+            rotorPosition.SetValue(100);
         }
     }
-    else if (!rotor && HasFlags(kDVBSigMon_WaitForPos))
-    {
-        QMutexLocker locker(&statusLock);
-        rotorPosition.SetValue(100);
-    }
 
     // Periodically retune if card can't recover
     if (!dvbchan->IsSelfRetuning() && !is_locked &&
