Index: trunk/BNC/CHANGELOG.md
===================================================================
--- trunk/BNC/CHANGELOG.md	(revision 10450)
+++ trunk/BNC/CHANGELOG.md	(revision 10451)
@@ -1,3 +1,7 @@
 # Changelog
+## 2.13.2 (2014-0?-??)
+- ADDED: The possibility to to exclude satellites or satellite system for individual ACs within the combination.
+         Also the possibility to ignore orbit corrections from an indiviul AC that differ by more than 'Maximal Orb Displacement' meters
+         from the average of all orbit corrections per satellite.
 
 ## 2.13.1 (2024-04-18)
Index: trunk/BNC/src/bnchelp.html
===================================================================
--- trunk/BNC/src/bnchelp.html	(revision 10450)
+++ trunk/BNC/src/bnchelp.html	(revision 10451)
@@ -220,6 +220,8 @@
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.14.1.1 <a href=#combiadd>Add Row, Delete</a><br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.14.1.2 <a href=#combimethod>Method</a><br>
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.14.1.3 <a href=#combimax>Maximal Residuum</a><br>
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.14.1.4 <a href=#combismpl>Sampling</a><br>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.14.1.3 <a href=#combimaxres>Maximal Clock Residuum</a><br>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.14.1.4 <a href=#combimaxdisp>Maximal Orbit Displacement</a><br>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.14.1.5 <a href=#combismpl>Sampling</a><br>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.14.1.6 <a href=#combisatsys>Satellite Systems</a><br>
 &nbsp; &nbsp; &nbsp; 2.15 <a href=#upclk><b>Upload Corrections</b></a><br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.15.1 <a href=#upadd>Add, Delete Row</a><br>
@@ -4492,7 +4494,27 @@
 <p>
 Hit the 'Add Row' button, double click on the 'Mountpoint' field, enter a Broadcast Correction mountpoint from the 'Streams' section
-and hit Enter. Then double click on the 'AC Name' field to enter your choice of an abbreviation for the Analysis Center (AC) providing
-the Antenna Phase Center (APC) related correction stream. Finally, double click on the 'Weight' field to enter a weight to be applied
-to this stream in the combination.</p>
+and hit Enter.</p>
+<p>
+Then double click on the 'AC Name' field to enter your choice of an abbreviation for the Analysis Center (AC) providing
+the Antenna Phase Center (APC) related correction stream.</p>
+<p>
+After that, double click on the 'Weight Factor' field to enter a weight to be applied to this stream in the combination.
+A Factor greater than 1 will enlarge the sigma of the clock pseudo-observations and with it down-weight its contribution.</p>
+<p>
+Finally, double click on the 'Exclude Satellites' field and specify satellites or satellite systems, to exclude them for an individual AC.
+An entry 'G04,G31,R' means to excludes GPS satellites PRN 4 and 31 as well as all GLONASS satellites from one individual AC.
+Default is an empty option field, meaning that no satellite is excluded from this individual AC.</p>
+<p>
+Note that the orbit information in the resulting combination stream is just copied from one of the incoming streams.
+The stream used for providing the orbits may vary over time: if the orbit providing stream has an outage
+then BNC switches to the next remaining stream for getting hold of the orbit information.</p>
+<p>
+The combination process requires Broadcast Ephemeris.
+Besides orbit and clock correction streams BNC should therefore pull a stream carrying Broadcast Ephemeris in the form of RTCM Version 3 messages.</p>
+<p>
+It is possible to specify only one Broadcast Ephemeris Correction stream in the 'Combine Corrections' table.
+Instead of combining corrections BNC will then add the corrections to the Broadcast Ephemeris with the possibility
+to save final orbit and clock results in SP3 and/or Clock RINEX format.
+</p>
 <p>
 The sequence of entries in the 'Combine Corrections' table is not of importance.
@@ -4521,22 +4543,31 @@
 Select a clock combination method. Available options are 'Kalman Filter' and 'Single-Epoch'.
 It is suggested to use the 'Kalman Filter' approach in case the combined stream of Broadcast Corrections
-is intended for Precise Point Positioning.
-</p>
-
-<p><h4 id="combimax">2.14.1.3 Maximal Residuum - mandatory if 'Combine Corrections' table is populated</h4></p>
+is intended for Precise Point Positioning.</p>
+
+<p><h4 id="combimaxres">2.14.1.3 Maximal Clock Residuum - mandatory if 'Combine Corrections' table is populated</h4></p>
 <p>
 BNC combines all incoming clocks according to specified weights. Individual clock estimates that differ by more than
-'Maximal Residuum' meters from the average of all clocks will be ignored.
+'Maximal Clk Residuum' meters from the average of all clocks will be ignored.
 It is suggested to specify a value of about 0.2 m for the Kalman Filter combination approach and
-a value of about 3.0 meters for the Single-Epoch combination approach.
-</p>
-<p>
-Default is a 'Maximal Residuum' of 999.0 meters.</p>
-
-<p><h4 id="combismpl">2.14.1.4 Sampling - mandatory if 'Combine Corrections' table is populated</h4></p>
+a value of about 3.0 meters for the Single-Epoch combination approach.</p>
+<p>
+Default is a 'Maximal Clk Residuum' of 999.0 meters.</p>
+
+<p><h4 id="combimaxdisp">2.14.1.4 Maximal Orbit Displacement - mandatory if 'Combine Corrections' table is populated</h4></p>
+<p>
+BNC builds mean values for all incoming orbit corrections per satellite.
+Individual orbit corrections that differ by more than 'Maximal Orb Displacement' meters from the average
+of all orbit corrections per satellite will be ignored. It is suggested to specify a value of about 0.5 m.</p>
+<p>
+Default is a 'Maximal Orb Displacement' of 2.0 meters.</p>
+
+<p><h4 id="combismpl">2.14.1.5 Sampling - mandatory if 'Combine Corrections' table is populated</h4></p>
 <p>
 Specify a combination sampling interval. Orbit and clock corrections will be produced following that interval.
-A value of 10 sec may be an appropriate choice.
-</p>
+A value of 10 sec may be an appropriate choice.</p>
+
+<p><h4 id="combisatsys">2.14.1.6 Satellite Systems - mandatory if 'Combine Corrections' table is populated</h4></p>
+<p>
+Specify for each satellite system whether the clock corrections shall be combined.</p>
 
 <p><h4 id="upclk">2.15 Upload Corrections</h4></p>
@@ -6129,17 +6160,18 @@
 
 Combine Corrections Panel keys:
-   cmbStreams      {Correction streams table [character string, semicolon separated list, each element in quotation marks, example:
-                   "SSRA00ESA0 ESA 1.0;SSRA00BKG BKG 1.0"]}
-   cmbMethodFilter {Combination approach [character string: Single-Epoch|Filter]}
-   cmbBsxFile      {SINEX Bias file, full path [char string]}
-   cmbMaxres       {Clock outlier residuum threshold in meters [floating-point number]
-   cmbSampl        {Clock sampling rate [integer number of seconds: 0|10|20|30|40|50|60]}
-   cmbGps          {GPS correction usage [integer number: 0=no,2=yes]}
-   cmbGlo          {GLONASS correction usage [integer number: 0=no,2=yes]}
-   cmbGal          {Galileo correction usage [integer number: 0=no,2=yes]}
-   cmbBds          {Beidou correction usage [integer number: 0=no,2=yes]}
-   cmbQzss         {QZSS correction usage [integer number: 0=no,2=yes]}
-   cmbSbas         {SBAS correction usage [integer number: 0=no,2=yes]}
-   cmbIrnss        {IRNSS correction usage [integer number: 0=no,2=yes]}
+   cmbStreams         {Correction streams table [character string, semicolon separated list, each element in quotation marks, example:
+                      "SSRA00ESA0 ESA 1.0;SSRA00BKG BKG 1.0"]}
+   cmbMethodFilter    {Combination approach [character string: Single-Epoch|Filter]}
+   cmbBsxFile         {SINEX Bias file, full path [char string]}
+   cmbMaxres          {Clock outlier residuum threshold in meters [floating-point number]
+   cmbMaxdisplacement {Maximal orbit displacement from the mean of corrections for a satellite [floating-point number]
+   cmbSampl           {Clock sampling rate [integer number of seconds: 0|10|20|30|40|50|60]}
+   cmbGps             {GPS correction usage [integer number: 0=no,2=yes]}
+   cmbGlo             {GLONASS correction usage [integer number: 0=no,2=yes]}
+   cmbGal             {Galileo correction usage [integer number: 0=no,2=yes]}
+   cmbBds             {Beidou correction usage [integer number: 0=no,2=yes]}
+   cmbQzss            {QZSS correction usage [integer number: 0=no,2=yes]}
+   cmbSbas            {SBAS correction usage [integer number: 0=no,2=yes]}
+   cmbIrnss           {IRNSS correction usage [integer number: 0=no,2=yes]}
 
 Upload Corrections Panel keys:
Index: trunk/BNC/src/bncmain.cpp
===================================================================
--- trunk/BNC/src/bncmain.cpp	(revision 10450)
+++ trunk/BNC/src/bncmain.cpp	(revision 10451)
@@ -281,17 +281,18 @@
       "\n"
       "Combine Corrections Panel keys:\n"
-      "   cmbStreams      {Correction streams table [character string, semicolon separated list, each element in quotation marks, example:\n"
-      "                   \"SSRA00ESA0 ESA 1.0;SSRA00BKG BKG 1.0\"]}\n"
-      "   cmbMethodFilter {Combination approach [character string: Single-Epoch|Filter]}\n"
-      "   cmbBsxFile      {SINEX Bias file, full path [char string]}\n"
-      "   cmbMaxres       {Clock outlier residuum threshold in meters [floating-point number]\n"
-      "   cmbSampl        {Clock sampling rate [integer number of seconds: 0|10|20|30|40|50|60]}\n"
-      "   cmbGps          {GPS correction usage [integer number: 0=no,2=yes]}\n"
-      "   cmbGlo          {GLONASS correction usage [integer number: 0=no,2=yes]}\n"
-      "   cmbGal          {Galileo correction usage [integer number: 0=no,2=yes]}\n"
-      "   cmbBds          {Beidou correction usage [integer number: 0=no,2=yes]}\n"
-      "   cmbQzss         {QZSS correction usage [integer number: 0=no,2=yes]}\n"
-      "   cmbSbas         {SBAS correction usage [integer number: 0=no,2=yes]}\n"
-      "   cmbIrnss        {IRNSS correction usage [integer number: 0=no,2=yes]}\n"
+      "   cmbStreams         {Correction streams table [character string, semicolon separated list, each element in quotation marks, example:\n"
+      "                       \"SSRA00ESA0 ESA 1.0;SSRA00BKG BKG 1.0\"]}\n"
+      "   cmbMethodFilter    {Combination approach [character string: Single-Epoch|Filter]}\n"
+      "   cmbBsxFile         {SINEX Bias file, full path [char string]}\n"
+      "   cmbMaxres          {Clock outlier residuum threshold in meters [floating-point number]}\n"
+      "   cmbMaxdisplacement {Maximal orbit displacement from the mean of corrections for a satellite [floating-point number]}\n"
+      "   cmbSampl           {Clock sampling rate [integer number of seconds: 0|10|20|30|40|50|60]}\n"
+      "   cmbGps             {GPS correction usage [integer number: 0=no,2=yes]}\n"
+      "   cmbGlo             {GLONASS correction usage [integer number: 0=no,2=yes]}\n"
+      "   cmbGal             {Galileo correction usage [integer number: 0=no,2=yes]}\n"
+      "   cmbBds             {Beidou correction usage [integer number: 0=no,2=yes]}\n"
+      "   cmbQzss            {QZSS correction usage [integer number: 0=no,2=yes]}\n"
+      "   cmbSbas            {SBAS correction usage [integer number: 0=no,2=yes]}\n"
+      "   cmbIrnss           {IRNSS correction usage [integer number: 0=no,2=yes]}\n"
       "\n"
       "Upload Corrections Panel keys:\n"
Index: trunk/BNC/src/bncsettings.cpp
===================================================================
--- trunk/BNC/src/bncsettings.cpp	(revision 10450)
+++ trunk/BNC/src/bncsettings.cpp	(revision 10451)
@@ -171,4 +171,5 @@
     setValue_p("cmbMethod",           "");
     setValue_p("cmbMaxres",           "");
+    setValue_p("cmbMaxdisplacement",  "");
     setValue_p("cmbSampl",          "10");
     setValue_p("cmbGps",             "2");
Index: trunk/BNC/src/bncwindow.cpp
===================================================================
--- trunk/BNC/src/bncwindow.cpp	(revision 10450)
+++ trunk/BNC/src/bncwindow.cpp	(revision 10451)
@@ -474,12 +474,13 @@
   // Combine Corrections
   // -------------------
-  _cmbTable = new QTableWidget(0,3);
-  _cmbTable->setHorizontalHeaderLabels(QString("Mountpoint, AC Name, Weight Factor").split(","));
+  _cmbTable = new QTableWidget(0,4);
+  _cmbTable->setHorizontalHeaderLabels(QString("Mountpoint, AC Name, Weight Factor, Exclude Satellites").split(","));
   _cmbTable->setSelectionMode(QAbstractItemView::ExtendedSelection);
   _cmbTable->setSelectionBehavior(QAbstractItemView::SelectRows);
-  _cmbTable->setMaximumWidth(30*ww);
+  _cmbTable->setMaximumWidth(40*ww);
   _cmbTable->horizontalHeader()->resizeSection(0,10*ww);
-  _cmbTable->horizontalHeader()->resizeSection(1,8*ww);
-  _cmbTable->horizontalHeader()->resizeSection(2,8*ww);
+  _cmbTable->horizontalHeader()->resizeSection(1,6*ww);
+  _cmbTable->horizontalHeader()->resizeSection(2,9*ww);
+  _cmbTable->horizontalHeader()->resizeSection(3,9*ww);
 #if QT_VERSION < 0x050000
   _cmbTable->horizontalHeader()->setResizeMode(QHeaderView::Interactive);
@@ -491,4 +492,5 @@
 
   _cmbMaxresLineEdit = new QLineEdit(settings.value("cmbMaxres").toString());
+  _cmbMaxdisplacementLineEdit = new QLineEdit(settings.value("cmbMaxdisplacements").toString());
 
   _cmbSamplSpinBox = new QSpinBox;
@@ -517,4 +519,5 @@
     enableWidget(true, _cmbMethodComboBox);
     enableWidget(true, _cmbMaxresLineEdit);
+    enableWidget(true, _cmbMaxdisplacementLineEdit);
     enableWidget(true, _cmbSamplSpinBox);
   }
@@ -522,4 +525,5 @@
     enableWidget(false, _cmbMethodComboBox);
     enableWidget(false, _cmbMaxresLineEdit);
+    enableWidget(false, _cmbMaxdisplacementLineEdit);
     enableWidget(false, _cmbSamplSpinBox);
   }
@@ -1283,32 +1287,41 @@
 
   populateCmbTable();
-  cmbLayout->addWidget(_cmbTable,                                                0, 0, 8, 6);
-  cmbLayout->addWidget(new QLabel(" Combine Broadcast Correction streams.<br>"), 1, 6, 1, 10);
-  cmbLayout->addWidget(addCmbRowButton,                                          2,  6);
-  cmbLayout->addWidget(delCmbRowButton,                                          2,  7);
-  cmbLayout->addWidget(new QLabel("Method"),                                     3,  6, Qt::AlignLeft);
-  cmbLayout->addWidget(_cmbMethodComboBox,                                       3,  7);
-  cmbLayout->addWidget(new QLabel("BSX File"),                                   4,  6, Qt::AlignLeft);
-  cmbLayout->addWidget(_cmbBsxFile,                                              4,  7, Qt::AlignRight);
-  cmbLayout->addWidget(new QLabel("Max Residual"),                               5,  6, Qt::AlignLeft);
-  cmbLayout->addWidget(_cmbMaxresLineEdit,                                       5,  7, Qt::AlignRight);
-  cmbLayout->addWidget(new QLabel("Sampling"),                                   6,  6, Qt::AlignLeft);
-  cmbLayout->addWidget(_cmbSamplSpinBox,                                         6,  7, Qt::AlignRight);
-  cmbLayout->addWidget(new QLabel("GNSS"),                                       7,  6, Qt::AlignLeft);
-  cmbLayout->addWidget(new QLabel("GPS (C1W/C2W)"),                                7,  7);
-  cmbLayout->addWidget(_cmbGpsCheckBox,                                          7,  8);
-  cmbLayout->addWidget(new QLabel("GLONASS (C1P/C2P)"),                          7,  9);
-  cmbLayout->addWidget(_cmbGloCheckBox,                                          7, 10);
-  cmbLayout->addWidget(new QLabel("Galileo (C1C/C5Q)"),                          7, 11);
-  cmbLayout->addWidget(_cmbGalCheckBox,                                          7, 12);
-  cmbLayout->addWidget(new QLabel("Beidou (C2I/C6I)"),                           7, 13);
-  cmbLayout->addWidget(_cmbBdsCheckBox,                                          7, 14);
-  cmbLayout->addWidget(new QLabel("QZSS (C1C/C2L)"),                             8,  7);
-  cmbLayout->addWidget(_cmbQzssCheckBox,                                         8,  8);
-  cmbLayout->addWidget(new QLabel("SBAS (C1C/C5Q)"),                             8,  9);
-  cmbLayout->addWidget(_cmbSbasCheckBox,                                         8, 10);
-  cmbLayout->addWidget(new QLabel("IRNSS"),                                      8, 11);
-  cmbLayout->addWidget(_cmbIrnssCheckBox,                                        8, 12);
-  cmbLayout->setRowStretch(8, 999);
+  cmbLayout->addWidget(_cmbTable,                                                0, 0, 8, 10);
+  cmbLayout->addWidget(new QLabel(" Combine Broadcast Correction streams.<br>"), 0, 10, 1, 10);
+  cmbLayout->addWidget(addCmbRowButton,                                          1, 10);
+  cmbLayout->addWidget(delCmbRowButton,                                          1, 11);
+  cmbLayout->addWidget(new QLabel("Method"),                                     2, 10, Qt::AlignLeft);
+  cmbLayout->addWidget(_cmbMethodComboBox,                                       2, 11);
+  cmbLayout->addWidget(new QLabel("BSX File"),                                   3, 10, Qt::AlignLeft);
+  cmbLayout->addWidget(_cmbBsxFile,                                              3, 11, Qt::AlignRight);
+  cmbLayout->addWidget(new QLabel("Max Clk Residual"),                           4, 10, Qt::AlignLeft);
+  cmbLayout->addWidget(_cmbMaxresLineEdit,                                       4, 11, Qt::AlignRight);
+  cmbLayout->addWidget(new QLabel("Max Orb Displacement"),                       5, 10, Qt::AlignLeft);
+  cmbLayout->addWidget(_cmbMaxdisplacementLineEdit,                              5, 11, Qt::AlignRight);
+  cmbLayout->addWidget(new QLabel("Sampling"),                                   6, 10, Qt::AlignLeft);
+  cmbLayout->addWidget(_cmbSamplSpinBox,                                         6, 11, Qt::AlignRight);
+
+  cmbLayout->addWidget(new QLabel("GNSS"),                                       0, 14, Qt::AlignLeft);
+  cmbLayout->addWidget(new QLabel("GPS (C1W/C2W)"),                              1, 14);
+  cmbLayout->addWidget(_cmbGpsCheckBox,                                          1, 15);
+
+  cmbLayout->addWidget(new QLabel("GLONASS (C1P/C2P)"),                          2, 14);
+  cmbLayout->addWidget(_cmbGloCheckBox,                                          2, 15);
+
+  cmbLayout->addWidget(new QLabel("Galileo (C1C/C5Q)"),                          3, 14);
+  cmbLayout->addWidget(_cmbGalCheckBox,                                          3, 15);
+
+  cmbLayout->addWidget(new QLabel("Beidou (C2I/C6I)"),                           4, 14);
+  cmbLayout->addWidget(_cmbBdsCheckBox,                                          4, 15);
+
+  cmbLayout->addWidget(new QLabel("QZSS (C1C/C2L)"),                             5, 14);
+  cmbLayout->addWidget(_cmbQzssCheckBox,                                         5, 15);
+
+  cmbLayout->addWidget(new QLabel("SBAS (C1C/C5Q)"),                             6, 14);
+  cmbLayout->addWidget(_cmbSbasCheckBox,                                         6, 15);
+
+  cmbLayout->addWidget(new QLabel("IRNSS"),                                      7, 14);
+  cmbLayout->addWidget(_cmbIrnssCheckBox,                                        7, 15);
+  cmbLayout->setRowStretch(9, 999);
 
   connect(addCmbRowButton, SIGNAL(clicked()), this, SLOT(slotAddCmbRow()));
@@ -1583,9 +1596,10 @@
   // WhatsThis, Combine Corrections
   // ------------------------------
-  _cmbTable->setWhatsThis(tr("<p>BNC allows to process several orbit and clock correction streams in real-time to produce, encode, upload and save a combination of correctors coming from different providers. To add a line to the 'Combine Corrections' table hit the 'Add Row' button, double click on the 'Mountpoint' field to specify a Broadcast Ephemeris Correction mountpoint from the 'Streams' section below and hit Enter. Then double click on the 'AC Name' field to enter your choice of an abbreviation for the Analysis Center (AC) providing the stream. Finally, double click on the 'Weight Factor' field to enter a weight factor to be applied for this stream in the combination. A Factor greater than 1 will enlarge the sigma of the clock pseudo-observations and with it down-weight its contribution.</p><p>Note that the orbit information in the resulting combination stream is just copied from one of the incoming streams. The stream used for providing the orbits may vary over time: if the orbit providing stream has an outage then BNC switches to the next remaining stream for getting hold of the orbit information.</p><p>The combination process requires Broadcast Ephemeris. Besides orbit and clock correction streams BNC should therefore pull a stream carrying Broadcast Ephemeris in the form of RTCM Version 3 messages.</p><p>It is possible to specify only one Broadcast Ephemeris Correction stream in the 'Combine Corrections' table. Instead of combining corrections BNC will then add the corrections to the Broadcast Ephemeris with the possibility to save final orbit and clock results in SP3 and/or Clock RINEX format. <i>[key: cmbStreams]</i></p>"));
+  _cmbTable->setWhatsThis(tr("<p>BNC allows to process several orbit and clock correction streams in real-time to produce, encode, upload and save a combination of correctors coming from different providers. To add a line to the 'Combine Corrections' table hit the 'Add Row' button, double click on the 'Mountpoint' field to specify a Broadcast Ephemeris Correction mountpoint from the 'Streams' section below and hit Enter. Then double click on the 'AC Name' field to enter your choice of an abbreviation for the Analysis Center (AC) providing the stream. Double click on the 'Weight Factor' field to enter a weight factor to be applied for this stream in the combination. A Factor greater than 1 will enlarge the sigma of the clock pseudo-observations and with it down-weight its contribution. Finally, double click on the 'Exclude Satellites' field and specify satellites, to exclude them for an individual AC. An entry 'G04,G31,R' means to excludes GPS satellites PRN 4 and 31 as well as all GLONASS satellites from one individual AC. Default is an empty option field, meaning that no satellite is excluded from this individual AC.</p><p>Note that the orbit information in the resulting combination stream is just copied from one of the incoming streams. The stream used for providing the orbits may vary over time: if the orbit providing stream has an outage then BNC switches to the next remaining stream for getting hold of the orbit information.</p><p>The combination process requires Broadcast Ephemeris. Besides orbit and clock correction streams BNC should therefore pull a stream carrying Broadcast Ephemeris in the form of RTCM Version 3 messages.</p><p>It is possible to specify only one Broadcast Ephemeris Correction stream in the 'Combine Corrections' table. Instead of combining corrections BNC will then add the corrections to the Broadcast Ephemeris with the possibility to save final orbit and clock results in SP3 and/or Clock RINEX format. <i>[key: cmbStreams]</i></p>"));
   addCmbRowButton->setWhatsThis(tr("<p>Hit 'Add Row' button to add another line to the 'Combine Corrections' table.</p>"));
   delCmbRowButton->setWhatsThis(tr("<p>Hit 'Delete' button to delete the highlighted line(s) from the 'Combine Corrections' table.</p>"));
   _cmbMethodComboBox->setWhatsThis(tr("<p>Select a clock combination approach. Options are 'Single-Epoch' and Kalman 'Filter'.</p><p>It is suggested to use the Kalman filter approach for the purpose of Precise Point Positioning. <i>[key: cmbMethod]</i></p>"));
-  _cmbMaxresLineEdit->setWhatsThis(tr("<p>BNC combines all incoming clocks according to specified weights. Individual clock estimates that differ by more than 'Maximal residuum' meters from the average of all clocks will be ignored.<p></p>It is suggested to specify a value of about 0.2 m for the Kalman filter combination approach and a value of about 3.0 meters for the Single-Epoch combination approach.</p><p>Default is a value of '999.0'. <i>[key: cmbMaxres]</i></p>"));
+  _cmbMaxresLineEdit->setWhatsThis(tr("<p>BNC combines all incoming clocks according to specified weights. Individual clock estimates that differ by more than 'Maximal Clk Residuum' meters from the average of all clocks will be ignored.<p></p>It is suggested to specify a value of about 0.2 m for the Kalman filter combination approach and a value of about 3.0 meters for the Single-Epoch combination approach.</p><p>Default is a value of '999.0'. <i>[key: cmbMaxres]</i></p>"));
+  _cmbMaxdisplacementLineEdit->setWhatsThis(tr("<p>BNC builds mean values for all incoming orbit corrections per satellite. Individual orbit corrections that differ by more than 'Maximal Orb Displacement' meters from the average of all orbit corrections per satellite will be ignored.<p></p>It is suggested to specify a value of about 0.5 m.</p><p>Default is a value of '2.0'. <i>[key: cmbMaxdisplacement]</i></p>"));
   _cmbSamplSpinBox->setWhatsThis(tr("<p>Select a combination Sampling interval for the clocks. Clock corrections will be produced following that interval.</p><p>A value of 10 sec may be an appropriate choice. A value of zero '0' tells BNC to use all available samples. <i>[key:  ]</i></p>"));
   _cmbGpsCheckBox->setWhatsThis(tr("<p>GPS clock corrections shall be combined. GPS Broadcast ephemeris and corrections are required. <i>[key: cmbGps]</i></p>"));
@@ -1727,4 +1741,5 @@
   _cmbTable->deleteLater();
   delete _cmbMaxresLineEdit;
+  delete _cmbMaxdisplacementLineEdit;
   delete _cmbSamplSpinBox;
   delete _cmbMethodComboBox;
@@ -2217,15 +2232,16 @@
     settings.setValue("cmbStreams", "");
   }
-  settings.setValue("cmbMethod",     _cmbMethodComboBox->currentText());
-  settings.setValue("cmbMaxres",     _cmbMaxresLineEdit->text());
-  settings.setValue("cmbSampl",      _cmbSamplSpinBox->value());
-  settings.setValue("cmbGps",        _cmbGpsCheckBox->checkState());
-  settings.setValue("cmbGlo",        _cmbGloCheckBox->checkState());
-  settings.setValue("cmbGal",        _cmbGalCheckBox->checkState());
-  settings.setValue("cmbBds",        _cmbBdsCheckBox->checkState());
-  settings.setValue("cmbQzss",       _cmbQzssCheckBox->checkState());
-  settings.setValue("cmbSbas",       _cmbSbasCheckBox->checkState());
-  settings.setValue("cmbIrnss",      _cmbIrnssCheckBox->checkState());
-  settings.setValue("cmbBsxFile",    _cmbBsxFile->fileName());
+  settings.setValue("cmbMethod",          _cmbMethodComboBox->currentText());
+  settings.setValue("cmbMaxres",          _cmbMaxresLineEdit->text());
+  settings.setValue("cmbMaxdisplacement", _cmbMaxresLineEdit->text());
+  settings.setValue("cmbSampl",           _cmbSamplSpinBox->value());
+  settings.setValue("cmbGps",             _cmbGpsCheckBox->checkState());
+  settings.setValue("cmbGlo",             _cmbGloCheckBox->checkState());
+  settings.setValue("cmbGal",             _cmbGalCheckBox->checkState());
+  settings.setValue("cmbBds",             _cmbBdsCheckBox->checkState());
+  settings.setValue("cmbQzss",            _cmbQzssCheckBox->checkState());
+  settings.setValue("cmbSbas",            _cmbSbasCheckBox->checkState());
+  settings.setValue("cmbIrnss",           _cmbIrnssCheckBox->checkState());
+  settings.setValue("cmbBsxFile",         _cmbBsxFile->fileName());
 
 // Upload Corrections
@@ -2752,4 +2768,5 @@
       enableWidget(true, _cmbMethodComboBox);
       enableWidget(true, _cmbMaxresLineEdit);
+      enableWidget(true, _cmbMaxdisplacementLineEdit);
       enableWidget(true, _cmbSamplSpinBox);
       enableWidget(true, _cmbGpsCheckBox);
@@ -2765,4 +2782,5 @@
       enableWidget(false, _cmbMethodComboBox);
       enableWidget(false, _cmbMaxresLineEdit);
+      enableWidget(false, _cmbMaxdisplacementLineEdit);
       enableWidget(false, _cmbSamplSpinBox);
       enableWidget(false, _cmbGpsCheckBox);
@@ -2873,4 +2891,5 @@
     enableWidget(false, _cmbMethodComboBox);
     enableWidget(false, _cmbMaxresLineEdit);
+    enableWidget(false, _cmbMaxdisplacementLineEdit);
     enableWidget(false, _cmbSamplSpinBox);
   }
Index: trunk/BNC/src/bncwindow.h
===================================================================
--- trunk/BNC/src/bncwindow.h	(revision 10450)
+++ trunk/BNC/src/bncwindow.h	(revision 10451)
@@ -219,4 +219,5 @@
     QTableWidget*  _cmbTable;
     QLineEdit*     _cmbMaxresLineEdit;
+    QLineEdit*     _cmbMaxdisplacementLineEdit;
     QComboBox*     _cmbMethodComboBox;
     QSpinBox*      _cmbSamplSpinBox;
Index: trunk/BNC/src/combination/bnccomb.cpp
===================================================================
--- trunk/BNC/src/combination/bnccomb.cpp	(revision 10450)
+++ trunk/BNC/src/combination/bnccomb.cpp	(revision 10451)
@@ -176,5 +176,6 @@
       newAC->name         = hlp[1];
       newAC->weightFactor = hlp[2].toDouble();
-      newAC->isAPC = bool(newAC->mountPoint.mid(0,4) == "SSRA");
+      newAC->excludeSats  = hlp[3].split(QRegExp("[ ,]"), QString::SkipEmptyParts);
+      newAC->isAPC        = bool(newAC->mountPoint.mid(0,4) == "SSRA");
       QMapIterator<char, unsigned> itSys(_cmbSysPrn);
       // init
@@ -182,5 +183,6 @@
         itSys.next();
         char sys = itSys.key();
-        if (!_masterOrbitAC.contains(sys)) {
+        if (!_masterOrbitAC.contains(sys) &&
+            !newAC->excludeSats.contains(QString(sys), Qt::CaseSensitive)) {
           _masterOrbitAC[sys] = newAC->name;
           _masterIsAPC[sys]   = newAC->isAPC;
@@ -299,8 +301,16 @@
   // Maximal Residuum
   // ----------------
-  _MAXRES = settings.value("cmbMaxres").toDouble();
-  if (_MAXRES <= 0.0) {
-    _MAXRES = 999.0;
-  }
+  _MAX_RES = settings.value("cmbMaxres").toDouble();
+  if (_MAX_RES <= 0.0) {
+    _MAX_RES = 999.0;
+  }
+
+  // Maximal Displacement
+  // --------------------
+  _MAX_DISPLACEMENT = settings.value("cmbMaxdisplacement").toDouble();
+  if (_MAX_DISPLACEMENT <= 0.0) {
+    _MAX_DISPLACEMENT = 2.0;
+  }
+
   _newCorr = 0;
 }
@@ -395,4 +405,5 @@
     // ----------------------
     QString acName;
+    QStringList excludeSats;
     QListIterator<cmbAC*> icAC(_ACs);
     while (icAC.hasNext()) {
@@ -400,8 +411,9 @@
       if (AC->mountPoint == staID) {
         acName = AC->name;
+        excludeSats = AC->excludeSats;
         break;
       }
     }
-    if (acName.isEmpty()) {
+    if (acName.isEmpty() || excludeSat(orbCorr._prn, excludeSats)) {
       continue;
     }
@@ -431,4 +443,5 @@
     // ----------------------
     QString acName;
+    QStringList excludeSats;
     QListIterator<cmbAC*> icAC(_ACs);
     while (icAC.hasNext()) {
@@ -436,8 +449,9 @@
       if (AC->mountPoint == staID) {
         acName = AC->name;
+        excludeSats = AC->excludeSats;
         break;
       }
     }
-    if (acName.isEmpty()) {
+    if (acName.isEmpty() || excludeSat(satCodeBias._prn, excludeSats)) {
       continue;
     }
@@ -480,4 +494,5 @@
     // ----------------------
     QString acName;
+    QStringList excludeSats;
     bool isAPC;
     QString staID(newClk._staID.c_str());
@@ -487,9 +502,12 @@
       if (AC->mountPoint == staID) {
         acName = AC->name;
+        QStringList excludeSats;
         isAPC  = AC->isAPC;
         break;
       }
     }
-    if (acName.isEmpty() || isAPC != _masterIsAPC[sys]) {
+    if (acName.isEmpty() ||
+        isAPC != _masterIsAPC[sys] ||
+        excludeSat(newClk._prn, excludeSats)) {
       continue;
     }
@@ -962,5 +980,5 @@
         << " Maximum Residuum " << maxRes << ' '
         << corrs(sys)[maxResIndex-1]->_acName << ' ' << corrs(sys)[maxResIndex-1]->_prn.mid(0,3);
-    if (maxRes > _MAXRES) {
+    if (maxRes > _MAX_RES) {
       for (int iPar = 1; iPar <= _params[sys].size(); iPar++) {
         cmbParam* pp = _params[sys][iPar-1];
@@ -1368,5 +1386,5 @@
         << corrs(sys)[maxResIndex-1]->_acName << ' ' << corrs(sys)[maxResIndex-1]->_prn.mid(0,3);
 
-    if (maxRes > _MAXRES) {
+    if (maxRes > _MAX_RES) {
       out << "  Outlier" << "\n";
       delete corrs(sys)[maxResIndex-1];
@@ -1398,6 +1416,4 @@
 t_irc bncComb::checkOrbits(bncTime epoTime, char sys, QTextStream& out) {
 
-  const double MAX_DISPLACEMENT = 2.0;
-
   // Switch to last ephemeris (if possible)
   // --------------------------------------
@@ -1500,5 +1516,5 @@
       else if (corr == maxDiff[prn]) {
         double norm = corr->_diffRao.NormFrobenius();
-        if (norm > MAX_DISPLACEMENT) {
+        if (norm > _MAX_DISPLACEMENT) {
           out << epoTime.datestr().c_str()    << " "
               << epoTime.timestr().c_str()    << " "
@@ -1577,2 +1593,15 @@
   }
 }
+
+//
+////////////////////////////////////////////////////////////////////////////
+bool bncComb::excludeSat(const t_prn& prn, const QStringList excludeSats) const {
+  QStringListIterator it(excludeSats);
+  while (it.hasNext()) {
+    string prnStr = it.next().toLatin1().data();
+    if (prnStr == prn.toString() || prnStr == prn.toString().substr(0,1)) {
+      return true;
+    }
+  }
+  return false;
+}
Index: trunk/BNC/src/combination/bnccomb.h
===================================================================
--- trunk/BNC/src/combination/bnccomb.h	(revision 10450)
+++ trunk/BNC/src/combination/bnccomb.h	(revision 10451)
@@ -98,4 +98,5 @@
     QString              name;
     double               weightFactor;
+    QStringList          excludeSats;
     bool                 isAPC;
     QMap<char, unsigned> numObs;
@@ -153,6 +154,4 @@
     std::vector<t_clkCorr>  _clkCorr;
   };
-
-
 
   class cmbRefSig {
@@ -245,4 +244,5 @@
   void  switchToLastEph(t_eph* lastEph, cmbCorr* corr);
   t_irc checkOrbits(bncTime epoTime, char sys, QTextStream& out);
+  bool excludeSat(const t_prn& prn, const QStringList excludeSats) const;
   QVector<cmbCorr*>& corrs(char sys) {return _buffer[sys].corrs;}
 
@@ -257,5 +257,6 @@
   bncAntex*                                  _antex;
   bncBiasSnx*                                _bsx;
-  double                                     _MAXRES;
+  double                                     _MAX_RES;
+  double                                     _MAX_DISPLACEMENT;
   e_method                                   _method;
   int                                        _cmbSampl;
