Index: trunk/BNC/src/upload/bnccustomtrafo.cpp
===================================================================
--- trunk/BNC/src/upload/bnccustomtrafo.cpp	(revision 9888)
+++ trunk/BNC/src/upload/bnccustomtrafo.cpp	(revision 9911)
@@ -119,5 +119,5 @@
   editLayout->addWidget(new QLabel(tr("t0 [y]")),         4, 4, Qt::AlignRight);
   editLayout->addWidget(_t0LineEdit,                      4, 5);
-  editLayout->addWidget(new QLabel("Specify up to 14 Helmert Transformation Parameters for transformation from IGS14"), 5, 0, 1, 6, Qt::AlignCenter);
+  editLayout->addWidget(new QLabel("Specify up to 14 Helmert Transformation Parameters for transformation from IGS20"), 5, 0, 1, 6, Qt::AlignCenter);
   editLayout->addWidget(new QLabel("into target reference system."), 6, 0, 1, 6, Qt::AlignCenter);
 
Index: trunk/BNC/src/upload/bncrtnetuploadcaster.cpp
===================================================================
--- trunk/BNC/src/upload/bncrtnetuploadcaster.cpp	(revision 9888)
+++ trunk/BNC/src/upload/bncrtnetuploadcaster.cpp	(revision 9911)
@@ -243,4 +243,27 @@
     _t0 = settings.value("trafo_t0").toDouble();
   }
+    // TODO: the following lines can be deleted if all parameters are updated regarding ITRF2020
+  if (_crdTrafo == "ETRF2000" ||
+      _crdTrafo == "GDA2020"  ||
+      _crdTrafo == "DREF91"   ||
+      _crdTrafo == "SIRGAS2000") {
+       // Transformation Parameters from ITRF2020 to ITRF2014
+       // from ITRF web site: https://itrf.ign.fr/en/solutions/transformations
+   _dx14  = -0.0014;
+   _dy14  = -0.0009;
+   _dz14  =  0.0014;
+   _dxr14 =  0.0000;
+   _dyr14 = -0.0001;
+   _dzr14 = -0.0002;
+   _ox14  =  0.0000;
+   _oy14  =  0.0000;
+   _oz14  =  0.0000;
+   _oxr14 =  0.0000;
+   _oyr14 =  0.0000;
+   _ozr14 =  0.0000;
+   _sc14  = -0.4200;
+   _scr14 =  0.0000;
+   _t014  =  2015.0;
+ }
 }
 
@@ -1015,6 +1038,7 @@
 
   double dc = 0.0;
-  if (_crdTrafo != "IGS14") {
-    crdTrafo(GPSweek, xP, dc);
+  if (_crdTrafo != "IGS20") {
+    crdTrafo14(GPSweek, xP, dc); // ITRF2020 => ITRF2014
+    crdTrafo(GPSweek, xP, dc);   // ITRF2014 to other reference frames
   }
 
@@ -1151,7 +1175,7 @@
   }
   else if (_crdTrafo == "Custom") {
-    meanSta(1) = 0.0; // TODO
-    meanSta(2) = 0.0; // TODO
-    meanSta(3) = 0.0; // TODO
+    meanSta(1) = 0.0;
+    meanSta(2) = 0.0;
+    meanSta(3) = 0.0;
   }
 
@@ -1175,4 +1199,55 @@
 }
 
+// Transform Coordinates
+////////////////////////////////////////////////////////////////////////////
+void bncRtnetUploadCaster::crdTrafo14(int GPSWeek, ColumnVector& xyz,
+    double& dc) {
+
+  // Current epoch minus 2000.0 in years
+  // ------------------------------------
+  double dt = (GPSWeek - (1042.0 + 6.0 / 7.0)) / 365.2422 * 7.0 + 2000.0 - _t0;
+
+  ColumnVector dx(3);
+
+  dx(1) = _dx14 + dt * _dxr14;
+  dx(2) = _dy14 + dt * _dyr14;
+  dx(3) = _dz14 + dt * _dzr14;
+
+  static const double arcSec = 180.0 * 3600.0 / M_PI;
+
+  double ox = (_ox14 + dt * _oxr14) / arcSec;
+  double oy = (_oy14 + dt * _oyr14) / arcSec;
+  double oz = (_oz14 + dt * _ozr14) / arcSec;
+
+  double sc = 1.0 + _sc14 * 1e-9 + dt * _scr14 * 1e-9;
+
+  // Specify approximate center of area
+  // ----------------------------------
+  ColumnVector meanSta(3);
+  meanSta(1) = 0.0; // TODO
+  meanSta(2) = 0.0; // TODO
+  meanSta(3) = 0.0; // TODO
+
+  // Clock correction proportional to topocentric distance to satellites
+  // -------------------------------------------------------------------
+  double rho = (xyz - meanSta).NormFrobenius();
+  dc = rho * (sc - 1.0) / sc / t_CST::c;
+
+  Matrix rMat(3, 3);
+  rMat(1, 1) = 1.0;
+  rMat(1, 2) = -oz;
+  rMat(1, 3) = oy;
+  rMat(2, 1) = oz;
+  rMat(2, 2) = 1.0;
+  rMat(2, 3) = -ox;
+  rMat(3, 1) = -oy;
+  rMat(3, 2) = ox;
+  rMat(3, 3) = 1.0;
+
+  xyz = sc * rMat * xyz + dx;
+}
+
+// Update Interval
+////////////////////////////////////////////////////////////////////////////
 int bncRtnetUploadCaster::determineUpdateInd(double samplingRate) {
 
@@ -1219,4 +1294,6 @@
 }
 
+// Check corrections
+////////////////////////////////////////////////////////////////////////////
 bool bncRtnetUploadCaster::corrIsOutOfRange(struct SsrCorr::ClockOrbit::SatData* sd) {
 
Index: trunk/BNC/src/upload/bncrtnetuploadcaster.h
===================================================================
--- trunk/BNC/src/upload/bncrtnetuploadcaster.h	(revision 9888)
+++ trunk/BNC/src/upload/bncrtnetuploadcaster.h	(revision 9911)
@@ -47,4 +47,6 @@
 
   void crdTrafo(int GPSWeek, ColumnVector& xyz, double& dc);
+  // TODO: the following line can be deleted if all parameters are updated regarding ITRF2020
+  void crdTrafo14(int GPSWeek, ColumnVector& xyz, double& dc);
 
   int determineUpdateInd(double samplingRate);
@@ -78,4 +80,21 @@
   double         _scr;
   double         _t0;
+  // TODO: the following lines can be deleted if all parameters are updated regarding ITRF2020
+  double         _dx14;
+  double         _dy14;
+  double         _dz14;
+  double         _dxr14;
+  double         _dyr14;
+  double         _dzr14;
+  double         _ox14;
+  double         _oy14;
+  double         _oz14;
+  double         _oxr14;
+  double         _oyr14;
+  double         _ozr14;
+  double         _sc14;
+  double         _scr14;
+  double         _t014;
+
   bncClockRinex* _rnx;
   bncSP3*        _sp3;
