diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt
index dd339f5ab7bfa4d76c5e1ea0d35c64bb2a34d03f..f036cc0e37799343ffa29f615fd250d843968ac1 100644
--- a/app/CMakeLists.txt
+++ b/app/CMakeLists.txt
@@ -59,11 +59,6 @@ OTB_CREATE_APPLICATION(NAME SARCartesianMeanEstimation
                        LINK_LIBRARIES ${${otb-module}_LIBRARIES}
 )
 
-OTB_CREATE_APPLICATION(NAME SARCartesianMeanWithMeanPerLineEstimation
-                       SOURCES otbSARCartesianMeanWithMeanPerLineEstimation.cxx
-                       LINK_LIBRARIES ${${otb-module}_LIBRARIES}
-)
-
 OTB_CREATE_APPLICATION(NAME SARInterferogram
                        SOURCES otbSARInterferogram.cxx
                        LINK_LIBRARIES ${${otb-module}_LIBRARIES}
diff --git a/app/otbSARCartesianMeanWithMeanPerLineEstimation.cxx b/app/otbSARCartesianMeanWithMeanPerLineEstimation.cxx
deleted file mode 100644
index 70f4456db6f42245f9832cb0cd5c2755bf2bdba9..0000000000000000000000000000000000000000
--- a/app/otbSARCartesianMeanWithMeanPerLineEstimation.cxx
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * Copyright (C) 2005-2018 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "otbWrapperApplication.h"
-#include "otbWrapperApplicationFactory.h"
-
-#include "otbSARDEMPolygonsAnalysisImageFilter.h"
-#include "otbSARCartesianMeanWithMeanPerLineFunctor.h"
-
-#include "otbWrapperOutputImageParameter.h"
-
-#include <iostream>
-#include <string>
-#include <fstream>
-
-namespace otb
-{
-namespace Wrapper
-{
-
-class SARCartesianMeanWithMeanPerLineEstimation : public Application
-{
-public:
-  typedef SARCartesianMeanWithMeanPerLineEstimation Self;
-  typedef itk::SmartPointer<Self> Pointer; 
-
-  itkNewMacro(Self);
-  itkTypeMacro(SARCartesianMeanWithMeanPerLineEstimation, otb::Wrapper::Application);
-
-  // Pixels
-  typedef typename FloatVectorImageType::PixelType       ImageInPixelType;
-  typedef typename DoubleVectorImageType::PixelType             ImageOutPixelType;   
-
-  // Function
-  typedef otb::Function::SARCartesianMeanWithMeanPerLineFunctor<ImageInPixelType, ImageOutPixelType> CartesianMeanFunctorType;
-
-  // Filters
-  typedef otb::SARDEMPolygonsAnalysisImageFilter < FloatVectorImageType, DoubleVectorImageType, FloatImageType, ComplexFloatImageType, CartesianMeanFunctorType > FilterType;
-
-private:
-  void DoInit() override
-  {
-    SetName("SARCartesianMeanWithMeanPerLineEstimation");
-    SetDescription("SAR Cartesian Mean estimation thanks to the associated DEM.");
-
-    SetDocLongDescription("This application estimates a cartesian image per pixel and per line thanks to a DEM file.");
-
-    //Optional descriptors
-    SetDocLimitations("Only Sentinel 1 products are supported for now.");
-    SetDocAuthors("OTB-Team");
-    SetDocSeeAlso(" ");
-    AddDocTag(Tags::SAR);
-
-    //Parameter declarations
-    AddParameter(ParameterType_InputImage,  "indemproj",   "Input vector of DEM projected into SAR geometry");
-    SetParameterDescription("indemproj", "Input vector image for cartesian mean estimation.");
-
-    AddParameter(ParameterType_InputImage,  "indem",   "Input DEM");
-    SetParameterDescription("indem", "DEM to extract DEM geometry.");
-
-    AddParameter(ParameterType_InputImage,  "insar",   "Input SAR image");
-    SetParameterDescription("insar", "SAR Image to extract SAR geometry.");
-
-    AddParameter(ParameterType_Int,  "indirectiondemc", "Range direction for DEM scan");
-    SetParameterDescription("indirectiondemc", "Range direction for DEM scan.");
-    SetDefaultParameterInt("indirectiondemc", 1);
-    MandatoryOff("indirectiondemc");
-
-    AddParameter(ParameterType_Int,  "indirectiondeml", "Azimut direction for DEM scan");
-    SetParameterDescription("indirectiondeml", "Azimut direction for DEM scan.");
-    SetDefaultParameterInt("indirectiondeml", 1);
-    MandatoryOff("indirectiondeml");
-
-    AddParameter(ParameterType_Int, "mlran", "Averaging on distance (output geometry)");
-    SetParameterDescription("mlran","Averaging on distance (output geometry)");
-    SetDefaultParameterInt("mlran", 3);
-    SetMinimumParameterIntValue("mlran", 1);
-    MandatoryOff("mlran");
-    
-    AddParameter(ParameterType_Int, "mlazi", "Averaging on azimut (output geometry)");
-    SetParameterDescription("mlazi","Averaging on azimut (output geometry)");
-    SetDefaultParameterInt("mlazi", 3);
-    SetMinimumParameterIntValue("mlazi", 1);
-    MandatoryOff("mlazi");
-
-    AddParameter(ParameterType_OutputImage, "out", "Output cartesian (mean) Image for DEM Projection");
-    SetParameterDescription("out","Output cartesian (mean) Image for DEM Projection.");
-    
-    AddParameter(ParameterType_OutputImage, "outopt", "Optionnal Output cartesian (mean) Per line");
-    SetParameterDescription("outopt","Optionnal Output cartesian (mean) Per line.");
-    
-
-    AddRAMParameter();
-
-    SetDocExampleParameterValue("indemproj","CLZY_S21E055.tiff");
-    SetDocExampleParameterValue("indem","S21E055.hgt");
-    SetDocExampleParameterValue("insar","s1a-s4-slc-vv-20160818t014650-20160818t014715-012648-013db1-002_SLC.tiff");
-    SetDocExampleParameterValue("out","s1a-s4-simu-cartMean.tiff");
-    SetDocExampleParameterValue("outopt","s1a-s4-simu-cartMeanPerLine.tiff");
-  }
-
-  void DoUpdateParameters() override
-  {
-    // Nothing to do here : all parameters are independent
-  }
-
-  void DoExecute() override
-  {  
-    // Get numeric parameters : ML factors and directions for DEM scan
-    int mlRan = GetParameterInt("mlran");
-    int mlAzi = GetParameterInt("mlazi");
-    int DEMScanDirectionC = GetParameterInt("indirectiondemc");
-    int DEMScanDirectionL = GetParameterInt("indirectiondeml");
-
-    otbAppLogINFO(<<"ML Range : "<<mlRan);
-    otbAppLogINFO(<<"ML Azimut : "<<mlAzi);
-    otbAppLogINFO(<<"Direction (DEM scan) in range : "<<DEMScanDirectionC);
-    otbAppLogINFO(<<"Direction (DEM scan) in azimut : "<<DEMScanDirectionL);
-    
-    // Start the first pipelines (Read SAR and DEM image metedata)
-    ComplexFloatImageType::Pointer SARPtr = GetParameterComplexFloatImage("insar");
-    FloatImageType::Pointer DEMPtr = GetParameterFloatImage("indem");
-
-   
-    // CartesianMeanEstimation Filter (use SARDEMPolygonsAnalysisImageFilter with SARCartesianMeanEstimationFunctor
-    // to estimate cartesian mean image per pixel and per line)
-    FilterType::Pointer filterCartesianMeanEstimation = FilterType::New();
-    m_Ref.push_back(filterCartesianMeanEstimation.GetPointer());
-    filterCartesianMeanEstimation->SetSARImageKeyWorList(SARPtr->GetImageKeywordlist());
-    filterCartesianMeanEstimation->SetSARImagePtr(SARPtr);
-    filterCartesianMeanEstimation->SetDEMImagePtr(DEMPtr);
-    filterCartesianMeanEstimation->SetDEMInformation(0, DEMScanDirectionC, DEMScanDirectionL);
-    filterCartesianMeanEstimation->initializeMarginAndRSTransform();
-	
-    // Function Type : SARCartesianMeanEstimationFunctor
-    int nbThreads = filterCartesianMeanEstimation->GetNumberOfThreads();
-    CartesianMeanFunctorType::Pointer functor =  CartesianMeanFunctorType::New(nbThreads, mlRan, mlAzi);
-    filterCartesianMeanEstimation->SetFunctorPtr(functor);
-
-
-    // Define the main pipeline (controlled with extended FileName)
-    std::string origin_FileName = GetParameterString("out");
-
-    // Check if FileName is extended (with the ? caracter)
-    // If not extended then override the FileName
-    if (origin_FileName.find("?") == std::string::npos && !origin_FileName.empty()) 
-      {
-	std::string extendedFileName = origin_FileName;
-
-	// Get the ram value (in MB)
-	int ram = GetParameterInt("ram");
-	
-	// Define with the ram value, the number of lines for the streaming
-	int nbColSAR = SARPtr->GetLargestPossibleRegion().GetSize()[0];
-	int nbLinesSAR = SARPtr->GetLargestPossibleRegion().GetSize()[1];
-	// To determine the number of lines : 
-	// nbColSAR * nbLinesStreaming * sizeof(OutputPixel) = RamValue/2 (/2 to be sure)
-	// OutputPixel are float => sizeof(OutputPixel) = 4 (Bytes)
-	long int ram_In_KBytes = (ram/2) * 1024;
-	long int nbLinesStreaming = (ram_In_KBytes / (nbColSAR)) * (1024/4);
-	
-	// Check the value of nbLinesStreaming
-	int nbLinesStreamingMax = 15000;
-	if (nbLinesStreamingMax > nbLinesSAR)
-	  {
-	    nbLinesStreamingMax = nbLinesSAR;
-	  }
-	if (nbLinesStreaming <= 0 || nbLinesStreaming >  nbLinesStreamingMax)
-	  {
-	    nbLinesStreaming =  nbLinesStreamingMax;
-	  } 
-	
-	// Construct the extendedPart
-	std::ostringstream os;
-	os << "?&streaming:type=stripped&streaming:sizevalue=" << nbLinesStreaming;
-	
-	// Add the extendedPart
-	std::string extendedPart = os.str();
-	extendedFileName.append(extendedPart);
-	
-	// Set the new FileName with extended options
-	SetParameterString("out", extendedFileName);
-      }
-
-    // Execute the main Pipeline
-    filterCartesianMeanEstimation->SetInput(GetParameterImage<FloatVectorImageType>("indemproj"));
-    SetParameterOutputImage<DoubleVectorImageType>("out", filterCartesianMeanEstimation->GetOutput());
-    SetParameterOutputImage<DoubleVectorImageType>("outopt", filterCartesianMeanEstimation->GetOptionnalOutput());
-  }
-  // Vector for filters 
-  std::vector<itk::ProcessObject::Pointer> m_Ref;
-
-};
-
-
-}
-
-}
-
-OTB_APPLICATION_EXPORT(otb::Wrapper::SARCartesianMeanWithMeanPerLineEstimation)
diff --git a/include/otbSARCartesianMeanWithMeanPerLineFunctor.h b/include/otbSARCartesianMeanWithMeanPerLineFunctor.h
deleted file mode 100644
index a144bd7998741e8b7e387b805296c7dfa4ab591f..0000000000000000000000000000000000000000
--- a/include/otbSARCartesianMeanWithMeanPerLineFunctor.h
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Copyright (C) 2005-2018 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbSARCartesianMeanWithMeanPerLineFunctor_h
-#define otbSARCartesianMeanWithMeanPerLineFunctor_h
-#include <cassert>
-
-#include "itkVariableLengthVector.h"
-#include "itkRGBPixel.h"
-#include "itkRGBAPixel.h"
-#include "itkObject.h"
-#include "itkObjectFactory.h"
-
-#include "otbSARPolygonsFunctor.h"
-#include "otbSARCartesianMeanFunctor.h" 
-
-namespace otb
-{
-namespace Function
-{
-/** \class SARCartesianMeanWithMeanPerLineFunctor
-* \brief Catesian mean estimation for each output pixel and output line.
-*
-* This functor spreads SARCartesianMeanFunctor. It estimates the Cartesian coordonates mean image and
-* an optionnal image (Cartesian coordonates mean for each output line).
-*
-* The characteristics are the following :
-* _ Output Geometry : ML (defined by ML factors)
-* _ Seven required components : L, C, Y, Z, XCart, YCart and ZCart
-* _ Three estimated component : Mean of XCart, YCart and ZCart
-* _ Optionnal image : Yes (dimension 1 x nbLineOfMainOutput)
-*
-* \ingroup DiapOTBModule
-*/
-  template <class TInputPixel, class TOutputPixel>
-  class SARCartesianMeanWithMeanPerLineFunctor : public SARCartesianMeanFunctor<TInputPixel, TOutputPixel>
-{
-public:
-  /** Standard class typedefs */
-  typedef SARCartesianMeanWithMeanPerLineFunctor                     Self;
-  typedef SARCartesianMeanFunctor<TInputPixel, TOutputPixel>         Superclass;
-  typedef itk::SmartPointer<Self>       Pointer;
-  typedef itk::SmartPointer<const Self> ConstPointer;
- 
-  /** Runtime information */
-  itkTypeMacro(SARCartesianMeanWithMeanPerLineFunctor, itk::Object);
-
-  /**
-   * Method synthetize (override)
-   */
-  // Synthetize to apply on XCart, YCart and Zcart the counter of polygons
-  void synthetize(int nbElt, TOutputPixel * outValue, int threadId=1) override
-  {
-    // ReInitialize m_OutMeanByLine and m_CountPolygonsPerLine
-    m_OutMeanByLine[threadId][0] = 0;
-    m_OutMeanByLine[threadId][1] = 0;
-    m_OutMeanByLine[threadId][2] = 0;
-    m_CountPolygonsPerLine[threadId] = 0;
-
-    //////// Mean by line ////////
-    for(int ind = 0; ind < nbElt; ind++)
-      {
-	m_OutMeanByLine[threadId][0] += outValue[ind][0];
-	m_OutMeanByLine[threadId][1] += outValue[ind][1];
-	m_OutMeanByLine[threadId][2] += outValue[ind][2];
-
-	m_CountPolygonsPerLine[threadId] += this->m_CountPolygons[threadId][ind];
-      }
-
-    if (m_CountPolygonsPerLine[threadId] != 0)
-      {
-	m_OutMeanByLine[threadId][0] /= m_CountPolygonsPerLine[threadId];
-	m_OutMeanByLine[threadId][1] /= m_CountPolygonsPerLine[threadId];
-	m_OutMeanByLine[threadId][2] /= m_CountPolygonsPerLine[threadId];
-      }
-
-    //////// Mean by pixel ////////
-    for(int ind = 0; ind < nbElt; ind++)
-      {
-	if (this->m_CountPolygons[threadId][ind] !=0)
-	  {
-	    outValue[ind][0] /= this->m_CountPolygons[threadId][ind];
-	    outValue[ind][1] /= this->m_CountPolygons[threadId][ind];
-	    outValue[ind][2] /= this->m_CountPolygons[threadId][ind];
-	  }
-      }
-  }
-  
-
-  /**
-   * Method estimateOptionnalImage (override)
-   */
-  void estimateOptionnalImage(TOutputPixel * outValue, int threadId=1) override
-  {
-    // Allocation of Components
-    outValue[0].Reserve(4);
-
-    // Assignate (only one element per line for this functor)
-    outValue[0][0] = m_OutMeanByLine[threadId][0];
-    outValue[0][1] = m_OutMeanByLine[threadId][1];
-    outValue[0][2] = m_OutMeanByLine[threadId][2];
-    
-    // IsData always to 1
-    outValue[0][3] = 1;    
-  }
-  
-
-  /** Constructor */ // 
-  SARCartesianMeanWithMeanPerLineFunctor(int nbThreads, unsigned int mlran = 1, unsigned int mlazi = 1) : Superclass(nbThreads, mlran, mlazi)
-  {    
-    // Specific argument
-     m_CountPolygonsPerLine = new int[this->m_NbThreads];
-
-    // Allocate the buffer of polygons for each thread 
-    for (int i = 0; i < this->m_NbThreads; i++)
-      {
-	m_CountPolygonsPerLine[i] = 0;
-      }
-  
-    // Set optionnal output (MeanPerline Image) to true
-    this->SetWithOptionnalOutput(true);    
-
-    // Allocate the MeanPerline Buffer
-    m_OutMeanByLine = new TOutputPixel[this->m_NbThreads];
-   
-    for (int i = 0; i < this->m_NbThreads; i++)
-      {
-	m_OutMeanByLine[i].Reserve(4);
-	m_OutMeanByLine[i][0] = 0;
-	m_OutMeanByLine[i][1] = 0;
-	m_OutMeanByLine[i][2] = 0;
-	m_OutMeanByLine[i][3] = 0;
-      }
-  }
-
-
-  // Redefinition to use construction with NumberOfThreads (Functor used in Multi-Threading)
-  static Pointer New(int nbThreads, unsigned int mlran = 1, unsigned int mlazi = 1) 
-  {
-  Pointer smartPtr = ::itk::ObjectFactory< Self >::Create();    
-    if ( smartPtr == nullptr )				     
-       {                                                
-         smartPtr = new Self(nbThreads, mlran, mlazi);                                
-        }                                                
-       smartPtr->UnRegister();                            
-       return smartPtr;
-  }
-
-  /** Destructor */
-  ~SARCartesianMeanWithMeanPerLineFunctor() override 
-  {
-    // free Memory
-    delete m_CountPolygonsPerLine;
-
-    for (int i = 0; i < this->m_NbThreads; i++)
-      {
-	m_OutMeanByLine[i].DestroyExistingData(); // TOutputPixel a itk::VariableLengthVector
-      }
-  }
-  
-  
-private :
-  int * m_CountPolygonsPerLine;
-  TOutputPixel * m_OutMeanByLine;
-  int m_CountLine;
-  };
-
-}
-}
-
-#endif