Index: TvEngine3/TVLibrary/SetupTv/Sections/Epg.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Sections/Epg.cs	(revision 27130)
+++ TvEngine3/TVLibrary/SetupTv/Sections/Epg.cs	(working copy)
@@ -46,6 +46,7 @@
 
       checkBoxAlwaysFillHoles.Checked = (layer.GetSetting("generalEPGAlwaysFillHoles", "no").Value == "yes");
       checkBoxAlwaysUpdate.Checked = (layer.GetSetting("generalEPGAlwaysReplace", "no").Value == "yes");
+      checkboxSameTransponder.Checked = (layer.GetSetting("generalGrapOnlyForSameTransponder", "no").Value == "yes");
 
       checkBoxEnableEPGWhileIdle.Checked = (layer.GetSetting("idleEPGGrabberEnabled", "yes").Value == "yes");
       checkBoxEnableCRCCheck.Checked = !DebugSettings.DisableCRCCheck;
@@ -72,6 +73,10 @@
       s.Value = checkBoxAlwaysUpdate.Checked ? "yes" : "no";
       s.Persist();
 
+      s = layer.GetSetting("generalGrapOnlyForSameTransponder", "no");
+      s.Value = checkboxSameTransponder.Checked ? "yes" : "no";
+      s.Persist();
+
       DebugSettings.DisableCRCCheck = !checkBoxEnableCRCCheck.Checked;
 
       s = layer.GetSetting("idleEPGGrabberEnabled", "yes");
Index: TvEngine3/TVLibrary/SetupTv/Sections/Epg.Designer.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Sections/Epg.Designer.cs	(revision 27130)
+++ TvEngine3/TVLibrary/SetupTv/Sections/Epg.Designer.cs	(working copy)
@@ -54,13 +54,13 @@
       this.label22 = new System.Windows.Forms.Label();
       this.label23 = new System.Windows.Forms.Label();
       this.groupBox7 = new System.Windows.Forms.GroupBox();
+      this.checkboxSameTransponder = new MediaPortal.UserInterface.Controls.MPCheckBox();
       this.checkBoxAlwaysUpdate = new MediaPortal.UserInterface.Controls.MPCheckBox();
       this.checkBoxAlwaysFillHoles = new MediaPortal.UserInterface.Controls.MPCheckBox();
       this.tabPage1 = new System.Windows.Forms.TabPage();
       this.tabControlEpg = new System.Windows.Forms.TabControl();
       this.checkBoxEnableCRCCheck = new MediaPortal.UserInterface.Controls.MPCheckBox();
       this.label1 = new System.Windows.Forms.Label();
-      this.label2 = new System.Windows.Forms.Label();
       this.groupBox9.SuspendLayout();
       this.groupBox2.SuspendLayout();
       ((System.ComponentModel.ISupportInitialize)(this.numericUpDownEpgRefresh)).BeginInit();
@@ -370,7 +370,7 @@
       // 
       this.groupBox7.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
-      this.groupBox7.Controls.Add(this.label2);
+      this.groupBox7.Controls.Add(this.checkboxSameTransponder);
       this.groupBox7.Controls.Add(this.label1);
       this.groupBox7.Controls.Add(this.checkBoxEnableCRCCheck);
       this.groupBox7.Controls.Add(this.checkBoxAlwaysUpdate);
@@ -382,6 +382,28 @@
       this.groupBox7.TabStop = false;
       this.groupBox7.Text = "General";
       // 
+      // checkboxSameTransponder
+      // 
+      this.checkboxSameTransponder.AutoSize = true;
+      this.checkboxSameTransponder.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
+      this.checkboxSameTransponder.Location = new System.Drawing.Point(11, 65);
+      this.checkboxSameTransponder.Name = "checkboxSameTransponder";
+      this.checkboxSameTransponder.Size = new System.Drawing.Size(257, 17);
+      this.checkboxSameTransponder.TabIndex = 14;
+      this.checkboxSameTransponder.Text = "Grap EPG only for channels on same transponder";
+      this.checkboxSameTransponder.UseVisualStyleBackColor = true;
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.label1.Location = new System.Drawing.Point(132, 39);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(321, 26);
+      this.label1.TabIndex = 13;
+      this.label1.Text = "(This will increase stability of EPG grabbing.If your provider doesn\'t \r\nbroadcas" +
+          "t CRC checksums, you have to disable it)";
+      // 
       // checkBoxAlwaysUpdate
       // 
       this.checkBoxAlwaysUpdate.AutoSize = true;
@@ -441,26 +463,6 @@
       this.checkBoxEnableCRCCheck.Text = "Enable CRC check";
       this.checkBoxEnableCRCCheck.UseVisualStyleBackColor = true;
       // 
-      // label1
-      // 
-      this.label1.AutoSize = true;
-      this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-      this.label1.Location = new System.Drawing.Point(132, 44);
-      this.label1.Name = "label1";
-      this.label1.Size = new System.Drawing.Size(211, 13);
-      this.label1.TabIndex = 13;
-      this.label1.Text = "(This will increase stability of EPG grabbing)";
-      // 
-      // label2
-      // 
-      this.label2.AutoSize = true;
-      this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-      this.label2.Location = new System.Drawing.Point(29, 65);
-      this.label2.Name = "label2";
-      this.label2.Size = new System.Drawing.Size(352, 13);
-      this.label2.TabIndex = 14;
-      this.label2.Text = "If your provider doesn\'t broadcast CRC checksums, you have to disable it";
-      // 
       // Epg
       // 
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -517,9 +519,9 @@
     private System.Windows.Forms.Button btnTest;
     private System.Windows.Forms.TabPage tabPage1;
     private System.Windows.Forms.TabControl tabControlEpg;
-    private System.Windows.Forms.Label label2;
     private System.Windows.Forms.Label label1;
     private MediaPortal.UserInterface.Controls.MPCheckBox checkBoxEnableCRCCheck;
+    private MediaPortal.UserInterface.Controls.MPCheckBox checkboxSameTransponder;
 
   }
 }
Index: TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/ATSC/TvCardATSC.cs
===================================================================
--- TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/ATSC/TvCardATSC.cs	(revision 27130)
+++ TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/ATSC/TvCardATSC.cs	(working copy)
@@ -24,6 +24,8 @@
 using TvLibrary.Interfaces;
 using TvLibrary.Channels;
 using TvLibrary.Implementations.Helper;
+using TvDatabase;
+using TvLibrary.Epg;
 
 namespace TvLibrary.Implementations.DVB
 {
@@ -249,6 +251,36 @@
     #region epg & scanning
 
     /// <summary>
+    /// checks if a received EPGChannel should be filtered from the resultlist
+    /// </summary>
+    /// <value></value>
+    protected override bool FilterOutEPGChannel(EpgChannel epgChannel)
+    {
+      TvBusinessLayer layer = new TvBusinessLayer();
+      if (layer.GetSetting("generalGrapOnlyForSameTransponder", "no").Value == "yes")
+      {
+        DVBBaseChannel chan = epgChannel.Channel as DVBBaseChannel;
+        Channel dbchannel = layer.GetChannelByTuningDetail(chan.NetworkId, chan.TransportId, chan.ServiceId);
+        ATSCChannel atscchannel = new ATSCChannel();
+        if (dbchannel == null)
+        {
+          return false;
+        }
+        foreach (TuningDetail detail in dbchannel.ReferringTuningDetail())
+        {
+          if (detail.ChannelType == 1)
+          {
+            atscchannel.MajorChannel = detail.MajorChannel;
+            atscchannel.MinorChannel = detail.MinorChannel;
+            atscchannel.PhysicalChannel = detail.ChannelNumber;
+          }
+        }
+        return this.CurrentChannel.IsDifferentTransponder(atscchannel);
+      }
+      else
+        return false;
+    }
+    /// <summary>
     /// returns the ITVScanning interface used for scanning channels
     /// </summary>
     /// <value></value>
Index: TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/DVBC/TvCardDVBC.cs
===================================================================
--- TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/DVBC/TvCardDVBC.cs	(revision 27130)
+++ TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/DVBC/TvCardDVBC.cs	(working copy)
@@ -24,6 +24,8 @@
 using TvLibrary.Interfaces;
 using TvLibrary.Channels;
 using TvLibrary.Implementations.Helper;
+using TvDatabase;
+using TvLibrary.Epg;
 
 namespace TvLibrary.Implementations.DVB
 {
@@ -242,6 +244,37 @@
     #region epg & scanning
 
     /// <summary>
+    /// checks if a received EPGChannel should be filtered from the resultlist
+    /// </summary>
+    /// <value></value>
+    protected override bool FilterOutEPGChannel(EpgChannel epgChannel)
+    {
+      TvBusinessLayer layer = new TvBusinessLayer();
+      if (layer.GetSetting("generalGrapOnlyForSameTransponder", "no").Value == "yes")
+      {
+        DVBBaseChannel chan = epgChannel.Channel as DVBBaseChannel;
+        Channel dbchannel = layer.GetChannelByTuningDetail(chan.NetworkId, chan.TransportId, chan.ServiceId);
+        DVBCChannel dvbcchannel = new DVBCChannel();
+        if (dbchannel == null)
+        {
+          return false;
+        }
+        foreach (TuningDetail detail in dbchannel.ReferringTuningDetail())
+        {
+          if (detail.ChannelType == 2)
+          {
+            dvbcchannel.Frequency = detail.Frequency;
+            dvbcchannel.ModulationType = (ModulationType)detail.Modulation;
+            dvbcchannel.SymbolRate = detail.Symbolrate;
+          }
+        }
+        return this.CurrentChannel.IsDifferentTransponder(dvbcchannel);
+      }
+      else
+        return false;
+    }
+
+    /// <summary>
     /// returns the ITVScanning interface used for scanning channels
     /// </summary>
     /// <value></value>
Index: TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/DVBS/TvCardDVBS.cs
===================================================================
--- TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/DVBS/TvCardDVBS.cs	(revision 27130)
+++ TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/DVBS/TvCardDVBS.cs	(working copy)
@@ -24,6 +24,8 @@
 using TvLibrary.Interfaces;
 using TvLibrary.Channels;
 using TvLibrary.Implementations.Helper;
+using TvDatabase;
+using TvLibrary.Epg;
 
 namespace TvLibrary.Implementations.DVB
 {
@@ -325,7 +327,44 @@
 
     #region epg & scanning
 
+        
     /// <summary>
+    /// checks if a received EPGChannel should be filtered from the resultlist
+    /// </summary>
+    /// <value></value>
+    protected override bool FilterOutEPGChannel(EpgChannel epgChannel)
+    {
+      TvBusinessLayer layer = new TvBusinessLayer();
+      if (layer.GetSetting("generalGrapOnlyForSameTransponder", "no").Value == "yes")
+      {
+        DVBBaseChannel chan = epgChannel.Channel as DVBBaseChannel;
+        Channel dbchannel = layer.GetChannelByTuningDetail(chan.NetworkId, chan.TransportId, chan.ServiceId);
+        DVBSChannel dvbschannel = new DVBSChannel();
+        if (dbchannel == null)
+        {
+          return false;
+        }
+        foreach (TuningDetail detail in dbchannel.ReferringTuningDetail())
+        {
+          if (detail.ChannelType == 3)
+          {
+            dvbschannel.Frequency = detail.Frequency;
+            dvbschannel.Polarisation = (Polarisation)detail.Polarisation;
+            dvbschannel.ModulationType = (ModulationType)detail.Modulation;
+            dvbschannel.SatelliteIndex = detail.SatIndex;
+            dvbschannel.InnerFecRate = (BinaryConvolutionCodeRate)detail.InnerFecRate;
+            dvbschannel.Pilot = (Pilot)detail.Pilot;
+            dvbschannel.Rolloff = (RollOff)detail.RollOff;
+            dvbschannel.DisEqc = (DisEqcType)detail.Diseqc;
+          }
+        }
+        return this.CurrentChannel.IsDifferentTransponder(dvbschannel);
+      }
+      else
+        return false;  
+    }
+ 
+    /// <summary>
     /// returns the ITVScanning interface used for scanning channels
     /// </summary>
     /// <value></value>
Index: TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/DVBT/TvCardDVBT.cs
===================================================================
--- TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/DVBT/TvCardDVBT.cs	(revision 27130)
+++ TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/DVBT/TvCardDVBT.cs	(working copy)
@@ -24,6 +24,8 @@
 using TvLibrary.Interfaces;
 using TvLibrary.Channels;
 using TvLibrary.Implementations.Helper;
+using TvDatabase;
+using TvLibrary.Epg;
 
 namespace TvLibrary.Implementations.DVB
 {
@@ -227,6 +229,36 @@
     #region epg & scanning
 
     /// <summary>
+    /// checks if a received EPGChannel should be filtered from the resultlist
+    /// </summary>
+    /// <value></value>
+    protected override bool FilterOutEPGChannel(EpgChannel epgChannel)
+    {
+      TvBusinessLayer layer = new TvBusinessLayer();
+      if (layer.GetSetting("generalGrapOnlyForSameTransponder", "no").Value == "yes")
+      {
+        DVBBaseChannel chan = epgChannel.Channel as DVBBaseChannel;
+        Channel dbchannel = layer.GetChannelByTuningDetail(chan.NetworkId, chan.TransportId, chan.ServiceId);
+        DVBTChannel dvbtchannel = new DVBTChannel();
+        if (dbchannel == null)
+        {
+          return false;
+        }
+        foreach (TuningDetail detail in dbchannel.ReferringTuningDetail())
+        {
+          if (detail.ChannelType == 4)
+          {
+            dvbtchannel.Frequency = detail.Frequency;
+            dvbtchannel.BandWidth = detail.Bandwidth;
+          }
+        }
+        return this.CurrentChannel.IsDifferentTransponder(dvbtchannel);
+      }
+      else
+        return false;
+
+    }
+    /// <summary>
     /// returns the ITVScanning interface used for scanning channels
     /// </summary>
     /// <value></value>
Index: TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/TvCardDvbBase.cs
===================================================================
--- TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/TvCardDvbBase.cs	(revision 27130)
+++ TvEngine3/TVLibrary/TVLibrary/Implementations/DVB/Graphs/TvCardDvbBase.cs	(working copy)
@@ -2034,6 +2034,10 @@
 
     #region epg & scanning
 
+    protected virtual bool FilterOutEPGChannel(EpgChannel epgChannel)
+    {
+      return false;
+    }
     /// <summary>
     /// Start grabbing the epg
     /// </summary>
@@ -2166,7 +2170,12 @@
                 dvbChan.Name = channelName;
                 epgChannel = new EpgChannel();
                 epgChannel.Channel = dvbChan;
-                epgChannels.Add(epgChannel);
+                //Log.Log.Epg("dvb: start filtering channel NID {0} TID {1} SID{2}", dvbChan.NetworkId, dvbChan.TransportId, dvbChan.ServiceId);
+                if (this.FilterOutEPGChannel(epgChannel) == false)
+                {
+                  //Log.Log.Epg("dvb: Not Filtered channel NID {0} TID {1} SID{2}", dvbChan.NetworkId, dvbChan.TransportId, dvbChan.ServiceId);
+                  epgChannels.Add(epgChannel);
+                }              
               }
               uint d1 = datestart;
               uint m = timestart & 0xff;
@@ -2325,7 +2334,12 @@
               if (epgChannel.Programs.Count > 0)
               {
                 epgChannel.Sort();
-                epgChannels.Add(epgChannel);
+                //Log.Log.Epg("dvb: start filtering channel NID {0} TID {1} SID{2}", chan.NetworkId, chan.TransportId, chan.ServiceId);
+                if (this.FilterOutEPGChannel(epgChannel) == false)
+                {
+                  //Log.Log.Epg("dvb: Not Filtered channel NID {0} TID {1} SID{2}", chan.NetworkId, chan.TransportId, chan.ServiceId);
+                  epgChannels.Add(epgChannel);
+                }              
               }
             } //for (uint x = 0; x < channelCount; ++x)
           }
