diff -Naur mythtv-0.26-20120823-g6566c3c-old/mythtv/libs/libmythtv/diseqc.cpp mythtv-0.26-20120823-g6566c3c-new/mythtv/libs/libmythtv/diseqc.cpp
--- mythtv-0.26-20120823-g6566c3c-old/mythtv/libs/libmythtv/diseqc.cpp	2012-08-24 17:26:59.262895655 +0200
+++ mythtv-0.26-20120823-g6566c3c-new/mythtv/libs/libmythtv/diseqc.cpp	2012-08-24 17:27:17.026795873 +0200
@@ -87,6 +87,8 @@
 
 #define LOC      QString("DiSEqCDevTree: ")
 
+bool diseqc_bus_already_reset = false;
+
 QString DiSEqCDevDevice::TableToString(uint type, const TypeTable *table)
 {
     for (; !table->name.isEmpty(); table++)
@@ -709,7 +711,7 @@
  *  \param hard_reset If true, the bus will be power cycled.
  *  \return True if successful.
  */
-bool DiSEqCDevTree::ResetDiseqc(bool hard_reset)
+bool DiSEqCDevTree::ResetDiseqc(bool hard_reset, bool is_SCR)
 {
     Reset();
 
@@ -721,20 +723,31 @@
 
         SetVoltage(SEC_VOLTAGE_OFF);
         usleep(DISEQC_POWER_OFF_WAIT);
+        diseqc_bus_already_reset = false;
     }
 
-    // make sure the bus is powered
-    SetVoltage(SEC_VOLTAGE_18);
-    usleep(DISEQC_POWER_ON_WAIT);
-    // some DiSEqC devices need more time. see #8465
-    usleep(DISEQC_POWER_ON_WAIT);
-
-    // issue a global reset command
-    LOG(VB_CHANNEL, LOG_INFO, LOC + "Resetting DiSEqC Bus");
-    if (!SendCommand(DISEQC_ADR_ALL, DISEQC_CMD_RESET))
+    if (!diseqc_bus_already_reset || !is_SCR)
     {
-        LOG(VB_GENERAL, LOG_ERR, LOC + "DiSEqC reset failed" + ENO);
-        return false;
+        // make sure the bus is powered
+        SetVoltage(SEC_VOLTAGE_18);
+        usleep(DISEQC_POWER_ON_WAIT);
+        // some DiSEqC devices need more time. see #8465
+        usleep(DISEQC_POWER_ON_WAIT);
+
+        // issue a global reset command
+        LOG(VB_CHANNEL, LOG_INFO, LOC + "Resetting DiSEqC Bus");
+        if (!SendCommand(DISEQC_ADR_ALL, DISEQC_CMD_RESET))
+        {
+            LOG(VB_GENERAL, LOG_ERR, LOC + "DiSEqC reset failed" + ENO);
+            return false;
+        }
+        
+        if (is_SCR)
+            diseqc_bus_already_reset = true;
+    }
+    else
+    {
+        LOG(VB_CHANNEL, LOG_INFO, LOC + "Skiping reset: already done for this SCR bus");
     }
 
     usleep(DISEQC_LONG_WAIT);
@@ -742,12 +755,12 @@
     return true;
 }
 
-void DiSEqCDevTree::Open(int fd_frontend)
+void DiSEqCDevTree::Open(int fd_frontend, bool is_SCR)
 {
     m_fd_frontend = fd_frontend;
 
     // issue reset command
-    ResetDiseqc(false /* do a soft reset */);
+    ResetDiseqc(false, is_SCR);
 }
 
 bool DiSEqCDevTree::SetVoltage(uint voltage)
diff -Naur mythtv-0.26-20120823-g6566c3c-old/mythtv/libs/libmythtv/diseqc.h mythtv-0.26-20120823-g6566c3c-new/mythtv/libs/libmythtv/diseqc.h
--- mythtv-0.26-20120823-g6566c3c-old/mythtv/libs/libmythtv/diseqc.h	2012-08-24 17:26:59.216227496 +0200
+++ mythtv-0.26-20120823-g6566c3c-new/mythtv/libs/libmythtv/diseqc.h	2012-08-24 17:27:17.026795873 +0200
@@ -96,10 +96,10 @@
     bool SendCommand(uint adr, uint cmd, uint repeats = 0,
                      uint data_len = 0, unsigned char *data = NULL);
 
-    bool ResetDiseqc(bool hard_reset);
+    bool ResetDiseqc(bool hard_reset, bool is_SCR);
 
     // frontend fd
-    void Open(int fd_frontend);
+    void Open(int fd_frontend, bool is_SCR);
     void Close(void) { m_fd_frontend = -1; }
     int  GetFD(void) const { return m_fd_frontend; }
 
diff -Naur mythtv-0.26-20120823-g6566c3c-old/mythtv/libs/libmythtv/dvbchannel.cpp mythtv-0.26-20120823-g6566c3c-new/mythtv/libs/libmythtv/dvbchannel.cpp
--- mythtv-0.26-20120823-g6566c3c-old/mythtv/libs/libmythtv/dvbchannel.cpp	2012-08-24 17:27:10.903267124 +0200
+++ mythtv-0.26-20120823-g6566c3c-new/mythtv/libs/libmythtv/dvbchannel.cpp	2012-08-24 17:27:17.030129315 +0200
@@ -267,9 +267,23 @@
     // Turn on the power to the LNB
     if (tunerType.IsDiSEqCSupported())
     {
+
         diseqc_tree = diseqc_dev.FindTree(GetCardID());
         if (diseqc_tree)
-            diseqc_tree->Open(fd_frontend);
+        {
+            bool is_SCR = false;
+
+            DiSEqCDevSCR *scr = diseqc_tree->FindSCR(diseqc_settings);
+            if (scr)
+            {
+                is_SCR = true;
+                LOG(VB_CHANNEL, LOG_INFO, LOC + "Requested DVB channel is on SCR system");
+            }
+            else
+                LOG(VB_CHANNEL, LOG_INFO, LOC + "Requested DVB channel is on non-SCR system");
+
+            diseqc_tree->Open(fd_frontend, is_SCR);
+        }
     }
 
     dvbcam->Start();
