diff --git a/MAC/Navigator2/scripts/readStationConfigs.ctl b/MAC/Navigator2/scripts/readStationConfigs.ctl
index 3ea9b661e20c0048aa91108ccc106b6bbcf82a25..ae1081c98a888d20abd717a867c54dfd5ad50452 100644
--- a/MAC/Navigator2/scripts/readStationConfigs.ctl
+++ b/MAC/Navigator2/scripts/readStationConfigs.ctl
@@ -48,10 +48,14 @@
   global dyn_string dynStr_fileContent;
   global int index=1;
   global bool bDebug    = false;
+  global int nr_HBA=0;
+  global int nr_LBA=0;
   global bool norVecLBAFound=false;
+  global bool norVecHBAFound=false;
   global bool norVecHBA0Found=false;
   global bool norVecHBA1Found=false;
   global bool rotMatLBAFound=false;
+  global bool rotMatHBAFound=false;
   global bool rotMatHBA0Found=false;
   global bool rotMatHBA1Found=false;
   global bool centerLBAFound=false;
@@ -103,7 +107,7 @@ main()
     if (bDebug) DebugN("str1: ",str1," str2: ",str2);
     
     if (strtoupper(str1) == "NORMAL_VECTOR" ) {
-      if (strtoupper(str2) != "LBA" && strtoupper(str2) != "HBA0" && strtoupper(str2) != "HBA1") {
+      if (strtoupper(str2) != "LBA" && strtoupper(str2) != "HBA0" && strtoupper(str2) != "HBA1" && strtoupper(str2) != HBA) {
         DebugN("readStationConfigs.ctl | Unknown NORMAL_VECTOR target found: ", str2);
         continue;
       } else {
@@ -111,7 +115,7 @@ main()
         processNormalVector(strtoupper(str2));
       }
     } else if (strtoupper(str1) == "ROTATION_MATRIX" ) {
-      if (strtoupper(str2) != "LBA" && strtoupper(str2) != "HBA0" && strtoupper(str2) != "HBA1") {
+      if (strtoupper(str2) != "LBA" && strtoupper(str2) != "HBA0" && strtoupper(str2) != "HBA1" && strtoupper(str2) != HBA) {
         DebugN("readStationConfigs.ctl | Unknown ROTATION_MATRIX target found: ", str2);
         continue;
       } else {
@@ -137,19 +141,19 @@ main()
   if (!norVecLBAFound ) {
     DebugN("Error? NORMAL_VECTOR for LBA not found.");
   }
-  if (!norVecHBA0Found ) {
+  if (!norVecHBA0Found && !norVecHBAFound ) {
     DebugN("Error? NORMAL_VECTOR for HBA0 not found.");
   }
-  if (!norVecHBA1Found ) {
+  if (!norVecHBA1Found && !norVecHBAFound) {
     DebugN("Error? NORMAL_VECTOR for HBA1 not found.");
   }      
   if (!rotMatLBAFound ) {
     DebugN("Error? ROTATION_MATRIX for LBA not found.");
   }      
-  if (!rotMatHBA0Found ) {
+  if (!rotMatHBA0Found && !rotMatHBAFound) {
     DebugN("Error? ROTATION_MATRIX for HBA0 not found.");
   }      
-  if (!rotMatHBA1Found ) {
+  if (!rotMatHBA1Found && !rotMatHBAFound) {
     DebugN("Error? ROTATION_MATRIX for HBA1 not found.");
   }      
   if (!centerLBAFound ) {
@@ -164,7 +168,29 @@ main()
   if (!deltasHBAFound ) {
     DebugN("Error? Deltas for HBA not found.");
   }
-
+  
+  
+  // calculate the rotated values and write back into the database
+  if (deltasLBAFound && rotMatLBAFound) {
+    calcRotated("LBA");
+  } else {
+    DebugN("LBA values or LBA rotationmatrix missing, no rotated values calulated");
+  }
+  if (deltasHBAFound && (rotMatHBAFound || rotMatHBA0Found || rotMatHBA1Found)) {
+    calcRotated("HBA");
+  } else {
+    DebugN("HBA values or HBA(0)(1) rotationmatrix missing, no rotated values calulated");
+  }
+  if (deltasHBAFound && rotMatHBA0Found) {
+    calcRotated("HBA0");
+  } else {
+    DebugN("HBA values or HBA0 rotationmatrix missing, no rotated values calulated");
+  }
+  if (deltasHBAFound && rotMatHBA1Found) {
+    calcRotated("HBA1");
+  } else {
+    DebugN("HBA values or HBA1 rotationmatrix missing, no rotated values calulated");
+  }
 
   
   //
@@ -293,6 +319,11 @@ void processNormalVector(string aS) {
     dpSet("remoteStation.HBA.HBA1.NormalVector.X",fX,
           "remoteStation.HBA.HBA1.NormalVector.Y",fY,
           "remoteStation.HBA.HBA1.NormalVector.Z",fZ);    
+  } else if (aS == "HBA") {      // use HBA0 for foreign stations (1 HBA field)
+    norVecHBAFound=true;
+    dpSet("remoteStation.HBA.HBA0.NormalVector.X",fX,
+          "remoteStation.HBA.HBA0.NormalVector.Y",fY,
+          "remoteStation.HBA.HBA0.NormalVector.Z",fZ);    
   }
 } 
 
@@ -322,6 +353,11 @@ void processRotationMatrix(string aS) {
     dpSet("remoteStation.HBA.HBA1.RotationMatrix.X",fX,
           "remoteStation.HBA.HBA1.RotationMatrix.Y",fY,
           "remoteStation.HBA.HBA1.RotationMatrix.Z",fZ);   
+  } else if (aS == "HBA") {      // use HBA0 for foreign stations (1 HBA field)
+    rotMatHBAFound=true;
+    dpSet("remoteStation.HBA.HBA0.RotationMatrix.X",fX,
+          "remoteStation.HBA.HBA0.RotationMatrix.Y",fY,
+          "remoteStation.HBA.HBA0.RotationMatrix.Z",fZ);   
   }
 
 
@@ -362,15 +398,19 @@ void processFieldDeltas(string aS) {
   dyn_float antConfFileX;
   dyn_float antConfFileY;
   dyn_float antConfFileZ;
+  
+
+  // read nr of antennas
+  sscanf(dynStr_fileContent[index++],"%d",nr_ofAnt);
 
   if (aS== "LBA") {
     deltasLBAFound=true;
+    nr_LBA=nr_ofAnt;
   } else if (aS == "HBA") {
     deltasHBAFound=true;
+    nr_HBA=nr_ofAnt;
   }
 
-  // read nr of antennas
-  sscanf(dynStr_fileContent[index++],"%d",nr_ofAnt);
   if (bDebug) DebugN("Nr of Antenna's in this Config: "+nr_ofAnt);
   DebugN(aS,"--> will be read");
   for (int ix = index; ix < nr_ofAnt + index; ix++ ) {
@@ -379,6 +419,10 @@ void processFieldDeltas(string aS) {
     if (bDebug) DebugN("X :"+deltaX+ " Y: "+ deltaY+ " Z: "+deltaZ);
     if (bDebug) DebugN("ix: " + ix + " index: " + index);
     if (bDebug) DebugN("Filling array at index: "+ (ix+1-index));
+    
+    if (deltasHBAFound) {
+      int c=ix+1-index;
+    }
     antConfFileX[(ix+1-index)] = deltaX;
     antConfFileY[(ix+1-index)] = deltaY;
     antConfFileZ[(ix+1-index)] = deltaZ;
@@ -392,6 +436,99 @@ void processFieldDeltas(string aS) {
           aS+ant+".deltaZ",antConfFileZ[i]);
   }
   index +=nr_ofAnt+1;
+    
 }
     
+void calcRotated(string aS) {
+  dyn_float rotX,rotY,rotZ;
+  float centerX,centerY,centerZ;
+  float X,Y,Z;
+  float x1=0,x2=0,y1=0,y2=0,x3=0,x4=0,y3=0,y4=0;
 
+  
+  if (aS=="LBA") {
+    dpGet("remoteStation.LBA.RotationMatrix.X",rotX,"remoteStation.LBA.RotationMatrix.Y",rotY,"remoteStation.LBA.RotationMatrix.Z",rotZ,
+          "remoteStation.LBA.centerX",centerX,"remoteStation.LBA.centerY",centerY,"remoteStation.LBA.centerZ",centerZ);
+    dyn_float result=rotate(centerX,centerY,centerZ,rotX,rotY,rotZ);
+    dpSet("remoteStation.LBA.centerX",result[1],"remoteStation.LBA.centerY",result[2],"remoteStation.LBA.centerZ",result[3]);
+    
+  } else if (aS=="HBA" ) {
+    dpGet("remoteStation.HBA.HBA0.RotationMatrix.X",rotX,"remoteStation.HBA.HBA0.RotationMatrix.Y",rotY,"remoteStation.HBA.HBA0.RotationMatrix.Z",rotZ,
+          "remoteStation.HBA.centerX",centerX,"remoteStation.HBA.centerY",centerY,"remoteStation.HBA.centerZ",centerZ);
+    dyn_float result=rotate(centerX,centerY,centerZ,rotX,rotY,rotZ);
+    dpSet("remoteStation.HBA.centerX",result[1],"remoteStation.HBA.centerY",result[2],"remoteStation.HBA.centerZ",result[3]);
+
+  } else if (aS == "HBA0") {
+    dpGet("remoteStation.HBA.HBA0.RotationMatrix.X",rotX,"remoteStation.HBA.HBA0.RotationMatrix.Y",rotY,"remoteStation.HBA.HBA0.RotationMatrix.Z",rotZ,
+          "remoteStation.HBA.HBA0.centerX",centerX,"remoteStation.HBA.HBA0.centerY",centerY,"remoteStation.HBA.HBA0.centerZ",centerZ);
+    dyn_float result=rotate(centerX,centerY,centerZ,rotX,rotY,rotZ);
+    dpSet("remoteStation.HBA.HBA0.centerX",result[1],"remoteStation.HBA.HBA0.centerY",result[2],"remoteStation.HBA.HBA0.centerZ",result[3]);
+
+  } else if (aS== "HBA1") {
+    dpGet("remoteStation.HBA.HBA1.RotationMatrix.X",rotX,"remoteStation.HBA.HBA1.RotationMatrix.Y",rotY,"remoteStation.HBA.HBA1.RotationMatrix.Z",rotZ,
+          "remoteStation.HBA.HBA1.centerX",centerX,"remoteStation.HBA.HBA1.centerY",centerY,"remoteStation.HBA.HBA1.centerZ",centerZ);
+    dyn_float result=rotate(centerX,centerY,centerZ,rotX,rotY,rotZ);
+    dpSet("remoteStation.HBA.HBA1.centerX",result[1],"remoteStation.HBA.HBA1.centerY",result[2],"remoteStation.HBA.HBA1.centerZ",result[3]);
+
+  }  
+  
+  if (aS == "HBA") {
+    for (int i=0;i < nr_HBA; i++) {
+      dpGet("HBA"+i+".deltaX",X,"HBA"+i+".deltaY",Y,"HBA"+i+".deltaZ",Z);
+      dyn_float result=rotate(X,Y,Z,rotX,rotY,rotZ);
+       // keep x y from hba0 and hba1 for rotationcalculations hba0
+       // keep x y from hba24 and hba25 for rotationcalculations hba1
+      if (i == 0) {
+        x1=result[1];
+        y1=result[2];
+      } else if (i == 1) {
+        x2=result[1];
+        y2=result[2];
+      } else if (i == 24) {
+        x3=result[1];
+        y3=result[2];
+      } else if (i == 25) {
+        x4=result[1];
+        y4=result[2];
+      } 
+
+      dpSet("HBA"+i+".deltaX",result[1],"HBA"+i+".deltaY",result[2],"HBA"+i+".deltaZ",result[3]);
+    }
+    // calculate rotationcorner of this field
+    float dx1=x2-x1;
+    float dy1=y2-y1;
+    float angle1 = rad2deg(atan(dy1/dx1));
+    if (bDebug) DebugN("x1,x2",x1,x2);
+    if (bDebug) DebugN("Y1,y2",y1,y2);
+    if (bDebug) DebugN("dy1,dx1",dy1,dx1);
+    if (bDebug) DebugN("atan(dy1/dx1):" ,atan(dy1/dx1));
+    if (bDebug) DebugN("Angle for  HBA0 = ",angle1);
+    float dx2=x4-x3;
+    float dy2=y4-y3;
+    float angle2 = rad2deg(atan(dy2/dx2));
+    if (bDebug) DebugN("x3,x4",x3,x4);
+    if (bDebug) DebugN("Y3,y4",y3,y4);
+    if (bDebug) DebugN("dy2,dx2",dy2,dx2);
+    if (bDebug) DebugN("atan(dy2/dx2):" ,atan(dy2/dx2));
+    if (bDebug) DebugN("Angle for  HBA1 = ",angle2);
+    dpSet("remoteStation.HBA.HBA0.rotation",angle1,
+          "remoteStation.HBA.HBA1.rotation",angle2);
+  } else if (aS == "LBA" )  {
+    for (int i=0;i < nr_LBA; i++) {
+      dpGet("LBA"+i+".deltaX",X,"LBA"+i+".deltaY",Y,"LBA"+i+".deltaZ",Z);
+      dyn_float result=rotate(X,Y,Z,rotX,rotY,rotZ);
+      dpSet("LBA"+i+".deltaX",result[1],"LBA"+i+".deltaY",result[2],"LBA"+i+".deltaZ",result[3]);
+    }
+  }
+  
+}
+
+dyn_float rotate(float X, float Y, float Z, dyn_float rotX, dyn_float rotY, dyn_float rotZ) {
+  dyn_float result=makeDynString(0,0,0);
+
+  result[1]=(X*rotX[1])+(Y*rotX[2])+(Z*rotX[3]);
+  result[2]=(X*rotY[1])+(Y*rotY[2])+(Z*rotY[3]);
+  result[3]=(X*rotZ[1])+(Y*rotZ[2])+(Z*rotZ[3]);
+    
+  return result;
+}