diff --git a/app/otbSARAltAmbig.cxx b/app/otbSARAltAmbig.cxx
index 49e3a90a1da2aacaa6fa578643fc4fb5c6dc005e..9a01b22701840ad06d7932f43b01d26b91b960df 100644
--- a/app/otbSARAltAmbig.cxx
+++ b/app/otbSARAltAmbig.cxx
@@ -28,6 +28,7 @@
 #include <iomanip>
 #include <string>
 #include <fstream>
+#include <vector>
 
 namespace otb
 {
@@ -48,12 +49,12 @@ private:
   void DoInit() override
   {
     SetName("SARAltAmbig");
-    SetDescription("Evaluation of altitudes of ambiguity of orbits");
+    SetDescription("Evaluation of ambiguity height");
 
     SetDocLongDescription("Calculate the angle alpha between "
 			  "ground-master and ground-slave vectors. "
-			  "Calculates the local incidence.\nThe ambiguity "
-			  "altitude is given by: "
+			  "Calculates the local incidence.\n The ambiguity "
+			  "heigth is given by: "
 			  "lambda * sin (incidence) / 2 * tg (alpha)");
 
     //Optional descriptors
@@ -63,7 +64,7 @@ private:
     AddDocTag("DiapOTB");
 
     //Parameter declarations
-    AddParameter(ParameterType_InputImage, "inmaster", "Input Master geosar image");
+    AddParameter(ParameterType_InputImage, "inmaster", "Input Master image");
     SetParameterDescription("inmaster", "SAR Image master");
     
     AddParameter(ParameterType_Float, "lat", "Tartget lat");
@@ -81,7 +82,7 @@ private:
     SetMinimumParameterFloatValue("height", -100.);
     SetMaximumParameterFloatValue("height", 9000.);
     
-    AddParameter(ParameterType_InputImage, "inslave", "Input Slave geosar image");
+    AddParameter(ParameterType_InputImage, "inslave", "Input Slave image");
     SetParameterDescription("inslave", "SAR image slave");
 
     AddParameter(ParameterType_OutputFilename, "outfile", "Output file to store the results");
@@ -115,27 +116,24 @@ private:
     // Start the target pipeline (Read SAR image metadata)
     ComplexFloatImageType::Pointer SARPtr_slave = GetParameterComplexFloatImage("inslave");
 
-    // Open the output file
-    std::ofstream output(GetParameterString("outfile"), std::ios::out | std::ios::trunc);
-
+    
     // Get lat, lon and height
     float lat = GetParameterFloat("lat");
     otbAppLogINFO(<<"Lat : "<<lat);
-    output << "Latitude of the target  = " << lat << std::endl;
-
+    
     float lon = GetParameterFloat("lon");
     otbAppLogINFO(<<"Lon : "<<lon);
-    output << "Longitude of the target = " << lon << std::endl;
+    
     if (lon < 0)
       lon = 360.0 + lon;
 
     float height = GetParameterFloat("height");
     otbAppLogINFO(<<"Height : "<<height);
-    output << "Altitude of the target  = " << height << std::endl;
-
+    
     bool bistatic = IsParameterEnabled("bistatic");
     otbAppLogINFO(<<"Bistatic : " << bistatic);
 
+    // Get image keywordlists
     otb::ImageKeywordlist sarKWL = SARPtr->GetImageKeywordlist();
     otb::ImageKeywordlist sarKWL_slave = SARPtr_slave->GetImageKeywordlist();
 
@@ -147,56 +145,94 @@ private:
     SarSensorModelAdapter::Point3DType xyzCart;
     SarSensorModelAdapter::Point3DType satellitePosition[2];
     SarSensorModelAdapter::Point3DType satelliteVelocity[2];
-    double incidence[2];
     
     demGeoPoint[0] = lon;
     demGeoPoint[1] = lat;
     demGeoPoint[2] = height;
 
+    // Results allocations
+    double * resultsLocalVector = new double[3];
+    double * resultsAltAmbig = new double[4];
+
+    
+    // Cartesian conversion
     SarSensorModelAdapter::WorldToCartesian(demGeoPoint, xyzCart);
-    otbAppLogINFO(<<"Cartesian coords : " << xyzCart[0] << " " << xyzCart[1] << " " << xyzCart[2]);
-    output << "GROUND COORDINATES = " << xyzCart[0] << " " << xyzCart[1] << " " << xyzCart[2] << std::endl;
+    otbAppLogDEBUG(<<"Cartesian coords : " << xyzCart[0] << " " << xyzCart[1] << " " << xyzCart[2]);
+
 
+    // Image names 
+    std::string master = getFilename(GetParameterString("inmaster"));
+    std::string slave = getFilename(GetParameterString("inslave"));
+    std::vector<std::string> imgNames; 
+    imgNames.push_back(master);
+    imgNames.push_back(slave);
+
+    // Satellite position and velocity
     // Master
-    otbAppLogINFO(<<"Inmaster Image : ");
+    otbAppLogDEBUG(<<"Inmaster Image : ");
     m_SarSensorModelAdapter->WorldToSatPositionAndVelocity(demGeoPoint, satellitePosition[0], satelliteVelocity[0]);
 
-    otbAppLogINFO(<<"Satellite Position : " << satellitePosition[0][0] << " " << satellitePosition[0][1] << " " << satellitePosition[0][2]);
-    otbAppLogINFO(<<"Satellite Velocity : " << satelliteVelocity[0][0] << " " << satelliteVelocity[0][1] << " " << satelliteVelocity[0][2]);
+    otbAppLogDEBUG(<<"Satellite Position : " << satellitePosition[0][0] << " " << satellitePosition[0][1] << " " << satellitePosition[0][2]);
+    otbAppLogDEBUG(<<"Satellite Velocity : " << satelliteVelocity[0][0] << " " << satelliteVelocity[0][1] << " " << satelliteVelocity[0][2]);
     
+    // Slave
+    loadOk = m_SarSensorModelAdapter->LoadState(sarKWL_slave);
+    otbAppLogDEBUG(<<"Target Image : ");
+    m_SarSensorModelAdapter->WorldToSatPositionAndVelocity(demGeoPoint, satellitePosition[1], satelliteVelocity[1]);
+    otbAppLogDEBUG(<<"Satellite Position : " << satellitePosition[1][0] << " " << satellitePosition[1][1] << " " << satellitePosition[1][2]);
+    otbAppLogDEBUG(<<"Satellite Velocity : " << satelliteVelocity[1][0] << " " << satelliteVelocity[1][1] << " " << satelliteVelocity[1][2]);
+
     // Calculate lambda
     double radarFreq = atof(sarKWL.GetMetadataByKey("support_data.radar_frequency").c_str());
     const double C = 299792458.;
-    
     float lambda = C/radarFreq;
-    otbAppLogINFO(<<"Lambda : " << lambda);
+    otbAppLogDEBUG(<<"Lambda : " << lambda);
+
+    // Estimations : mean incidence, ambig_heigth, radial coord, lateral coord and local projections for master
+    otbAppLogDEBUG(<< "Compute Alt Ambig");
+    computeAltAmbig(xyzCart, satellitePosition, satelliteVelocity, lambda, imgNames, resultsLocalVector, resultsAltAmbig);
+
+
+    // Write into output file
+    // Open the output file
+    std::ofstream output(GetParameterString("outfile"), std::ios::out | std::ios::trunc);
+
+    output << "Latitude of the target  = " << lat << std::endl;
+    output << "Longitude of the target = " << lon << std::endl;
+    output << "Altitude of the target  = " << height << std::endl;
+
+    output << "GROUND COORDINATES = " << xyzCart[0] << " " << xyzCart[1] << " " << xyzCart[2] << std::endl;
 
-    // Target
-    loadOk = m_SarSensorModelAdapter->LoadState(sarKWL_slave);
-    otbAppLogINFO(<<"Target Image : ");
-    m_SarSensorModelAdapter->WorldToSatPositionAndVelocity(demGeoPoint, satellitePosition[1], satelliteVelocity[1]);
-    otbAppLogINFO(<<"Satellite Position : " << satellitePosition[1][0] << " " << satellitePosition[1][1] << " " << satellitePosition[1][2]);
-    otbAppLogINFO(<<"Satellite Velocity : " << satelliteVelocity[1][0] << " " << satelliteVelocity[1][1] << " " << satelliteVelocity[1][2]);
-
-    otbAppLogINFO(<< "Compute Alt Ambig");
-    otbAppLogINFO(<< std::left
-		  << std::setw(60) << "MASTER IMAGE"
-		  << std::setw(60) << "SLAVE IMAGE"
-		  << std::setw(12) << "Incidence"
-		  << std::setw(12) << "ALT AMBIG"
-		  << std::setw(12) << "Radial"
-		  << std::setw(12) << "Lateral");
     output << std::endl << std::left
-	   << std::setw(60) << "MASTER IMAGE"
-	   << std::setw(60) << "SLAVE IMAGE"
+	   << std::setw(70) << "MASTER IMAGE"
+	   << std::setw(70) << "SLAVE IMAGE"
 	   << std::setw(12) << "Incidence"
 	   << std::setw(12) << "ALT AMBIG"
 	   << std::setw(12) << "Radial"
 	   << std::setw(12) << "Lateral" << std::endl;
-    computeAltAmbig(xyzCart, satellitePosition, satelliteVelocity, lambda,  output);
+
+
+    output << std::left
+	   << std::setw(70) << master
+	   << std::setw(70) << slave
+	   << std::setw(12) << resultsAltAmbig[0]
+	   << std::setw(12) << resultsAltAmbig[1]
+	   << std::setw(12) <<resultsAltAmbig[2]
+	   << std::setw(12) << resultsAltAmbig[3] << std::endl;
+    
+    output << "Ground target --> Satellite Vector" << std::endl;
+    output << "North Projection : " << resultsLocalVector[0] << std::endl;
+    output << "East Projection : " << resultsLocalVector[1] << std::endl;
+    output << "Vertical Projection : " << resultsLocalVector[2] << std::endl;
 
     // Close the output file
     output.close();
+
+    // Free Memory 
+    delete resultsLocalVector;
+    delete resultsAltAmbig;
+    resultsLocalVector = 0;
+    resultsAltAmbig = 0;
   }
 
   std::string getFilename(std::string filePath){
@@ -205,7 +241,13 @@ private:
     return filePath.substr(sepPos + 1, dotPos - sepPos - 1);
   }
 
-  double computeIncidence(SarSensorModelAdapter::Point3DType satellitePosition, SarSensorModelAdapter::Point3DType xyzCart, SarSensorModelAdapter::Point3DType rm){
+
+  ///////// compute functions /////////
+  // Incidence
+  double computeIncidence(SarSensorModelAdapter::Point3DType satellitePosition, 
+			  SarSensorModelAdapter::Point3DType xyzCart, 
+			  SarSensorModelAdapter::Point3DType rm)
+  {
     // Incidence
     double normeS = sqrt(satellitePosition[0]*satellitePosition[0] + 
 			 satellitePosition[1]*satellitePosition[1] +
@@ -218,13 +260,20 @@ private:
     return incidence;
   }
 
-  void searchPassageCloserToGround(SarSensorModelAdapter::Point3DType satellitePosition, SarSensorModelAdapter::Point3DType xyzCart, std::ofstream& output, SarSensorModelAdapter::Point3DType rm){
+  // Local Vector
+  void computeLocalVector(SarSensorModelAdapter::Point3DType satellitePosition, 
+			  SarSensorModelAdapter::Point3DType xyzCart, 
+			  SarSensorModelAdapter::Point3DType rm,
+			  double * resultsLocalVector)
+  {
     double normeRm = sqrt(rm[0] * rm[0] + rm[1] * rm[1] + rm[2] * rm[2]);
     
     // Calculate the local vectors
     SarSensorModelAdapter::Point3DType vecti;
     SarSensorModelAdapter::Point3DType vectj;
     SarSensorModelAdapter::Point3DType vectk;
+    
+    // lon an lat into radians
     double lon = GetParameterFloat("lon")*M_PI/180.;
     double lat = GetParameterFloat("lat")*M_PI/180.;
     
@@ -241,19 +290,27 @@ private:
     vectk[2] = sin(lat);
 
     // Rm projection
-    output << "Ground target --> Satellite Vector" << std::endl;
+    // Use -Rm  because the given rm, here, is egal to : -(xyzCart - satellitePosition)
     double northProjection = -(vecti[0]*(-rm[0])+vecti[1]*(-rm[1])+vecti[2]*(-rm[2]))/normeRm;
     double eastProjection = -(vectj[0]*(-rm[0])+vectj[1]*(-rm[1])+vectj[2]*(-rm[2]))/normeRm;
     double verticalProjection = -(vectk[0]*(-rm[0])+vectk[1]*(-rm[1])+vectk[2]*(-rm[2]))/normeRm;
-    otbAppLogINFO(<< "North Projection : " << northProjection);
-    otbAppLogINFO(<< "East Projection : " << eastProjection);
-    otbAppLogINFO(<< "Vertical Projection : " << verticalProjection);
-    output << "North Projection : " << northProjection << std::endl;
-    output << "East Projection : " << eastProjection << std::endl;
-    output << "Vertical Projection : " << verticalProjection << std::endl;
+    otbAppLogDEBUG(<< "North Projection : " << northProjection);
+    otbAppLogDEBUG(<< "East Projection : " << eastProjection);
+    otbAppLogDEBUG(<< "Vertical Projection : " << verticalProjection);
+
+    // Assign output
+    resultsLocalVector[0] = northProjection;
+    resultsLocalVector[1] = eastProjection;
+    resultsLocalVector[2] = verticalProjection;
   }
 
-  void computeAltAmbig(SarSensorModelAdapter::Point3DType xyzCart, SarSensorModelAdapter::Point3DType* satellitePosition, SarSensorModelAdapter::Point3DType* satelliteVelocity, double lambda, std::ofstream& output){
+  // Alt Ambig
+  void computeAltAmbig(SarSensorModelAdapter::Point3DType xyzCart, 
+		       SarSensorModelAdapter::Point3DType* satellitePosition, 
+		       SarSensorModelAdapter::Point3DType* satelliteVelocity, 
+		       double lambda, std::vector<std::string> imgNames, 
+		       double * resultsLocalVector, double * results)
+  {
     // Adjust the formula in case of non-monostatic mode
     double factorBperp = (!IsParameterEnabled("bistatic"))? 1.0:2.0;
     double factorHamb = (!IsParameterEnabled("bistatic"))? 2.0:1.0;
@@ -313,24 +370,24 @@ private:
     double inc_moy = ((incidenceRe + incidenceRm) / 2) * M_PI / 180.;
 
     double alt_amb = lambda * sin(inc_moy) / (factorHamb * tan(alpha));
-    std::string master = getFilename(GetParameterString("inmaster"));
-    std::string slave = getFilename(GetParameterString("inslave"));
-    otbAppLogINFO(<< std::left
-		  << std::setw(60) << master
-		  << std::setw(60) << slave
+    std::string master = imgNames[0];
+    std::string slave = imgNames[1];
+    otbAppLogDEBUG(<< std::left
+		  << std::setw(70) << master
+		  << std::setw(70) << slave
 		  << std::setw(12) << inc_moy * 180. / M_PI
 		  << std::setw(12) << alt_amb
 		  << std::setw(12) << xe
 		  << std::setw(12) << ye / factorBperp);
-    output << std::left
-	   << std::setw(60) << master
-	   << std::setw(60) << slave
-	   << std::setw(12) << inc_moy * 180. / M_PI
-	   << std::setw(12) << alt_amb
-	   << std::setw(12) << xe
-	   << std::setw(12) << ye / factorBperp << std::endl;
-
-    searchPassageCloserToGround(satellitePosition[0], xyzCart, output, rm);
+
+    // Assign output
+    results[0] = inc_moy * 180. / M_PI; // Mean incidence (in degrees)
+    results[1] = alt_amb; // Ambiguity height
+    results[2] = xe; // Radial coordinate
+    results[3] = ye / factorBperp; // Lateral coordinate
+    
+    // Local vector estimation (for master only)
+    computeLocalVector(satellitePosition[0], xyzCart, rm, resultsLocalVector);
   }
 
 };