Index: /trunk/BNC/CHANGELOG.md
===================================================================
--- /trunk/BNC/CHANGELOG.md	(revision 11139)
+++ /trunk/BNC/CHANGELOG.md	(revision 11140)
@@ -27,4 +27,5 @@
 - FIXED: Ephemeris upload: the periods of validity of the uploaded data sets were not applied (logical or instead of and), so a data set was uploaded as long as no newer one came, e.g. a Galileo data set 32 hours after its TOC
 - CHANGED: SSR QC: the IOD of the corrections is looked up among the last 30 data sets of a satellite instead of the last two (false 'IOD of no received broadcast ephemeris' for Galileo and GLONASS); new report lines for IODs received from the ephemeris stream(s) only later (with the largest delay) and for corrections referring to a broadcast ephemeris outside its validity
+- ADDED: General option 'Ephemeris streams' (key ephMount): combination, upload of corrections and SSR QC use the Broadcast Ephemeris of the given stream(s) only, e.g. BCEP00BKG0, not those contained in other streams (e.g. RTCM-SSR streams of ACs with ephemeris messages); PPP, RINEX navigation files and ephemeris upload not affected; empty: all streams as before
 - ADDED: Regression test suite ('tests'): example configurations and short raw captures replayed through BNC and compared with reference outputs
 - ADDED: macOS packaging script
Index: /trunk/BNC/src/bncephuser.cpp
===================================================================
--- /trunk/BNC/src/bncephuser.cpp	(revision 11139)
+++ /trunk/BNC/src/bncephuser.cpp	(revision 11140)
@@ -43,4 +43,5 @@
 #include "bncephuser.h"
 #include "bnccore.h"
+#include "bncsettings.h"
 
 using namespace std;
@@ -64,4 +65,15 @@
     connect(BNC_CORE, SIGNAL(newBDSEph(t_ephBDS)),
             this, SLOT(slotNewBDSEph(t_ephBDS)), Qt::DirectConnection);
+  }
+}
+
+// Ephemerides of the streams in the general option 'Ephemeris streams' only
+////////////////////////////////////////////////////////////////////////////
+void bncEphUser::useEphMounts(const QString& user) {
+  bncSettings settings;
+  _ephMounts = settings.value("ephMount").toString().split(QRegularExpression("[,\\s]+"),
+                                                            Qt::SkipEmptyParts);
+  if (!_ephMounts.isEmpty()) {
+    BNC_CORE->slotMessage((user.trimmed() + ": ephemerides of " + _ephMounts.join(", ") + " only").toLatin1(), true);
   }
 }
@@ -83,5 +95,7 @@
 ////////////////////////////////////////////////////////////////////////////
 void bncEphUser::slotNewGPSEph(t_ephGPS eph) {
-  putNewEph(&eph, true);
+  if (fromEphMount(eph)) {
+    putNewEph(&eph, true);
+  }
 }
 
@@ -89,5 +103,7 @@
 ////////////////////////////////////////////////////////////////////////////
 void bncEphUser::slotNewGlonassEph(t_ephGlo eph) {
-  putNewEph(&eph, true);
+  if (fromEphMount(eph)) {
+    putNewEph(&eph, true);
+  }
 }
 
@@ -95,5 +111,7 @@
 ////////////////////////////////////////////////////////////////////////////
 void bncEphUser::slotNewGalileoEph(t_ephGal eph) {
-  putNewEph(&eph, true);
+  if (fromEphMount(eph)) {
+    putNewEph(&eph, true);
+  }
 }
 
@@ -101,5 +119,7 @@
 ////////////////////////////////////////////////////////////////////////////
 void bncEphUser::slotNewSBASEph(t_ephSBAS eph) {
-  putNewEph(&eph, true);
+  if (fromEphMount(eph)) {
+    putNewEph(&eph, true);
+  }
 }
 
@@ -107,5 +127,7 @@
 ////////////////////////////////////////////////////////////////////////////
 void bncEphUser::slotNewBDSEph(t_ephBDS eph) {
-  putNewEph(&eph, true);
+  if (fromEphMount(eph)) {
+    putNewEph(&eph, true);
+  }
 }
 
Index: /trunk/BNC/src/bncephuser.h
===================================================================
--- /trunk/BNC/src/bncephuser.h	(revision 11139)
+++ /trunk/BNC/src/bncephuser.h	(revision 11140)
@@ -51,4 +51,10 @@
   t_irc putNewEph(t_eph* newEph, bool check);
 
+  // Real-time input restricted to the ephemerides of the streams given in the
+  // general option 'Ephemeris streams' (key ephMount; empty: all streams), used
+  // for SSR processing: combination, upload of corrections, SSR QC. The name of
+  // the user is written to the logfile together with the streams.
+  void useEphMounts(const QString& user);
+
   // Plausibility check: satellite position computable at TOC and its
   // distance from the geocenter within 20000-60000 km
@@ -92,4 +98,8 @@
  private:
   void checkEphemeris(t_eph* eph, bool realTime);
+  bool fromEphMount(const t_eph& eph) const {
+    return _ephMounts.isEmpty() || _ephMounts.contains(eph.receptStaID());
+  }
+  QStringList                        _ephMounts;     // empty: all streams
   QMutex                             _mutex;
   unsigned                           _maxQueueSize;  // data sets kept per satellite
Index: /trunk/BNC/src/bnchelp.html
===================================================================
--- /trunk/BNC/src/bnchelp.html	(revision 11139)
+++ /trunk/BNC/src/bnchelp.html	(revision 11140)
@@ -113,4 +113,5 @@
     &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.3.4 <a href="#genstart">Auto Start</a><br>
     &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.3.5 <a href="#rawout">Raw Output File</a><br>
+    &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.3.6 <a href="#genephmount">Ephemeris Streams</a><br>
     &nbsp; &nbsp; &nbsp; 2.4 <a href="#rinex"><b>RINEX Observations</b></a><br>
     &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.4.1 <a href="#rnxname">Filenames</a><br>
@@ -2699,5 +2700,6 @@
   </p>
   <p>
-    The following defines general settings for BNC's logfile, file handling, reconfiguration on-the-fly, and auto-start.
+    The following defines general settings for BNC's logfile, file handling, reconfiguration on-the-fly, auto-start,
+    raw file output, and the ephemeris streams for the SSR processing.
   </p>
 
@@ -2817,4 +2819,34 @@
     The default value for 'Raw output file' is an empty option field, meaning that BNC will not save all raw data into
     one single daily file.
+  </p>
+  <p>
+  <h4 id="genephmount">2.3.6 Ephemeris Streams - optional</h4>
+  </p>
+  <p>
+    SSR corrections refer to a Broadcast Ephemeris data set via its IOD. By default, BNC uses the Broadcast Ephemeris
+    of all streams it is pulling, also those contained in observation streams or in Broadcast Correction streams of
+    Analysis Centers (e.g. RTCM-SSR streams with ephemeris messages). Specify one or more 'mountpoints' (separated by
+    comma) of Broadcast Ephemeris streams, e.g. 'BCEP00BKG0' or 'BCEP00BKG0,BCEP08BKG0', to use their ephemerides only
+    in
+  </p>
+  <ul>
+    <li>the combination of Broadcast Corrections ('Combine Corrections'),</li>
+    <li>the upload of Broadcast Corrections ('Upload Corrections'), also without combination, and</li>
+    <li>the SSR QC.</li>
+  </ul>
+  <p>
+    The combined or uploaded corrections then refer to the data sets users receive from these streams, and the SSR
+    QC reports IODs missing in them, independent of ephemerides contained in other streams. The combination and the
+    upload always use the same ephemerides. The streams used are written to the logfile.
+  </p>
+  <p>
+    Not affected are the PPP client, which has an option 'Ephemeris stream' of its own (<a
+      href=#pppephstream>Section 2.13.1.8</a>), the saving of RINEX Navigation files (all streams, optionally one file
+    per stream), and the 'Upload Ephemeris', which combines the ephemerides of all streams into a Broadcast Ephemeris
+    stream.
+  </p>
+  <p>
+    The default value for 'Ephemeris streams' is an empty option field, meaning that the Broadcast Ephemeris of all
+    streams are used.
   </p>
 
@@ -10993,4 +11025,5 @@
    autoStart        {Auto start [integer number: 0=no,2=yes]}
    rawOutFile       {Raw output file, full path [character string]}
+   ephMount         {Broadcast Ephemeris mountpoint(s) for combination, upload of corrections and SSR QC, comma separated [character string]}
 
 RINEX Observations Panel keys:
Index: /trunk/BNC/src/bncmain.cpp
===================================================================
--- /trunk/BNC/src/bncmain.cpp	(revision 11139)
+++ /trunk/BNC/src/bncmain.cpp	(revision 11140)
@@ -143,4 +143,5 @@
         "   autoStart        {Auto start [integer number: 0=no,2=yes]}\n"
         "   rawOutFile       {Raw output file, full path [character string]}\n"
+        "   ephMount         {Broadcast Ephemeris mountpoint(s) for combination, upload of corrections and SSR QC, comma separated [character string]}\n"
         "\n"
         "RINEX Observations Panel keys:\n"
Index: /trunk/BNC/src/bncsettings.cpp
===================================================================
--- /trunk/BNC/src/bncsettings.cpp	(revision 11139)
+++ /trunk/BNC/src/bncsettings.cpp	(revision 11140)
@@ -81,4 +81,5 @@
         setValue_p("autoStart", "0");
         setValue_p("rawOutFile", "");
+        setValue_p("ephMount", "");
         // RINEX Observations
         setValue_p("rnxPath", "");
Index: /trunk/BNC/src/bncwindow.cpp
===================================================================
--- /trunk/BNC/src/bncwindow.cpp	(revision 11139)
+++ /trunk/BNC/src/bncwindow.cpp	(revision 11140)
@@ -199,4 +199,5 @@
   _logFileLineEdit = new QLineEdit(settings.value("logFile").toString());
   _rawOutFileLineEdit = new QLineEdit(settings.value("rawOutFile").toString());
+  _ephMountLineEdit = new QLineEdit(settings.value("ephMount").toString());
   _rnxAppendCheckBox = new QCheckBox();
   _rnxAppendCheckBox->setCheckState(Qt::CheckState(
@@ -838,5 +839,5 @@
   _onTheFlyComboBox->setMaximumWidth(9 * ww);
 
-  gLayout->addWidget(new QLabel("General settings for logfile, file handling, configuration on-the-fly, auto-start, and raw file output.<br>"), 0, 0, 1, 50);
+  gLayout->addWidget(new QLabel("General settings for logfile, file handling, configuration on-the-fly, auto-start, raw file output, and the ephemeris streams for SSR processing.<br>"), 0, 0, 1, 50);
   gLayout->addWidget(new QLabel("Logfile (full path)"), 1, 0);
   gLayout->addWidget(_logFileLineEdit, 1, 1, 1, 20);
@@ -849,5 +850,7 @@
   gLayout->addWidget(new QLabel("Raw output file (full path)"), 5, 0);
   gLayout->addWidget(_rawOutFileLineEdit, 5, 1, 1, 20);
-  gLayout->addWidget(new QLabel(""), 6, 1);
+  gLayout->addWidget(new QLabel("Ephemeris streams"), 6, 0);
+  gLayout->addWidget(_ephMountLineEdit, 6, 1, 1, 20);
+  gLayout->addWidget(new QLabel(""), 7, 1);
   gLayout->setRowStretch(7, 999);
 
@@ -1563,4 +1566,5 @@
   _onTheFlyComboBox->setWhatsThis(tr("<p>When operating BNC online in 'no window' mode, some configuration parameters can be changed on-the-fly without interrupting the running process. For that BNC rereads parts of its configuration in pre-defined intervals. The default entry is 'no' that means the reread function is switched of. <p></p>Select '1 min', '5 min', '1 hour', or '1 day' to force BNC to reread its configuration every full minute, five minutes, hour, or day and let in between edited configuration options become effective on-the-fly without terminating uninvolved threads.</p><p>Note that when operating BNC in window mode, on-the-fly changeable configuration options become effective immediately via button 'Save & Reread Configuration'. <i>[key: onTheFlyInterval]</i></p>"));
   _autoStartCheckBox->setWhatsThis(tr("<p>Tick 'Auto start' for auto-start of BNC at startup time in window mode with preassigned processing options. <i>[key: autoStart]</i></p>"));
+  _ephMountLineEdit->setWhatsThis(tr("<p>Specify one or more 'mountpoints' (separated by comma) from the 'Streams' canvas below which provide the Broadcast Ephemeris for the SSR processing, e.g. 'BCEP00BKG0'. The 'Combine Corrections', the 'Upload Corrections' and the SSR QC then use the Broadcast Ephemeris of these streams only, so that the corrections refer to the data sets users receive from them, and not to those contained in other streams, e.g. in Broadcast Correction streams of an Analysis Center.</p><p>The PPP client ('Ephemeris stream' there), the saving of RINEX Navigation files and the 'Upload Ephemeris' are not affected.</p><p>Default is an empty option field, meaning that the Broadcast Ephemeris of all streams are used. <i>[key: ephMount]</i></p>"));
   _rawOutFileLineEdit->setWhatsThis(tr("<p>Save all data coming in through various streams in the received order and format in one file.</p><p>This option is primarily meant for debugging purposes. <i>[key: rawOutFile]</i></p>"));
 
@@ -1872,4 +1876,5 @@
   delete _logFileLineEdit;
   delete _rawOutFileLineEdit;
+  delete _ephMountLineEdit;
   delete _rnxAppendCheckBox;
   delete _onTheFlyComboBox;
@@ -2405,4 +2410,5 @@
   settings.setValue("autoStart", _autoStartCheckBox->checkState());
   settings.setValue("rawOutFile", _rawOutFileLineEdit->text());
+  settings.setValue("ephMount", _ephMountLineEdit->text());
   // RINEX Observations
   settings.setValue("rnxPath", _rnxPathLineEdit->text());
Index: /trunk/BNC/src/bncwindow.h
===================================================================
--- /trunk/BNC/src/bncwindow.h	(revision 11139)
+++ /trunk/BNC/src/bncwindow.h	(revision 11140)
@@ -184,4 +184,5 @@
     QLineEdit* _logFileLineEdit;
     QLineEdit* _rawOutFileLineEdit;
+    QLineEdit* _ephMountLineEdit;
     QComboBox* _rnxIntrComboBox;
     QComboBox* _ephIntrComboBox;
Index: /trunk/BNC/src/combination/bnccomb.cpp
===================================================================
--- /trunk/BNC/src/combination/bnccomb.cpp	(revision 11139)
+++ /trunk/BNC/src/combination/bnccomb.cpp	(revision 11140)
@@ -133,4 +133,6 @@
 
   bncSettings settings;
+
+  _ephUser.useEphMounts("bncComb");
 
   _running = true;
Index: /trunk/BNC/src/ssrQc.cpp
===================================================================
--- /trunk/BNC/src/ssrQc.cpp	(revision 11139)
+++ /trunk/BNC/src/ssrQc.cpp	(revision 11140)
@@ -123,4 +123,5 @@
 t_ssrQc::t_ssrQc(const QString& dirName, double interval, const QStringList& streams,
                  const QString& reference) : _ephUser(true, EPH_KEPT) {
+  _ephUser.useEphMounts("SSR QC");
   _dirName   = dirName;
   _reference = reference.isEmpty() ? QString("CONSENSUS") : reference;
Index: /trunk/BNC/src/upload/bncrtnetuploadcaster.cpp
===================================================================
--- /trunk/BNC/src/upload/bncrtnetuploadcaster.cpp	(revision 11139)
+++ /trunk/BNC/src/upload/bncrtnetuploadcaster.cpp	(revision 11140)
@@ -84,4 +84,5 @@
     // ----------------------------------
     _ephUser = new bncEphUser(true);
+    _ephUser->useEphMounts("bncRtnetUploadCaster " + mountpoint);
 
     bncSettings settings;
Index: /trunk/BNC/tests/README.md
===================================================================
--- /trunk/BNC/tests/README.md	(revision 11139)
+++ /trunk/BNC/tests/README.md	(revision 11140)
@@ -101,4 +101,7 @@
   `data/combi_multi_261002_5min.raw`. `ssr_qc_bias` adds the CAS DCB file as
   'QC Bias File' (code bias check against the other ACs and the file).
+* `ssr_qc_ephmount`: `ssr_qc` with the general option 'Ephemeris streams' BCEP00BKG0: the
+  ephemerides contained in SSRA00GMV0 are not used, so the GPS uploads within the fit interval
+  of G10, G22, G29 (only in SSRA00GMV0 on 2 Oct) are IODs of no received broadcast ephemeris.
 * `ssr_qc_iod`: IOD check of the SSR QC on `data/qc_iod_261015.raw` (made with
   `tools/mk_qc_iod.py` from the QC capture of 15 Oct 2026: BCEP00BKG0 with each message only
Index: /trunk/BNC/tests/cases/ssr_qc_ephmount/case.json
===================================================================
--- /trunk/BNC/tests/cases/ssr_qc_ephmount/case.json	(revision 11140)
+++ /trunk/BNC/tests/cases/ssr_qc_ephmount/case.json	(revision 11140)
@@ -0,0 +1,18 @@
+{
+  "description": "31_SsrQC replay as ssr_qc with the general option 'Ephemeris streams' BCEP00BKG0: the ephemerides contained in SSRA00GMV0 are not used, so the GPS uploads within the fit interval of G10, G22, G29 (only in SSRA00GMV0, not in BCEP00BKG0 of 2 Oct) are IODs of no received broadcast ephemeris",
+  "config": "Example_Configs/31_SsrQC.bnc",
+  "raw": "data/combi_multi_261002_5min.raw",
+  "exit_code": 5,
+  "timeout": 600,
+  "args": [
+    "-key",
+    "ssrQcIntr",
+    "5 min",
+    "-key",
+    "ephMount",
+    "BCEP00BKG0"
+  ],
+  "outputs": [
+    "Output/*_QC.txt"
+  ]
+}
