 .../Implementations/DVB/Graphs/DVBS/TvCardDVBS.cs  | 18 +++++++-
 .../Implementations/DVB/Graphs/TvCardDvbBase.cs    | 52 ++++++++++++++++++++++
 2 files changed, 68 insertions(+), 2 deletions(-)

diff --git a/TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/DVBS/TvCardDVBS.cs b/TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/DVBS/TvCardDVBS.cs
index 2c594be..335f107 100644
--- a/TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/DVBS/TvCardDVBS.cs
+++ b/TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/DVBS/TvCardDVBS.cs
@@ -327,7 +327,14 @@ namespace TvLibrary.Implementations.DVB
         if (_conditionalAccess != null)
         {
           //int hr2 = ((IMediaControl)_graphBuilder).Pause();
-          _diseqCsucceded = _conditionalAccess.SendDiseqcCommand(_parameters, dvbsChannel);
+
+          /// BlackgoldBDA cards 
+          /// need that  DiSEqC commands are sent *after* the graph
+          /// is running rather than before.
+          if (!base._isBlackgoldBDA)
+          {
+            _diseqCsucceded = _conditionalAccess.SendDiseqcCommand(_parameters, dvbsChannel);
+          }
           //hr2 = ((IMediaControl)_graphBuilder).Run();
 
           //move diseqc motor to correct satellite
@@ -388,7 +395,14 @@ namespace TvLibrary.Implementations.DVB
         if (_conditionalAccess != null)
         {
           //int hr2 = ((IMediaControl)_graphBuilder).Pause();
-          _diseqCsucceded = _conditionalAccess.SendDiseqcCommand(_parameters, dvbsChannel);
+
+          /// BlackgoldBDA cards 
+          /// need that  DiSEqC commands are sent *after* the graph
+          /// is running rather than before.
+          if (!base._isBlackgoldBDA)
+          {
+            _diseqCsucceded = _conditionalAccess.SendDiseqcCommand(_parameters, dvbsChannel);
+          }
           //hr2 = ((IMediaControl)_graphBuilder).Run();
 
           //move diseqc motor to correct satellite
diff --git a/TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/TvCardDvbBase.cs b/TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/TvCardDvbBase.cs
index d48b8f8..b267650 100644
--- a/TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/TvCardDvbBase.cs
+++ b/TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/TvCardDvbBase.cs
@@ -267,6 +267,19 @@ namespace TvLibrary.Implementations.DVB
 
     protected bool _cancelTune;
 
+    /// BlackgoldBDA cards 
+    /// need that  DiSEqC commands are sent *after* the graph
+    /// is running rather than before.
+    private static List<String> _BlackgoldBDAhardwareIDs = new List<String>() {
+    "@device:pnp:\\\\?\\pci#ven_1131&dev_7162&subsys_010111bd"    // Pinnacle PCTV 7010ix
+    , "@device:pnp:\\\\?\\pci#ven_1131&dev_7160&subsys_010411bd"  // Pinnacle PCTV 710ix
+    , "@device:pnp:\\\\?\\pci#ven_1131&dev_7162&subsys_354014c7"  // Blackgold BGT3540
+    , "@device:pnp:\\\\?\\pci#ven_1131&dev_7231&subsys_359514c7"  // Blackgold BGT3595
+    , "@device:pnp:\\\\?\\pci#ven_1131&dev_7231&subsys_363014c7"  // Blackgold BGT3630
+    };
+
+    protected bool _isBlackgoldBDA;
+
     #endregion
 
     #region ctor
@@ -286,6 +299,19 @@ namespace TvLibrary.Implementations.DVB
       _supportsSubChannels = true;
       Guid networkProviderClsId = new Guid("{D7D42E5C-EB36-4aad-933B-B4C419429C98}");
       useInternalNetworkProvider = FilterGraphTools.IsThisComObjectInstalled(networkProviderClsId);
+      /// BlackgoldBDA cards 
+      /// need that  DiSEqC commands are sent *after* the graph
+      /// is running rather than before.
+      _isBlackgoldBDA = false;
+      foreach (String hwid in _BlackgoldBDAhardwareIDs)
+      {
+        if (_devicePath.StartsWith(hwid))
+        {
+          _isBlackgoldBDA = true;
+          Log.Log.WriteFile("Blackgold like BDA card detected => SendDiseqcCommand will be sent after graph build for DVBS channels");
+          break;
+        }
+      }
     }
 
     #endregion
@@ -870,6 +896,19 @@ namespace TvLibrary.Implementations.DVB
       {
         if (graphRunning)
         {
+          /// BlackgoldBDA cards 
+          /// need that  DiSEqC commands are sent *after* the graph
+          /// is running rather than before.
+          if (_conditionalAccess != null)
+          {                 
+            if (_previousChannel is DVBSChannel)
+            { 
+              if (_isBlackgoldBDA)
+              {
+                  _conditionalAccess.SendDiseqcCommand(_parameters, _previousChannel as DVBSChannel);
+              }
+            }
+          }
           LockInOnSignal();          
         }
         _mapSubChannels[subChannel].AfterTuneEvent -= new BaseSubChannel.OnAfterTuneDelegate(OnAfterTuneEvent);
@@ -888,6 +927,19 @@ namespace TvLibrary.Implementations.DVB
         Log.Log.WriteFile("dvb:  RunGraph returns: 0x{0:X}", hr);
         throw new TvException("Unable to start graph");
       }
+      /// BlackgoldBDA cards 
+      /// need that  DiSEqC commands are sent *after* the graph
+      /// is running rather than before.
+      if (_conditionalAccess != null)
+      {
+        if (_previousChannel is DVBSChannel)
+        {
+          if (_isBlackgoldBDA)
+          {
+            _conditionalAccess.SendDiseqcCommand(_parameters, _previousChannel as DVBSChannel);
+          }
+        }
+      }
 
       if (!ShouldWaitForSignal())
       {
