Index: /trunk/BNC/src/PPP/pppSatObs.cpp
===================================================================
--- /trunk/BNC/src/PPP/pppSatObs.cpp	(revision 8618)
+++ /trunk/BNC/src/PPP/pppSatObs.cpp	(revision 8619)
@@ -62,4 +62,5 @@
   // ------------------------------------------
   const string preferredAttrib = "CWPXI_";
+  //const string preferredAttrib = "G:12&PWCSLXYN G:5&IQX R:12&PC R:3&IQX E:16&BCX E:578&IQX J:1&SLXCZ J:26&SLX J:5&IQX C:IQX I:ABCX S:1&C S:5&IQX";
 
   for (unsigned iFreq = 1; iFreq < t_frequency::max; iFreq++) {
@@ -106,8 +107,8 @@
   // Compute Satellite Coordinates at Time of Transmission
   // -----------------------------------------------------
-  _xcSat.ReSize(7); _xcSat = 0.0;
+  _xcSat.ReSize(6); _xcSat = 0.0;
   _vvSat.ReSize(3); _vvSat = 0.0;
   bool totOK  = false;
-  ColumnVector satPosOld(7); satPosOld = 0.0;
+  ColumnVector satPosOld(6); satPosOld = 0.0;
   t_lc::type tLC = isValid(t_lc::cIF) ? t_lc::cIF : t_lc::c1;
   double prange = obsValue(tLC);
@@ -328,4 +329,6 @@
   _model._rho = rhoV.norm_Frobenius();
 
+  ColumnVector vSat = _vvSat;
+
   ColumnVector neu(3);
   xyz2neu(station->ellApr().data(), rhoV.data(), neu.data());
@@ -371,8 +374,4 @@
   // ------------------
   _model._tropo = t_tropo::delay_saast(station->xyzApr(), _model._eleSat);
-
-  // Phase Wind-Up
-  // -------------
-  _model._windUp = station->windUp(_time, _prn, rSat);
 
   // Code Biases
@@ -393,7 +392,11 @@
   // Phase Biases
   // -----------
-  // TODO: consideration of fix indicators, yaw angle and jump counter
+  // TODO: consideration of fix indicators and jump counter
   const t_satPhaseBias* satPhaseBias = PPP_CLIENT->obsPool()->satPhaseBias(_prn);
+  double yaw = 0.0;
+  bool ssr = false;
   if (satPhaseBias) {
+    yaw = satPhaseBias->_yaw;
+    ssr = true;
     for (unsigned ii = 0; ii < satPhaseBias->_bias.size(); ii++) {
       const t_frqPhaseBias& bias = satPhaseBias->_bias[ii];
@@ -407,4 +410,9 @@
   }
 
+  // Phase Wind-Up
+  // -------------
+  _model._windUp = station->windUp(_time, _prn, rSat, ssr, yaw, vSat) ;
+
+
   // Tidal Correction
   // ----------------
@@ -428,4 +436,8 @@
     }
   }
+
+  // Relativistic effect due to earth gravity
+  // ----------------------------------------
+  // TODO
 
   // Ocean Loading
Index: /trunk/BNC/src/PPP/pppSatObs.h
===================================================================
--- /trunk/BNC/src/PPP/pppSatObs.h	(revision 8618)
+++ /trunk/BNC/src/PPP/pppSatObs.h	(revision 8619)
@@ -90,4 +90,5 @@
       _tide    = 0.0;
       _windUp  = 0.0;
+      _rel    = 0.0;
       for (unsigned ii = 0; ii < t_frequency::max; ii++) {
         _antPCO[ii]        = 0.0;
@@ -108,4 +109,5 @@
     double _tide;
     double _windUp;
+    double _rel;
     double _antPCO[t_frequency::max];
     double _codeBias[t_frequency::max];
Index: /trunk/BNC/src/PPP/pppStation.cpp
===================================================================
--- /trunk/BNC/src/PPP/pppStation.cpp	(revision 8618)
+++ /trunk/BNC/src/PPP/pppStation.cpp	(revision 8619)
@@ -11,5 +11,5 @@
  * Created:    29-Jul-2014
  *
- * Changes:    
+ * Changes:
  *
  * -----------------------------------------------------------------------*/
@@ -37,5 +37,5 @@
 }
 
-// 
+//
 //////////////////////////////////////////////////////////////////////////////
 void t_pppStation::setXyzApr(const ColumnVector& xyzApr) {
@@ -45,5 +45,5 @@
 }
 
-// 
+//
 //////////////////////////////////////////////////////////////////////////////
 void t_pppStation::setNeuEcc(const ColumnVector& neuEcc) {
@@ -53,9 +53,10 @@
 }
 
-// 
+//
 //////////////////////////////////////////////////////////////////////////////
-double t_pppStation::windUp(const bncTime& time, t_prn prn, 
-                         const ColumnVector& rSat) const {
-  return _windUp->value(time, _xyzApr, prn, rSat);
+double t_pppStation::windUp(const bncTime& time, t_prn prn,
+                         const ColumnVector& rSat, bool ssr, double yaw,
+                         const ColumnVector& vSat) const {
+  return _windUp->value(time, _xyzApr, prn, rSat, ssr, yaw, vSat);
 }
 
Index: /trunk/BNC/src/PPP/pppStation.h
===================================================================
--- /trunk/BNC/src/PPP/pppStation.h	(revision 8618)
+++ /trunk/BNC/src/PPP/pppStation.h	(revision 8619)
@@ -31,5 +31,6 @@
   const ColumnVector& tideDspl()  const {return _tideDspl;}
   double dClk() const {return _dClk;}
-  double windUp(const bncTime& time, t_prn prn, const ColumnVector& rSat) const;
+  double windUp(const bncTime& time, t_prn prn, const ColumnVector& rSat, bool ssr,
+                double yaw, const ColumnVector& vSat) const;
   double stec(const t_vTec* vTec, const double signalPropagationTime, const ColumnVector& rSat) const;
 
Index: /trunk/BNC/src/pppModel.cpp
===================================================================
--- /trunk/BNC/src/pppModel.cpp	(revision 8618)
+++ /trunk/BNC/src/pppModel.cpp	(revision 8619)
@@ -369,5 +369,6 @@
 ///////////////////////////////////////////////////////////////////////////
 double t_windUp::value(const bncTime& etime, const ColumnVector& rRec,
-                       t_prn prn, const ColumnVector& rSat) {
+                       t_prn prn, const ColumnVector& rSat, bool ssr,
+                       double yaw, const ColumnVector& vSat) {
 
   if (etime.mjddec() != lastEtime[prn.toInt()]) {
@@ -380,16 +381,27 @@
     // GPS Satellite unit Vectors sz, sy, sx
     // -------------------------------------
+    ColumnVector sHlp;
+    if (!ssr) {
+      sHlp = t_astro::Sun(etime.mjddec());
+    }
+    else {
+      ColumnVector Omega(3);
+      Omega[0] = 0.0;
+      Omega[1] = 0.0;
+      Omega[2] = t_CST::omega;
+      sHlp = vSat + crossproduct(Omega, rSat);
+    }
+    sHlp /= sHlp.norm_Frobenius();
+
     ColumnVector sz = -rSat / rSat.norm_Frobenius();
-
-    ColumnVector xSun = t_astro::Sun(etime.mjddec());
-    xSun /= xSun.norm_Frobenius();
-
-    ColumnVector sy = crossproduct(sz, xSun);
+    ColumnVector sy = crossproduct(sz, sHlp);
     ColumnVector sx = crossproduct(sy, sz);
+
+    // Yaw consideration
+    sx = t_astro::rotZ(yaw) * sx;
 
     // Effective Dipole of the GPS Satellite Antenna
     // ---------------------------------------------
-    ColumnVector dipSat = sx - rho * DotProduct(rho,sx)
-                                                - crossproduct(rho, sy);
+    ColumnVector dipSat = sx - rho * DotProduct(rho,sx) - crossproduct(rho, sy);
 
     // Receiver unit Vectors rx, ry
@@ -397,5 +409,4 @@
     ColumnVector rx(3);
     ColumnVector ry(3);
-
     double recEll[3]; xyz2ell(rRec.data(), recEll) ;
     double neu[3];
@@ -413,6 +424,5 @@
     // Effective Dipole of the Receiver Antenna
     // ----------------------------------------
-    ColumnVector dipRec = rx - rho * DotProduct(rho,rx)
-                                                   + crossproduct(rho, ry);
+    ColumnVector dipRec = rx - rho * DotProduct(rho,rx) + crossproduct(rho, ry);
 
     // Resulting Effect
@@ -420,8 +430,8 @@
     double alpha = DotProduct(dipSat,dipRec) /
                       (dipSat.norm_Frobenius() * dipRec.norm_Frobenius());
-
+/*
     if (alpha >  1.0) alpha =  1.0;
     if (alpha < -1.0) alpha = -1.0;
-
+*/
     double dphi = acos(alpha) / 2.0 / M_PI;  // in cycles
 
Index: /trunk/BNC/src/pppModel.h
===================================================================
--- /trunk/BNC/src/pppModel.h	(revision 8618)
+++ /trunk/BNC/src/pppModel.h	(revision 8619)
@@ -71,5 +71,6 @@
   ~t_windUp() {};
   double value(const bncTime& etime, const ColumnVector& rRec, t_prn prn,
-               const ColumnVector& rSat);
+               const ColumnVector& rSat, bool ssr, double yaw,
+               const ColumnVector& vSat);
  private:
   double lastEtime[t_prn::MAXPRN+1];
