Index: trunk/BNC/src/bncantex.cpp
===================================================================
--- trunk/BNC/src/bncantex.cpp	(revision 11066)
+++ trunk/BNC/src/bncantex.cpp	(revision 11079)
@@ -778,5 +778,9 @@
                                  const ColumnVector& xSat,
                                  const ColumnVector& vSat, ColumnVector& dx,
-                                 e_attMode mode, double externalYaw) {
+                                 e_attMode mode, double externalYaw,
+                                 const QString& stateKey) {
+
+  // separate yaw model states per caller (stateKey), each called in time order
+  QString yawKey = stateKey.isEmpty() ? prn : stateKey + ":" + prn;
 
   t_frequency::type frqType = t_frequency::dummy;
@@ -836,20 +840,20 @@
 
       if (mode == ATT_COMPUTED && prn[0] == 'R' && vSat.size() == 3) {
-        psiEff = glonassYawAngle(prn, Mjd, xSat, vSat, xSun);
+        psiEff = glonassYawAngle(yawKey, Mjd, xSat, vSat, xSun);
         useVelocityFrame = true;
       }
       else if (mode == ATT_COMPUTED && prn[0] == 'G' && vSat.size() == 3
                && !map->blockType.isEmpty()) {
-        psiEff = gpsYawAngle(prn, map->blockType, Mjd, xSat, vSat, xSun);
+        psiEff = gpsYawAngle(yawKey, map->blockType, Mjd, xSat, vSat, xSun);
         useVelocityFrame = true;
       }
       else if (mode == ATT_COMPUTED && prn[0] == 'E' && vSat.size() == 3
                && !map->blockType.isEmpty()) {
-        psiEff = galileoYawAngle(prn, map->blockType, Mjd, xSat, vSat, xSun);
+        psiEff = galileoYawAngle(yawKey, map->blockType, Mjd, xSat, vSat, xSun);
         useVelocityFrame = true;
       }
       else if (mode == ATT_COMPUTED && prn[0] == 'C' && vSat.size() == 3
                && !map->blockType.isEmpty()) {
-        psiEff = bdsYawAngle(prn, map->blockType, Mjd, xSat, vSat, xSun);
+        psiEff = bdsYawAngle(yawKey, map->blockType, Mjd, xSat, vSat, xSun);
         useVelocityFrame = true;
       }
