Index: trunk/BNC/src/bnchelp.html
===================================================================
--- trunk/BNC/src/bnchelp.html	(revision 11097)
+++ trunk/BNC/src/bnchelp.html	(revision 11098)
@@ -8436,9 +8436,17 @@
   </p>
   <p>
-    The sequence of entries in the 'Combine Corrections' table is not of importance.
-    Note that the orbit information in the final 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>
+    The sequence of entries in the 'Combine Corrections' table defines the preference for the orbits: the orbit
+    information in the final combination stream is copied from one of the incoming streams, per satellite system from
+    the first stream in the table that provides corrections for that system (a stream that excludes a system, e.g.
+    with 'C' in its exclusion list, or never sends it, is skipped). Put the stream with the best orbits of a system
+    first. If the orbit-providing stream has an outage, BNC switches to the next stream in the table that provides
+    corrections. As soon as a stream higher in the table delivers again without interruption for 60 seconds, BNC
+    switches back to it, so that a single missing epoch does not move the orbits permanently to another stream, and
+    the orbits do not change back and forth. Each switch is written to the combination logfile, e.g.</p>
+  <pre>
+2026-10-15 00:01:50.000 Switching Master R CHC00 --> GMV00
+2026-10-15 00:03:00.000 Switching Master R GMV00 --> CHC00 (preferred AC delivers again)
+</pre>
+  <p>
   <p>
     It is possible to specify only one Broadcast Ephemeris correction stream in the 'Combine Corrections' table.
Index: trunk/BNC/src/combination/bnccomb.cpp
===================================================================
--- trunk/BNC/src/combination/bnccomb.cpp	(revision 11097)
+++ trunk/BNC/src/combination/bnccomb.cpp	(revision 11098)
@@ -1050,4 +1050,12 @@
       }
     }
+    if (AC->numObs[sys] > 0) {
+      if (!AC->presentSince[sys].valid()) {
+        AC->presentSince[sys] = epoTime;
+      }
+    }
+    else {
+      AC->presentSince[sys].reset();
+    }
     out << epoTime.datestr().c_str()    << " "
         << epoTime.timestr().c_str()    << " "
@@ -1086,4 +1094,29 @@
         }
       }
+    }
+  }
+
+  // Switch back to an AC higher in the table (the preferred one) once it
+  // delivers again without interruption for SWITCH_BACK_SEC, so that a single
+  // missing epoch of the preferred AC does not move the orbits permanently
+  // to another AC, and the orbits do not change back and forth
+  // ------------------------------------------------------------------------
+  const double SWITCH_BACK_SEC = 60.0;
+  QListIterator<cmbAC*> icPref(_ACs);
+  while (icPref.hasNext()) {
+    cmbAC* AC = icPref.next();
+    if (AC->name == _masterOrbitAC[sys]) {
+      break;
+    }
+    if (AC->numObs[sys] > 0 && AC->presentSince[sys].valid() &&
+        epoTime - AC->presentSince[sys] >= SWITCH_BACK_SEC) {
+      out <<  epoTime.datestr().c_str()    << " "
+          << epoTime.timestr().c_str()     << " "
+          << "Switching Master " << sys << " "
+          << _masterOrbitAC[sys].toLatin1().data() << " --> "
+          << AC->name.toLatin1().data()   << " (preferred AC delivers again)\n";
+      _masterOrbitAC[sys] = AC->name;
+      _masterIsAPC[sys]   = _cmbCoM ? false : AC->isAPC;
+      break;
     }
   }
Index: trunk/BNC/src/combination/bnccomb.h
===================================================================
--- trunk/BNC/src/combination/bnccomb.h	(revision 11097)
+++ trunk/BNC/src/combination/bnccomb.h	(revision 11098)
@@ -106,4 +106,5 @@
     bool                 isAPC;
     QString              attitudeSource; // "Computed", "SSR", or "Nominal"
+    QMap<char, bncTime>  presentSince;   // per system: delivering without interruption since
     QMap<char, unsigned> numObs;
   };
