diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index f0de6bfcd81f02792a9521b220cd7a30a5695ac2..91bd8eedbed7cfa2aad919bc0be7eb7dc999c8fd 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -24,10 +24,10 @@ before_script:
   # Provision efficiently the local LFS cache before checkout
   - git lfs fetch origin $CI_COMMIT_SHA
   # Checkout the expected branch
-  - git checkout $CI_COMMIT_REF_NAME
+  - git checkout -f -q $CI_COMMIT_SHA
 
 after_script:
-  - python3 CI/cdash_handler.py $CI_COMMIT_SHA $CI_PROJECT_ID $CI_PROJECT_DIR $K8S_SECRET_CDASH
+  - python3 CI/cdash_handler.py $CI_COMMIT_SHA $CI_PROJECT_ID $CI_PROJECT_DIR $K8S_SECRET_API_TOKEN
 
 stages:
   - precheck
diff --git a/CI/check_twin_pipelines.py b/CI/check_twin_pipelines.py
index d2a6113924677266de8cf30f8d35debc8ee2c3ea..7f05c1809cf02ae3d37b8bfd984a4bbf24756906 100644
--- a/CI/check_twin_pipelines.py
+++ b/CI/check_twin_pipelines.py
@@ -64,25 +64,29 @@ if __name__ == "__main__":
   sha1 = env['CI_COMMIT_SHA']
   # are we in a merge_request pipeline ?
   if 'CI_MERGE_REQUEST_IID' in env.keys():
-    if not CheckEnvParameters(['K8S_SECRET_TWIN_PIPELINE','CI_PROJECT_ID','CI_PIPELINE_ID']):
+    if not CheckEnvParameters(['K8S_SECRET_API_TOKEN']):
+      print("Make sure you have set a valid acces token for Gitlab API")
+      print("The K8S_SECRET_API_TOKEN environment variable should be set in 'Settings -> CI/CD -> Variables'")
       sys.exit(1)
-    mrInfo = GitlabRequest('merge_requests/'+env['CI_MERGE_REQUEST_IID'],token=env['K8S_SECRET_TWIN_PIPELINE'])
+    if not CheckEnvParameters(['CI_PROJECT_ID','CI_PIPELINE_ID']):
+      sys.exit(1)
+    mrInfo = GitlabRequest('merge_requests/'+env['CI_MERGE_REQUEST_IID'],token=env['K8S_SECRET_API_TOKEN'])
     wip_regex = re.compile("^[Ww][Ii][Pp]:")
     # is it a "WIP" merge request ?
     if wip_regex.search(mrInfo["title"]):
       # Yes: cancel the current pipeline
       print("Cancel current pipeline "+env['CI_PIPELINE_ID'])
       GitlabRequest('pipelines/'+env['CI_PIPELINE_ID']+'/cancel', data={}, \
-        project=env['CI_PROJECT_ID'], token=env['K8S_SECRET_TWIN_PIPELINE'])
+        project=env['CI_PROJECT_ID'], token=env['K8S_SECRET_API_TOKEN'])
       time.sleep(180)
       print("Error: this pipeline should have been canceled")
       sys.exit(1)
     else:
       # No: cancel any previous "normal" pipeline on the same SHA1
-      jres = GitlabRequest('pipelines?sha='+sha1, project=env['CI_PROJECT_ID'], token=env['K8S_SECRET_TWIN_PIPELINE'])
+      jres = GitlabRequest('pipelines?sha='+sha1, project=env['CI_PROJECT_ID'], token=env['K8S_SECRET_API_TOKEN'])
       for item in jres:
         if item["id"] < int(env['CI_PIPELINE_ID']) and item["status"] == "running":
           print("Cancel pipeline "+str(item["id"]))
           jres2 = GitlabRequest('pipelines/'+str(item["id"])+'/cancel', data={}, \
-            project=env['CI_PROJECT_ID'], token=env['K8S_SECRET_TWIN_PIPELINE'])
+            project=env['CI_PROJECT_ID'], token=env['K8S_SECRET_API_TOKEN'])
 
diff --git a/CI/configure_options.cmake b/CI/configure_options.cmake
index d0b41c6adc0fe7546fecfbb698a5710cf849755d..861e24eeccea3d816cdb31da419ef6fda03459af 100644
--- a/CI/configure_options.cmake
+++ b/CI/configure_options.cmake
@@ -55,8 +55,7 @@ OTB_USE_SSE_FLAGS:BOOL=ON
 OTB_MPIEXEC_OPT:STRING=--allow-run-as-root")
 
 set (otb_wrap_option
-"OTB_WRAP_JAVA:BOOL=ON
-OTB_WRAP_PYTHON:BOOL=ON")
+"OTB_WRAP_PYTHON:BOOL=ON")
 
 set (otb_data_option
 "OTB_DATA_USE_LARGEINPUT:BOOL=OFF
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8ffe654ab3f8e0b5a2892cc95206595e3b23f1f8..c162d39a17e6c8203d186fdad434ae93a651dc74 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -165,9 +165,6 @@ endif()
 if(NOT OTB_INSTALL_PYTHON_DIR)
   set(OTB_INSTALL_PYTHON_DIR "${OTB_INSTALL_LIBRARY_DIR}/otb/python")
 endif()
-if(NOT OTB_INSTALL_JAVA_DIR)
-  set(OTB_INSTALL_JAVA_DIR "${OTB_INSTALL_LIBRARY_DIR}/otb/java")
-endif()
 if(NOT OTB_INSTALL_DATA_DIR)
   set(OTB_INSTALL_DATA_DIR "share/otb")
 endif()
@@ -533,7 +530,6 @@ foreach(otb_option
     CMAKE_CXX_FLAGS
     ${option_list}
     OTB_WRAP_PYTHON
-    OTB_WRAP_JAVA
     OTB_DATA_ROOT
     OTB_USE_OPENMP
     OTB_USE_SSE_FLAGS
diff --git a/Data/Baseline/OTB-Applications/Files/apTvClTrainVectorRegressionModel.1.txt b/Data/Baseline/OTB-Applications/Files/apTvClTrainVectorRegressionModel.1.txt
new file mode 100644
index 0000000000000000000000000000000000000000..20e589ba2a9407e406e8511baf12a44bc63c2a43
--- /dev/null
+++ b/Data/Baseline/OTB-Applications/Files/apTvClTrainVectorRegressionModel.1.txt
@@ -0,0 +1 @@
+io.mse: 0.003289417131
diff --git a/Data/Baseline/OTB-Applications/Files/apTvClTrainVectorRegressionModel.txt b/Data/Baseline/OTB-Applications/Files/apTvClTrainVectorRegressionModel.txt
new file mode 100644
index 0000000000000000000000000000000000000000..aec10cefd80236745402a3c392cbc9590a666de6
--- /dev/null
+++ b/Data/Baseline/OTB-Applications/Files/apTvClTrainVectorRegressionModel.txt
@@ -0,0 +1 @@
+io.mse: 0.001359587419
diff --git a/Data/Baseline/OTB-Applications/Files/apTvTestApplicationOutputXML_All.xml b/Data/Baseline/OTB-Applications/Files/apTvTestApplicationOutputXML_All.xml
index 1c1803f11a3e483a5a25f2ef137c8cfca743b4b0..df8aac655e0b4d274795174d53e1cb443eebac8e 100644
--- a/Data/Baseline/OTB-Applications/Files/apTvTestApplicationOutputXML_All.xml
+++ b/Data/Baseline/OTB-Applications/Files/apTvTestApplicationOutputXML_All.xml
@@ -5,7 +5,6 @@
         <name>TestApplication</name>
         <descr>This application helps developers to test parameters types</descr>
         <doc>
-            <name>Test</name>
             <longdescr>The purpose of this application is to test parameters types.</longdescr>
             <authors>OTB-Team</authors>
             <limitations>None</limitations>
diff --git a/Documentation/Cookbook/Scripts/otbGenerateWrappersRstDoc.py b/Documentation/Cookbook/Scripts/otbGenerateWrappersRstDoc.py
index 8cd9ab8ed70e204d915e32c25ebb4944f52b4a9b..5cb3224bc01e41a3a1df7511dd28f1c5b050f722 100755
--- a/Documentation/Cookbook/Scripts/otbGenerateWrappersRstDoc.py
+++ b/Documentation/Cookbook/Scripts/otbGenerateWrappersRstDoc.py
@@ -25,7 +25,7 @@ import argparse
 import re
 
 import otbApplication
-from otbApplication import ParameterType_Bool, ParameterType_Int, ParameterType_Radius, ParameterType_RAM, ParameterType_Float, ParameterType_String, ParameterType_StringList, ParameterType_InputFilename, ParameterType_OutputFilename, ParameterType_InputImage, ParameterType_OutputImage, ParameterType_InputVectorData, ParameterType_OutputVectorData, ParameterType_Directory, ParameterType_Choice, ParameterType_InputImageList, ParameterType_InputVectorDataList, ParameterType_InputFilenameList, ParameterType_InputProcessXML, ParameterType_OutputProcessXML, ParameterType_ListView, ParameterType_Group
+from otbApplication import ParameterType_Bool, ParameterType_Int, ParameterType_Radius, ParameterType_RAM, ParameterType_Float, ParameterType_String, ParameterType_StringList, ParameterType_InputFilename, ParameterType_OutputFilename, ParameterType_InputImage, ParameterType_OutputImage, ParameterType_InputVectorData, ParameterType_OutputVectorData, ParameterType_Directory, ParameterType_Choice, ParameterType_InputImageList, ParameterType_InputVectorDataList, ParameterType_InputFilenameList, ParameterType_ListView, ParameterType_Group
 
 from otb_warnings import application_documentation_warnings
 
@@ -202,7 +202,6 @@ def rst_parameter_value(app, key):
     values.update({ParameterType_InputImageList: "image1 image2..."})
     values.update({ParameterType_InputVectorDataList: "vectorfile1 vectorfile2..."})
     values.update({ParameterType_InputFilenameList: "filename1 filename2..."})
-    values.update(dict.fromkeys([ParameterType_InputProcessXML, ParameterType_OutputProcessXML], "filename.xml"))
 
     if type in values:
         return values[type]
@@ -356,10 +355,17 @@ def make_links(text, allapps):
     rep = {appname: ":ref:`{}`".format(appname) for appname in allapps}
     return multireplace(text, rep)
 
+def render_deprecation_string(app):
+    if app.IsDeprecated():
+        return "This application is deprecated and will be removed in a future release."
+    else:
+        return ""
+
 def render_application(appname, allapps):
     "Render app to rst"
 
-    app = otbApplication.Registry.CreateApplication(appname)
+    # Create the application without logger to avoid the deprecation warning log
+    app = otbApplication.Registry.CreateApplicationWithoutLogger(appname)
 
     # TODO: remove this when bug 440 is fixed
     app.Init()
@@ -368,6 +374,7 @@ def render_application(appname, allapps):
 
     output = template_application.format(
         label=appname,
+        deprecation_string=render_deprecation_string(app),
         heading=rst_section(app.GetName(), '='),
         description=app.GetDescription(),
         longdescription=make_links(app.GetDocLongDescription(), allapps),
@@ -381,8 +388,9 @@ def render_application(appname, allapps):
     return output
 
 def GetApplicationTags(appname):
-     app = otbApplication.Registry.CreateApplication(appname)
-     return app.GetDocTags()
+    # Create the application without logger to avoid the deprecation warning log
+    app = otbApplication.Registry.CreateApplicationWithoutLogger(appname)
+    return app.GetDocTags()
 
 def GenerateRstForApplications(rst_dir):
     "Generate .rst files for all applications"
@@ -404,9 +412,12 @@ def GenerateRstForApplications(rst_dir):
     for appName in appNames:
 
         # Get application first tag
-        tags = GetApplicationTags(appName)
+        tags = list(GetApplicationTags(appName))
+        if "Deprecated" in tags:
+            tags.remove("Deprecated")
         if not tags or len(tags) == 0:
             raise RuntimeError("No tags for application: " + appName)
+
         tag = tags[0]
         tag_ = tag.replace(" ", "_")
 
diff --git a/Documentation/Cookbook/rst/C++/WriteAnApplication.rst b/Documentation/Cookbook/rst/C++/WriteAnApplication.rst
index 412a789d70bf9190b51272653ff0458ae1b4e7c4..a1497c8d6e7af1b39a43c28081fb62ab9240ab7c 100644
--- a/Documentation/Cookbook/rst/C++/WriteAnApplication.rst
+++ b/Documentation/Cookbook/rst/C++/WriteAnApplication.rst
@@ -158,9 +158,6 @@ parameters:
 -  ``ParameterType_InputVectorDataList`` : parameter storing a list of
    input vector data.
 
--  ``ParameterType_InputProcessXML`` : parameter storing an input XML
-   file name.
-
 -  ``ParameterType_OutputFilename`` : parameter storing an output file
    name.
 
@@ -169,9 +166,6 @@ parameters:
 -  ``ParameterType_OutputVectorData`` : parameter storing an output
    vector data.
 
--  ``ParameterType_OutputProcessXML`` : parameter storing an output XML
-   file name.
-
 -  ``ParameterType_RAM`` : parameter storing the maximum amount of RAM
    to be used.
 
diff --git a/Documentation/Cookbook/rst/CliInterface.rst b/Documentation/Cookbook/rst/CliInterface.rst
index eebd130fe3f08995be54e36ddf4c822fc247b3de..6717fd10ee5c21f79ec48996d5d2ef3ef0ddd940 100644
--- a/Documentation/Cookbook/rst/CliInterface.rst
+++ b/Documentation/Cookbook/rst/CliInterface.rst
@@ -123,7 +123,6 @@ example based on the OrthoRectification application:
             -opt.rpc                 <int32>          RPC modeling (points per axis)  (optional, off by default, default value is 10)
             -opt.ram                 <int32>          Available RAM (MB)  (optional, off by default, default value is 128)
             -opt.gridspacing         <float>          Resampling grid spacing  (optional, off by default, default value is 4)
-            -inxml                   <string>         Load parameters from XML  (optional, off by default)
             -progress                <boolean>        Report progress
             -help                    <string list>    Display long help (empty list), or help for given parameters keys
 
@@ -145,11 +144,10 @@ Command-line examples are provided in the chapter :ref:`apprefdoc`.
 Load and save parameters to XML
 -------------------------------
 
-Since OTB 3.20, OTB applications parameters can be export/import to/from
-an XML file using inxml/outxml parameters. Those parameters are
-available in all applications.
-
-An example is worth a thousand words
+OTB application parameters can be saved and loaded to
+an XML file using the special ``-inxml`` and ``-outxml`` parameters.
+Those parameters are available in all applications.
+For example:
 
 ::
 
@@ -177,17 +175,6 @@ time
 In this case it will use as mathematical expression “(im1b1 - im2b1)”
 instead of “abs(im1b1 - im2b1)”.
 
-Finally, you can also launch applications directly from the command-line
-launcher executable using the inxml parameter without having to declare
-the application name. Use in this case:
-
-::
-
-    otbApplicationLauncherCommandLine -inxml saved_applications_parameters.xml
-
-It will retrieve the application name and related parameters from the
-input XML file and launch in this case the BandMath applications.
-
 Parallel execution with MPI
 ---------------------------
 
diff --git a/Documentation/Cookbook/rst/Installation.rst b/Documentation/Cookbook/rst/Installation.rst
index 928ba0bcb044a62487cf2f6edf6cebc9f87857d6..899c95310a97cbe6e97765bac8f15030cb17463b 100644
--- a/Documentation/Cookbook/rst/Installation.rst
+++ b/Documentation/Cookbook/rst/Installation.rst
@@ -152,3 +152,15 @@ following repositories with these command-lines:
     http://download.opensuse.org/repositories/home:/tzotsos/openSUSE_Tumbleweed/ tzotsos
 
 and then add the OTB packages as shown above.
+
+
+Archlinux
+~~~~~~~~~~
+
+Package is in AUR (Arch User Repository).
+You will then need to run (if you use yaourt, you could use trizen instead):
+
+::
+
+    yaourt -S orfeo-toolbox
+
diff --git a/Documentation/Cookbook/rst/PythonAPI.rst b/Documentation/Cookbook/rst/PythonAPI.rst
index 4fa3ca24b0ed1317373a4abe6354ecec25d9e091..6f61f1b4084faebb6cc1f94b459c82c34567b148 100644
--- a/Documentation/Cookbook/rst/PythonAPI.rst
+++ b/Documentation/Cookbook/rst/PythonAPI.rst
@@ -218,11 +218,34 @@ implementation does not break it, for instance by using an internal
 writer to write intermediate data. In this case, execution should
 still be correct, but some intermediate data will be read or written.
 
+Load and save parameters to XML
+-------------------------------
+
+As with a the `command line interface` you can save application parameters
+to an xml file:
+
+.. code-block:: python
+
+    # Save application parameters to XML
+    app = otb.Registry.CreateApplication('BandMath')
+    app.SetParameterStringList("il", ["image1.tif", "image2.tif"], True)
+    app.SetParameterString("out", out, True)
+    app.SetParameterString("exp", "cos(im1b1)+im2b1*im1b1", True)
+    app.SaveParametersToXML("parameters.xml")
+
+And load them later for execution:
+
+.. code-block:: python
+
+    # Load application parameters from XML
+    app = otb.Registry.CreateApplication("BandMath")
+    app.LoadParametersFromXML("parameters.xml")
+    app.ExecuteAndWriteOutput()
+
+
 Interactions with OTB pipeline
 ------------------------------
 
-[Since OTB 6.6]
-
 The application framework has been extended in order to provide ways to
 interact with the pipelines inside each application. It applies only to
 applications that use input or output images. Let's check which  
diff --git a/Documentation/Cookbook/rst/templates/application.rst b/Documentation/Cookbook/rst/templates/application.rst
index 68db4a8b3cc9c224fcdc107d8c4e3f9f21f97329..bbe15bceff737e5f165a2bdea7d4ea17771fcaab 100644
--- a/Documentation/Cookbook/rst/templates/application.rst
+++ b/Documentation/Cookbook/rst/templates/application.rst
@@ -1,6 +1,9 @@
 .. _{label}:
 
 {heading}
+
+{deprecation_string}
+
 {description}
 
 Description
diff --git a/Examples/Application/ApplicationExample.cxx b/Examples/Application/ApplicationExample.cxx
index 5baa6562e6c04b2d6fe6fdd2f1773413093c771d..b6ba4c772886fb887ee5ff0c0f85b831b1ac8f45 100644
--- a/Examples/Application/ApplicationExample.cxx
+++ b/Examples/Application/ApplicationExample.cxx
@@ -68,7 +68,6 @@ private:
     // \begin{description}
     // \item[\code{SetName()}] Name of the application.
     // \item[\code{SetDescription()}] Set the short description of the class.
-    // \item[\code{SetDocName()}] Set long name of the application (that can be displayed \dots).
     // \item[\code{SetDocLongDescription()}] This methods is used to describe the class.
     // \item[\code{SetDocLimitations()}] Set known limitations (threading, invalid pixel type \dots) or bugs.
     // \item[\code{SetDocAuthors()}] Set the application Authors. Author List. Format : "John Doe, Winnie the Pooh" \dots
@@ -81,7 +80,6 @@ private:
         "Pay attention, it includes Latex snippets in order to generate "
         "software guide documentation");
 
-    SetDocName("Example");
     SetDocLongDescription(
         "The purpose of this application is "
         "to present parameters types,"
diff --git a/Modules/Applications/AppChangeDetection/app/otbMultivariateAlterationDetector.cxx b/Modules/Applications/AppChangeDetection/app/otbMultivariateAlterationDetector.cxx
index ab2f1476d26fe4d7b079cbaa702294487a2378f9..e5e0c6977a1a184c74f742c57c4fb26330cbb3fd 100644
--- a/Modules/Applications/AppChangeDetection/app/otbMultivariateAlterationDetector.cxx
+++ b/Modules/Applications/AppChangeDetection/app/otbMultivariateAlterationDetector.cxx
@@ -49,7 +49,6 @@ private:
     SetDescription("Change detection by Multivariate Alteration Detector (MAD) algorithm");
 
     // Documentation
-    SetDocName("Multivariate Alteration Detector");
     SetDocLongDescription("This application performs change detection between two multispectral"
                           " images using the Multivariate Alteration Detector (MAD) [1]"
                           " algorithm.\n\n"
diff --git a/Modules/Applications/AppClassification/app/CMakeLists.txt b/Modules/Applications/AppClassification/app/CMakeLists.txt
index 50ac00ea1619c068da99774d0010ee532a5b7fd1..6fc42a4ee2c73a284a379f9763b170fac9b50093 100644
--- a/Modules/Applications/AppClassification/app/CMakeLists.txt
+++ b/Modules/Applications/AppClassification/app/CMakeLists.txt
@@ -65,6 +65,11 @@ otb_create_application(
   SOURCES        otbTrainRegression.cxx
   LINK_LIBRARIES ${${otb-module}_LIBRARIES})
 
+otb_create_application(
+  NAME           TrainVectorRegression
+  SOURCES        otbTrainVectorRegression.cxx
+  LINK_LIBRARIES ${${otb-module}_LIBRARIES})
+
 otb_create_application(
   NAME           PredictRegression
   SOURCES        otbPredictRegression.cxx
diff --git a/Modules/Applications/AppClassification/app/otbClassificationMapRegularization.cxx b/Modules/Applications/AppClassification/app/otbClassificationMapRegularization.cxx
index 4738434b8d262648306d60099e7b0624a3bbb8af..516f3a47b0e2a1a6a5f0e1b72ea48dd4ea164a55 100644
--- a/Modules/Applications/AppClassification/app/otbClassificationMapRegularization.cxx
+++ b/Modules/Applications/AppClassification/app/otbClassificationMapRegularization.cxx
@@ -62,7 +62,6 @@ private:
     SetName("ClassificationMapRegularization");
     SetDescription("Filters the input labeled image using Majority Voting in a ball shaped neighbordhood");
 
-    SetDocName("Classification Map Regularization");
 
     SetDocLongDescription(
         "This application filters the input labeled image (with a maximal class label = 65535) using Majority Voting in a ball shaped neighbordhood."
diff --git a/Modules/Applications/AppClassification/app/otbComputeConfusionMatrix.cxx b/Modules/Applications/AppClassification/app/otbComputeConfusionMatrix.cxx
index 55cf789574a84708deee3ed5aec82331f048be6c..6b6e55539e049d637baa59a75a8ac51794b61cc6 100644
--- a/Modules/Applications/AppClassification/app/otbComputeConfusionMatrix.cxx
+++ b/Modules/Applications/AppClassification/app/otbComputeConfusionMatrix.cxx
@@ -109,7 +109,6 @@ private:
   SetDescription("Computes the confusion matrix of a classification");
 
   // Documentation
-  SetDocName("Confusion matrix Computation");
   SetDocLongDescription("This application computes the confusion matrix of a classification map relative to a ground truth dataset. "
       "This ground truth can be given as a raster or a vector data. Only reference and produced pixels with values different "
       "from NoData are handled in the calculation of the confusion matrix. The confusion matrix is organized the following way: "
diff --git a/Modules/Applications/AppClassification/app/otbComputeImagesStatistics.cxx b/Modules/Applications/AppClassification/app/otbComputeImagesStatistics.cxx
index dbce1c90c2b953c1af3a4db343acf0513c671550..965f4fb135859a26baa3b4474449a1acd5240214 100644
--- a/Modules/Applications/AppClassification/app/otbComputeImagesStatistics.cxx
+++ b/Modules/Applications/AppClassification/app/otbComputeImagesStatistics.cxx
@@ -48,7 +48,6 @@ private:
   void DoInit() override
   {
     SetName("ComputeImagesStatistics");
-    SetDocName("Compute Images second order statistics");
     SetDescription("Computes global mean and standard deviation for each band "
       "from a set of images and optionally saves the results in an XML file.");
     SetDocLongDescription("This application computes a global mean and standard deviation "
diff --git a/Modules/Applications/AppClassification/app/otbComputeOGRLayersFeaturesStatistics.cxx b/Modules/Applications/AppClassification/app/otbComputeOGRLayersFeaturesStatistics.cxx
index d1542167271f7dce30240bef2b78809d1b67f2b1..c8b721a62b32d6cc73b19633b9f9b3adcc8830a7 100644
--- a/Modules/Applications/AppClassification/app/otbComputeOGRLayersFeaturesStatistics.cxx
+++ b/Modules/Applications/AppClassification/app/otbComputeOGRLayersFeaturesStatistics.cxx
@@ -51,7 +51,6 @@ private:
     SetName("ComputeOGRLayersFeaturesStatistics");
     SetDescription("Compute statistics of the features in a set of OGR Layers");
 
-    SetDocName("ComputeOGRLayersFeaturesStatistics");
     SetDocLongDescription("Compute statistics (mean and standard deviation) of the features in a set of OGR Layers, and write them in an XML file. This XML file can then be used by the training application.");
     SetDocLimitations("Experimental. For now only shapefiles are supported.");
     SetDocAuthors("David Youssefi during internship at CNES");
diff --git a/Modules/Applications/AppClassification/app/otbFusionOfClassifications.cxx b/Modules/Applications/AppClassification/app/otbFusionOfClassifications.cxx
index 3c6513bf57efb5a8c09760233d0eb49ad98843cb..34ba9ebaaaa5ef0ac6aaaaee3c8d040d7f44a8d4 100644
--- a/Modules/Applications/AppClassification/app/otbFusionOfClassifications.cxx
+++ b/Modules/Applications/AppClassification/app/otbFusionOfClassifications.cxx
@@ -97,7 +97,6 @@ private:
   {
     SetName("FusionOfClassifications");
     SetDescription("Fuses several classifications maps of the same image on the basis of class labels.");
-    SetDocName("Fusion of Classifications");
     SetDocLongDescription("This application allows you to fuse several classification maps and produces a single more robust classification map. "
         "Fusion is done either by mean of Majority Voting, or with the Dempster Shafer combination method on class labels.\n\n"
         "  - MAJORITY VOTING: for each pixel, the class with the highest number of votes is selected.\n"
diff --git a/Modules/Applications/AppClassification/app/otbImageClassifier.cxx b/Modules/Applications/AppClassification/app/otbImageClassifier.cxx
index 941f7a936ed8031ae2d903ad06de13cdcc54e6aa..e7a45871aed3263db1c0530ef3b5507737317380 100644
--- a/Modules/Applications/AppClassification/app/otbImageClassifier.cxx
+++ b/Modules/Applications/AppClassification/app/otbImageClassifier.cxx
@@ -80,7 +80,6 @@ private:
     SetDescription("Performs a classification of the input image according to a model file.");
 
     // Documentation
-    SetDocName("Image Classification");
     SetDocLongDescription("This application performs an image classification based on a model file produced by the TrainImagesClassifier application. Pixels of the output image will contain the class labels decided by the classifier (maximal class label = 65535). The input pixels can be optionally centered and reduced according to the statistics file produced by the ComputeImagesStatistics application. An optional input mask can be provided, in which case only input image pixels whose corresponding mask value is greater than 0 will be classified. By default, the remaining of pixels will be given the label 0 in the output image.");
 
     SetDocLimitations("The input image must have the same type, order and number of bands than the images used to produce the statistics file and the SVM model file. If a statistics file was used during training by the TrainImagesClassifier, it is mandatory to use the same statistics file for classification. If an input mask is used, its size must match the input image size.");
diff --git a/Modules/Applications/AppClassification/app/otbKMeansClassification.cxx b/Modules/Applications/AppClassification/app/otbKMeansClassification.cxx
index d1c7fcd52f0e88e315536ec6afc7343f1ca9d5bd..0ceba570e9bfe6706231ba91d8bf750f3c36fbcb 100644
--- a/Modules/Applications/AppClassification/app/otbKMeansClassification.cxx
+++ b/Modules/Applications/AppClassification/app/otbKMeansClassification.cxx
@@ -371,7 +371,6 @@ private:
     SetName("KMeansClassification");
     SetDescription("Unsupervised KMeans image classification");
 
-    SetDocName("Unsupervised KMeans image classification");
     SetDocLongDescription("Unsupervised KMeans image classification. "
       "This is a composite application, using existing training and classification applications. "
       "The SharkKMeans model is used.\n\n"
diff --git a/Modules/Applications/AppClassification/app/otbMultiImageSamplingRate.cxx b/Modules/Applications/AppClassification/app/otbMultiImageSamplingRate.cxx
index 6f5f49091112ff62a981b730da393e35d60c8969..eecf74ed45b38c57bde61331f92f3d0eeebd11f5 100644
--- a/Modules/Applications/AppClassification/app/otbMultiImageSamplingRate.cxx
+++ b/Modules/Applications/AppClassification/app/otbMultiImageSamplingRate.cxx
@@ -63,7 +63,6 @@ private:
     SetDescription("Compute sampling rate for an input set of images.");
 
     // Documentation
-    SetDocName("Multi-image sampling rate estimation");
     SetDocLongDescription("The application computes sampling rates for a set of"
       " input images. Before calling this application, each pair of image and "
       "training vectors has to be analysed with the application "
diff --git a/Modules/Applications/AppClassification/app/otbOGRLayerClassifier.cxx b/Modules/Applications/AppClassification/app/otbOGRLayerClassifier.cxx
index ccc6e876ce781db5aeb764eef2052952849897a5..7667d25ec731ed18ca04e4832831baf4401bd684 100644
--- a/Modules/Applications/AppClassification/app/otbOGRLayerClassifier.cxx
+++ b/Modules/Applications/AppClassification/app/otbOGRLayerClassifier.cxx
@@ -60,7 +60,6 @@ private:
     SetName("OGRLayerClassifier");
     SetDescription("Classify an OGR layer based on a machine learning model and a list of features to consider.");
 
-    SetDocName("OGRLayerClassifier");
     SetDocLongDescription("This application will apply a trained machine learning model on the selected feature to get a classification of each geometry contained in an OGR layer. The list of feature must match the list used for training. The predicted label is written in the user defined field for each geometry.");
     SetDocLimitations("Experimental. Only shapefiles are supported for now.");
     SetDocAuthors("David Youssefi during internship at CNES");
diff --git a/Modules/Applications/AppClassification/app/otbPolygonClassStatistics.cxx b/Modules/Applications/AppClassification/app/otbPolygonClassStatistics.cxx
index bbfb99010e2df503fc561fad3ba528b8b3904151..c4ca1ab8346a9c96db6da1370840741934efcc85 100644
--- a/Modules/Applications/AppClassification/app/otbPolygonClassStatistics.cxx
+++ b/Modules/Applications/AppClassification/app/otbPolygonClassStatistics.cxx
@@ -72,7 +72,6 @@ private:
     SetDescription("Computes statistics on a training polygon set.");
 
     // Documentation
-    SetDocName("Polygon Class Statistics");
     SetDocLongDescription("Process a set of geometries intended for training (they should have a field giving the associated "
       "class). The geometries are analyzed against a support image to compute statistics:\n\n"
       "* Number of samples per class\n"
diff --git a/Modules/Applications/AppClassification/app/otbPredictRegression.cxx b/Modules/Applications/AppClassification/app/otbPredictRegression.cxx
index 95f5b8384e995e68286cc586ed88865fee36336b..886009b1fa1701fbc916194c01c468290f7dcdb0 100644
--- a/Modules/Applications/AppClassification/app/otbPredictRegression.cxx
+++ b/Modules/Applications/AppClassification/app/otbPredictRegression.cxx
@@ -119,7 +119,6 @@ private:
     SetDescription("Performs a prediction of the input image according to a regression model file.");
 
     // Documentation
-    SetDocName("Predict Regression");
     SetDocLongDescription("This application predict output values from an input"
                           " image, based on a regression model file produced by"
                           " the TrainRegression application. Pixels of the "
diff --git a/Modules/Applications/AppClassification/app/otbSOMClassification.cxx b/Modules/Applications/AppClassification/app/otbSOMClassification.cxx
index bddaf9ebab29980a0dc268f3bd487272b07d39bc..f1ed068cd04d93f91e1730631079dfd42bcc37cb 100644
--- a/Modules/Applications/AppClassification/app/otbSOMClassification.cxx
+++ b/Modules/Applications/AppClassification/app/otbSOMClassification.cxx
@@ -82,7 +82,6 @@ private:
     SetDescription("SOM image classification.");
 
     // Documentation
-    SetDocName("SOM Classification");
     SetDocLongDescription("Unsupervised Self Organizing Map image classification.");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppClassification/app/otbSampleAugmentation.cxx b/Modules/Applications/AppClassification/app/otbSampleAugmentation.cxx
index c16e0cca8ef023c56226ffcd8f95ab0fffd13c5c..5ba680a8e01fa73d077f810bcf11b26620aecc61 100644
--- a/Modules/Applications/AppClassification/app/otbSampleAugmentation.cxx
+++ b/Modules/Applications/AppClassification/app/otbSampleAugmentation.cxx
@@ -57,7 +57,6 @@ private:
     SetDescription("Generates synthetic samples from a sample data file.");
 
     // Documentation
-    SetDocName("Sample Augmentation");
     SetDocLongDescription("The application takes a sample data file as "
                           "generated by the SampleExtraction application and "
                           "generates synthetic samples to increase the number of "
diff --git a/Modules/Applications/AppClassification/app/otbSampleExtraction.cxx b/Modules/Applications/AppClassification/app/otbSampleExtraction.cxx
index e8cb2aaabacdc10b4f0f1d4c21ab8e1f93d5dc7e..b94130d3f57a68067d035af1de464e55230d397d 100644
--- a/Modules/Applications/AppClassification/app/otbSampleExtraction.cxx
+++ b/Modules/Applications/AppClassification/app/otbSampleExtraction.cxx
@@ -59,7 +59,6 @@ private:
     SetDescription("Extracts samples values from an image.");
 
     // Documentation
-    SetDocName("Sample Extraction");
     SetDocLongDescription("The application extracts samples values from an"
       "image using positions contained in a vector data file. ");
     SetDocLimitations("None");
diff --git a/Modules/Applications/AppClassification/app/otbSampleSelection.cxx b/Modules/Applications/AppClassification/app/otbSampleSelection.cxx
index 959f3c129d0c32c3f77343f249c0b18e022232de..d789b556198a4c12f271e81daeeeec730b9ae894 100644
--- a/Modules/Applications/AppClassification/app/otbSampleSelection.cxx
+++ b/Modules/Applications/AppClassification/app/otbSampleSelection.cxx
@@ -86,7 +86,6 @@ private:
     SetDescription("Selects samples from a training vector data set.");
 
     // Documentation
-    SetDocName("Sample Selection");
     SetDocLongDescription(
         "The application selects a set of samples from geometries "
         "intended for training (they should have a field giving the associated "
diff --git a/Modules/Applications/AppClassification/app/otbTrainImagesClassifier.cxx b/Modules/Applications/AppClassification/app/otbTrainImagesClassifier.cxx
index 151200884130b6769b8f39fd8b020f0afc242503..567dd28889ae03e3eda019b031e1344073bf12e0 100644
--- a/Modules/Applications/AppClassification/app/otbTrainImagesClassifier.cxx
+++ b/Modules/Applications/AppClassification/app/otbTrainImagesClassifier.cxx
@@ -41,7 +41,6 @@ public:
     SetDescription( "Train a classifier from multiple pairs of images and training vector data." );
 
     // Documentation
-    SetDocName( "Train a classifier from multiple images" );
     SetDocLongDescription(
         "Train a classifier from multiple pairs of images and training vector data. "
         "Samples are composed of pixel values in each band optionally centered and reduced using an XML statistics file produced by "
diff --git a/Modules/Applications/AppClassification/app/otbTrainRegression.cxx b/Modules/Applications/AppClassification/app/otbTrainRegression.cxx
index fb5b636354cb4949812b2376046db138c50bf603..a93c8b5439d65e670fa92e52ee889933d45f3d61 100644
--- a/Modules/Applications/AppClassification/app/otbTrainRegression.cxx
+++ b/Modules/Applications/AppClassification/app/otbTrainRegression.cxx
@@ -105,7 +105,6 @@ void DoInit() override
     "Train a classifier from multiple images to perform regression.");
 
   // Documentation
-  SetDocName("Train a regression model");
   SetDocLongDescription(
     "This application trains a classifier from multiple input images or a csv "
     "file, in order to perform regression. Predictors are composed of pixel "
@@ -272,8 +271,7 @@ void ParseCSVPredictors(std::string path, ListSampleType* outputList)
       elem.Fill(0.0);
       for (unsigned int i=0 ; i<nbCols ; ++i)
         {
-        iss.str(words[i]);
-        iss >> elem[i];
+          elem[i] = std::stod(words[i]);
         }
       outputList->PushBack(elem);
       }
diff --git a/Modules/Applications/AppClassification/app/otbTrainVectorClassifier.cxx b/Modules/Applications/AppClassification/app/otbTrainVectorClassifier.cxx
index c71885ded4440670f0dc511e104629f14581c7f5..fbd04d4a4b5c0fa213d5266d3588b1f8de7202cb 100644
--- a/Modules/Applications/AppClassification/app/otbTrainVectorClassifier.cxx
+++ b/Modules/Applications/AppClassification/app/otbTrainVectorClassifier.cxx
@@ -29,11 +29,11 @@ namespace otb
 namespace Wrapper
 {
 
-class TrainVectorClassifier : public TrainVectorBase
+class TrainVectorClassifier : public TrainVectorBase<float, int>
 {
 public:
   typedef TrainVectorClassifier Self;
-  typedef TrainVectorBase Superclass;
+  typedef TrainVectorBase<float, int> Superclass;
   typedef itk::SmartPointer<Self> Pointer;
   typedef itk::SmartPointer<const Self> ConstPointer;
   itkNewMacro( Self )
@@ -60,20 +60,26 @@ protected:
     SetDescription( "Train a classifier based on labeled geometries and a "
       "list of features to consider." );
 
-    SetDocName( "Train Vector Classifier" );
     SetDocLongDescription( "This application trains a classifier based on "
       "labeled geometries and a list of features to consider for "
       "classification.\nThis application is based on LibSVM, OpenCV Machine "
       "Learning (2.3.1 and later), and Shark ML The output of this application "
       "is a text model file, whose format corresponds to the ML model type "
       "chosen. There is no image nor vector data output.");
-    SetDocLimitations("");
+    SetDocLimitations("None");
     SetDocAuthors( "OTB Team" );
     SetDocSeeAlso( " " );
 
     SetOfficialDocLink();
 
     Superclass::DoInit();
+
+    // Add a new parameter to compute confusion matrix / contingency table
+    this->AddParameter(ParameterType_OutputFilename, "io.confmatout", "Output confusion matrix or contingency table");
+    this->SetParameterDescription("io.confmatout",
+                                  "Output file containing the confusion matrix or contingency table (.csv format)."
+                                  "The contingency table is output when we unsupervised algorithms is used otherwise the confusion matrix is output.");
+    this->MandatoryOff("io.confmatout");
   }
 
   void DoUpdateParameters() override
diff --git a/Modules/Applications/AppClassification/app/otbTrainVectorRegression.cxx b/Modules/Applications/AppClassification/app/otbTrainVectorRegression.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..c98e69ee0c94b0b1882a4bd0ffab112e6020e53d
--- /dev/null
+++ b/Modules/Applications/AppClassification/app/otbTrainVectorRegression.cxx
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2005-2019 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 "otbTrainVectorBase.h"
+
+namespace otb
+{
+namespace Wrapper
+{
+
+class TrainVectorRegression : public TrainVectorBase<float, float>
+{
+public:
+  typedef TrainVectorRegression Self;
+  typedef TrainVectorBase<float, float> Superclass;
+  typedef itk::SmartPointer<Self>       Pointer;
+  typedef itk::SmartPointer<const Self> ConstPointer;
+
+  itkNewMacro(Self) itkTypeMacro(Self, Superclass)
+
+      typedef Superclass::SampleType SampleType;
+  typedef Superclass::ListSampleType       ListSampleType;
+  typedef Superclass::TargetListSampleType TargetListSampleType;
+
+protected:
+  TrainVectorRegression()
+  {
+    this->m_RegressionFlag = true;
+  }
+
+  void DoInit() override
+  {
+    SetName("TrainVectorRegression");
+    SetDescription(
+        "Train a regression algorithm based on geometries with "
+        "list of features to consider and a predictor.");
+
+    SetDocLongDescription(
+        "This application trains a regression algorithm based on "
+        "a predictor geometries and a list of features to consider for "
+        "regression.\nThis application is based on LibSVM, OpenCV Machine "
+        "Learning (2.3.1 and later), and Shark ML The output of this application "
+        "is a text model file, whose format corresponds to the ML model type "
+        "chosen. There is no image or vector data output.");
+
+    SetDocLimitations("None");
+    SetDocAuthors("OTB Team");
+    SetDocSeeAlso("TrainVectorClassifier");
+
+    SetOfficialDocLink();
+
+    Superclass::DoInit();
+
+    AddParameter(ParameterType_Float, "io.mse", "Mean Square Error");
+    SetParameterDescription("io.mse", "Mean square error computed with the validation predictors");
+    SetParameterRole("io.mse", Role_Output);
+    this->MandatoryOff("io.mse");
+  }
+
+  void DoUpdateParameters() override
+  {
+    Superclass::DoUpdateParameters();
+  }
+
+  double ComputeMSE(const TargetListSampleType& list1, const TargetListSampleType& list2)
+  {
+    assert(list1.Size() == list2.Size());
+    double mse = 0.;
+    for (TargetListSampleType::InstanceIdentifier i = 0; i < list1.Size(); ++i)
+    {
+      auto elem1 = list1.GetMeasurementVector(i);
+      auto elem2 = list2.GetMeasurementVector(i);
+
+      mse += (elem1[0] - elem2[0]) * (elem1[0] - elem2[0]);
+    }
+    mse /= static_cast<double>(list1.Size());
+    return mse;
+  }
+
+
+  void DoExecute() override
+  {
+    m_FeaturesInfo.SetClassFieldNames(GetChoiceNames("cfield"), GetSelectedItems("cfield"));
+
+    if (m_FeaturesInfo.m_SelectedCFieldIdx.empty() && GetClassifierCategory() == Supervised)
+    {
+      otbAppLogFATAL(<< "No field has been selected for data labelling!");
+    }
+
+    Superclass::DoExecute();
+
+    otbAppLogINFO("Computing training performances");
+
+    auto mse = ComputeMSE(*m_ClassificationSamplesWithLabel.labeledListSample, *m_PredictedList);
+
+    otbAppLogINFO("Mean Square Error = " << mse);
+    this->SetParameterFloat("io.mse", mse);
+  }
+
+private:
+};
+}
+}
+
+OTB_APPLICATION_EXPORT(otb::Wrapper::TrainVectorRegression)
diff --git a/Modules/Applications/AppClassification/app/otbVectorClassifier.cxx b/Modules/Applications/AppClassification/app/otbVectorClassifier.cxx
index 3e5f4b1d2d6f29bdaf703656cf9a33e18ba5023b..c15b65b53d8db58f7b1ba692d99ada789f12a3f7 100644
--- a/Modules/Applications/AppClassification/app/otbVectorClassifier.cxx
+++ b/Modules/Applications/AppClassification/app/otbVectorClassifier.cxx
@@ -91,7 +91,6 @@ private:
     SetName("VectorClassifier");
     SetDescription("Performs a classification of the input vector data according to a model file.");
 
-    SetDocName("Vector Classification");
     SetDocAuthors("OTB-Team");
     SetDocLongDescription("This application performs a vector data classification "
       "based on a model file produced by the TrainVectorClassifier application."
diff --git a/Modules/Applications/AppClassification/app/otbZonalStatistics.cxx b/Modules/Applications/AppClassification/app/otbZonalStatistics.cxx
index 7d78276c47c3050368e09f2d04832780ebf09025..881e8dd97a983495e438b43cdf59da376c2f112e 100644
--- a/Modules/Applications/AppClassification/app/otbZonalStatistics.cxx
+++ b/Modules/Applications/AppClassification/app/otbZonalStatistics.cxx
@@ -148,7 +148,6 @@ public:
     SetDescription("This application computes zonal statistics");
 
     // Documentation
-    SetDocName("ZonalStatistics");
     SetDocLongDescription("This application computes zonal statistics from label image, or vector data. "
                           "The application inputs one input multiband image, and another input for zones definition. "
                           "Zones can be defined with a label image (inzone.labelimage.in) or a vector data layer "
diff --git a/Modules/Applications/AppClassification/include/otbTrainVectorBase.h b/Modules/Applications/AppClassification/include/otbTrainVectorBase.h
index 37869068157660e37b5063fd69303be97023df2f..bc5c716aef98324bcd14882b451fc2636dbfe9cc 100644
--- a/Modules/Applications/AppClassification/include/otbTrainVectorBase.h
+++ b/Modules/Applications/AppClassification/include/otbTrainVectorBase.h
@@ -49,21 +49,22 @@ bool IsNotAlphaNum(char c)
   return !std::isalnum( c );
 }
 
-class TrainVectorBase : public LearningApplicationBase<float, int>
+template <class TInputValue, class TOutputValue>
+class TrainVectorBase : public LearningApplicationBase<TInputValue, TOutputValue>
 {
 public:
   /** Standard class typedefs. */
   typedef TrainVectorBase Self;
-  typedef LearningApplicationBase<float, int> Superclass;
+  typedef LearningApplicationBase<TInputValue, TOutputValue> Superclass;
   typedef itk::SmartPointer <Self> Pointer;
   typedef itk::SmartPointer<const Self> ConstPointer;
 
   /** Standard macro */
   itkTypeMacro(Self, Superclass);
 
-  typedef Superclass::SampleType SampleType;
-  typedef Superclass::ListSampleType ListSampleType;
-  typedef Superclass::TargetListSampleType TargetListSampleType;
+  typedef typename Superclass::SampleType           SampleType;
+  typedef typename Superclass::ListSampleType       ListSampleType;
+  typedef typename Superclass::TargetListSampleType TargetListSampleType;
 
   typedef double ValueType;
   typedef itk::VariableLengthVector <ValueType> MeasurementType;
@@ -86,8 +87,8 @@ protected:
   class SamplesWithLabel
   {
   public:
-    ListSampleType::Pointer listSample;
-    TargetListSampleType::Pointer labeledListSample;
+    typename ListSampleType::Pointer       listSample;
+    typename TargetListSampleType::Pointer labeledListSample;
     SamplesWithLabel()
     {
       listSample = ListSampleType::New();
@@ -178,13 +179,18 @@ protected:
 
   SamplesWithLabel m_TrainingSamplesWithLabel;
   SamplesWithLabel m_ClassificationSamplesWithLabel;
-  TargetListSampleType::Pointer m_PredictedList;
+  typename TargetListSampleType::Pointer m_PredictedList;
   FeaturesInfo m_FeaturesInfo;
 
   void DoInit() override;
   void DoUpdateParameters() override;
   void DoExecute() override;
 
+private:
+  /**
+   * Get the field of the input feature corresponding to the input field
+   */
+  inline TOutputValue GetFeatureField(const ogr::Feature& feature, int field);
 };
 
 }
diff --git a/Modules/Applications/AppClassification/include/otbTrainVectorBase.hxx b/Modules/Applications/AppClassification/include/otbTrainVectorBase.hxx
index fb5e582dae4dc6073b77a5a2f1f2659831e1b3e9..c1e4f88f1cf9f428a038da63d99161e26daa9f66 100644
--- a/Modules/Applications/AppClassification/include/otbTrainVectorBase.hxx
+++ b/Modules/Applications/AppClassification/include/otbTrainVectorBase.hxx
@@ -27,100 +27,98 @@ namespace otb
 namespace Wrapper
 {
 
-void TrainVectorBase::DoInit()
+template <class TInputValue, class TOutputValue>
+void
+TrainVectorBase<TInputValue, TOutputValue>
+::DoInit()
 {
   // Common Parameters for all Learning Application
-  AddParameter( ParameterType_Group, "io", "Input and output data" );
-  SetParameterDescription( "io", 
+  this->AddParameter( ParameterType_Group, "io", "Input and output data" );
+  this->SetParameterDescription( "io", 
     "This group of parameters allows setting input and output data." );
 
-  AddParameter( ParameterType_InputVectorDataList, "io.vd", "Input Vector Data" );
-  SetParameterDescription( "io.vd",
+  this->AddParameter( ParameterType_InputVectorDataList, "io.vd", "Input Vector Data" );
+  this->SetParameterDescription( "io.vd",
     "Input geometries used for training (note: all geometries from the layer will be used)" );
 
-  AddParameter( ParameterType_InputFilename, "io.stats", "Input XML image statistics file" );
-  MandatoryOff( "io.stats" );
-  SetParameterDescription( "io.stats", 
+  this->AddParameter( ParameterType_InputFilename, "io.stats", "Input XML image statistics file" );
+  this->MandatoryOff( "io.stats" );
+  this->SetParameterDescription( "io.stats", 
     "XML file containing mean and variance of each feature." );
 
-  AddParameter( ParameterType_OutputFilename, "io.out", "Output model" );
-  SetParameterDescription( "io.out", 
+  this->AddParameter( ParameterType_OutputFilename, "io.out", "Output model" );
+  this->SetParameterDescription( "io.out", 
     "Output file containing the model estimated (.txt format)." );
 
-  AddParameter( ParameterType_Int, "layer", "Layer Index" );
-  SetParameterDescription( "layer", 
+  this->AddParameter( ParameterType_Int, "layer", "Layer Index" );
+  this->SetParameterDescription( "layer", 
     "Index of the layer to use in the input vector file." );
-  MandatoryOff( "layer" );
-  SetDefaultParameterInt( "layer", 0 );
+  this->MandatoryOff( "layer" );
+  this->SetDefaultParameterInt( "layer", 0 );
 
-  AddParameter(ParameterType_ListView,  "feat", "Field names for training features");
-  SetParameterDescription("feat",
+  this->AddParameter(ParameterType_ListView,  "feat", "Field names for training features");
+  this->SetParameterDescription("feat",
     "List of field names in the input vector data to be used as features for training.");
 
   // Add validation data used to compute confusion matrix or contingency table
-  AddParameter( ParameterType_Group, "valid", "Validation data" );
-  SetParameterDescription( "valid", 
+  this->AddParameter( ParameterType_Group, "valid", "Validation data" );
+  this->SetParameterDescription( "valid", 
     "This group of parameters defines validation data." );
 
-  AddParameter( ParameterType_InputVectorDataList, "valid.vd", 
+  this->AddParameter( ParameterType_InputVectorDataList, "valid.vd", 
     "Validation Vector Data" );
-  SetParameterDescription( "valid.vd", "Geometries used for validation "
+  this->SetParameterDescription( "valid.vd", "Geometries used for validation "
           "(must contain the same fields used for training, all geometries from the layer will be used)" );
-  MandatoryOff( "valid.vd" );
+  this->MandatoryOff( "valid.vd" );
 
-  AddParameter( ParameterType_Int, "valid.layer", "Layer Index" );
-  SetParameterDescription( "valid.layer", 
+  this->AddParameter( ParameterType_Int, "valid.layer", "Layer Index" );
+  this->SetParameterDescription( "valid.layer", 
     "Index of the layer to use in the validation vector file." );
-  MandatoryOff( "valid.layer" );
-  SetDefaultParameterInt( "valid.layer", 0 );
+  this->MandatoryOff( "valid.layer" );
+  this->SetDefaultParameterInt( "valid.layer", 0 );
 
   // Add class field if we used validation
-  AddParameter( ParameterType_ListView, "cfield",
+  this->AddParameter( ParameterType_ListView, "cfield",
     "Field containing the class integer label for supervision" );
-  SetParameterDescription( "cfield", 
+  this->SetParameterDescription( "cfield", 
     "Field containing the class id for supervision. "
     "The values in this field shall be cast into integers. "
     "Only geometries with this field available will be taken into account." );
-  SetListViewSingleSelectionMode( "cfield", true );
+  this->SetListViewSingleSelectionMode( "cfield", true );
 
-  // Add a new parameter to compute confusion matrix / contingency table
-  AddParameter( ParameterType_OutputFilename, "io.confmatout", 
-    "Output confusion matrix or contingency table" );
-  SetParameterDescription( "io.confmatout", 
-    "Output file containing the confusion matrix or contingency table (.csv format)."
-    "The contingency table is output when we unsupervised algorithms is used otherwise the confusion matrix is output." );
-  MandatoryOff( "io.confmatout" );
-
-  AddParameter(ParameterType_Bool, "v", "Verbose mode");
-  SetParameterDescription("v", "Verbose mode, display the contingency table result.");
-  SetParameterInt("v", 1);
+  this->AddParameter(ParameterType_Bool, "v", "Verbose mode");
+  this->SetParameterDescription("v", "Verbose mode, display the contingency table result.");
+  this->SetParameterInt("v", 1);
 
   // Doc example parameter settings
-  SetDocExampleParameterValue( "io.vd", "vectorData.shp" );
-  SetDocExampleParameterValue( "io.stats", "meanVar.xml" );
-  SetDocExampleParameterValue( "io.out", "svmModel.svm" );
-  SetDocExampleParameterValue( "feat", "perimeter  area  width" );
-  SetDocExampleParameterValue( "cfield", "predicted" );
+  this->SetDocExampleParameterValue( "io.vd", "vectorData.shp" );
+  this->SetDocExampleParameterValue( "io.stats", "meanVar.xml" );
+  this->SetDocExampleParameterValue( "io.out", "svmModel.svm" );
+  this->SetDocExampleParameterValue( "feat", "perimeter  area  width" );
+  this->SetDocExampleParameterValue( "cfield", "predicted" );
 
 
   // Add parameters for the classifier choice
   Superclass::DoInit();
 
-  AddRANDParameter();
+  this->AddRANDParameter();
 }
 
-void TrainVectorBase::DoUpdateParameters()
+template <class TInputValue, class TOutputValue>
+void 
+TrainVectorBase<TInputValue, TOutputValue>
+::DoUpdateParameters()
 {
   // if vector data is present and updated then reload fields
-  if( HasValue( "io.vd" ) )
+  if( this->HasValue( "io.vd" ) )
     {
-    std::vector<std::string> vectorFileList = GetParameterStringList( "io.vd" );
+    std::vector<std::string> vectorFileList = this->GetParameterStringList( "io.vd" );
     ogr::DataSource::Pointer ogrDS = ogr::DataSource::New( vectorFileList[0], ogr::DataSource::Modes::Read );
     ogr::Layer layer = ogrDS->GetLayer( static_cast<size_t>( this->GetParameterInt( "layer" ) ) );
     ogr::Feature feature = layer.ogr().GetNextFeature();
 
-    ClearChoices( "feat" );
-    ClearChoices( "cfield" );
+    this->ClearChoices( "feat" );
+    this->ClearChoices( "cfield" );
 
     for( int iField = 0; iField < feature.ogr().GetFieldCount(); iField++ )
       {
@@ -134,20 +132,23 @@ void TrainVectorBase::DoUpdateParameters()
       if( fieldType == OFTInteger || fieldType == OFTInteger64 || fieldType == OFTReal )
         {
         std::string tmpKey = "feat." + key.substr( 0, static_cast<unsigned long>( end - key.begin() ) );
-        AddChoice( tmpKey, item );
+        this->AddChoice( tmpKey, item );
         }
-      if( fieldType == OFTString || fieldType == OFTInteger || fieldType == OFTInteger64 )
+      if( fieldType == OFTString || fieldType == OFTInteger || fieldType == OFTInteger64 || fieldType == OFTReal )
         {
         std::string tmpKey = "cfield." + key.substr( 0, static_cast<unsigned long>( end - key.begin() ) );
-        AddChoice( tmpKey, item );
+        this->AddChoice( tmpKey, item );
         }
       }
     }
 }
 
-void TrainVectorBase::DoExecute()
+template <class TInputValue, class TOutputValue>
+void
+TrainVectorBase<TInputValue, TOutputValue>
+::DoExecute()
 {
-  m_FeaturesInfo.SetFieldNames( GetChoiceNames( "feat" ), GetSelectedItems( "feat" ));
+  m_FeaturesInfo.SetFieldNames( this->GetChoiceNames( "feat" ), this->GetSelectedItems( "feat" ));
 
   // Check input parameters
   if( m_FeaturesInfo.m_SelectedIdx.empty() )
@@ -158,29 +159,35 @@ void TrainVectorBase::DoExecute()
   ShiftScaleParameters measurement = GetStatistics( m_FeaturesInfo.m_NbFeatures );
   ExtractAllSamples( measurement );
 
-  this->Train( m_TrainingSamplesWithLabel.listSample, m_TrainingSamplesWithLabel.labeledListSample, GetParameterString( "io.out" ) );
+  this->Train( m_TrainingSamplesWithLabel.listSample, m_TrainingSamplesWithLabel.labeledListSample, this->GetParameterString( "io.out" ) );
 
   m_PredictedList =
-    this->Classify( m_ClassificationSamplesWithLabel.listSample, GetParameterString( "io.out" ) );
+    this->Classify( m_ClassificationSamplesWithLabel.listSample, this->GetParameterString( "io.out" ) );
 }
 
-
-void TrainVectorBase::ExtractAllSamples(const ShiftScaleParameters &measurement)
+template <class TInputValue, class TOutputValue>
+void
+TrainVectorBase<TInputValue, TOutputValue>
+::ExtractAllSamples(const ShiftScaleParameters &measurement)
 {
   m_TrainingSamplesWithLabel = ExtractTrainingSamplesWithLabel(measurement);
   m_ClassificationSamplesWithLabel = ExtractClassificationSamplesWithLabel(measurement);
 }
 
-TrainVectorBase::SamplesWithLabel
-TrainVectorBase::ExtractTrainingSamplesWithLabel(const ShiftScaleParameters &measurement)
+template <class TInputValue, class TOutputValue>
+typename TrainVectorBase<TInputValue, TOutputValue>::SamplesWithLabel
+TrainVectorBase<TInputValue, TOutputValue>
+::ExtractTrainingSamplesWithLabel(const ShiftScaleParameters &measurement)
 {
   return ExtractSamplesWithLabel( "io.vd", "layer", measurement);
 }
 
-TrainVectorBase::SamplesWithLabel
-TrainVectorBase::ExtractClassificationSamplesWithLabel(const ShiftScaleParameters &measurement)
+template <class TInputValue, class TOutputValue>
+typename TrainVectorBase<TInputValue, TOutputValue>::SamplesWithLabel
+TrainVectorBase<TInputValue, TOutputValue>
+::ExtractClassificationSamplesWithLabel(const ShiftScaleParameters &measurement)
 {
-  if(GetClassifierCategory() == Supervised)
+  if(this->GetClassifierCategory() == Superclass::Supervised)
     {
     SamplesWithLabel tmpSamplesWithLabel;
     SamplesWithLabel validationSamplesWithLabel = ExtractSamplesWithLabel( "valid.vd", "valid.layer", measurement );
@@ -206,15 +213,16 @@ TrainVectorBase::ExtractClassificationSamplesWithLabel(const ShiftScaleParameter
     }
 }
 
-
-TrainVectorBase::ShiftScaleParameters
-TrainVectorBase::GetStatistics(unsigned int nbFeatures)
+template <class TInputValue, class TOutputValue>
+typename TrainVectorBase<TInputValue, TOutputValue>::ShiftScaleParameters
+TrainVectorBase<TInputValue, TOutputValue>
+::GetStatistics(unsigned int nbFeatures)
 {
   ShiftScaleParameters measurement = ShiftScaleParameters();
-  if( HasValue( "io.stats" ) && IsParameterEnabled( "io.stats" ) )
+  if( this->HasValue( "io.stats" ) && this->IsParameterEnabled( "io.stats" ) )
     {
-    StatisticsReader::Pointer statisticsReader = StatisticsReader::New();
-    std::string XMLfile = GetParameterString( "io.stats" );
+    typename StatisticsReader::Pointer statisticsReader = StatisticsReader::New();
+    std::string XMLfile = this->GetParameterString( "io.stats" );
     statisticsReader->SetFileName( XMLfile );
     measurement.meanMeasurementVector = statisticsReader->GetStatisticVectorByName( "mean" );
     measurement.stddevMeasurementVector = statisticsReader->GetStatisticVectorByName( "stddev" );
@@ -229,16 +237,34 @@ TrainVectorBase::GetStatistics(unsigned int nbFeatures)
   return measurement;
 }
 
+// Template specialization for the integer case (i.e.classification), to avoid a cast from double to integer
+template <>
+inline int
+TrainVectorBase<float, int>
+::GetFeatureField(const ogr::Feature & feature, int fieldIndex)
+{
+  return(feature[fieldIndex].GetValue<int>());
+}
+
+template <class TInputValue, class TOutputValue>
+inline TOutputValue
+TrainVectorBase<TInputValue, TOutputValue>
+::GetFeatureField(const ogr::Feature & feature, int fieldIndex)
+{
+  return(feature[fieldIndex].GetValue<double>());
+}
 
-TrainVectorBase::SamplesWithLabel
-TrainVectorBase::ExtractSamplesWithLabel(std::string parameterName, std::string parameterLayer,
+template <class TInputValue, class TOutputValue>
+typename TrainVectorBase<TInputValue, TOutputValue>::SamplesWithLabel
+TrainVectorBase<TInputValue, TOutputValue>
+::ExtractSamplesWithLabel(std::string parameterName, std::string parameterLayer,
                                     const ShiftScaleParameters &measurement)
 {
   SamplesWithLabel samplesWithLabel;
-  if( HasValue( parameterName ) && IsParameterEnabled( parameterName ) )
+  if( this->HasValue( parameterName ) && this->IsParameterEnabled( parameterName ) )
     {
-    ListSampleType::Pointer input = ListSampleType::New();
-    TargetListSampleType::Pointer target = TargetListSampleType::New();
+    typename ListSampleType::Pointer input = ListSampleType::New();
+    typename TargetListSampleType::Pointer target = TargetListSampleType::New();
     input->SetMeasurementVectorSize( m_FeaturesInfo.m_NbFeatures );
 
     std::vector<std::string> fileList = this->GetParameterStringList( parameterName );
@@ -251,7 +277,7 @@ TrainVectorBase::ExtractSamplesWithLabel(std::string parameterName, std::string
       bool goesOn = feature.addr() != 0;
       if( !goesOn )
         {
-        otbAppLogWARNING( "The layer " << GetParameterInt( parameterLayer ) << " of " << fileList[k]
+        otbAppLogWARNING( "The layer " << this->GetParameterInt( parameterLayer ) << " of " << fileList[k]
                                        << " is empty, input is skipped." );
         continue;
         }
@@ -284,14 +310,14 @@ TrainVectorBase::ExtractSamplesWithLabel(std::string parameterName, std::string
         MeasurementType mv;
         mv.SetSize( m_FeaturesInfo.m_NbFeatures );
         for( unsigned int idx = 0; idx < m_FeaturesInfo.m_NbFeatures; ++idx )
-          mv[idx] = feature.ogr().GetFieldAsDouble( featureFieldIndex[idx] );
+          mv[idx] = feature[featureFieldIndex[idx]].GetValue<double>();
 
         input->PushBack( mv );
 
         if(cFieldIndex>=0 && ogr::Field(feature,cFieldIndex).HasBeenSet())
-          target->PushBack( feature.ogr().GetFieldAsInteger( cFieldIndex ) );
+          target->PushBack(GetFeatureField(feature,cFieldIndex));
         else
-          target->PushBack( 0 );
+          target->PushBack( 0. );
 
         feature = layer.ogr().GetNextFeature();
         goesOn = feature.addr() != 0;
@@ -300,7 +326,7 @@ TrainVectorBase::ExtractSamplesWithLabel(std::string parameterName, std::string
 
 
 
-    ShiftScaleFilterType::Pointer shiftScaleFilter = ShiftScaleFilterType::New();
+    typename ShiftScaleFilterType::Pointer shiftScaleFilter = ShiftScaleFilterType::New();
     shiftScaleFilter->SetInput( input );
     shiftScaleFilter->SetShifts( measurement.meanMeasurementVector );
     shiftScaleFilter->SetScales( measurement.stddevMeasurementVector );
diff --git a/Modules/Applications/AppClassification/test/CMakeLists.txt b/Modules/Applications/AppClassification/test/CMakeLists.txt
index 2379deb501c3c6233fb1a1a6b34e8fe99a78c6e0..15286ce99c373666820979ebc1f73d7c848169f6 100644
--- a/Modules/Applications/AppClassification/test/CMakeLists.txt
+++ b/Modules/Applications/AppClassification/test/CMakeLists.txt
@@ -837,6 +837,22 @@ if(OTB_USE_OPENCV)
     ${TEMP}/apTvClTrainVectorClassifierModel.rf)
 endif()
 
+#----------- TrainVectorRegression TESTS ----------------
+if(OTB_USE_OPENCV)
+  otb_test_application(NAME apTvClTrainVectorRegression
+    APP  TrainVectorRegression
+    OPTIONS -io.vd ${INPUTDATA}/Classification/apTvClSampleExtractionOut.sqlite
+    -feat value_0 value_1 value_2 value_3
+    -cfield class
+    -classifier rf
+    -io.out ${TEMP}/apTvClTrainVectorRegressionModel.rf
+    -io.mse ${TEMP}/apTvClTrainVectorRegressionModel.txt
+    TESTENVOPTIONS ${TEMP}/apTvClTrainVectorRegressionModel.txt
+    VALID   ${ascii_comparison}
+    ${OTBAPP_BASELINE_FILES}/apTvClTrainVectorRegressionModel.txt
+    ${TEMP}/apTvClTrainVectorRegressionModel.txt)
+endif()
+
 #----------- TrainVectorClassifier unsupervised TESTS ----------------
 if(OTB_USE_SHARK)
   otb_test_application(NAME apTvClTrainVectorUnsupervised
diff --git a/Modules/Applications/AppDescriptors/app/otbHomologousPointsExtraction.cxx b/Modules/Applications/AppDescriptors/app/otbHomologousPointsExtraction.cxx
index 2ee837547c93137abfdc18b7d8fe38db8466cb07..44e961db2e5737455709b8a1cb6adfcca8a9fef5 100644
--- a/Modules/Applications/AppDescriptors/app/otbHomologousPointsExtraction.cxx
+++ b/Modules/Applications/AppDescriptors/app/otbHomologousPointsExtraction.cxx
@@ -83,7 +83,6 @@ private:
   void DoInit() override
   {
     SetName("HomologousPointsExtraction");
-    SetDocName("Homologous points extraction");
     SetDescription("Compute homologous points between images using keypoints");
     SetDocLongDescription("This application allows computing homologous points between images using keypoints. "
       " SIFT or SURF keypoints can be used and the band on which keypoints are computed can be set independently for both images."
@@ -101,7 +100,6 @@ private:
       " The vector file is always reprojected to EPSG:4326 to allow display in a GIS."
       " This is done via reprojection or by applying the image sensor models.");
     // Documentation
-    SetDocName("Homologous Points Extraction");
     SetDocLimitations("Full mode does not handle large images.");
     SetDocSeeAlso("RefineSensorModel");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppDimensionalityReduction/app/otbDimensionalityReduction.cxx b/Modules/Applications/AppDimensionalityReduction/app/otbDimensionalityReduction.cxx
index 5c5554a2c969df80a3b9003984cddc7b74c4241d..690f5887bf6d418cce6f23cab8d423b26832f2e6 100644
--- a/Modules/Applications/AppDimensionalityReduction/app/otbDimensionalityReduction.cxx
+++ b/Modules/Applications/AppDimensionalityReduction/app/otbDimensionalityReduction.cxx
@@ -89,7 +89,6 @@ private:
   {
     SetName("DimensionalityReduction");
     SetDescription("Perform Dimension reduction of the input image.");
-    SetDocName("Dimensionality reduction");
     SetDocLongDescription("Performs dimensionality reduction on input image. PCA,NA-PCA,MAF,ICA methods are available. It is also possible to compute the inverse transform to reconstruct the image. It is also possible to optionally export the transformation matrix to a text file.");
     SetDocLimitations("This application does not provide the inverse transform and the transformation matrix export for the MAF.");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppDimensionalityReduction/app/otbImageDimensionalityReduction.cxx b/Modules/Applications/AppDimensionalityReduction/app/otbImageDimensionalityReduction.cxx
index 6d74cf3dff92bad04e794556809bef31484b37d9..3258373e4e5d2801208c0f52170089f92ff4d7f6 100644
--- a/Modules/Applications/AppDimensionalityReduction/app/otbImageDimensionalityReduction.cxx
+++ b/Modules/Applications/AppDimensionalityReduction/app/otbImageDimensionalityReduction.cxx
@@ -129,7 +129,6 @@ private:
       "according to a dimensionality reduction model file.");
 
     // Documentation
-    SetDocName("Image Dimensionality Reduction");
     SetDocLongDescription("This application reduces the dimension of an input"
                           " image, based on a machine learning model file produced by"
                           " the TrainDimensionalityReduction application. Pixels of the "
diff --git a/Modules/Applications/AppDimensionalityReduction/app/otbTrainDimensionalityReduction.cxx b/Modules/Applications/AppDimensionalityReduction/app/otbTrainDimensionalityReduction.cxx
index 8fdbd022f265bd5314300197cc76d3bb9708a466..d5ea4307e9ce7b46da59c1a4a9dcbe6f9de16519 100644
--- a/Modules/Applications/AppDimensionalityReduction/app/otbTrainDimensionalityReduction.cxx
+++ b/Modules/Applications/AppDimensionalityReduction/app/otbTrainDimensionalityReduction.cxx
@@ -73,7 +73,6 @@ private:
     SetName("TrainDimensionalityReduction");
     SetDescription("Train a dimensionality reduction model");
 
-    SetDocName("Train Dimensionality Reduction");
     SetDocLongDescription("Trainer for dimensionality reduction algorithms "
       "(autoencoders, PCA, SOM). All input samples are used to compute the "
       "model, like other machine learning models.\n"
diff --git a/Modules/Applications/AppDimensionalityReduction/app/otbVectorDimensionalityReduction.cxx b/Modules/Applications/AppDimensionalityReduction/app/otbVectorDimensionalityReduction.cxx
index 61c73b48ec4c505cf082a7c7bb7940a5c3f996bf..ab279f88451e0ded18335a4ef47c977832ffc562 100644
--- a/Modules/Applications/AppDimensionalityReduction/app/otbVectorDimensionalityReduction.cxx
+++ b/Modules/Applications/AppDimensionalityReduction/app/otbVectorDimensionalityReduction.cxx
@@ -86,7 +86,6 @@ private:
     SetName("VectorDimensionalityReduction");
     SetDescription("Performs dimensionality reduction of the input vector data "
       "according to a model file.");
-    SetDocName("Vector Dimensionality Reduction");
     SetDocAuthors("OTB-Team");
     SetDocLongDescription("This application performs a vector data "
       "dimensionality reduction based on a model file produced by the "
diff --git a/Modules/Applications/AppDomainTransform/app/otbDomainTransform.cxx b/Modules/Applications/AppDomainTransform/app/otbDomainTransform.cxx
index 45e44f352d9a74d9260762d10dbd8c3e59d2e007..3996335d03290236e7ff2f1e93a1d94b35d11dda 100644
--- a/Modules/Applications/AppDomainTransform/app/otbDomainTransform.cxx
+++ b/Modules/Applications/AppDomainTransform/app/otbDomainTransform.cxx
@@ -84,7 +84,6 @@ private:
     SetDescription("Domain Transform application for wavelet and fourier");
 
     // Documentation
-    SetDocName("DomainTransform");
     SetDocLongDescription("Domain Transform application for wavelet and fourier.");
     SetDocLimitations("This application is not streamed, check your system resources when processing large images");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppEdge/app/otbEdgeExtraction.cxx b/Modules/Applications/AppEdge/app/otbEdgeExtraction.cxx
index 0d800da70fd92e4951712ff9f939aadbdfb2abd1..ca0706944733396ba64efee0f18151caf4872cf0 100644
--- a/Modules/Applications/AppEdge/app/otbEdgeExtraction.cxx
+++ b/Modules/Applications/AppEdge/app/otbEdgeExtraction.cxx
@@ -64,7 +64,6 @@ private:
         "selected channel");
 
     // Documentation
-    SetDocName("Edge Feature Extraction");
     SetDocLongDescription(
         "This application computes edge features on a selected channel of the input."
         "It uses different filter such as gradient, Sobel and Touzi");
diff --git a/Modules/Applications/AppEdge/app/otbLineSegmentDetection.cxx b/Modules/Applications/AppEdge/app/otbLineSegmentDetection.cxx
index f5588a2a50847b7a519ccfaf004066a080df68c6..b2445364281da5c1f458e17c0b4f3739ff644cfd 100644
--- a/Modules/Applications/AppEdge/app/otbLineSegmentDetection.cxx
+++ b/Modules/Applications/AppEdge/app/otbLineSegmentDetection.cxx
@@ -59,7 +59,6 @@ private:
     SetDescription("Detect line segments in raster");
 
     // Documentation
-    SetDocName("Line segment detection");
     SetDocLongDescription(
       "This application detects locally straight contours in a image."
       " It is based on Burns, Hanson, and Riseman method and use an a contrario "
diff --git a/Modules/Applications/AppFiltering/app/otbContrastEnhancement.cxx b/Modules/Applications/AppFiltering/app/otbContrastEnhancement.cxx
index bbb8f2757b801c60d4254f6c6662c02e0ca82120..2463437174bffcaad5df5962eda5752cdf53fa99 100644
--- a/Modules/Applications/AppFiltering/app/otbContrastEnhancement.cxx
+++ b/Modules/Applications/AppFiltering/app/otbContrastEnhancement.cxx
@@ -153,7 +153,6 @@ private:
       "also a mode to equalize the luminance of the image.");
 
     // Documentation
-    SetDocName("Contrast Enhancement");
     SetDocLongDescription("This application is the implementation of the "
       "histogram equalization algorithm. The idea of the algorithm is to use "
       "the whole available dynamic. In order to do so it computes a histogram "
diff --git a/Modules/Applications/AppFiltering/app/otbSmoothing.cxx b/Modules/Applications/AppFiltering/app/otbSmoothing.cxx
index 9134e8d22a49592695f0227532a273743b227447..443db5226b295b9463bcfc45a6ca85bbc829e1ca 100644
--- a/Modules/Applications/AppFiltering/app/otbSmoothing.cxx
+++ b/Modules/Applications/AppFiltering/app/otbSmoothing.cxx
@@ -60,7 +60,6 @@ private:
     SetName( "Smoothing" );
     SetDescription( "Apply a smoothing filter to an image" );
 
-    SetDocName( "Smoothing" );
     SetDocLongDescription( "This application applies a smoothing filter to an "
       "image. Three methodes can be used: a gaussian filter , a mean filter "
       ", or an anisotropic diffusion using the Perona-Malik algorithm." );
diff --git a/Modules/Applications/AppFusion/app/otbBundleToPerfectSensor.cxx b/Modules/Applications/AppFusion/app/otbBundleToPerfectSensor.cxx
index 3ca73ce8ad34e988027e619af9b3e3b9c8f1dcfb..08015f34efbcea38d89b6eba7f754ff86e23210f 100644
--- a/Modules/Applications/AppFusion/app/otbBundleToPerfectSensor.cxx
+++ b/Modules/Applications/AppFusion/app/otbBundleToPerfectSensor.cxx
@@ -48,7 +48,6 @@ private:
     SetDescription("Perform P+XS pansharpening");
 
     // Documentation
-    SetDocName("Bundle to perfect sensor");
     SetDocLongDescription("This application performs P+XS pansharpening. The default mode use Pan and XS sensor models to estimate the transformation to superimpose XS over Pan before the fusion (\"default mode\"). The application provides also a PHR mode for Pleiades images which does not use sensor models as Pan and XS products are already coregistered but only estimate an affine transformation to superimpose XS over the Pan.Note that this option is automatically activated in case Pleiades images are detected as input.");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppFusion/app/otbPansharpening.cxx b/Modules/Applications/AppFusion/app/otbPansharpening.cxx
index e593a2d8edc2f050315fdae3d3970490d9cf213e..de01b8c5ce09c3789e702191051aa8ce29f956db 100644
--- a/Modules/Applications/AppFusion/app/otbPansharpening.cxx
+++ b/Modules/Applications/AppFusion/app/otbPansharpening.cxx
@@ -77,7 +77,6 @@ private:
     SetDescription("Perform P+XS pansharpening");
 
     // Documentation
-    SetDocName("Pansharpening");
     SetDocLongDescription("This application performs P+XS pansharpening. Pansharpening is a process of merging high-resolution panchromatic and lower resolution multispectral imagery to create a single high-resolution color image. Algorithms available in the applications are: RCS, bayesian fusion and Local Mean and Variance Matching(LMVM).");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppHyperspectral/app/otbEndmemberNumberEstimation.cxx b/Modules/Applications/AppHyperspectral/app/otbEndmemberNumberEstimation.cxx
index 3534cd8513a3649c0a7ee5ddc3ef1d9ec8895cf5..b3417e3f8eedba1ecc9bc07bbf3ee71743f21afe 100644
--- a/Modules/Applications/AppHyperspectral/app/otbEndmemberNumberEstimation.cxx
+++ b/Modules/Applications/AppHyperspectral/app/otbEndmemberNumberEstimation.cxx
@@ -55,7 +55,6 @@ private:
     SetDescription("Estimate the number of endmembers in a hyperspectral image");
 
     // Documentation
-    SetDocName("Endmember Number Estimation");
     SetDocLongDescription("Estimate the number of endmembers "
     "in a hyperspectral image. First, compute statistics on the image and then "
     "apply an endmember number estimation algorithm using these statistics. Two "
diff --git a/Modules/Applications/AppHyperspectral/app/otbHyperspectralUnmixing.cxx b/Modules/Applications/AppHyperspectral/app/otbHyperspectralUnmixing.cxx
index 024834a13141c5c5c10e8b6967131b7e66dbe033..f4a0bd1e5f04dcac2d33eb6229c1c2805f4b9564 100644
--- a/Modules/Applications/AppHyperspectral/app/otbHyperspectralUnmixing.cxx
+++ b/Modules/Applications/AppHyperspectral/app/otbHyperspectralUnmixing.cxx
@@ -94,7 +94,6 @@ private:
     SetDescription("Estimate abundance maps from an hyperspectral image and a set of endmembers.");
 
     // Documentation
-    SetDocName("Hyperspectral data unmixing");
     SetDocLongDescription("The application applies a linear unmixing algorithm "
     "to an hyperspectral data cube. This method supposes that the mixture between "
     "aterials in the scene is macroscopic and simulates a linear mixing model of "
diff --git a/Modules/Applications/AppHyperspectral/app/otbLocalRxDetection.cxx b/Modules/Applications/AppHyperspectral/app/otbLocalRxDetection.cxx
index 043e5f796b0506a67c9751ead3a76c8f36fba815..2332a1dac0615b6bc22c50efa6763781829dc4f3 100644
--- a/Modules/Applications/AppHyperspectral/app/otbLocalRxDetection.cxx
+++ b/Modules/Applications/AppHyperspectral/app/otbLocalRxDetection.cxx
@@ -54,7 +54,6 @@ private:
     SetDescription("Performs local Rx score computation on an hyperspectral image.");
 
     // Documentation
-    SetDocName("Local Rx Detection");
     SetDocLongDescription("Performs local Rx score computation on an input "
       "hyperspectral image. For each hyperspectral pixel, the Rx score is "
       "computed using statistics computed on a dual neighborhood. The dual "
diff --git a/Modules/Applications/AppHyperspectral/app/otbVertexComponentAnalysis.cxx b/Modules/Applications/AppHyperspectral/app/otbVertexComponentAnalysis.cxx
index 735b699d9c946580b462219f8a7d29f0d4fade80..484ce77d21f52c3cd8ea1f495a8b25ee8371f218 100644
--- a/Modules/Applications/AppHyperspectral/app/otbVertexComponentAnalysis.cxx
+++ b/Modules/Applications/AppHyperspectral/app/otbVertexComponentAnalysis.cxx
@@ -55,7 +55,6 @@ private:
     "Component Analysis algorithm.");
 
     // Documentation
-    SetDocName("Vertex Component Analysis");
     SetDocLongDescription("Apply the Vertex Component Analysis [1] to "
     "an hyperspectral image to extract endmembers. Given a set of mixed "
     "spectral vectors (multispectral or hyperspectral), the application "
diff --git a/Modules/Applications/AppImageUtils/app/otbColorMapping.cxx b/Modules/Applications/AppImageUtils/app/otbColorMapping.cxx
index e2078b324c452888e803dbb950ad7a3fe6f7dac6..64c84b75cb335a472e0ae2b6824d4629759c201a 100644
--- a/Modules/Applications/AppImageUtils/app/otbColorMapping.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbColorMapping.cxx
@@ -240,7 +240,6 @@ private:
     SetName("ColorMapping");
     SetDescription("Map a label image to 8-bits RGB using look-up tables.");
 
-    SetDocName("Color Mapping");
     SetDocLongDescription(
         "Map a label image to a 8-bits RGB image (both ways) using different methods:\n\n"
 
diff --git a/Modules/Applications/AppImageUtils/app/otbCompareImages.cxx b/Modules/Applications/AppImageUtils/app/otbCompareImages.cxx
index a5f7b76e2eefd594ee80bd0ebb1205da4e0672fa..bbd81130c3366022d5ce871779d42b876a378a0d 100644
--- a/Modules/Applications/AppImageUtils/app/otbCompareImages.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbCompareImages.cxx
@@ -55,7 +55,6 @@ private:
     SetDescription("Estimator between 2 images.");
 
     // Documentation
-    SetDocName("Images comparison");
     SetDocLongDescription(
         "Compute MSE (Mean Squared Error), MAE (Mean Absolute Error) and PSNR (Peak Signal to Noise Ratio) between two image bands (reference and measurement). "
         "The user has to set the used channel and can specify a ROI."
diff --git a/Modules/Applications/AppImageUtils/app/otbConcatenateImages.cxx b/Modules/Applications/AppImageUtils/app/otbConcatenateImages.cxx
index 1e790995c416c9ced025626aa83c3f5e550487fb..2b0757ef1a932411738fc5f855046831a509aae3 100644
--- a/Modules/Applications/AppImageUtils/app/otbConcatenateImages.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbConcatenateImages.cxx
@@ -60,7 +60,6 @@ private:
     SetDescription("Concatenate a list of images of the same size into a single multi-channel image.");
 
     // Documentation
-    SetDocName("Images Concatenation");
     SetDocLongDescription("Concatenate a list of images of the same size into a single multi-channel image. "
       "It reads the input image list (single or multi-channel) "
       "and generates a single multi-channel image. The channel order is the same as the list.");
diff --git a/Modules/Applications/AppImageUtils/app/otbDownloadSRTMTiles.cxx b/Modules/Applications/AppImageUtils/app/otbDownloadSRTMTiles.cxx
index 364cc4dea7446f6d32b2e8ef1d2ca6727e6d5dbe..b051a2119edac2f4dd69eaedc286532a869ecc47 100644
--- a/Modules/Applications/AppImageUtils/app/otbDownloadSRTMTiles.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbDownloadSRTMTiles.cxx
@@ -196,7 +196,6 @@ private:
     SetDescription("Download or list SRTM tiles");
 
     // Documentation
-    SetDocName("Download or list SRTM tiles related to a set of images");
     SetDocLongDescription("This application allows selecting the appropriate SRTM tiles that covers a list of images. It builds a list of the required tiles. Two modes are available: the first one download those tiles from the USGS SRTM3 website (http://dds.cr.usgs.gov/srtm/version2_1/SRTM3/), the second one list those tiles in a local directory. In both cases, you need to indicate the directory in which directory  tiles will be download or the location of local SRTM files.");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppImageUtils/app/otbDynamicConvert.cxx b/Modules/Applications/AppImageUtils/app/otbDynamicConvert.cxx
index e86791307367318fd585223e2bbfecacb826dc3d..d15863691672867aa93ba64d19162c228146e23c 100644
--- a/Modules/Applications/AppImageUtils/app/otbDynamicConvert.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbDynamicConvert.cxx
@@ -73,7 +73,6 @@ private:
     SetName("DynamicConvert");
     SetDescription("Change the pixel type and rescale the image's dynamic");
 
-    SetDocName("Dynamic Conversion");
     SetDocLongDescription(
       "This application performs an image pixel type "
       "conversion (short, ushort, uchar, int, uint, float and double types are "
diff --git a/Modules/Applications/AppImageUtils/app/otbExtractROI.cxx b/Modules/Applications/AppImageUtils/app/otbExtractROI.cxx
index b148be6bf800621c36ed22fca0bd7fa6e0c84d0a..20cfb9c00b22a35038ea49ea1ef3be0e8728627a 100644
--- a/Modules/Applications/AppImageUtils/app/otbExtractROI.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbExtractROI.cxx
@@ -75,7 +75,6 @@ private:
     SetDescription("Extract a ROI defined by the user.");
 
     // Documentation
-    SetDocName("Extract ROI");
     SetDocLongDescription("This application extracts a Region Of Interest with "
       "user parameters. There are four mode of extraction. The standard mode "
       "allows the user to enter one point (upper left corner of the region to "
diff --git a/Modules/Applications/AppImageUtils/app/otbManageNoData.cxx b/Modules/Applications/AppImageUtils/app/otbManageNoData.cxx
index 4cd2b5f917dfdf22963006931c5bcd91b583bee8..9158381ec66f5d389a6bde0c21cff74bff3c9468 100644
--- a/Modules/Applications/AppImageUtils/app/otbManageNoData.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbManageNoData.cxx
@@ -63,7 +63,6 @@ private:
     SetName("ManageNoData");
     SetDescription("Manage No-Data");
     // Documentation
-    SetDocName("No Data management");
     SetDocLongDescription("This application has two modes. The first allows building a mask of no-data pixels from the no-data flags read from the image file. The second allows updating the change the no-data value of an image (pixels value and metadata). This last mode also allows replacing NaN in images with a proper no-data value. To do so, one should activate the NaN is no-data option.");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppImageUtils/app/otbMultiResolutionPyramid.cxx b/Modules/Applications/AppImageUtils/app/otbMultiResolutionPyramid.cxx
index d99f5e7d9cdf0a8e707f8f326255e0497af5439a..833ebcb970627c9f7045df0eadbed7616ba99939 100644
--- a/Modules/Applications/AppImageUtils/app/otbMultiResolutionPyramid.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbMultiResolutionPyramid.cxx
@@ -64,7 +64,6 @@ private:
     SetDescription("Build a multi-resolution pyramid of the image.");
 
     // Documentation
-    SetDocName("Multi Resolution Pyramid");
     SetDocLongDescription("This application builds a multi-resolution pyramid of the input image. User can specified the number of levels of the pyramid and the subsampling factor. To speed up the process, you can use the fast scheme option");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppImageUtils/app/otbPixelValue.cxx b/Modules/Applications/AppImageUtils/app/otbPixelValue.cxx
index 333e7ba397ca20d22e40fd0f3a6c17a1006e8d7d..7a972d420facc3b35a7b0fc4ea638266e0a2f05e 100644
--- a/Modules/Applications/AppImageUtils/app/otbPixelValue.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbPixelValue.cxx
@@ -54,7 +54,6 @@ private:
     SetDescription("Get the value of a pixel.");
 
     // Documentation
-    SetDocName("Pixel Value");
     SetDocLongDescription("This application gives the value of a selected "
       "pixel. There are three ways to designate a pixel, with its index, "
       "its physical coordinate (in the physical space attached to the image), "
diff --git a/Modules/Applications/AppImageUtils/app/otbQuicklook.cxx b/Modules/Applications/AppImageUtils/app/otbQuicklook.cxx
index 1f70e6c542985c37998860ca40ffdd6607e3e313..48cc0d01da68995cc326d360fd4608dcc9acfc14 100644
--- a/Modules/Applications/AppImageUtils/app/otbQuicklook.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbQuicklook.cxx
@@ -57,7 +57,6 @@ private:
   {
     SetName("Quicklook");
     SetDescription("Generates a subsampled version of an image extract");
-    SetDocName("Quick Look");
     SetDocLongDescription("Generates a subsampled version of an extract of an image defined by ROIStart and ROISize.\n"
                           "This extract is subsampled using the ratio OR the output image Size.");
     SetDocLimitations("This application does not provide yet the optimal way to decode coarser level of resolution from JPEG2000 images (like in Monteverdi).\n"
diff --git a/Modules/Applications/AppImageUtils/app/otbReadImageInfo.cxx b/Modules/Applications/AppImageUtils/app/otbReadImageInfo.cxx
index f114d1826b89415b61ea7b8abcd69c346cf8c086..de958dddfbc249cb4a219a16df4d309d37923798 100644
--- a/Modules/Applications/AppImageUtils/app/otbReadImageInfo.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbReadImageInfo.cxx
@@ -54,7 +54,6 @@ private:
     SetDescription("Get information about the image");
 
     // Documentation
-    SetDocName("Read image information");
     SetDocLongDescription("Display information about the input image like: image size, origin, spacing, metadata, projections...");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppImageUtils/app/otbRescale.cxx b/Modules/Applications/AppImageUtils/app/otbRescale.cxx
index ddb95a9404170a485a5006b86229272a2341e90d..0a50d18e46ceffab913d0e97a0930c0d3a1ed6b4 100644
--- a/Modules/Applications/AppImageUtils/app/otbRescale.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbRescale.cxx
@@ -54,13 +54,12 @@ private:
     SetName("Rescale");
     SetDescription("Rescale the image between two given values.");
 
-    SetDocName("Rescale Image");
     SetDocLongDescription("This application scales the given image pixel intensity between two given values.\n"
                                   "By default min (resp. max) value is set to 0 (resp. 255).\n"
                                   "Input minimum and maximum values is automatically computed for all image bands.");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
-    SetDocSeeAlso(" ");
+    SetDocSeeAlso("DynamicConvert");
 
     AddDocTag(Tags::Deprecated);
     AddDocTag(Tags::Manip);
diff --git a/Modules/Applications/AppImageUtils/app/otbSplitImage.cxx b/Modules/Applications/AppImageUtils/app/otbSplitImage.cxx
index 0344029cd3e641532bbe01673fcca056bf26f9f9..3b1185ff604fed24668feb655e4f646ae24ff103 100644
--- a/Modules/Applications/AppImageUtils/app/otbSplitImage.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbSplitImage.cxx
@@ -54,7 +54,6 @@ private:
     SetName("SplitImage");
     SetDescription("Split a N multiband image into N images.");
 
-    SetDocName("Split Image");
     SetDocLongDescription("This application splits a N-bands image into N mono-band images. "
       "The output images filename will be generated from the output parameter. "
       "Thus, if the input image has 2 channels, and the user has set as output parameter, outimage.tif, "
diff --git a/Modules/Applications/AppImageUtils/app/otbTileFusion.cxx b/Modules/Applications/AppImageUtils/app/otbTileFusion.cxx
index 57c83dc13296442816b44311fd8c474b2b84e430..3db81c3cee417d6345694d12dc8c31264afae74d 100644
--- a/Modules/Applications/AppImageUtils/app/otbTileFusion.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbTileFusion.cxx
@@ -51,7 +51,6 @@ private:
     SetDescription("Fusion of an image made of several tile files.");
 
     // Documentation
-    SetDocName("Image Tile Fusion");
     SetDocLongDescription("Automatically mosaic a set of non overlapping tile files into a single image. Images must have a matching number of bands and they must be listed in lexicographic order.");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppIndices/app/otbRadiometricIndices.cxx b/Modules/Applications/AppIndices/app/otbRadiometricIndices.cxx
index 082106fd43fca3df6e443e7cea0009cfc873cd8e..9ba700804e8acd5513db8bc5b216b25c05c9d93a 100644
--- a/Modules/Applications/AppIndices/app/otbRadiometricIndices.cxx
+++ b/Modules/Applications/AppIndices/app/otbRadiometricIndices.cxx
@@ -73,7 +73,6 @@ private:
     SetDescription("Compute radiometric indices.");
 
     // Documentation
-    SetDocName("Radiometric Indices");
     SetDocLongDescription("This application computes radiometric indices using the relevant channels of the input image. The output is a multi band image into which each channel is one of the selected indices.");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppKMZ/app/otbKmzExport.cxx b/Modules/Applications/AppKMZ/app/otbKmzExport.cxx
index 63dd25d75123777b13b172c61939f8413a44ac72..62c9aada87a27808fd6096d33e0609475c7ba01b 100644
--- a/Modules/Applications/AppKMZ/app/otbKmzExport.cxx
+++ b/Modules/Applications/AppKMZ/app/otbKmzExport.cxx
@@ -50,7 +50,6 @@ private:
     SetName("KmzExport");
     SetDescription("Export the input image in a KMZ product.");
     // Documentation
-    SetDocName("Image to KMZ Export");
     SetDocLongDescription("This application exports the input image in a kmz product that can be display in the Google Earth software. The user can set the size of the product size, a logo and a legend to the product. Furthemore, to obtain a product that fits the relief, a DEM can be used.");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppMathParser/app/otbBandMath.cxx b/Modules/Applications/AppMathParser/app/otbBandMath.cxx
index 38edf77197af15a37c5638cc33d7de906616ba2a..6e741ba4e52d9b4ae15d7d29b253f4a725ee0526 100644
--- a/Modules/Applications/AppMathParser/app/otbBandMath.cxx
+++ b/Modules/Applications/AppMathParser/app/otbBandMath.cxx
@@ -62,7 +62,6 @@ private:
       "on several multi-band images."
     );
 
-    SetDocName( "Band Math" );
 
     SetDocLongDescription(
       "This application performs a mathematical operation on several multi-band "
diff --git a/Modules/Applications/AppMathParserX/app/otbBandMathX.cxx b/Modules/Applications/AppMathParserX/app/otbBandMathX.cxx
index bc8e637b439c853caf65811905376ed8db56cdd7..14a1bd82103379fe3caa6be0bf2f238c363ca36b 100644
--- a/Modules/Applications/AppMathParserX/app/otbBandMathX.cxx
+++ b/Modules/Applications/AppMathParserX/app/otbBandMathX.cxx
@@ -61,7 +61,6 @@ private:
 
     SetDescription("This application performs mathematical operations on several multiband images.");
 
-    SetDocName( "Band Math X" );
 
     SetDocLongDescription(
       "This application performs a mathematical operation on several multi-band "
diff --git a/Modules/Applications/AppMoments/app/otbLocalStatisticExtraction.cxx b/Modules/Applications/AppMoments/app/otbLocalStatisticExtraction.cxx
index 72321beef4cfaecff619ea589e2e894d42d6463d..47a68fbdd17d2dd0eda919200f188fcf4007cf74 100644
--- a/Modules/Applications/AppMoments/app/otbLocalStatisticExtraction.cxx
+++ b/Modules/Applications/AppMoments/app/otbLocalStatisticExtraction.cxx
@@ -59,7 +59,6 @@ SetName("LocalStatisticExtraction");
 SetDescription("Computes local statistical moments on every pixel in the selected channel of the input image");
 
 // Documentation
-SetDocName("Local Statistic Extraction");
 SetDocLongDescription("This application computes the 4 local statistical moments on every pixel in the selected channel of the input image, over a specified neighborhood. The output image is multi band with one statistical moment (feature) per band. Thus, the 4 output features are the Mean, the Variance, the Skewness and the Kurtosis. They are provided in this exact order in the output image.");
 SetDocLimitations("None");
 SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppMorphology/app/otbBinaryMorphologicalOperation.cxx b/Modules/Applications/AppMorphology/app/otbBinaryMorphologicalOperation.cxx
index 1394c94c5cb8d469c5a556a74f6eddc5e694fafe..91c7b8812a12692e42d87b1b8e3ec995a77a12cc 100644
--- a/Modules/Applications/AppMorphology/app/otbBinaryMorphologicalOperation.cxx
+++ b/Modules/Applications/AppMorphology/app/otbBinaryMorphologicalOperation.cxx
@@ -78,7 +78,6 @@ SetName( "BinaryMorphologicalOperation" );
 SetDescription( "Performs morphological operations on an input image channel" );
 
 // Documentation
-SetDocName( "Binary Morphological Operation" );
 SetDocLongDescription( "This application performs binary morphological "
   "operations on a mono band image or a channel of the input." );
 SetDocLimitations( "None" );
diff --git a/Modules/Applications/AppMorphology/app/otbGrayScaleMorphologicalOperation.cxx b/Modules/Applications/AppMorphology/app/otbGrayScaleMorphologicalOperation.cxx
index 315e94d3a2f47f655747e19b9f484fe16f182ede..4eab7d07270357beca147ed5359f11a48b89af08 100644
--- a/Modules/Applications/AppMorphology/app/otbGrayScaleMorphologicalOperation.cxx
+++ b/Modules/Applications/AppMorphology/app/otbGrayScaleMorphologicalOperation.cxx
@@ -77,7 +77,6 @@ SetName("GrayScaleMorphologicalOperation");
 SetDescription("Performs morphological operations on a grayscale input image");
 
 // Documentation
-SetDocName("Grayscale Morphological Operation");
 SetDocLongDescription("This application performs grayscale morphological operations on a mono band image");
 SetDocLimitations("None");
 SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppMorphology/app/otbMorphologicalClassification.cxx b/Modules/Applications/AppMorphology/app/otbMorphologicalClassification.cxx
index 2d594e24f68d9b0a5330a690e6f30be392201bb5..c3445b89a71de75166c0c613ed026b25464b06be 100644
--- a/Modules/Applications/AppMorphology/app/otbMorphologicalClassification.cxx
+++ b/Modules/Applications/AppMorphology/app/otbMorphologicalClassification.cxx
@@ -77,7 +77,6 @@ private:
       "classification on an input image channel" );
 
     // Documentation
-    SetDocName( "Morphological Classification" );
     SetDocLongDescription( 
     "This algorithm is based on the following publication:\n"
     "Martino Pesaresi and Jon Alti Benediktsson, Member, IEEE: A new approach "
diff --git a/Modules/Applications/AppMorphology/app/otbMorphologicalMultiScaleDecomposition.cxx b/Modules/Applications/AppMorphology/app/otbMorphologicalMultiScaleDecomposition.cxx
index ab27887c6c79d0041ea9340b113c2068b577a41a..0cb3c61216990e5499c5d1911079e2701576302c 100644
--- a/Modules/Applications/AppMorphology/app/otbMorphologicalMultiScaleDecomposition.cxx
+++ b/Modules/Applications/AppMorphology/app/otbMorphologicalMultiScaleDecomposition.cxx
@@ -71,7 +71,6 @@ private:
     SetDescription( "Perform a geodesic morphology based image analysis on an input image channel" );
 
     // Documentation
-    SetDocName( "Morphological Multi Scale Decomposition" );
     SetDocLongDescription(
             "This application recursively apply geodesic decomposition. \n"
                     "\n"
diff --git a/Modules/Applications/AppMorphology/app/otbMorphologicalProfilesAnalysis.cxx b/Modules/Applications/AppMorphology/app/otbMorphologicalProfilesAnalysis.cxx
index 09593c093fc49d11a332b5be6c5a08ecf382979e..75b4e6f3b71a83a1682783b018bf4ac238f3b91b 100644
--- a/Modules/Applications/AppMorphology/app/otbMorphologicalProfilesAnalysis.cxx
+++ b/Modules/Applications/AppMorphology/app/otbMorphologicalProfilesAnalysis.cxx
@@ -77,7 +77,6 @@ private:
     SetDescription( "Performs morphological profiles analysis on an input image channel." );
 
     // Documentation
-    SetDocName( "Morphological Profiles Analysis" );
     SetDocLongDescription( "This algorithm is derived from the following publication:\n\n"
 
                                    "Martino Pesaresi and Jon Alti Benediktsson, Member, IEEE: A new approach\n"
diff --git a/Modules/Applications/AppOpticalCalibration/app/otbOpticalCalibration.cxx b/Modules/Applications/AppOpticalCalibration/app/otbOpticalCalibration.cxx
index c0402d091a4d64e9485065930b7596106429943f..d66576cd568b9dcc18438687129ae08d5fb86e7b 100644
--- a/Modules/Applications/AppOpticalCalibration/app/otbOpticalCalibration.cxx
+++ b/Modules/Applications/AppOpticalCalibration/app/otbOpticalCalibration.cxx
@@ -130,7 +130,6 @@ private:
     SetName("OpticalCalibration");
     SetDescription("Perform optical calibration TOA/TOC (Top Of Atmosphere/Top Of Canopy). Supported sensors: QuickBird, Ikonos, WorldView2, Formosat, Spot5, Pleiades, Spot6, Spot7. For other sensors the application also allows providing calibration parameters manually.");
     // Documentation
-    SetDocName("Optical calibration");
     SetDocLongDescription("The application allows converting pixel values from DN (for Digital Numbers) to reflectance. Calibrated values are called surface reflectivity and its values lie in the range [0, 1].\nThe first level is called Top Of Atmosphere (TOA) reflectivity. It takes into account the sensor gain, sensor spectral response and the solar illuminations.\nThe second level is called Top Of Canopy (TOC) reflectivity. In addition to sensor gain and solar illuminations, it takes into account the optical thickness of the atmosphere, the atmospheric pressure, the water vapor amount, the ozone amount, as well as the composition and amount of aerosol gasses.\nIt is also possible to indicate an AERONET file which contains atmospheric parameters (version 1 and version 2 of Aeronet file are supported. Note that computing TOC reflectivity will internally compute first TOA and then TOC reflectance. \n"
 "\n--------------------------\n\n"
 "If the sensor is not supported by the metadata interface factory of OTB, users still have the possibility to give the needed parameters to the application.\n"
diff --git a/Modules/Applications/AppProjection/app/otbConvertCartoToGeoPoint.cxx b/Modules/Applications/AppProjection/app/otbConvertCartoToGeoPoint.cxx
index db538aa77dbc7c360f0eb2a3c5ffbab8970a6389..0b0ca946653f9fd3d0f32f3eff4f9d1cb13818ef 100644
--- a/Modules/Applications/AppProjection/app/otbConvertCartoToGeoPoint.cxx
+++ b/Modules/Applications/AppProjection/app/otbConvertCartoToGeoPoint.cxx
@@ -56,7 +56,6 @@ private:
     SetDescription("Convert cartographic coordinates to geographic ones.");
 
     // Documentation
-    SetDocName("Cartographic to geographic coordinates conversion");
     SetDocLongDescription("This application computes the geographic coordinates from cartographic ones. User has to give the X and Y coordinate and the cartographic projection (see mapproj parameter for details).");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppProjection/app/otbConvertSensorToGeoPoint.cxx b/Modules/Applications/AppProjection/app/otbConvertSensorToGeoPoint.cxx
index ea25a40717678ad2e1e41118f7dca88e47cfd066..c006fb7e65fc79dc404521c84cabe1f65f2a0d0c 100644
--- a/Modules/Applications/AppProjection/app/otbConvertSensorToGeoPoint.cxx
+++ b/Modules/Applications/AppProjection/app/otbConvertSensorToGeoPoint.cxx
@@ -55,7 +55,6 @@ private:
     SetDescription("Sensor to geographic coordinates conversion.");
 
     // Documentation
-    SetDocName("Convert Sensor Point To Geographic Point");
     SetDocLongDescription("This Application converts a sensor point of an input image to a geographic point using the Forward Sensor Model of the input image.");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppProjection/app/otbGenerateRPCSensorModel.cxx b/Modules/Applications/AppProjection/app/otbGenerateRPCSensorModel.cxx
index e604e8e4b656317f9c8eb2d2233aefe4b5e54e6b..c9236fcfe9afdb9cbfaeab72e9bf3f138ea63156 100644
--- a/Modules/Applications/AppProjection/app/otbGenerateRPCSensorModel.cxx
+++ b/Modules/Applications/AppProjection/app/otbGenerateRPCSensorModel.cxx
@@ -62,7 +62,6 @@ private:
     SetName("GenerateRPCSensorModel");
     SetDescription("Generate a RPC sensor model from a list of Ground Control Points.");
 
-    SetDocName("Generate a RPC sensor model");
     SetDocLongDescription( "This application generates a RPC sensor model from a list of Ground Control Points. "
                                    "At least 20 points are required for estimation without elevation support, "
                                    "and 40 points for estimation with elevation support. "
diff --git a/Modules/Applications/AppProjection/app/otbGridBasedImageResampling.cxx b/Modules/Applications/AppProjection/app/otbGridBasedImageResampling.cxx
index c45174fc58cb43299d88698d213594fb60572465..3e2d3c361c11570cf22c45720e1f373247049b63 100644
--- a/Modules/Applications/AppProjection/app/otbGridBasedImageResampling.cxx
+++ b/Modules/Applications/AppProjection/app/otbGridBasedImageResampling.cxx
@@ -109,7 +109,6 @@ private:
     SetName("GridBasedImageResampling");
     SetDescription("Resamples an image according to a resampling grid");
 
-    SetDocName("Grid Based Image Resampling");
     SetDocLongDescription("This application allows performing image resampling from an input resampling grid.");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppProjection/app/otbImageEnvelope.cxx b/Modules/Applications/AppProjection/app/otbImageEnvelope.cxx
index 25c4c3de7c7e69e3a267160bc4ff184957bb64f2..f2819ed660bf8cb0ad959ad4753888add3baf1a3 100644
--- a/Modules/Applications/AppProjection/app/otbImageEnvelope.cxx
+++ b/Modules/Applications/AppProjection/app/otbImageEnvelope.cxx
@@ -55,7 +55,6 @@ private:
     SetDescription("Extracts an image envelope.");
 
     // Documentation
-    SetDocName("Image Envelope");
     SetDocLongDescription("Build a vector data containing the image envelope polygon. "
       "Useful for some projection, you can set the polygon with more points with the sr parameter. "
       "This filter supports user-specified output projection. "
diff --git a/Modules/Applications/AppProjection/app/otbObtainUTMZoneFromGeoPoint.cxx b/Modules/Applications/AppProjection/app/otbObtainUTMZoneFromGeoPoint.cxx
index ef6731f85ed389ad8716ee5754a0583b661f091e..a9fc3023c63aa9e05cfdb3b0706bf52ab6ef2df3 100644
--- a/Modules/Applications/AppProjection/app/otbObtainUTMZoneFromGeoPoint.cxx
+++ b/Modules/Applications/AppProjection/app/otbObtainUTMZoneFromGeoPoint.cxx
@@ -57,7 +57,6 @@ private:
     SetDescription("UTM zone determination from a geographic point.");
 
     // Documentation
-    SetDocName("Obtain UTM Zone From Geo Point");
     SetDocLongDescription("This application returns the UTM zone of an input geographic point.");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppProjection/app/otbOrthoRectification.cxx b/Modules/Applications/AppProjection/app/otbOrthoRectification.cxx
index 38dc2342c11f4c599119df33b9d6621270a94c2d..00ff808f757c435506d87da2de4395a109030085 100644
--- a/Modules/Applications/AppProjection/app/otbOrthoRectification.cxx
+++ b/Modules/Applications/AppProjection/app/otbOrthoRectification.cxx
@@ -91,7 +91,6 @@ private:
   {
     SetName("OrthoRectification");
     SetDescription("This application allows ortho-rectifying optical and radar images from supported sensors.");
-    SetDocName("Ortho-rectification");
     std::ostringstream oss;
     oss<<"This application uses inverse sensor modelling combined with a choice of interpolation functions to resample a sensor geometry image into a ground geometry regular grid. ";
     oss<<"The ground geometry regular grid is defined with respect to a map projection (see map parameter). The application offers several modes to estimate the output grid parameters (origin and ground sampling distance), including automatic estimation of image size, ground sampling distance, or both, from image metadata, user-defined ROI corners, or another ortho-image.";
diff --git a/Modules/Applications/AppProjection/app/otbRefineSensorModel.cxx b/Modules/Applications/AppProjection/app/otbRefineSensorModel.cxx
index 6c1346b288e1423a6bd5e2748c0bff2606c57195..f007315bfebd9bdc67fc1c7cced6dff972beb3bf 100644
--- a/Modules/Applications/AppProjection/app/otbRefineSensorModel.cxx
+++ b/Modules/Applications/AppProjection/app/otbRefineSensorModel.cxx
@@ -61,7 +61,6 @@ private:
     SetName("RefineSensorModel");
     SetDescription("Perform least-square fit of a sensor model to a set of tie points");
 
-    SetDocName("Refine Sensor Model");
     SetDocLongDescription("This application reads a geom file containing a sensor model and a text file containing a list of ground control point, and performs a least-square fit of the sensor model adjustable parameters to these tie points. It produces an updated geom file as output, as well as an optional ground control points based statistics file and a vector file containing residues. The output geom file can then be used to ortho-rectify the data more accurately. Plaease note that for a proper use of the application, elevation must be correctly set (including DEM and geoid file). The map parameters allows one to choose a map projection in which the accuracy will be estimated in meters.");
 
     AddDocTag(Tags::Geometry);
diff --git a/Modules/Applications/AppProjection/app/otbRigidTransformResample.cxx b/Modules/Applications/AppProjection/app/otbRigidTransformResample.cxx
index 5b623ad42bc2fa358730407d8f7c96860c7f08c2..675cd6e8d74f973e1760c11f226de6c92c446c77 100644
--- a/Modules/Applications/AppProjection/app/otbRigidTransformResample.cxx
+++ b/Modules/Applications/AppProjection/app/otbRigidTransformResample.cxx
@@ -85,7 +85,6 @@ private:
     SetName("RigidTransformResample");
     SetDescription("Resample an image with a rigid transform");
     // Documentation
-    SetDocName("Image resampling with a rigid transform");
     SetDocLongDescription("This application performs a parametric transform on the input image. Scaling, translation and rotation with scaling factor are handled."
         " Parameters of the transform is expressed in physical units, thus particular attention must be paid on pixel size (value, and sign). Moreover transform is expressed from input space to output space (on the contrary ITK Transforms are expressed form output space to input space). ");
     SetDocLimitations("None");
diff --git a/Modules/Applications/AppProjection/app/otbSuperimpose.cxx b/Modules/Applications/AppProjection/app/otbSuperimpose.cxx
index d59f5334c1e40312a3e1e73bb36abe43f463c2f0..c954f36793b38508f1d18b0c3d8cdb4624c1b182 100644
--- a/Modules/Applications/AppProjection/app/otbSuperimpose.cxx
+++ b/Modules/Applications/AppProjection/app/otbSuperimpose.cxx
@@ -87,7 +87,6 @@ private:
     SetDescription("Using available image metadata, project one image onto another one");
 
     // Documentation
-    SetDocName("Superimpose sensor");
     SetDocLongDescription("This application performs the projection of an image into the geometry of another one.");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppProjection/app/otbVectorDataReprojection.cxx b/Modules/Applications/AppProjection/app/otbVectorDataReprojection.cxx
index 3c557a224ecb91d10a25fc09db45b6b1635721f1..e204055b2a4c1385b0ca5d02d039a8a7f190013a 100644
--- a/Modules/Applications/AppProjection/app/otbVectorDataReprojection.cxx
+++ b/Modules/Applications/AppProjection/app/otbVectorDataReprojection.cxx
@@ -64,7 +64,6 @@ private:
   {
     SetName("VectorDataReprojection");
     SetDescription("Reproject a vector data using support image projection reference, or a user specified map projection");
-    SetDocName("Vector Data reprojection");
 
     SetDocLongDescription(
         "Reproject vector data using a support image as projection reference or to a user given map projection. "
diff --git a/Modules/Applications/AppSARCalibration/app/otbSARBurstExtraction.cxx b/Modules/Applications/AppSARCalibration/app/otbSARBurstExtraction.cxx
index 0d92ecb931893ca466310b71dbf9ed19421a2df4..f5d70923252edc6b52d76eb8a4a6dd9084497912 100644
--- a/Modules/Applications/AppSARCalibration/app/otbSARBurstExtraction.cxx
+++ b/Modules/Applications/AppSARCalibration/app/otbSARBurstExtraction.cxx
@@ -50,7 +50,6 @@ private:
     SetDescription("This application performs a burst extraction by keeping only lines and samples of a required burst.");
 
     // Documentation
-    SetDocName("SAR Burst Extraction");
     SetDocLongDescription("Sentinel1 IW SLC products are composed of several burst overlapping in"
                           " azimuth time for each subswath, separated by black lines [1]. The burst"
                           " extraction consist in extracting a single burst, by selecting only lines" 
diff --git a/Modules/Applications/AppSARCalibration/app/otbSARCalibration.cxx b/Modules/Applications/AppSARCalibration/app/otbSARCalibration.cxx
index 142b0108c1002f691899dc7fa6b52cea1c1438de..c60b8f0d34f4bf89a375b2d0dbfeb963f13a0c18 100644
--- a/Modules/Applications/AppSARCalibration/app/otbSARCalibration.cxx
+++ b/Modules/Applications/AppSARCalibration/app/otbSARCalibration.cxx
@@ -51,7 +51,6 @@ private:
     SetDescription("Perform radiometric calibration of SAR images. Following sensors are supported: TerraSAR-X, Sentinel1 and Radarsat-2.Both Single Look Complex(SLC) and detected products are supported as input.");
 
     // Documentation
-    SetDocName("SAR Radiometric calibration");
     SetDocLongDescription("The objective of SAR calibration is to provide imagery in which the pixel values can be directly related to the radar backscatter of the scene. This application allows computing Sigma Naught (Radiometric Calibration) for TerraSAR-X, Sentinel1 L1 and Radarsat-2 sensors. Metadata are automatically retrieved from image products.The application supports complex and non-complex images (SLC or detected products).");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppSARCalibration/app/otbSARConcatenateBursts.cxx b/Modules/Applications/AppSARCalibration/app/otbSARConcatenateBursts.cxx
index 95723672549f402ee1e83cb0e899e82bbe3d0566..cb0682774d691945f9256c03b92d48fe415140bb 100644
--- a/Modules/Applications/AppSARCalibration/app/otbSARConcatenateBursts.cxx
+++ b/Modules/Applications/AppSARCalibration/app/otbSARConcatenateBursts.cxx
@@ -58,7 +58,6 @@ private:
     SetDescription("Concatenate a list of Bursts to provide a whole SAR Deburst Image.");
 
     // Documentation
-    SetDocName("SAR Concatenate Bursts");
     SetDocLongDescription("This application performs a burst concatenation and provides a SAR Deburst Image. "
 			  "It reads the input image list (single bursts) "
 			  "and generates a whole SAR image with deburst operations.");
diff --git a/Modules/Applications/AppSARCalibration/app/otbSARDeburst.cxx b/Modules/Applications/AppSARCalibration/app/otbSARDeburst.cxx
index d69219edbfa32193f438f76f84584d81ac69a49b..3211f8ff6955e3fa588a70857c77c8223936a0cc 100644
--- a/Modules/Applications/AppSARCalibration/app/otbSARDeburst.cxx
+++ b/Modules/Applications/AppSARCalibration/app/otbSARDeburst.cxx
@@ -50,7 +50,6 @@ private:
     SetDescription("This application performs deburst of Sentinel1 IW SLC images by removing redundant lines.");
 
     // Documentation
-    SetDocName("SAR Deburst");
     SetDocLongDescription("Sentinel1 IW SLC products are composed of several burst overlapping in"
                           " azimuth time for each subswath, separated by black lines [1]. The deburst"
                           " operation consist in generating a continuous image in terms of azimuth"
diff --git a/Modules/Applications/AppSARDecompositions/app/otbSARDecompositions.cxx b/Modules/Applications/AppSARDecompositions/app/otbSARDecompositions.cxx
index b96d2e70c3835825f99f19339de19ce23838a7a4..9098a0506a5dab146f66c28e3ce9fc7c19992aff 100644
--- a/Modules/Applications/AppSARDecompositions/app/otbSARDecompositions.cxx
+++ b/Modules/Applications/AppSARDecompositions/app/otbSARDecompositions.cxx
@@ -81,7 +81,6 @@ private:
     SetDescription("From one-band complex images (each one related to an element of the Sinclair matrix), returns the selected decomposition.");
 
     // Documentation
-    SetDocName("SARDecompositions");
     SetDocLongDescription(
         "From one-band complex images (HH, HV, VH, VV), returns the selected decomposition.\n \n"
         "All the decompositions implemented are intended for the mono-static case (transmitter and receiver are co-located).\n"
diff --git a/Modules/Applications/AppSARPolarMatrixConvert/app/otbSARPolarMatrixConvert.cxx b/Modules/Applications/AppSARPolarMatrixConvert/app/otbSARPolarMatrixConvert.cxx
index d167e27dc9306e933f0f2d96b051d1cc24155a3c..efc0bc96782d3c2c806bd197ce6a7056f944f8d6 100644
--- a/Modules/Applications/AppSARPolarMatrixConvert/app/otbSARPolarMatrixConvert.cxx
+++ b/Modules/Applications/AppSARPolarMatrixConvert/app/otbSARPolarMatrixConvert.cxx
@@ -84,7 +84,6 @@ private:
     SetDescription("This applications allows converting classical polarimetric matrices to each other.");
 
     // Documentation
-    SetDocName("SARPolarMatrixConvert");
     SetDocLongDescription(
 
         "This application allows converting classical polarimetric matrices to each other.\n"
diff --git a/Modules/Applications/AppSARPolarSynth/app/otbSARPolarSynth.cxx b/Modules/Applications/AppSARPolarSynth/app/otbSARPolarSynth.cxx
index 77b43d10a6d1ae982f8e15f5d55bc2428afdddd7..c7a1acba00b03c27faad88705c03915eae7bcd88 100644
--- a/Modules/Applications/AppSARPolarSynth/app/otbSARPolarSynth.cxx
+++ b/Modules/Applications/AppSARPolarSynth/app/otbSARPolarSynth.cxx
@@ -50,7 +50,6 @@ private:
     SetDescription("Gives, for each pixel, the power that would have been received by a SAR system with a basis different from the classical (H,V) one (polarimetric synthetis).");
 
     // Documentation
-    SetDocName("SARPolarSynth");
     SetDocLongDescription("This application gives, for each pixel, the power that would have been received by a SAR system with a basis different from the classical (H,V) one (polarimetric synthetis).\n" 
 						  "The new basis A and B are indicated through two Jones vectors, defined by the user thanks to orientation (psi) and ellipticity (khi) parameters.\n"
 						  "These parameters are namely psii, khii, psir and khir. The suffixes (i) and (r) refer to the transmitting antenna and the receiving antenna respectively.\n"
diff --git a/Modules/Applications/AppSARUtils/app/otbComputeModulusAndPhase.cxx b/Modules/Applications/AppSARUtils/app/otbComputeModulusAndPhase.cxx
index acb86804eca8bebbacac12fbaf2bd58eb65d8c1f..fa6a5101d29e26efe3607fb9ba8d58d802a7a822 100644
--- a/Modules/Applications/AppSARUtils/app/otbComputeModulusAndPhase.cxx
+++ b/Modules/Applications/AppSARUtils/app/otbComputeModulusAndPhase.cxx
@@ -61,7 +61,6 @@ private:
     SetName("ComputeModulusAndPhase");
     SetDescription("This application computes the modulus and the phase of a complex SAR image or an image with 2 components (real and imaginary parts).");
 
-    SetDocName("Compute Modulus and Phase");
     SetDocLongDescription(
       "This application computes the modulus and the phase of a "
       "complex SAR image. The input should be a single band image with "
diff --git a/Modules/Applications/AppSARUtils/app/otbDespeckle.cxx b/Modules/Applications/AppSARUtils/app/otbDespeckle.cxx
index d91076666138dfe8973ed89227f99d8361909fcb..0d7a0f5ccfb32bea7bbc67f24957cc180c7bc4ad 100644
--- a/Modules/Applications/AppSARUtils/app/otbDespeckle.cxx
+++ b/Modules/Applications/AppSARUtils/app/otbDespeckle.cxx
@@ -60,7 +60,6 @@ private:
     SetDescription("Perform speckle noise reduction on SAR image.");
 
     // Documentation
-    SetDocName("Despeckle");
     SetDocLongDescription("SAR images are affected by speckle noise that inherently exists in and which"
      " degrades the image quality. It is caused by the coherent nature of"
      " back-scattered waves from multiple distributed targets. It is locally strong"
diff --git a/Modules/Applications/AppSegmentation/app/otbConnectedComponentSegmentation.cxx b/Modules/Applications/AppSegmentation/app/otbConnectedComponentSegmentation.cxx
index 62f0a974dfb71279b554b0bdd040880d94bef05d..158ec83a55920368b0deb69bf4ada7df385247e9 100644
--- a/Modules/Applications/AppSegmentation/app/otbConnectedComponentSegmentation.cxx
+++ b/Modules/Applications/AppSegmentation/app/otbConnectedComponentSegmentation.cxx
@@ -73,7 +73,6 @@ private:
   {
     SetName("ConnectedComponentSegmentation");
     SetDescription("Connected component segmentation and object based image filtering of the input image according to user-defined criterions.");
-    SetDocName("Connected Component Segmentation");
     SetDocLongDescription("This application allows one to perform a masking, connected components segmentation and object based image filtering. First and optionally, a mask can be built based on user-defined criterions to select pixels of the image which will be segmented. Then a connected component segmentation is performed with a user defined criterion to decide whether two neighbouring pixels belong to the same segment or not. After this segmentation step, an object based image filtering is applied using another user-defined criterion reasoning on segment properties, like shape or radiometric attributes. " "Criterions are mathematical expressions analysed by the MuParser library (http://muparser.sourceforge.net/). For instance, expression \"((b1>80) and intensity>95)\" will merge two neighbouring pixel in a single segment if their intensity is more than 95 and their value in the first image band is more than 80. See parameters documentation for a list of available attributes. The output of the object based image filtering is vectorized and can be written in shapefile or KML format. If the input image is in raw geometry, resulting polygons will be transformed to WGS84 using sensor modelling before writing, to ensure consistency with GIS software. For this purpose, a Digital Elevation Model can be provided to the application. The whole processing is done on a per-tile basis for large images, so this application can handle images of arbitrary size.");
     SetDocLimitations("Due to the tiling scheme in case of large images, some segments can be arbitrarily split across multiple tiles.");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppSegmentation/app/otbHooverCompareSegmentation.cxx b/Modules/Applications/AppSegmentation/app/otbHooverCompareSegmentation.cxx
index dcc25d7101c02f9a879009032c1640d2a03f8c11..1025607255651a56aab73d5d1208bf6f3456310e 100644
--- a/Modules/Applications/AppSegmentation/app/otbHooverCompareSegmentation.cxx
+++ b/Modules/Applications/AppSegmentation/app/otbHooverCompareSegmentation.cxx
@@ -133,7 +133,6 @@ private:
     SetDescription("Compare two segmentations with Hoover metrics");
 
     // Documentation
-    SetDocName("Hoover compare segmentation");
     SetDocLongDescription("This application compares a machine segmentation (MS) with a partial "
                           "ground truth segmentation (GT). The Hoover metrics are used to estimate "
                           "scores for correct detection, over-segmentation, under-segmentation and "
diff --git a/Modules/Applications/AppSegmentation/app/otbLSMSSegmentation.cxx b/Modules/Applications/AppSegmentation/app/otbLSMSSegmentation.cxx
index 478acd849d7d895ee6f6b84026d1b400444de1a6..bf5c40c7b1d46fd11b14dec19e00ea29b00fbe21 100644
--- a/Modules/Applications/AppSegmentation/app/otbLSMSSegmentation.cxx
+++ b/Modules/Applications/AppSegmentation/app/otbLSMSSegmentation.cxx
@@ -220,7 +220,6 @@ private:
     SetName("LSMSSegmentation");
     SetDescription("This application performs the second step of the exact Large-Scale Mean-Shift segmentation workflow (LSMS) [1].");
 
-    SetDocName("Exact Large-Scale Mean-Shift segmentation, step 2");
     SetDocLongDescription("This application will produce a labeled image where neighbor pixels"
                           " whose range distance is below range radius (and optionally spatial"
                           " distance below spatial radius) will be grouped together into the same"
diff --git a/Modules/Applications/AppSegmentation/app/otbLSMSSmallRegionsMerging.cxx b/Modules/Applications/AppSegmentation/app/otbLSMSSmallRegionsMerging.cxx
index b0bffe8fc8b992df8f9a7edca0f52c3932ee746c..6f8f839953e039d408f676a8f7c70231db5ec3ba 100644
--- a/Modules/Applications/AppSegmentation/app/otbLSMSSmallRegionsMerging.cxx
+++ b/Modules/Applications/AppSegmentation/app/otbLSMSSmallRegionsMerging.cxx
@@ -78,7 +78,6 @@ private:
     SetName("LSMSSmallRegionsMerging");
     SetDescription("This application performs the third (optional) step of the exact Large-Scale Mean-Shift segmentation workflow [1].");
 
-    SetDocName("Exact Large-Scale Mean-Shift segmentation, step 3 (optional)");
     SetDocLongDescription("Given a segmentation result (can be the out output parameter of the"
                           " LSMSSegmentation application [2]) and the original image, it will"
                           " merge segments whose size in pixels is lower than minsize parameter"
@@ -97,12 +96,14 @@ private:
                       " application is not compatible with in-memory connection since it does"
                       " its own internal streaming.");
     SetDocAuthors("David Youssefi");
-    SetDocSeeAlso( "[1] Michel, J., Youssefi, D., & Grizonnet, M. (2015). Stable"
-                   " mean-shift algorithm and its application to the segmentation of"
-                   " arbitrarily large remote sensing images. IEEE Transactions on"
-                   " Geoscience and Remote Sensing, 53(2), 952-964.\n"
-                   "[2] LSMSegmentation\n"
-                   "[3] LSMSVectorization");
+    SetDocSeeAlso(
+        "Alternative: SmallRegionsMerging\n"
+        "[1] Michel, J., Youssefi, D., & Grizonnet, M. (2015). Stable"
+        " mean-shift algorithm and its application to the segmentation of"
+        " arbitrarily large remote sensing images. IEEE Transactions on"
+        " Geoscience and Remote Sensing, 53(2), 952-964.\n"
+        "[2] LSMSSegmentation\n"
+        "[3] LSMSVectorization");
     AddDocTag(Tags::Segmentation);
     AddDocTag(Tags::Deprecated);
     AddDocTag("LSMS");
diff --git a/Modules/Applications/AppSegmentation/app/otbLSMSVectorization.cxx b/Modules/Applications/AppSegmentation/app/otbLSMSVectorization.cxx
index ef9446185b575167612854e59047d463e24401bf..467a0d8a0510821701ba4b8298fad4d8c0cb6261 100644
--- a/Modules/Applications/AppSegmentation/app/otbLSMSVectorization.cxx
+++ b/Modules/Applications/AppSegmentation/app/otbLSMSVectorization.cxx
@@ -71,7 +71,6 @@ private:
     SetName("LSMSVectorization");
     SetDescription("This application performs the fourth step of the exact Large-Scale Mean-Shift segmentation workflow [1].");
 
-    SetDocName("Exact Large-Scale Mean-Shift segmentation, step 4");
     SetDocLongDescription("Given a segmentation result (label image), that may come from the"
                           " LSMSSegmentation [2] application (out parameter) or have been"
                           " processed for small regions merging [3] (out parameter), it will"
diff --git a/Modules/Applications/AppSegmentation/app/otbLargeScaleMeanShift.cxx b/Modules/Applications/AppSegmentation/app/otbLargeScaleMeanShift.cxx
index bc414d0f2081c4d6d9a7951ea079b24318838cea..67ec7cbb0e3e354b8f4ac6251d27d51a9f2c73f2 100644
--- a/Modules/Applications/AppSegmentation/app/otbLargeScaleMeanShift.cxx
+++ b/Modules/Applications/AppSegmentation/app/otbLargeScaleMeanShift.cxx
@@ -56,7 +56,6 @@ private:
     SetDescription("Large-scale segmentation using MeanShift");
 
     // Documentation
-    SetDocName("Large-Scale MeanShift");
     SetDocLongDescription("This application chains together the 4 steps of the "
       "MeanShit framework, that is the MeanShiftSmoothing, the "
       "LSMSSegmentation, the LSMSSmallRegionsMerging and the "
diff --git a/Modules/Applications/AppSegmentation/app/otbMeanShiftSmoothing.cxx b/Modules/Applications/AppSegmentation/app/otbMeanShiftSmoothing.cxx
index 9923e70c55232e92372da8f407917de4d7bcb68d..1965b856068822cc5948dc7af3dab815a1b0cdc6 100644
--- a/Modules/Applications/AppSegmentation/app/otbMeanShiftSmoothing.cxx
+++ b/Modules/Applications/AppSegmentation/app/otbMeanShiftSmoothing.cxx
@@ -52,7 +52,6 @@ private:
     SetDescription("This application smooths an image using the MeanShift algorithm.");
 
     // Documentation
-    SetDocName("MeanShift Smoothing");
     SetDocLongDescription("MeanShift [1,2,3] is an iterative edge-preserving image smoothing"
                           " algorithm often used in image processing and as a first step for"
                           " image segmentation. The MeanShift algorithm can be applied to"
diff --git a/Modules/Applications/AppSegmentation/app/otbSegmentation.cxx b/Modules/Applications/AppSegmentation/app/otbSegmentation.cxx
index b850bbed7fb450e1e3dc96878fba33c6bb0061f9..ceb97c4c08649d3eeb14127b7298f92dd35c3648 100644
--- a/Modules/Applications/AppSegmentation/app/otbSegmentation.cxx
+++ b/Modules/Applications/AppSegmentation/app/otbSegmentation.cxx
@@ -144,7 +144,6 @@ private:
     SetDescription("Performs segmentation of an image, and output either a raster or a vector file. In vector mode, large input datasets are supported.");
 
     // Documentation
-    SetDocName("Segmentation");
     SetDocLongDescription(
         "This application allows one to perform various segmentation algorithms on a multispectral image."
         " Available segmentation algorithms are two different versions of Mean-Shift segmentation algorithm (one being multi-threaded),"
diff --git a/Modules/Applications/AppSegmentation/app/otbSmallRegionsMerging.cxx b/Modules/Applications/AppSegmentation/app/otbSmallRegionsMerging.cxx
index 84d3e8a5e183f7d58f5fde39a636398cf9b1af85..6288293e79c1c8a433c06f722abc63492781c247 100644
--- a/Modules/Applications/AppSegmentation/app/otbSmallRegionsMerging.cxx
+++ b/Modules/Applications/AppSegmentation/app/otbSmallRegionsMerging.cxx
@@ -65,7 +65,6 @@ private:
     SetDescription("This application merges small regions of a segmentation "
       "result.");
 
-    SetDocName("Small Region Merging");
     SetDocLongDescription("Given a segmentation result and the original image,"
                           " it will merge segments whose size in pixels is"
                           " lower than minsize parameter with the adjacent"
diff --git a/Modules/Applications/AppStereo/app/otbBlockMatching.cxx b/Modules/Applications/AppStereo/app/otbBlockMatching.cxx
index e7a93159fdf9a88a2476f746b91f10a6afb860f6..2fac42ef3b6a584e135d335075c144018a9a937f 100644
--- a/Modules/Applications/AppStereo/app/otbBlockMatching.cxx
+++ b/Modules/Applications/AppStereo/app/otbBlockMatching.cxx
@@ -130,7 +130,6 @@ private:
     SetDescription("Performs block-matching to estimate pixel-wise disparities"
       " between two images.");
 
-    SetDocName("Pixel-wise Block-Matching");
     SetDocLongDescription(
       "This application allows one to performs "
       "block-matching to estimate pixel-wise disparities for a pair of images "
diff --git a/Modules/Applications/AppStereo/app/otbDisparityMapToElevationMap.cxx b/Modules/Applications/AppStereo/app/otbDisparityMapToElevationMap.cxx
index 4aebc52cb849747385936daedef6d902b54e61a2..04ec3d28567cb049daa3c4b13ec833d803ef2220 100644
--- a/Modules/Applications/AppStereo/app/otbDisparityMapToElevationMap.cxx
+++ b/Modules/Applications/AppStereo/app/otbDisparityMapToElevationMap.cxx
@@ -67,7 +67,6 @@ private:
     SetName("DisparityMapToElevationMap");
     SetDescription("Projects a disparity map into a regular elevation map.");
 
-    SetDocName("Disparity map to elevation map");
     SetDocLongDescription(
       "This application uses a disparity map computed from "
       "a stereo image pair to produce an elevation map on the ground area "
diff --git a/Modules/Applications/AppStereo/app/otbFineRegistration.cxx b/Modules/Applications/AppStereo/app/otbFineRegistration.cxx
index 44f36e296555f1f61c7dbcf2fa72f1682e80ae5b..83d98a2b64fc5ba10dad13540e744b156b2cfe1f 100644
--- a/Modules/Applications/AppStereo/app/otbFineRegistration.cxx
+++ b/Modules/Applications/AppStereo/app/otbFineRegistration.cxx
@@ -118,7 +118,6 @@ private:
     SetName("FineRegistration");
     SetDescription("Estimate disparity map between two images.");
 
-    SetDocName("Fine Registration");
     SetDocLongDescription("This application computes a disparity map between "
       "two images that correspond to the same scene. It is intended for case "
       "where small misregistration between images should be estimated and fixed"
diff --git a/Modules/Applications/AppStereo/app/otbGeneratePlyFile.cxx b/Modules/Applications/AppStereo/app/otbGeneratePlyFile.cxx
index 80e7b38d0f506a40649adb5b6019fa4265bf60e3..25e5d01dc1111409d4aee1e0d14df18a4ce70278 100644
--- a/Modules/Applications/AppStereo/app/otbGeneratePlyFile.cxx
+++ b/Modules/Applications/AppStereo/app/otbGeneratePlyFile.cxx
@@ -57,7 +57,6 @@ private:
     SetName("GeneratePlyFile");
     SetDescription("Generate a 3D Ply file from a DEM and a color image.");
 
-    SetDocName("Ply 3D files generation");
     SetDocLongDescription("The application converts an image containing "
       "elevations into a PLY file, which is a file format to store 3D models. "
       "This format is adpated for visualization on software such as MeshLab [2]"
diff --git a/Modules/Applications/AppStereo/app/otbStereoFramework.cxx b/Modules/Applications/AppStereo/app/otbStereoFramework.cxx
index 55e9972f6764f3f3502ddfa70e5482c265e6dc23..4302458f1671e7a639e985762a41b472c20efb97 100644
--- a/Modules/Applications/AppStereo/app/otbStereoFramework.cxx
+++ b/Modules/Applications/AppStereo/app/otbStereoFramework.cxx
@@ -317,7 +317,6 @@ private:
     SetName("StereoFramework");
     SetDescription("Compute the ground elevation based on one or multiple stereo pair(s)");
 
-    SetDocName("Stereo Framework");
     SetDocLongDescription(
       "Compute the ground elevation with a stereo block matching algorithm "
       "between one or multiple stereo pair in sensor geometry. The output is "
diff --git a/Modules/Applications/AppStereo/app/otbStereoRectificationGridGenerator.cxx b/Modules/Applications/AppStereo/app/otbStereoRectificationGridGenerator.cxx
index a613d6d53a7a9e243a3b5d00815344a4d7a516e1..5e6eee5bc6bdf2f5d73aaa1852edb187254a726d 100644
--- a/Modules/Applications/AppStereo/app/otbStereoRectificationGridGenerator.cxx
+++ b/Modules/Applications/AppStereo/app/otbStereoRectificationGridGenerator.cxx
@@ -105,7 +105,6 @@ private:
     SetDescription("Generates two deformation fields to resample in epipolar "
       "geometry, a pair of stereo images up to the sensor model precision");
 
-    SetDocName("Stereo-rectification deformation grid generator");
     SetDocLongDescription(
       "This application generates a pair of deformation "
       "grid to stereo-rectify a pair of stereo images according to sensor "
diff --git a/Modules/Applications/AppTest/app/otbTestApplication.cxx b/Modules/Applications/AppTest/app/otbTestApplication.cxx
index 60fff26221848c208c765326036987f3b32f37d6..53ca3223a803f44c532b64101a0bff77ed26fde7 100644
--- a/Modules/Applications/AppTest/app/otbTestApplication.cxx
+++ b/Modules/Applications/AppTest/app/otbTestApplication.cxx
@@ -47,7 +47,6 @@ private:
     SetName("TestApplication");
     SetDescription("This application helps developers to test parameters types");
 
-    SetDocName("Test");
     SetDocLongDescription("The purpose of this application is to test parameters types.");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppTest/test/otbWrapperApplicationDocTests.cxx b/Modules/Applications/AppTest/test/otbWrapperApplicationDocTests.cxx
index 4b00e122696f80b729e54861d4906fb9b36e515c..c7756a084771e884ab968d56a7398ad170bf847b 100644
--- a/Modules/Applications/AppTest/test/otbWrapperApplicationDocTests.cxx
+++ b/Modules/Applications/AppTest/test/otbWrapperApplicationDocTests.cxx
@@ -105,7 +105,6 @@ int otbWrapperApplicationDocTest(int argc, char* argv[])
 
     // Check doc element...
     DocElement name("Name",app->GetName());
-    DocElement docName("Doc Name",app->GetDocName());
     DocElement description("Description",app->GetDescription());
     DocElement longDescription("Long description",app->GetDocLongDescription());
     DocElement authors("DocAuthors",app->GetDocAuthors());
@@ -115,9 +114,6 @@ int otbWrapperApplicationDocTest(int argc, char* argv[])
     isOK = CheckNonEmpty(name) && isOK;
     isOK = CheckNoNewline(name) && isOK;
 
-    isOK = CheckNonEmpty(docName) && isOK;
-    isOK = CheckNoNewline(docName) && isOK;
-
     isOK = CheckNonEmpty(description) && isOK;
 
     isOK = CheckNonEmpty(longDescription) && isOK;
diff --git a/Modules/Applications/AppTextures/app/otbHaralickTextureExtraction.cxx b/Modules/Applications/AppTextures/app/otbHaralickTextureExtraction.cxx
index 82fc9982b074b77cb9576ad42ab2f7451eed44d0..b4985ae6412f171c2abf15c3eee4357bdc0d10dc 100644
--- a/Modules/Applications/AppTextures/app/otbHaralickTextureExtraction.cxx
+++ b/Modules/Applications/AppTextures/app/otbHaralickTextureExtraction.cxx
@@ -73,7 +73,6 @@ SetName("HaralickTextureExtraction");
 SetDescription("Computes Haralick textural features on the selected channel of the input image");
 
 // Documentation
-SetDocName("Haralick Texture Extraction");
 SetDocLongDescription(
     "This application computes three sets of Haralick features [1][2].\n\n"
 
diff --git a/Modules/Applications/AppTextures/app/otbSFSTextureExtraction.cxx b/Modules/Applications/AppTextures/app/otbSFSTextureExtraction.cxx
index b94831841f69dbf0dae4d1f9971fdf01426e8248..2fb1064e57fc12e88ddc872657b53e21bee1c16b 100644
--- a/Modules/Applications/AppTextures/app/otbSFSTextureExtraction.cxx
+++ b/Modules/Applications/AppTextures/app/otbSFSTextureExtraction.cxx
@@ -63,7 +63,6 @@ SetDescription("Computes Structural Feature Set textures on every pixel of the "
     "input image selected channel");
 
 // Documentation
-SetDocName("SFS Texture Extraction");
 SetDocLongDescription("Structural Feature Set [1] are based on the histograms of "
     "the pixels in multiple directions of the image. The SFSTextureExtraction application "
     "computes the  6 following features: SFS'Length, SFS'Width, SFS'PSI, SFS'W-Mean, "
diff --git a/Modules/Applications/AppVectorDataTranslation/app/otbRasterization.cxx b/Modules/Applications/AppVectorDataTranslation/app/otbRasterization.cxx
index 8a4936fdc9c699917e6e831f2559135c8da52ab6..1a6754a8b7945786d1561d81589cf9519e187719 100644
--- a/Modules/Applications/AppVectorDataTranslation/app/otbRasterization.cxx
+++ b/Modules/Applications/AppVectorDataTranslation/app/otbRasterization.cxx
@@ -65,7 +65,6 @@ private:
     SetName("Rasterization");
     SetDescription("Reproject and rasterize a vector dataset");
 
-    SetDocName("Rasterization");
     SetDocLongDescription(
         "Reproject and rasterize a vector dataset. The grid of the rasterized output can be set by using a reference image, or by "
         "setting all parmeters (origin, size, spacing) by hand. In the latter case, at least the spacing (ground sampling distance) is needed (other "
diff --git a/Modules/Applications/AppVectorUtils/app/otbConcatenateVectorData.cxx b/Modules/Applications/AppVectorUtils/app/otbConcatenateVectorData.cxx
index baab41dcc8477c89bdbabd8791bae14c99c74b31..6c036765faef3781311af00f3069a065b3cd3d59 100644
--- a/Modules/Applications/AppVectorUtils/app/otbConcatenateVectorData.cxx
+++ b/Modules/Applications/AppVectorUtils/app/otbConcatenateVectorData.cxx
@@ -52,7 +52,6 @@ private:
     SetName("ConcatenateVectorData");
     SetDescription("Concatenate vector data files");
 
-    SetDocName("Concatenate Vector Data");
     SetDocLongDescription("This application concatenates a list of vector data "
       "files to produce a unique vector data output file.\n\n"
       "This application will gather all the geometries from the input files and"
diff --git a/Modules/Applications/AppVectorUtils/app/otbOSMDownloader.cxx b/Modules/Applications/AppVectorUtils/app/otbOSMDownloader.cxx
index 888bce06d9831bfc7049158393b83cf51d1577d5..06225729683969509059c44f9a894ef897f70744 100644
--- a/Modules/Applications/AppVectorUtils/app/otbOSMDownloader.cxx
+++ b/Modules/Applications/AppVectorUtils/app/otbOSMDownloader.cxx
@@ -55,7 +55,6 @@ private:
     SetName("OSMDownloader");
     SetDescription("Download vector data from OSM and store it to file");
     // Documentation
-    SetDocName("Open Street Map layers import");
     SetDocLongDescription("The application connects to Open Street Map server"
       ", downloads the data corresponding to the spatial extent of the support"
       " image, and filters the geometries based on OSM tags to produce a vector"
diff --git a/Modules/Applications/AppVectorUtils/app/otbVectorDataExtractROI.cxx b/Modules/Applications/AppVectorUtils/app/otbVectorDataExtractROI.cxx
index 9e819877252ad25aba10490d384e0374cefcc332..10e208ae1e19d4a2835346d8f239325ce70d22f7 100644
--- a/Modules/Applications/AppVectorUtils/app/otbVectorDataExtractROI.cxx
+++ b/Modules/Applications/AppVectorUtils/app/otbVectorDataExtractROI.cxx
@@ -70,7 +70,6 @@ private:
     SetName("VectorDataExtractROI");
     SetDescription("Perform an extract ROI on the input vector data according to the input image extent");
 
-    SetDocName("VectorData Extract ROI");
     SetDocLongDescription("This application extracts the vector data features"
                           " belonging to a region specified by the support "
                           "image envelope. Any features intersecting the "
diff --git a/Modules/Applications/AppVectorUtils/app/otbVectorDataSetField.cxx b/Modules/Applications/AppVectorUtils/app/otbVectorDataSetField.cxx
index e7cee12768682a0508aed4d099d81237827675a2..003f1ca207a7bef6ecbc343e08ff312184122921 100644
--- a/Modules/Applications/AppVectorUtils/app/otbVectorDataSetField.cxx
+++ b/Modules/Applications/AppVectorUtils/app/otbVectorDataSetField.cxx
@@ -49,7 +49,6 @@ private:
     SetDescription("Set a field in vector data.");
 
     // Documentation
-    SetDocName("Vector data set field");
     SetDocLongDescription("Set a specified field to a specified value on all features of a vector data.");
     SetDocLimitations("Doesn't work with KML files yet");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppVectorUtils/app/otbVectorDataTransform.cxx b/Modules/Applications/AppVectorUtils/app/otbVectorDataTransform.cxx
index 14e56aa2a5cf139a670bd60a0c20e4f88e9ef0cc..f607a8adcd9d090729e27b93b4894fad4d5693e0 100644
--- a/Modules/Applications/AppVectorUtils/app/otbVectorDataTransform.cxx
+++ b/Modules/Applications/AppVectorUtils/app/otbVectorDataTransform.cxx
@@ -59,7 +59,6 @@ private:
     SetName("VectorDataTransform");
     SetDescription("Apply a transform to each vertex of the input VectorData");
 
-    SetDocName("Vector Data Transformation");
     SetDocLongDescription("This application iterates over each vertex in the "
       "input vector data file and performs a transformation on this vertex.\n\n"
       "It is the equivalent of [1] that transforms images. For instance, if you"
diff --git a/Modules/Radiometry/Indices/include/otbIndicesStackFunctor.h b/Modules/Radiometry/Indices/include/otbIndicesStackFunctor.h
index 257f66a84dc7a581a14ad2e1133c2aedf142a7f2..f7b8503f4a189540b5b5e721b9aecf7f3786578b 100644
--- a/Modules/Radiometry/Indices/include/otbIndicesStackFunctor.h
+++ b/Modules/Radiometry/Indices/include/otbIndicesStackFunctor.h
@@ -23,6 +23,7 @@
 
 #include <vector>
 #include <stdexcept>
+#include "itkVariableLengthVector.h"
 
 namespace otb
 {
diff --git a/Modules/Radiometry/Indices/include/otbRadiometricIndex.h b/Modules/Radiometry/Indices/include/otbRadiometricIndex.h
index 15cdba6cade2b34deeda96c9ac8df401d7652992..54179e85ed6314ada62ca18c4de27a94e3a2a8e3 100644
--- a/Modules/Radiometry/Indices/include/otbRadiometricIndex.h
+++ b/Modules/Radiometry/Indices/include/otbRadiometricIndex.h
@@ -70,6 +70,9 @@ public:
 
   static constexpr double Epsilon = 0.0000001;
 
+  // Necessary to be used as an abstract base class
+  virtual ~RadiometricIndex() = default;
+
   /**
    * \param requiredBands the set<CommonBandNames> of required bands
    * \throw runtime_error if requiredBands contains CommonBandNames::MAX
diff --git a/Modules/Visualization/Mapla/include/mvdMaplaMainWindow.h b/Modules/Visualization/Mapla/include/mvdMaplaMainWindow.h
index 133e9f76bca633ee3477f0278e7bd54c702c704b..8d3cf2e07d7c007a1e14927c0cde0739769d6af8 100644
--- a/Modules/Visualization/Mapla/include/mvdMaplaMainWindow.h
+++ b/Modules/Visualization/Mapla/include/mvdMaplaMainWindow.h
@@ -143,8 +143,7 @@ protected slots:
 
   /**
    */
-  void OnApplicationToLaunchSelected( const QString & name,
-                                      const QString & doc );
+  void OnApplicationToLaunchSelected( const QString & name );
 
   /**
    */
diff --git a/Modules/Visualization/Mapla/src/mvdMaplaMainWindow.cxx b/Modules/Visualization/Mapla/src/mvdMaplaMainWindow.cxx
index 8dea17a2341712d65d5b903259255db9ecfe2b5f..d4fba7efebd1ab03852d7d01d0aa731bd5b61308 100644
--- a/Modules/Visualization/Mapla/src/mvdMaplaMainWindow.cxx
+++ b/Modules/Visualization/Mapla/src/mvdMaplaMainWindow.cxx
@@ -153,10 +153,10 @@ MaplaMainWindow
 
   QObject::connect(
     m_ApplicationsToolBoxController->GetWidget(),
-    SIGNAL( ApplicationToLaunchSelected( const QString &, const QString & ) ),
+    SIGNAL( ApplicationToLaunchSelected( const QString & ) ),
     // to:
     this,
-    SLOT( OnApplicationToLaunchSelected(const QString &, const QString & ) )
+    SLOT( OnApplicationToLaunchSelected(const QString & ) )
   );
 
 #endif
@@ -215,8 +215,7 @@ MaplaMainWindow
 /*****************************************************************************/
 void
 MaplaMainWindow
-::OnApplicationToLaunchSelected( const QString & appName,
-				 const QString & )
+::OnApplicationToLaunchSelected( const QString & appName )
 {
 #ifdef OTB_USE_QT
 
diff --git a/Modules/Visualization/Monteverdi/include/mvdMainWindow.h b/Modules/Visualization/Monteverdi/include/mvdMainWindow.h
index e3341bf12f61862b9a76cba5a8b68ecb3d881fa5..87a8a5d7c74ef9dfa22fdc2a567e6aa2b0889b6c 100644
--- a/Modules/Visualization/Monteverdi/include/mvdMainWindow.h
+++ b/Modules/Visualization/Monteverdi/include/mvdMainWindow.h
@@ -221,7 +221,7 @@ protected slots:
   /**
    */
 #if defined( OTB_USE_QT ) && USE_OTB_APPS
-  void OnApplicationToLaunchSelected( const QString & appName, const QString & docName );
+  void OnApplicationToLaunchSelected( const QString & appName );
 #endif // defined( OTB_USE_QT ) && USE_OTB_APPS
 
   /** */
diff --git a/Modules/Visualization/Monteverdi/src/mvdMainWindow.cxx b/Modules/Visualization/Monteverdi/src/mvdMainWindow.cxx
index 35070d00b1d89ea7befc6c61d6253681905d1c8b..9f0fe908368819f0479be97b75de93697d1bfdc2 100644
--- a/Modules/Visualization/Monteverdi/src/mvdMainWindow.cxx
+++ b/Modules/Visualization/Monteverdi/src/mvdMainWindow.cxx
@@ -1653,9 +1653,9 @@ MainWindow
   // # Step 2 : setup connections
   QObject::connect(
     appWidget,
-    SIGNAL( ApplicationToLaunchSelected(const QString &, const QString &) ),
+    &mvd::ApplicationsToolBox::ApplicationToLaunchSelected,
     this,
-    SLOT( OnApplicationToLaunchSelected(const QString &, const QString &) )
+    &mvd::MainWindow::OnApplicationToLaunchSelected
   );
 
   // # Step 3 : connect close slots
@@ -2124,8 +2124,7 @@ MainWindow
 
 void
 MainWindow
-::OnApplicationToLaunchSelected( const QString & appName,
-                                 const QString & /**docName*/ )
+::OnApplicationToLaunchSelected( const QString & appName )
 {
   assert( Application::ConstInstance()!=NULL );
   assert( Application::ConstInstance()->GetOTBApplicationsModel()!=NULL );
diff --git a/Modules/Visualization/MonteverdiCore/include/mvdApplicationsBrowser.h b/Modules/Visualization/MonteverdiCore/include/mvdApplicationsBrowser.h
index 05333bd3be94de4d1b56f1250595bbe071aa50f8..cf52e363b9dd479dcb19aba87d71826f5065b873 100644
--- a/Modules/Visualization/MonteverdiCore/include/mvdApplicationsBrowser.h
+++ b/Modules/Visualization/MonteverdiCore/include/mvdApplicationsBrowser.h
@@ -138,8 +138,7 @@ public slots:
 //
 // Signals.
 signals:
-  void AvailableApplicationsTagsChanged(const ApplicationsTagContainer &,
-                                        const ApplicationDocNameToNameMap &);
+  void AvailableApplicationsTagsChanged(const ApplicationsTagContainer &);
 
   /*-[ PROTECTED SECTION ]---------------------------------------------------*/
 
@@ -164,8 +163,6 @@ private:
 
   std::string m_AutoLoadPath;
 
-  ApplicationDocNameToNameMap m_DocNameToNameMap;
-
   /*-[ PRIVATE SLOTS SECTION ]-----------------------------------------------*/
 
 //
diff --git a/Modules/Visualization/MonteverdiCore/include/mvdTypes.h b/Modules/Visualization/MonteverdiCore/include/mvdTypes.h
index ceaaa467fc4e66e89e4af93e9a916e8ef9b9f039..e8241127f31a273139d23b3898dc294a1b46b838 100644
--- a/Modules/Visualization/MonteverdiCore/include/mvdTypes.h
+++ b/Modules/Visualization/MonteverdiCore/include/mvdTypes.h
@@ -234,10 +234,6 @@ struct PixelInfo
 /*******************************************************************************/
 /* Type definitions for wrapped applications                                   */
 
-/**
- */
-typedef std::map< std::string, std::string > ApplicationDocNameToNameMap;
-
 /**
  */
 typedef std::map< std::string, StringVector > ApplicationsTagContainer;
diff --git a/Modules/Visualization/MonteverdiCore/src/mvdApplicationsBrowser.cxx b/Modules/Visualization/MonteverdiCore/src/mvdApplicationsBrowser.cxx
index a52e15badb719402a695fa58dbff066a90294665..82ed1fa7b73a5a9ad4bdc19f3872f358101da382 100644
--- a/Modules/Visualization/MonteverdiCore/src/mvdApplicationsBrowser.cxx
+++ b/Modules/Visualization/MonteverdiCore/src/mvdApplicationsBrowser.cxx
@@ -143,10 +143,6 @@ ApplicationsBrowser
   // get tags
   StringVector vtags( application->GetDocTags() );
 
-  //
-  // fill the OTBApps 'docName <-> name' map
-  m_DocNameToNameMap[ application->GetDocName() ] = appName;
-
   return vtags;
 }
 
@@ -155,10 +151,6 @@ void
 ApplicationsBrowser
 ::SearchAvailableApplicationsTags()
 {
-  //
-  // clear previously filled map
-  m_DocNameToNameMap.clear();
-
   //
   // get all the applications in the search path
   StringVector vapp( GetAvailableApplications() );
@@ -216,7 +208,7 @@ ApplicationsBrowser
   //
   // emit a signal with the ApplicationsTagContainer as
   // parameter 
-  emit AvailableApplicationsTagsChanged(outputContainer, m_DocNameToNameMap);
+  emit AvailableApplicationsTagsChanged(outputContainer);
 }
 
 /*******************************************************************************/
diff --git a/Modules/Visualization/MonteverdiGui/include/mvdApplicationsToolBox.h b/Modules/Visualization/MonteverdiGui/include/mvdApplicationsToolBox.h
index 3d666d6ed56a0072604b5054462698687170c7f5..736caf9a900d78d316476e5b017500e7bf817f63 100644
--- a/Modules/Visualization/MonteverdiGui/include/mvdApplicationsToolBox.h
+++ b/Modules/Visualization/MonteverdiGui/include/mvdApplicationsToolBox.h
@@ -109,8 +109,7 @@ public:
 //
 // Public SLOTS.
 public slots:
-  void OnAvailableApplicationsTagsChanged( const ApplicationsTagContainer& appsTags,
-                                           const ApplicationDocNameToNameMap& docNameToNameMap);
+  void OnAvailableApplicationsTagsChanged( const ApplicationsTagContainer& appsTags);
   void OnSearchBoxChanged( const QString & search );
   void OnAlgorithmTreeDoubleClick( QTreeWidgetItem * item , int column );
 
@@ -119,7 +118,7 @@ public slots:
 //
 // Signals.
 signals:
-  void ApplicationToLaunchSelected(const QString &, const QString &);
+  void ApplicationToLaunchSelected(const QString &);
 
   /*-[ PROTECTED SECTION ]---------------------------------------------------*/
 
@@ -153,12 +152,6 @@ private:
   bool IsSearchTextMatchAnyAlgorithm( const QString & tagName,
 				      const QString & search );
 
-  /**
-   * \brief Helper method to get the DocName of an application from an
-   * application name
-   */
-  QString GetApplicationDocNameByApplicationName( const QString & appName );
-
 
 //
 // Private attributes.
@@ -173,11 +166,6 @@ private:
    */
   ApplicationsTagContainer m_AppTags;
 
-  /**
-   * \brief map storing applications docName and appName association
-   */
-  ApplicationDocNameToNameMap m_AppsDocNameToNameMap;
-
   /**
    * \brief text to search in the widget tree
    */
diff --git a/Modules/Visualization/MonteverdiGui/include/mvdPixelDescriptionWidget.h b/Modules/Visualization/MonteverdiGui/include/mvdPixelDescriptionWidget.h
index 1db4b7fd90b8d4ae6ad5a05a556f006fd669fdfa..71d68131811bd8a51d0bbc1f05c11ff579e02075 100644
--- a/Modules/Visualization/MonteverdiGui/include/mvdPixelDescriptionWidget.h
+++ b/Modules/Visualization/MonteverdiGui/include/mvdPixelDescriptionWidget.h
@@ -150,11 +150,6 @@ private:
   //  */
   // ApplicationsTagContainer m_AppTags;
 
-  // /**
-  //  * \brief map storing applications docName and appName association
-  //  */
-  // ApplicationDocNameToNameMap m_AppsDocNameToNameMap;
-
   /**
    * \brief text to search in the widget tree
    */
diff --git a/Modules/Visualization/MonteverdiGui/include/mvdQtWidgetParameterInitializers.h b/Modules/Visualization/MonteverdiGui/include/mvdQtWidgetParameterInitializers.h
index 1be6f7514f2db902f0194de47ce26f78e8ac99a2..c7143258d95e0c5b4f2e8e95c59c6ff9edfbaef8 100644
--- a/Modules/Visualization/MonteverdiGui/include/mvdQtWidgetParameterInitializers.h
+++ b/Modules/Visualization/MonteverdiGui/include/mvdQtWidgetParameterInitializers.h
@@ -49,12 +49,10 @@
 #include "otbWrapperQtWidgetInputFilenameListParameter.h"
 #include "otbWrapperQtWidgetInputImageParameter.h"
 #include "otbWrapperQtWidgetInputImageListParameter.h"
-#include "otbWrapperQtWidgetInputProcessXMLParameter.h"
 #include "otbWrapperQtWidgetInputVectorDataParameter.h"
 #include "otbWrapperQtWidgetInputVectorDataListParameter.h"
 #include "otbWrapperQtWidgetOutputFilenameParameter.h"
 #include "otbWrapperQtWidgetOutputImageParameter.h"
-#include "otbWrapperQtWidgetOutputProcessXMLParameter.h"
 #include "otbWrapperQtWidgetOutputVectorDataParameter.h"
 #include "otbWrapperQtWidgetParameterFactory.h"
 #include "otbWrapperQtWidgetListEditWidget.h"
@@ -225,21 +223,6 @@ public:
   inline result_type operator () ( argument_type widget ) const;
 };
 
-/**
- * \class InputProcessXMLInitializer
- *
- * \ingroup OTBMonteverdiGUI
- *
- * \brief WIP.
- */
-class InputProcessXMLInitializer : public std::unary_function<
-  otb::Wrapper::QtWidgetInputProcessXMLParameter *,
-  void >
-{
-public:
-  inline result_type operator () ( argument_type widget ) const;
-};
-
 /**
  * \class OutputImageInitializer
  *
@@ -293,22 +276,6 @@ public:
   inline result_type operator () ( argument_type widget ) const;
 };
 
-/**
- * \class OutputProcessXMLInitializer
- *
- * \ingroup OTBMonteverdiGUI
- *
- * \brief WIP.
- */
-class OutputProcessXMLInitializer : public std::unary_function<
-  otb::Wrapper::QtWidgetOutputProcessXMLParameter *,
-  void
-  >
-{
-public:
-  inline result_type operator () ( argument_type widget ) const;
-};
-
 /**
  * \class ToolTipInitializer
  *
@@ -445,17 +412,6 @@ InputVectorDataListInitializer
   // Drop support is done by ParameterListInitializer
 }
 
-/*****************************************************************************/
-inline
-InputProcessXMLInitializer::result_type
-InputProcessXMLInitializer
-::operator () ( argument_type widget ) const
-{
-  assert( widget!=NULL );
-
-  SetupForFilenameDrop( widget );
-}
-
 /*****************************************************************************/
 inline
 ToolTipInitializer::result_type
@@ -542,25 +498,6 @@ OutputFilenameInitializer
   SetupOutputFilename( widget );
 }
 
-/*****************************************************************************/
-inline
-OutputProcessXMLInitializer::result_type
-OutputProcessXMLInitializer
-::operator () ( argument_type widget ) const
-{
-  assert( widget!=NULL );
-
-  SetupForFilenameDrop( widget );
-
-  assert( qApp!=NULL );
-  assert( !qApp->arguments().empty() );
-
-  // MANTIS-1103
-  // {
-  // SetupOutputFilename( widget );
-  // }
-}
-
 /*****************************************************************************/
 inline
 ParameterListInitializer::result_type
diff --git a/Modules/Visualization/MonteverdiGui/src/mvdApplicationsToolBox.cxx b/Modules/Visualization/MonteverdiGui/src/mvdApplicationsToolBox.cxx
index 24e6d71aadbae11277eddc76ce815ff09890e49d..d3b8403e563dcbe9f95c5db9f0686edb3c214ceb 100644
--- a/Modules/Visualization/MonteverdiGui/src/mvdApplicationsToolBox.cxx
+++ b/Modules/Visualization/MonteverdiGui/src/mvdApplicationsToolBox.cxx
@@ -59,7 +59,6 @@ namespace mvd
 enum COLUMN
 {
   COLUMN_NAME = 0,
-  COLUMN_TITLE,
   //
   COLUMN_COUNT,
 };
@@ -86,7 +85,6 @@ ApplicationsToolBox
   QWidget( p, flags ),
   m_UI( new mvd::Ui::ApplicationsToolBox() ),
   m_AppTags(),
-  m_AppsDocNameToNameMap(),
   m_SearchText()
 {
   m_UI->setupUi( this );
@@ -201,17 +199,10 @@ ApplicationsToolBox
 	// get current app name
 	QString  name( itApps->c_str() );
 
-	//  get current app DocName
-	QString title(
-	  GetApplicationDocNameByApplicationName( name )
-	);
-
 	assert( !name.isEmpty() );
-	assert( !title.isEmpty() );
 
-	// does the current algorithm DocName match the search text
+	// does the current algorithm name match the search text
 	if ( m_SearchText.isEmpty() ||
-	     title.contains( search, Qt::CaseInsensitive ) ||
 	     name.contains( search, Qt::CaseInsensitive ) )
 	  {
 	  // 
@@ -220,10 +211,6 @@ ApplicationsToolBox
 	    new QTreeWidgetItem( cmainItem, ITEM_TYPE_APPLICATION );
 
 	  secItem->setText( COLUMN_NAME, name );
-	  secItem->setText( COLUMN_TITLE, title );
-
-	  secItem->setToolTip( COLUMN_NAME, title );
-
 	  secItem->setIcon( COLUMN_NAME, QIcon( ":/icons/process" ) );
 	  }
 	}
@@ -234,7 +221,6 @@ ApplicationsToolBox
   m_UI->m_AlgorithmsTree->expandAll();
 
   m_UI->m_AlgorithmsTree->resizeColumnToContents( COLUMN_NAME );
-  m_UI->m_AlgorithmsTree->resizeColumnToContents( COLUMN_TITLE );
 }
 
 /*******************************************************************************/
@@ -258,11 +244,11 @@ ApplicationsToolBox
     {
     QString name( FromStdString( *itApps ) );
 
-    if( name.contains( search, Qt::CaseInsensitive ) ||
-	GetApplicationDocNameByApplicationName( name )
-	.contains( search, Qt::CaseInsensitive ) )
+    if( name.contains( search, Qt::CaseInsensitive ) )
+    {
       return true;
     }
+    }
 
   return false;
 }
@@ -274,36 +260,7 @@ ApplicationsToolBox
 {
   assert( !appName.isEmpty() );
 
-  emit ApplicationToLaunchSelected(
-    appName,
-    GetApplicationDocNameByApplicationName( appName )
-  );
-}
-
-/*******************************************************************************/
-QString
-ApplicationsToolBox
-::GetApplicationDocNameByApplicationName( const QString & appName )
-{
-  QString docName("");
-
-  // find the pair corresponding to the tagName
-  ApplicationDocNameToNameMap::const_iterator itDocNames = m_AppsDocNameToNameMap.begin();
-
-  while( itDocNames != m_AppsDocNameToNameMap.end() )
-    {
-    // retrieve the appName in the map
-    if ( appName == QString( (*itDocNames).second.c_str() ) )
-      {
-      //
-      // return the relative docName
-      return QString ( (*itDocNames).first.c_str() );
-      }
-
-    ++itDocNames;
-    }
-
-  return docName;
+  emit ApplicationToLaunchSelected(appName);
 }
 
 /*******************************************************************************/
@@ -311,15 +268,11 @@ ApplicationsToolBox
 /*******************************************************************************/
 void
 ApplicationsToolBox
-::OnAvailableApplicationsTagsChanged(const ApplicationsTagContainer& appsTags, 
-                                     const ApplicationDocNameToNameMap& docNameToNameMap)
+::OnAvailableApplicationsTagsChanged(const ApplicationsTagContainer& appsTags)
 {
   // rememeber the map
   m_AppTags = appsTags;
 
-  // remember the OTB applications  docName <-> Name association
-  m_AppsDocNameToNameMap = docNameToNameMap;
-
   // fill the tree with the application
   FillTreeUsingTags();  
 }
@@ -342,8 +295,6 @@ void
 ApplicationsToolBox
 ::OnAlgorithmTreeDoubleClick( QTreeWidgetItem * item , int column )
 {
-  // qDebug() << item << column;
-
   if( item->type()!=ITEM_TYPE_APPLICATION )
     return;
 
@@ -352,32 +303,6 @@ ApplicationsToolBox
   if( text.isEmpty() )
     return;
 
-  switch( column )
-    {
-    case COLUMN_NAME:
-      break;
-
-    case COLUMN_TITLE:
-      {
-      ApplicationDocNameToNameMap::const_iterator it(
-	m_AppsDocNameToNameMap.find(
-	  ToStdString( text )
-	)
-      );
-
-      assert( it!=m_AppsDocNameToNameMap.end() );
-
-      assert( it->second.empty() );
-
-      text = FromStdString( it->second );
-      }
-      break;
-
-    default:
-      assert( false && "Unexpected enum value." );
-      break;
-    }
-
   LaunchApplication( text );
 }
 
diff --git a/Modules/Visualization/MonteverdiGui/src/mvdApplicationsToolBox.ui b/Modules/Visualization/MonteverdiGui/src/mvdApplicationsToolBox.ui
index bc95dd74053e246b3a655e546237932c72dda149..68b0c3a97e20efa884ca972b15732a977af89189 100644
--- a/Modules/Visualization/MonteverdiGui/src/mvdApplicationsToolBox.ui
+++ b/Modules/Visualization/MonteverdiGui/src/mvdApplicationsToolBox.ui
@@ -23,7 +23,16 @@
    <locale language="C" country="AnyCountry"/>
   </property>
   <layout class="QGridLayout" name="gridLayout">
-   <property name="margin">
+   <property name="leftMargin">
+    <number>3</number>
+   </property>
+   <property name="topMargin">
+    <number>3</number>
+   </property>
+   <property name="rightMargin">
+    <number>3</number>
+   </property>
+   <property name="bottomMargin">
     <number>3</number>
    </property>
    <property name="spacing">
@@ -40,6 +49,9 @@
      <property name="headerHidden">
       <bool>false</bool>
      </property>
+     <property name="columnCount">
+      <number>1</number>
+     </property>
      <attribute name="headerVisible">
       <bool>true</bool>
      </attribute>
@@ -51,11 +63,6 @@
        <string>Name</string>
       </property>
      </column>
-     <column>
-      <property name="text">
-       <string>Title</string>
-      </property>
-     </column>
     </widget>
    </item>
   </layout>
diff --git a/Modules/Visualization/MonteverdiGui/src/mvdApplicationsToolBoxController.cxx b/Modules/Visualization/MonteverdiGui/src/mvdApplicationsToolBoxController.cxx
index 6d6e75e9742035ba3ff7c7d72a1893fc0f87e1b0..9cd449469a4498ad3eda0cbe7e81f2f03b1ac556 100644
--- a/Modules/Visualization/MonteverdiGui/src/mvdApplicationsToolBoxController.cxx
+++ b/Modules/Visualization/MonteverdiGui/src/mvdApplicationsToolBoxController.cxx
@@ -92,14 +92,10 @@ ApplicationsToolBoxController
   //
   // connections
   QObject::connect(
-    appModel->GetBrowser(), 
-    SIGNAL(
-      AvailableApplicationsTagsChanged( const ApplicationsTagContainer&, 
-                                        const ApplicationDocNameToNameMap& ) ),
+    appModel->GetBrowser(),
+    SIGNAL( AvailableApplicationsTagsChanged( const ApplicationsTagContainer&) ),
     widget,
-    SLOT(
-      OnAvailableApplicationsTagsChanged( const ApplicationsTagContainer&, 
-                                          const ApplicationDocNameToNameMap& ) )
+    SLOT( OnAvailableApplicationsTagsChanged( const ApplicationsTagContainer& ) )
   );
 }
 
@@ -121,14 +117,9 @@ ApplicationsToolBoxController
   // disconnect app browser
   QObject::disconnect(
     appModel->GetBrowser(),
-    SIGNAL(
-      AvailableApplicationsTagsChanged( const ApplicationsTagContainer&, 
-                                        const ApplicationDocNameToNameMap& ) ),
+    SIGNAL( AvailableApplicationsTagsChanged(const ApplicationsTagContainer&) ),
     widget,
-    SLOT(
-      OnAvailableApplicationsTagsChanged( const ApplicationsTagContainer&, 
-                                          const ApplicationDocNameToNameMap& ) )
-    );
+    SLOT( OnAvailableApplicationsTagsChanged( const ApplicationsTagContainer& ) ));
 }
 
 /*******************************************************************************/
diff --git a/Modules/Visualization/MonteverdiGui/src/mvdQtWidgetView.cxx b/Modules/Visualization/MonteverdiGui/src/mvdQtWidgetView.cxx
index d074c1aae4c92205f06daacdc0420222233930dc..77bdbd9dc6c5c519f1c85d06778739abdb555964 100644
--- a/Modules/Visualization/MonteverdiGui/src/mvdQtWidgetView.cxx
+++ b/Modules/Visualization/MonteverdiGui/src/mvdQtWidgetView.cxx
@@ -163,7 +163,6 @@ QtWidgetView
   //SetupWidget( widget, InputFilenameListInitializer() );
   SetupWidget( widget, InputImageInitializer() );
   //SetupWidget( widget, InputImageListInitializer() );
-  SetupWidget( widget, InputProcessXMLInitializer() );
   SetupWidget( widget, InputVectorDataInitializer() );
   //SetupWidget( widget, InputVectorDataListInitializer() );
   SetupWidget( widget, ParameterListInitializer() );
@@ -172,7 +171,6 @@ QtWidgetView
 #endif
 
   SetupWidget( widget, OutputFilenameInitializer() );
-  SetupWidget( widget, OutputProcessXMLInitializer() );
 
   SetupWidget(
     widget,
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplication.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplication.h
index 3baadd6f0f747b5f640b284fd3bd6a7aeab79254..738949669131df03fec89abd2318c0330a470fff 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplication.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplication.h
@@ -102,11 +102,8 @@ public:
   /** Check if the application has been initialized */
   bool IsInitialized() const;
 
-  virtual void SetHaveInXML(bool);
-  virtual bool GetHaveInXML() const;
-
-  virtual void SetHaveOutXML(bool);
-  virtual bool GetHaveOutXML() const;
+  void LoadParametersFromXML(const std::string& filename);
+  void SaveParametersToXML(const std::string& filename);
 
   /** Update the value of parameters for which no user value has been provided */
   void UpdateParameters();
@@ -210,12 +207,6 @@ public:
   /* Returns the description of a parameter */
   std::vector<std::string> GetChoiceNames(std::string paramKey);
 
-  /* Is the application ready to be executed : All the mandatory
-   * parameters have to be set
-   */
-  /* Set the Parameter value and Update the UserFlag. used by xml parameter
-   */
-
   /* Set an integer value
    *
    * Can be called for types :
@@ -652,10 +643,6 @@ public:
 
   std::string GetProgressDescription() const;
 
-  /** Doc element accessors. */
-  virtual void SetDocName(const std::string&);
-  virtual const char* GetDocName() const;
-
   virtual void SetDocLongDescription(const std::string&);
   virtual const char* GetDocLongDescription() const;
 
@@ -673,6 +660,9 @@ public:
 
   void AddDocTag(const std::string&);
 
+  /** return wether the application has the "deprecated tag or not */
+  bool IsDeprecated();
+
   DocExampleStructure::Pointer GetDocExample();
   unsigned int GetNumberOfExamples();
   std::string GetExampleComment(unsigned int id);
@@ -690,9 +680,6 @@ public:
   */
   std::vector< std::pair<std::string, std::string> > GetOutputParametersSumUp();
 
-   /** If need to force readxml more than once in application */
-  void ForceInXMLParseFlag();
-
   double GetLastExecutionTiming() const;
 
   virtual void SetDocLink(const std::string & link);
@@ -816,16 +803,6 @@ protected:
    * by default seed initialization is based on time value*/
    void AddRANDParameter(std::string paramKey, std::string paramName, unsigned int defaultValue);
 
-   void AddInXMLParameter()
-   {
-     GetParameterList()->AddInXMLParameter();
-   }
-
-   void AddOutXMLParameter()
-   {
-     GetParameterList()->AddOutXMLParameter();
-   }
-
   /** Remove the items added to the ListWidget */
   void ClearChoices(std::string key);
 
@@ -896,8 +873,6 @@ private:
 
   std::set<itk::ProcessObject::Pointer> m_Filters;
 
-  /** Long name of the application (that can be displayed...) */
-  std::string m_DocName;
   /** Long and precise application description . */
   std::string                       m_DocLongDescription;
   /** Doc example structure. Use GetDocExample() to access it */
@@ -916,11 +891,6 @@ private:
   /** Chrono to measure execution time */
   otb::Stopwatch m_Chrono;
 
-  //rashad:: controls adding of -xml parameter. set to true by default
-  bool                              m_HaveInXML;
-  bool                              m_HaveOutXML;
-  bool                              m_IsInXMLParsed;
-
   /** Flag is true when executing DoInit, DoUpdateParameters or DoExecute */
   bool m_IsInPrivateDo;
 
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputProcessXMLParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputProcessXMLParameter.h
deleted file mode 100644
index d4db58283c9294ef3b7dc1de2d841134f539823a..0000000000000000000000000000000000000000
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputProcessXMLParameter.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (C) 2005-2019 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 otbWrapperInputProcessXMLParameter_h
-#define otbWrapperInputProcessXMLParameter_h
-#include "otbWrapperApplication.h"
-#include "otb_tinyxml.h"
-#include <sstream>
-#include <string>
-
-namespace otb
-{
-namespace Wrapper
-{
-
-/** \class InputProcessXMLParameter
- *  \brief This class represent a xml filename parameter for the wrapper framework to load otb application.
- *
- * \ingroup OTBApplicationEngine
- */
-class OTBApplicationEngine_EXPORT InputProcessXMLParameter
-  : public Parameter
-{
-public:
-  /** Standard class typedef */
-  typedef InputProcessXMLParameter      Self;
-  typedef Parameter                     Superclass;
-  typedef itk::SmartPointer<Self>       Pointer;
-  typedef itk::SmartPointer<const Self> ConstPointer;
-
-  /** Defining ::New() static method */
-  itkNewMacro(Self);
-
-  /** RTTI support */
-  itkTypeMacro(InputProcessXMLParameter, Parameter);
-
-  itkGetStringMacro(FileName);
-
-  bool HasValue() const override
-  {
-    if(m_FileName.empty())
-      return false;
-    else
-      return true;
-  }
-
-  virtual ParameterType GetType() const override
-  {
-    return ParameterType_InputProcessXML;
-  }
-
-  std::string ToString() const override
-  {
-    return GetFileName();
-  }
-
-  void FromString(const std::string& value) override
-  {
-    SetFileName(value);
-  }
-
-  // Get Value
-  //TODO otbGetObjectMemberMacro(StringParam, Value , std::string);
-
-  bool SetFileName(std::string value);
-
-  // Set Value
-  virtual void SetValue(const std::string value);
-
-  ImagePixelType GetPixelTypeFromString(std::string pixTypeAsString);
-
-  ParameterType GetParameterType(const Parameter* param) const;
-
-  const std::string GetChildNodeTextOf(TiXmlElement *parentElement, std::string key);
-
-  int Read(Application::Pointer application);
-
-  void otbAppLogInfo(Application::Pointer app, std::string info);
-
-/* copied from Utilities/tinyXMLlib/tinyxml.cpp. Must have a FIX inside tinyxml.cpp */
-  FILE* TiXmlFOpen( const char* filename, const char* mode );
-
-protected:
-
-  InputProcessXMLParameter();
-
-  /** Destructor */
-  ~InputProcessXMLParameter() override;
-
-private:
-
-  std::string    m_FileName;
-
-  InputProcessXMLParameter(const InputProcessXMLParameter &) = delete;
-  void operator =(const InputProcessXMLParameter&) = delete;
-
-
-}; // End class Parameter
-
-} // End namespace Wrapper
-} // End namespace otb
-
-#endif
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputXML.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputXML.h
new file mode 100644
index 0000000000000000000000000000000000000000..ab33810d116f884b4a9b6f9d929df7fe2c4d5cf1
--- /dev/null
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputXML.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2005-2019 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 otbWrapperInputXML_h
+#define otbWrapperInputXML_h
+
+#include "otbWrapperApplication.h"
+#include "otb_tinyxml.h"
+#include <sstream>
+#include <string>
+
+namespace otb
+{
+namespace Wrapper
+{
+namespace XML
+{
+
+OTBApplicationEngine_EXPORT const std::string GetChildNodeTextOf(TiXmlElement* parentElement, std::string key);
+
+OTBApplicationEngine_EXPORT int Read(const std::string& filename, Application::Pointer application);
+
+/* copied from Utilities/tinyXMLlib/tinyxml.cpp. Must have a FIX inside tinyxml.cpp */
+OTBApplicationEngine_EXPORT FILE* TiXmlFOpen(const char* filename, const char* mode);
+
+} // namespace XML
+} // End namespace Wrapper
+} // End namespace otb
+
+#endif
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputProcessXMLParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputProcessXMLParameter.h
deleted file mode 100644
index 136489e96ba1cfc9acfff1d4a29f89ed9083d471..0000000000000000000000000000000000000000
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputProcessXMLParameter.h
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright (C) 2005-2019 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 otbWrapperOutputProcessXMLParameter_h
-#define otbWrapperOutputProcessXMLParameter_h
-#include "otbWrapperApplication.h"
-#include "otb_tinyxml.h"
-#include <string>
-
-namespace otb
-{
-namespace Wrapper
-{
-
-/** \class OutputProcessXMLParameter
- *  \brief This class represent a xml filename parameter for the wrapper framework to save otb application.
- *
- * \ingroup OTBApplicationEngine
- */
-class OTBApplicationEngine_EXPORT OutputProcessXMLParameter
-  : public Parameter
-{
-public:
-  /** Standard class typedef */
-  typedef OutputProcessXMLParameter     Self;
-  typedef Parameter                     Superclass;
-  typedef itk::SmartPointer<Self>       Pointer;
-  typedef itk::SmartPointer<const Self> ConstPointer;
-
-  /** Defining ::New() static method */
-  itkNewMacro(Self);
-
-  /** RTTI support */
-  itkTypeMacro(OutputProcessXMLParameter, Parameter);
-
-  itkGetStringMacro(FileName);
-
-  // Set FileName
-  void SetFileName(std::string value)
-  {
-    this->SetValue(value);
-  }
-
-  // Set Value
-  virtual void SetValue(const std::string value)
-    {
-    itkDebugMacro("setting member m_FileName to " << value);
-    this->m_FileName = value;
-    SetActive(true);
-    this->Modified();
-    }
-
-  bool HasValue() const override
-  {
-    if(m_FileName.empty())
-      return false;
-    else
-      return true;
-  }
-
-  void ClearValue() override
-  {
-    m_FileName = "";
-  }
-
-  virtual ParameterType GetType() const override
-  {
-    return ParameterType_OutputProcessXML;
-  }
-
-  std::string ToString() const override
-  {
-    return GetFileName();
-  }
-
-  void FromString(const std::string& value) override
-  {
-    SetValue(value);
-  }
-
-  TiXmlElement* AddChildNodeTo(TiXmlElement* parent, std::string name, std::string value="");
-
-  std::string pixelTypeToString(ImagePixelType pixType);
-
-  ParameterType GetParameterType(const Parameter* param) const;
-
-  void Write(Application::Pointer application);
-
-  TiXmlElement* ParseApplication(Application::Pointer app);
-
-  static std::string MakeCommandLine(otb::Wrapper::Application::Pointer application);
-
-protected:
-
-  OutputProcessXMLParameter();
-
-  /** Destructor */
-  ~OutputProcessXMLParameter() override;
-
-private:
-
-  /** Recursive function to parse a group parameter */
-  void ParseGroup(const std::string& group);
-
-  std::string    m_FileName;
-
-  /** Temporary storage of the XML node to fill (internal) */
-  TiXmlElement* m_Node;
-
-  /** Temporary pointer to the application to parse (internal) */
-  Application::Pointer m_Appli;
-
-  OutputProcessXMLParameter(const OutputProcessXMLParameter &) = delete;
-  void operator =(const OutputProcessXMLParameter&) = delete;
-
-
-}; // End class Parameter
-
-} // End namespace Wrapper
-} // End namespace otb
-
-#endif
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputXML.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputXML.h
new file mode 100644
index 0000000000000000000000000000000000000000..31e666b264690d9341251436007f783b980d827c
--- /dev/null
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputXML.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2005-2019 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 otbWrapperOutputXML_h
+#define otbWrapperOutputXML_h
+
+#include "otbWrapperApplication.h"
+#include "otb_tinyxml.h"
+#include <string>
+
+namespace otb
+{
+namespace Wrapper
+{
+namespace XML
+{
+
+OTBApplicationEngine_EXPORT TiXmlElement* AddChildNodeTo(TiXmlElement* parent, std::string name, std::string value = "");
+
+OTBApplicationEngine_EXPORT std::string pixelTypeToString(ImagePixelType pixType);
+
+OTBApplicationEngine_EXPORT void Write(const std::string& filename, Application::Pointer application);
+
+OTBApplicationEngine_EXPORT TiXmlElement* ParseApplication(Application::Pointer app);
+
+OTBApplicationEngine_EXPORT std::string MakeCommandLine(otb::Wrapper::Application::Pointer application);
+
+/** Recursive function to parse a group parameter */
+OTBApplicationEngine_EXPORT void ParseGroup(Application::Pointer app, TiXmlElement* n_App, const std::string& group);
+
+} // namespace XML
+} // End namespace Wrapper
+} // End namespace otb
+
+#endif
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperParameterGroup.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperParameterGroup.h
index 5883ea352d279f495da859f7d40968df3d6f6f5c..53f4b5fac1784bd2a1bec6f9f046b0cbec0e5812 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperParameterGroup.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperParameterGroup.h
@@ -73,11 +73,6 @@ public:
 
   Parameter::Pointer GetParameterByKey(std::string name, bool follow=true);
 
-  /** rashad: Add xml parameters eg: -inxml -outxml */
-  void AddInXMLParameter();
-
-  void AddOutXMLParameter();
-
   void Clear()
   {
     m_ParameterList.clear();
diff --git a/Modules/Wrappers/ApplicationEngine/src/CMakeLists.txt b/Modules/Wrappers/ApplicationEngine/src/CMakeLists.txt
index fb220c564fbe628d9e9469f6f3f438352caa6454..a3f78c16fe606361e4fe0005840d65d320ce2a89 100644
--- a/Modules/Wrappers/ApplicationEngine/src/CMakeLists.txt
+++ b/Modules/Wrappers/ApplicationEngine/src/CMakeLists.txt
@@ -23,7 +23,8 @@ set( OTBApplicationEngine_SRC
   otbWrapperInputVectorDataListParameter.cxx
   otbWrapperListViewParameter.cxx
   otbWrapperParameterGroup.cxx
-  otbWrapperOutputProcessXMLParameter.cxx
+  otbWrapperInputXML.cxx
+  otbWrapperOutputXML.cxx
   otbWrapperInputImageListParameter.cxx
   otbWrapperElevationParametersHandler.cxx
   otbWrapperInputFilenameListParameter.cxx
@@ -44,7 +45,6 @@ set( OTBApplicationEngine_SRC
   otbWrapperDocExampleStructure.cxx
   otbWrapperInputVectorDataParameter.cxx
   otbWrapperOutputVectorDataParameter.cxx
-  otbWrapperInputProcessXMLParameter.cxx
   otbWrapperMapProjectionParametersHandler.cxx
   otbWrapperApplication.cxx
   otbWrapperChoiceParameter.cxx
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx
index 4297ae946d62476a88847a9974cd5aff72526fb3..0e2127a04f912a0d69c933918d9f3b67edecf6d1 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx
@@ -25,14 +25,14 @@
 #include "otbWrapperInputFilenameParameter.h"
 #include "otbWrapperInputFilenameListParameter.h"
 #include "otbWrapperOutputFilenameParameter.h"
-#include "otbWrapperOutputProcessXMLParameter.h"
 #include "otbWrapperInputVectorDataParameter.h"
 #include "otbWrapperInputVectorDataListParameter.h"
 #include "otbWrapperOutputVectorDataParameter.h"
 #include "otbWrapperNumericalParameter.h"
 #include "otbWrapperStringListParameter.h"
 #include "otbWrapperInputImageListParameter.h"
-#include "otbWrapperInputProcessXMLParameter.h"
+#include "otbWrapperInputXML.h"
+#include "otbWrapperOutputXML.h"
 #include "otbWrapperProxyParameter.h"
 #include "otbWrapperParameterKey.h"
 #include "otbWrapperBoolParameter.h"
@@ -169,39 +169,6 @@ const char* Application::GetDescription() const
   return m_Description.c_str();
 }
 
-void Application::SetHaveInXML(bool haveInXML)
-{
-  m_HaveInXML = haveInXML;
-  this->Modified();
-}
-
-bool Application::GetHaveInXML() const
-{
-  return m_HaveInXML;
-}
-
-void Application::SetHaveOutXML(bool haveOutXML)
-{
-  m_HaveOutXML = haveOutXML;
-  this->Modified();
-}
-
-bool Application::GetHaveOutXML() const
-{
-  return m_HaveOutXML;
-}
-
-void Application::SetDocName(const std::string& value)
-{
-  m_DocName = value;
-  this->Modified();
-}
-
-const char* Application::GetDocName() const
-{
-  return m_DocName.c_str();
-}
-
 void Application::SetDocLongDescription(const std::string& value)
 {
   m_DocLongDescription = value;
@@ -267,6 +234,11 @@ void Application::AddDocTag(const std::string & tag)
     }
 }
 
+bool Application::IsDeprecated()
+{
+  return std::find(m_DocTags.begin(), m_DocTags.end(), Tags::Deprecated) != m_DocTags.end();
+}
+
 DocExampleStructure::Pointer Application::GetDocExample()
 {
   if (!IsInitialized())
@@ -331,11 +303,6 @@ std::string Application::GetHtmlExample()
   return GetDocExample()->GenerateHtmlExample();
 }
 
-void Application::ForceInXMLParseFlag()
-{
-  m_IsInXMLParsed = false;
-}
-
 void Application::SetDocLink(const std::string & link)
 {
   if (m_Doclink.compare(link) != 0)
@@ -361,16 +328,12 @@ Application::Application()
     m_Description(""),
     m_Logger(otb::Logger::New()),
     m_ProgressSourceDescription(""),
-    m_DocName(""),
     m_DocLongDescription(""),
     m_DocAuthors(""),
     m_DocLimitations(""),
     m_DocSeeAlso(""),
     m_DocTags(),
     m_Doclink(""),
-    m_HaveInXML(true),
-    m_HaveOutXML(true),
-    m_IsInXMLParsed(false),
     m_IsInPrivateDo(false)
 {
   // Don't call Init from the constructor, since it calls a virtual method !
@@ -473,21 +436,9 @@ void Application::Init()
 {
   m_DocExample    = DocExampleStructure::New();
   m_ParameterList = ParameterGroup::New();
-  //reset inXML parse checker in case if reinit-ing
-  m_IsInXMLParsed = false;
   m_IsInPrivateDo = true;
   this->DoInit();
   m_IsInPrivateDo = false;
-
-  //rashad: global parameters. now used only for inxml and outxml
-  if(this->GetHaveInXML())
-    {
-    AddInXMLParameter();
-    }
-  if(this->GetHaveOutXML())
-    {
-    AddOutXMLParameter();
-    }
 }
 
 template <typename T>
@@ -501,25 +452,18 @@ T* downcast_check(Parameter* param)
   return down;
 }
 
+void Application::LoadParametersFromXML(const std::string& filename)
+{
+  otb::Wrapper::XML::Read(filename, this);
+}
+
+void Application::SaveParametersToXML(const std::string& filename)
+{
+  otb::Wrapper::XML::Write(filename, this);
+}
+
 void Application::UpdateParameters()
 {
-  //read application from xml only once m_IsInXMLParsed is in charge of it.
-  std::string inXMLKey = "inxml";
-  if (m_HaveInXML && !m_IsInXMLParsed)
-    {
-    if ( GetParameterType(inXMLKey) == ParameterType_InputProcessXML  &&
-         IsParameterEnabled(inXMLKey) && HasValue(inXMLKey) )
-      {
-      Parameter* param = GetParameterByKey(inXMLKey);
-      InputProcessXMLParameter* inXMLParam = dynamic_cast<InputProcessXMLParameter*>(param);
-      if(inXMLParam!=nullptr)
-        {
-        // switch on 'm_IsInXMLParsed' before Read() to avoid cyclic calls
-        m_IsInXMLParsed = true;
-        inXMLParam->Read(this);
-        }
-      }
-    }
   m_IsInPrivateDo = true;
   this->DoUpdateParameters();
   m_IsInPrivateDo = false;
@@ -858,17 +802,6 @@ int Application::ExecuteAndWriteOutput()
             outputParam->Write();
             }
           }
-        //xml writer parameter
-        else if (m_HaveOutXML && GetParameterType(key) == ParameterType_OutputProcessXML
-                 && IsParameterEnabled(key) && HasValue(key) )
-          {
-          Parameter* param = GetParameterByKey(key);
-          OutputProcessXMLParameter* outXMLParam = dynamic_cast<OutputProcessXMLParameter*>(param);
-          if(outXMLParam!=nullptr)
-            {
-            outXMLParam->Write(this);
-            }
-          }
         }
     }
 
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputProcessXMLParameter.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputXML.cxx
similarity index 64%
rename from Modules/Wrappers/ApplicationEngine/src/otbWrapperInputProcessXMLParameter.cxx
rename to Modules/Wrappers/ApplicationEngine/src/otbWrapperInputXML.cxx
index 44b76c6540c673a1680f9612973cd028a8220aef..47da2827ba952865020038f75873b5a0e1b8dae2 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputProcessXMLParameter.cxx
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputXML.cxx
@@ -18,7 +18,7 @@
  * limitations under the License.
  */
 
-#include "otbWrapperInputProcessXMLParameter.h"
+#include "otbWrapperInputXML.h"
 
 #include "otbWrapperChoiceParameter.h"
 #include "otbWrapperListViewParameter.h"
@@ -41,51 +41,10 @@ namespace otb
 {
 namespace Wrapper
 {
-InputProcessXMLParameter::InputProcessXMLParameter()
+namespace XML
 {
-  this->SetKey("inxml");
-  this->SetName("Load parameters from XML");
-  this->SetDescription("Load application parameters from an XML file.");
-  this->SetMandatory(false);
-  this->SetActive(false);
-  this->SetRole(Role_Input);
-}
-
-InputProcessXMLParameter::~InputProcessXMLParameter()
-{
-
-}
-
-bool
-InputProcessXMLParameter::SetFileName(std::string value)
-{
-  // Check if the filename is not empty
-  if(!value.empty())
-    {
-    // Check that the right extension is given : expected .xml
-    if (itksys::SystemTools::GetFilenameLastExtension(value) == ".xml")
-      {
-      if (itksys::SystemTools::FileExists(value,true))
-        {
-        this->SetValue(value);
-        return true;
-        }
-      }
-    }
-  return false;
-}
-
-void
-InputProcessXMLParameter::SetValue(const std::string value)
-{
-  itkDebugMacro("setting member m_FileName to " << value);
-  this->m_FileName = value;
-  SetActive(true);
-  this->Modified();
-}
 
-ImagePixelType
-InputProcessXMLParameter::GetPixelTypeFromString(std::string strType)
+ImagePixelType GetPixelTypeFromString(std::string strType)
 {
   if(strType == "uint8")
     {
@@ -124,29 +83,7 @@ InputProcessXMLParameter::GetPixelTypeFromString(std::string strType)
     }
 }
 
-void
-InputProcessXMLParameter::otbAppLogInfo(Application::Pointer app, std::string info)
-{
-  app->GetLogger()->Write(itk::LoggerBase::INFO, info );
-}
-
-/* copied from Utilities/tinyXMLlib/tinyxml.cpp. Must have a FIX inside tinyxml.cpp */
-FILE*
-InputProcessXMLParameter::TiXmlFOpen( const char* filename, const char* mode )
-{
-#if defined(_MSC_VER) && (_MSC_VER >= 1400 )
-  FILE* fp = 0;
-  errno_t err = fopen_s( &fp, filename, mode );
-  if ( !err && fp )
-    return fp;
-  return 0;
-  #else
-  return fopen( filename, mode );
-  #endif
-}
-
-const std::string
-InputProcessXMLParameter::GetChildNodeTextOf(TiXmlElement *parentElement, std::string key)
+const std::string GetChildNodeTextOf(TiXmlElement* parentElement, std::string key)
 {
   std::string value="";
 
@@ -174,22 +111,15 @@ InputProcessXMLParameter::GetChildNodeTextOf(TiXmlElement *parentElement, std::s
   return value;
 }
 
-int
-InputProcessXMLParameter::Read(Application::Pointer this_)
+int Read(const std::string& filename, Application::Pointer this_)
 {
   // Open the xml file
   TiXmlDocument doc;
 
-  //Use itksys::SystemTools::FOpen() and close it below because
-  //TiXmlDocument::TiXmlFileOpen( ) is not exposed from tinyXML library. Even
-  //though its available in the TiXmlDocument::SaveFile().
-  FILE* fp =  itksys::SystemTools::Fopen(m_FileName, "rb");
-
-  if (!doc.LoadFile(fp , TIXML_ENCODING_UTF8))
-    {
-    fclose(fp);
-    itkExceptionMacro(<< "Can't open file " << m_FileName);
-    }
+  if (!doc.LoadFile(filename , TIXML_ENCODING_UTF8))
+  {
+    itkGenericExceptionMacro(<< "Can't open file " << filename);
+  }
 
   TiXmlHandle handle(&doc);
 
@@ -198,23 +128,15 @@ InputProcessXMLParameter::Read(Application::Pointer this_)
 
   if(!n_OTB)
   {
-    std::string info = "Input XML file " + std::string(this->GetFileName()) + " is invalid.";
-    //this->otbAppLogInfo(app,info);
+    std::string info = "Input XML file " + filename + " is invalid.";
   }
 
   std::string otb_Version;
   otb_Version = GetChildNodeTextOf(n_OTB,"version");
 
   if(otb_Version != OTB_VERSION_STRING)
-    otbMsgDebugMacro( << "Input XML was generated with a different version of OTB (" <<
-                       otb_Version << ") and current version is OTB (" << OTB_VERSION_STRING << ")" );
-
-  /*
-  std::string otb_Version, otb_Build, otb_Platform;
-  otb_Version = this_->GetChildNodeTextOf(n_OTB,"version");
-  otb_Build = GetChildNodeTextOf(n_OTB, "build");
-  otb_Platform = this_->GetChildNodeTextOf(n_OTB, "platform");
-  */
+    otbGenericMsgDebugMacro(<< "Input XML was generated with a different version of OTB (" << otb_Version << ") and current version is OTB ("
+                             << OTB_VERSION_STRING << ")");
 
   int ret = 0;
 
@@ -222,46 +144,11 @@ InputProcessXMLParameter::Read(Application::Pointer this_)
 
   std::string app_Name;
   app_Name = GetChildNodeTextOf(n_AppNode, "name");
-  /*
-  AddMetaData("appname", app_Name);
-
-  app_Descr = this_->GetChildNodeTextOf(n_AppNode, "descr");
-  AddMetaData("appdescr", app_Descr);
-
-  TiXmlElement* n_Doc    = n_AppNode->FirstChildElement("doc");
-
-  std::string doc_Name, doc_Descr, doc_Author, doc_Limitation, doc_SeeAlso;
-
-  doc_Name = this_->GetChildNodeTextOf(n_Doc, "name");
-  AddMetaData("docname", doc_Name);
-
-  doc_Descr = this_->GetChildNodeTextOf(n_Doc, "longdescr");
-  AddMetaData("doclongdescr", doc_Descr);
-
-  doc_Author = this_->GetChildNodeTextOf(n_Doc, "authors");
-  AddMetaData("docauthors", doc_Author);
-
-  doc_Limitation = this_->GetChildNodeTextOf(n_Doc, "limitations");
-  AddMetaData("doclimitations", doc_Limitation);
-
-  doc_SeeAlso = this_->GetChildNodeTextOf(n_Doc, "seealso");
-  AddMetaData("docseealso", doc_SeeAlso);
-  */
-
 
   if(this_->GetName() != app_Name)
-    {
-      //hopefully shouldn't reach here ...
-    /*
-    std::string message = "Input XML was generated for a different application( "
-        + app_Name + ") while application loaded is:" + this_->GetName();
-    */
-    itkWarningMacro( << "Input XML was generated for a different application( " <<
-                       app_Name << ") while application loaded is:" <<this_->GetName());
-
-              fclose(fp);
-    return -1;
-    }
+  {
+    itkGenericExceptionMacro(<< "Input XML was generated for a different application( " << app_Name << ") while application loaded is:" << this_->GetName());
+  }
 
   ParameterGroup::Pointer paramGroup = this_->GetParameterList();
 
@@ -279,15 +166,6 @@ InputProcessXMLParameter::Read(Application::Pointer this_)
 
     Parameter* param = this_->GetParameterByKey(key);
 
-    // std::cout
-    //   << "'" << paramName << "'\t"
-    //   << key << "\t"
-    //   << typeAsString << "\t"
-    //   << type << "\t"
-    //   << ParameterType_OutputImage << "\t"
-    //   << param->HasUserValue() << "\t"
-    //   << value << std::endl;
-
     param->SetUserValue(true);
     param->SetActive(true);
 
@@ -402,9 +280,6 @@ InputProcessXMLParameter::Read(Application::Pointer this_)
       }
     else if (type == ParameterType_StringList || type == ParameterType_ListView)
       {
-      if(values.empty())
-	itkWarningMacro(<< key << " has null values");
-
       this_->SetParameterStringList(key, values);
       }
 
@@ -415,12 +290,11 @@ InputProcessXMLParameter::Read(Application::Pointer this_)
 
   ret = 0; //resetting return to zero, we don't use it anyway for now.
 
-  fclose(fp);
-
   return ret;
 }
 
 
+} // namespace XML
 } //end namespace wrapper
 
 } //end namespace otb
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperOutputProcessXMLParameter.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperOutputXML.cxx
similarity index 79%
rename from Modules/Wrappers/ApplicationEngine/src/otbWrapperOutputProcessXMLParameter.cxx
rename to Modules/Wrappers/ApplicationEngine/src/otbWrapperOutputXML.cxx
index 3b020d798980c922f491e80c263fd7590a93743c..38ff7eba0a0d0a2aa7cf0278797dee61df936d6b 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperOutputProcessXMLParameter.cxx
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperOutputXML.cxx
@@ -18,7 +18,7 @@
  * limitations under the License.
  */
 
-#include "otbWrapperOutputProcessXMLParameter.h"
+#include "otbWrapperOutputXML.h"
 
 #include "otbWrapperChoiceParameter.h"
 #include "otbWrapperListViewParameter.h"
@@ -40,25 +40,10 @@ namespace otb
 {
 namespace Wrapper
 {
-OutputProcessXMLParameter::OutputProcessXMLParameter()
-  : m_Node(nullptr)
-  , m_Appli()
+namespace XML
 {
-  this->SetKey("outxml");
-  this->SetName("Save parameters to XML");
-  this->SetDescription("Save application parameters to an XML file.");
-  this->SetMandatory(false);
-  this->SetActive(false);
-  this->SetRole(Role_Output);
-}
-
-OutputProcessXMLParameter::~OutputProcessXMLParameter()
-{
-
-}
 
-std::string
-OutputProcessXMLParameter::pixelTypeToString(ImagePixelType pixType)
+std::string pixelTypeToString(ImagePixelType pixType)
 {
   std::string type;
 
@@ -108,7 +93,7 @@ OutputProcessXMLParameter::pixelTypeToString(ImagePixelType pixType)
   return type;
 }
 
-TiXmlElement* OutputProcessXMLParameter::AddChildNodeTo(TiXmlElement *parent, std::string name, std::string value)
+TiXmlElement* AddChildNodeTo(TiXmlElement* parent, std::string name, std::string value)
 {
   TiXmlElement * n_Node = new TiXmlElement( name.c_str() );
   parent->LinkEndChild( n_Node );
@@ -120,18 +105,16 @@ TiXmlElement* OutputProcessXMLParameter::AddChildNodeTo(TiXmlElement *parent, st
   return n_Node;
 }
 
-void
-OutputProcessXMLParameter::Write(Application::Pointer app)
+void Write(const std::string& filename, Application::Pointer app)
 {
   // Check if the filename is not empty
-  if(m_FileName.empty())
-    itkExceptionMacro("The XML output FileName is empty, please set the filename via the method SetFileName");
+  if (filename.empty())
+    itkGenericExceptionMacro("The XML output FileName is empty, please set the filename via the method SetFileName");
 
   // Check that the right extension is given : expected .xml */
-  if (itksys::SystemTools::GetFilenameLastExtension(m_FileName) != ".xml")
-    {
-    itkExceptionMacro(<<itksys::SystemTools::GetFilenameLastExtension(m_FileName)
-                      <<" is a wrong Extension FileName : Expected .xml");
+  if (itksys::SystemTools::GetFilenameLastExtension(filename) != ".xml")
+  {
+    itkGenericExceptionMacro(<< itksys::SystemTools::GetFilenameLastExtension(filename) << " is a wrong Extension FileName : Expected .xml");
     }
 
   // start creating XML file
@@ -152,15 +135,12 @@ OutputProcessXMLParameter::Write(Application::Pointer app)
   n_OTB->LinkEndChild(n_App);
 
   // Finally, write xml contents to file
-  doc.SaveFile( m_FileName.c_str() );
+  doc.SaveFile(filename.c_str());
 }
 
-TiXmlElement*
-OutputProcessXMLParameter::ParseApplication(Application::Pointer app)
+TiXmlElement* ParseApplication(Application::Pointer app)
 {
-  m_Appli = app;
-  TiXmlElement * n_App = new TiXmlElement("application");
-  m_Node = n_App;
+  TiXmlElement* n_App = new TiXmlElement("application");
 
   AddChildNodeTo(n_App, "name", app->GetName());
   AddChildNodeTo(n_App, "descr", app->GetDescription());
@@ -168,7 +148,6 @@ OutputProcessXMLParameter::ParseApplication(Application::Pointer app)
 
   TiXmlElement *n_AppDoc;
   n_AppDoc = AddChildNodeTo(n_App, "doc");
-  AddChildNodeTo(n_AppDoc, "name", app->GetDocName());
   AddChildNodeTo(n_AppDoc, "longdescr", app->GetDocLongDescription());
   AddChildNodeTo(n_AppDoc, "authors", app->GetDocAuthors());
   AddChildNodeTo(n_AppDoc, "limitations", app->GetDocLimitations());
@@ -185,19 +164,14 @@ OutputProcessXMLParameter::ParseApplication(Application::Pointer app)
     }
 
   // recursive call to ParseGroup(), starting with "" (i.e. GetParameterList())
-  this->ParseGroup(std::string(""));
-
-  // reset temporary members
-  m_Appli = nullptr;
-  m_Node = nullptr;
-  return n_App;
+    ParseGroup(app, n_App, std::string(""));
+    return n_App;
 }
 
-void
-OutputProcessXMLParameter::ParseGroup(const std::string& group)
+void ParseGroup(Application::Pointer app, TiXmlElement* n_App, const std::string& group)
 {
   std::string prefix(group);
-  ParameterGroup::Pointer paramGroup = m_Appli->GetParameterList();
+  ParameterGroup::Pointer paramGroup = app->GetParameterList();
   if (!group.empty())
     {
     prefix += '.';
@@ -209,7 +183,7 @@ OutputProcessXMLParameter::ParseGroup(const std::string& group)
       }
     else
       {
-      itkExceptionMacro("Function ParseGroup() expected a group parameter for key "<<group);
+        itkGenericExceptionMacro("Function ParseGroup() expected a group parameter for key " << group);
       }
     }
 
@@ -221,20 +195,18 @@ OutputProcessXMLParameter::ParseGroup(const std::string& group)
       std::string key = prefix + *it;
       Parameter *param = paramGroup->GetParameterByKey(*it);
       std::string paramName = param->GetName();
-      ParameterType type = m_Appli->GetParameterType(key);
+      ParameterType type         = app->GetParameterType(key);
       std::string typeAsString = paramGroup->GetParameterTypeAsString(type);
 
       // if param is a Group, inspect this group with a recursive call
       if (type == ParameterType_Group)
         {
-        this->ParseGroup(key);
+          ParseGroup(app, n_App, key);
         }
       else
        {
-       bool paramExists = m_Appli->HasUserValue(key) &&
-                          m_Appli->IsParameterEnabled(key) &&
-                          m_Appli->GetParameterRole(key) == Role_Input;
-       if ( type == ParameterType_OutputProcessXML )
+         bool paramExists = app->HasUserValue(key) && app->IsParameterEnabled(key) && app->GetParameterRole(key) == Role_Input;
+         if (type == ParameterType_OutputProcessXML)
          {
            paramExists = false;
          }
@@ -265,18 +237,18 @@ OutputProcessXMLParameter::ParseGroup(const std::string& group)
                   type == ParameterType_InputVectorDataList || type == ParameterType_StringList ||
                   type == ParameterType_ListView )
            {
-           values = m_Appli->GetParameterStringList(key);
-           hasValueList = true;
+             values       = app->GetParameterStringList(key);
+             hasValueList = true;
            }
          else if (type == ParameterType_Int || type == ParameterType_Radius || type == ParameterType_RAM )
            {
-           value = m_Appli->GetParameterAsString(key);
+             value = app->GetParameterAsString(key);
            }
          else if(type == ParameterType_Float)
            {
            std::ostringstream oss;
            oss << std::setprecision(std::numeric_limits<float>::digits10+1);
-           oss << m_Appli->GetParameterFloat( key );
+           oss << app->GetParameterFloat(key);
            value = oss.str();
            }
          else if ( type == ParameterType_String || type == ParameterType_InputFilename ||
@@ -285,12 +257,12 @@ OutputProcessXMLParameter::ParseGroup(const std::string& group)
                    type == ParameterType_OutputVectorData || type == ParameterType_OutputFilename ||
                    type == ParameterType_Bool)
            {
-           value = m_Appli->GetParameterString(key);
+             value = app->GetParameterString(key);
            }
          else if(key == "rand")
            {
            std::ostringstream strm;
-           strm << m_Appli->GetParameterInt("rand");
+           strm << app->GetParameterInt("rand");
            value = strm.str();
            }
          else if (type == ParameterType_InputProcessXML)
@@ -352,24 +324,23 @@ OutputProcessXMLParameter::ParseGroup(const std::string& group)
                 AddChildNodeTo(n_Values, "value",*strIt);
               }
            }
-         m_Node->LinkEndChild(n_Parameter);
+           n_App->LinkEndChild(n_Parameter);
          }
        // dig into Choice parameter
        if (type == ParameterType_Choice)
         {
         std::string choiceGroup(key);
         choiceGroup += '.';
-        choiceGroup += m_Appli->GetParameterString(key);
-        this->ParseGroup(choiceGroup);
+        choiceGroup += app->GetParameterString(key);
+        ParseGroup(app, n_App, choiceGroup);
         }
       }
     }
 }
 
-std::string OutputProcessXMLParameter::MakeCommandLine(Application::Pointer application)
+std::string MakeCommandLine(Application::Pointer application)
 {
-  OutputProcessXMLParameter::Pointer outXMLParam   = OutputProcessXMLParameter::New();
-  TiXmlElement*                      XMLAppElement = outXMLParam->ParseApplication(application);
+  TiXmlElement* XMLAppElement = ParseApplication(application);
 
   // Create command line from the XML document
   TiXmlElement *     pName, *pParam;
@@ -437,6 +408,6 @@ std::string OutputProcessXMLParameter::MakeCommandLine(Application::Pointer appl
 }
 
 
-} //end namespace wrapper
-
+} // namespace XML
+} // namespace Wrapper
 } //end namespace otb
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperParameterGroup.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperParameterGroup.cxx
index 3a8ec354b5328750e5dfaa7381002ddabe23cab6..5cb7932941d31e8c22b699c3cde7aee3254e1656 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperParameterGroup.cxx
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperParameterGroup.cxx
@@ -25,7 +25,6 @@
 #include "otbWrapperInputFilenameParameter.h"
 #include "otbWrapperInputFilenameListParameter.h"
 #include "otbWrapperOutputFilenameParameter.h"
-#include "otbWrapperOutputProcessXMLParameter.h"
 #include "otbWrapperInputImageParameter.h"
 #include "otbWrapperInputVectorDataParameter.h"
 #include "otbWrapperOutputImageParameter.h"
@@ -34,7 +33,6 @@
 #include "otbWrapperStringListParameter.h"
 #include "otbWrapperInputImageListParameter.h"
 #include "otbWrapperInputVectorDataListParameter.h"
-#include "otbWrapperInputProcessXMLParameter.h"
 #include "otbWrapperParameterKey.h"
 #include "otbWrapperProxyParameter.h"
 #include "otbWrapperBoolParameter.h"
@@ -163,46 +161,6 @@ ParameterGroup::ClearChoices(std::string paramKey)
     }
 }
 
-void ParameterGroup::AddOutXMLParameter()
-{
-  Parameter::Pointer tmpParam;
-  tmpParam = OutputProcessXMLParameter::New();
-//  const std::string key =   tmpParam->GetKey();
-//  const std::string descr = tmpParam->GetDescription();
-const std::string defaultXMLFileName = std::string(GetName())  + ".xml";
-  tmpParam->SetActive(false);
-  AddParameter(tmpParam);
-
-  tmpParam = nullptr;
-  /*
-  AddParameter(ParameterType_OutputProcessXML,  key,   descr);
-  SetParameterDescription(key, descr);
-  MandatoryOff(key);
-  //SetParameterString(key, defaultXMLFileName);
-  DisableParameter(key);
-  */
-}
-
-void ParameterGroup::AddInXMLParameter()
-{
-  Parameter::Pointer tmpParam;
-  tmpParam = InputProcessXMLParameter::New();
-//  const std::string key =   tmpParam->GetKey();
-//  const std::string descr = tmpParam->GetDescription();
-  const std::string defaultXMLFileName = std::string(GetName())  + ".xml";
-  tmpParam->SetActive(false);
-  AddParameter(tmpParam);
-
-  tmpParam = nullptr;
-  /*
-  AddParameter(ParameterType_InputProcessXML,  key,   descr);
-  SetParameterDescription(key, descr);
-  MandatoryOff(key);
-  //SetParameterString(key, defaultXMLFileName);
-  DisableParameter(key);
-*/
-}
-
 /** Get the choices made in the QListWidget */
 std::vector<int>
 ParameterGroup::GetSelectedItems(std::string paramKey)
@@ -369,16 +327,6 @@ ParameterGroup::AddParameter(ParameterType type, std::string paramKey, std::stri
         newParam = RAMParameter::New();
         }
         break;
-      case ParameterType_OutputProcessXML:
-        {
-       newParam = OutputProcessXMLParameter::New();
-        }
-        break;
-      case ParameterType_InputProcessXML:
-        {
-       newParam = InputProcessXMLParameter::New();
-        }
-        break;
       case ParameterType_Bool:
         {
        newParam = BoolParameter::New();
diff --git a/Modules/Wrappers/ApplicationEngine/test/otbWrapperApplicationDocTests.cxx b/Modules/Wrappers/ApplicationEngine/test/otbWrapperApplicationDocTests.cxx
index d0e8a44ec3a961814221b70046e2861625ba89a1..795f3386c407ab13a268ed5fdffe3447195fbbe1 100644
--- a/Modules/Wrappers/ApplicationEngine/test/otbWrapperApplicationDocTests.cxx
+++ b/Modules/Wrappers/ApplicationEngine/test/otbWrapperApplicationDocTests.cxx
@@ -53,11 +53,6 @@ int otbWrapperApplicationDocTest(int argc, char* argv[])
     std::cout<<"Missing Name."<<std::endl;
     isOK = false;
     }
-  if( std::string(app->GetDocName()) == "" )
-    {
-    std::cout<<"Missing Doc Name."<<std::endl;
-    isOK = false;
-    }
   if( std::string(app->GetDescription()) == "" )
     {
     std::cout<<"Missing Description."<<std::endl;
diff --git a/Modules/Wrappers/CommandLine/include/otbWrapperCommandLineLauncher.h b/Modules/Wrappers/CommandLine/include/otbWrapperCommandLineLauncher.h
index 9e097a67cfafd11f96efc38867ea37e4b643d62b..e6a26418b2af0f7664a3eb338cd1fa45744c1da9 100644
--- a/Modules/Wrappers/CommandLine/include/otbWrapperCommandLineLauncher.h
+++ b/Modules/Wrappers/CommandLine/include/otbWrapperCommandLineLauncher.h
@@ -112,9 +112,6 @@ public:
   /** Create and display the help of the application */
   void DisplayHelp(bool longHelp=false);
 
-   /** Create and display the long help of the application */
-  void DisplayLongHelp();
-
   /** Performs specific action for testing environment */
   void LoadTestEnv();
 
diff --git a/Modules/Wrappers/CommandLine/src/otbApplicationLauncherCommandLine.cxx b/Modules/Wrappers/CommandLine/src/otbApplicationLauncherCommandLine.cxx
index 816e56d81fc7ea3f9c9f178198cc999eea1e6cb7..e456eabf88b97b5a3f03217358983eef9c1b394d 100644
--- a/Modules/Wrappers/CommandLine/src/otbApplicationLauncherCommandLine.cxx
+++ b/Modules/Wrappers/CommandLine/src/otbApplicationLauncherCommandLine.cxx
@@ -28,221 +28,6 @@
 #include "otbMPIConfig.h"
 #endif
 
-const std::string GetChildNodeTextOf(TiXmlElement *parentElement, std::string key);
-std::string PrepareExpressionFromXML(std::string filename);
-std::vector<std::string> PrepareVectorExpressionFromXML(std::string filename);
-std::string CleanWord(const std::string & word);
-
-
-std::string PrepareExpressionFromXML(std::string filename)
-{
-  std::string expression;
-
-  if(filename.empty())
-    {
-    std::cerr <<"Input XML Filename is empty" << std::endl;
-    return expression;
-    }
-  std::string ext = filename.substr(filename.size()-4,filename.size());
-  if(ext != ".xml" )
-    std::cerr << ext  << " is a wrong extension: Expected .xml " << __FILE__ << std::endl;
-
-  // Open the xml file
-  TiXmlDocument doc;
-
-  //Use itksys::SystemTools::FOpen() and close it below because
-  //TiXmlDocument::TiXmlFileOpen( ) is not exposed from tinyXML library. Even
-  //though its available in the TiXmlDocument::SaveFile().
-  FILE* fp =  itksys::SystemTools::Fopen(filename, "rb");
-
-  if (!doc.LoadFile(fp , TIXML_ENCODING_UTF8))
-    {
-    std::cerr << "Can't open file " << filename << std::endl;
-    fclose(fp);
-    exit(1);
-
-    }
-
-  TiXmlHandle handle(&doc);
-
-  TiXmlElement *n_OTB;
-  n_OTB = handle.FirstChild("OTB").Element();
-
-  if(!n_OTB)
-  {
-    std::string info = "Input XML file " + filename + " is invalid.";
-    std::cerr << info  << std::endl;
-    fclose(fp);
-    exit(1);
-  }
-
-  TiXmlElement *n_AppNode   = n_OTB->FirstChildElement("application");
-
-  std::string moduleName;
-  moduleName = GetChildNodeTextOf(n_AppNode, "name");
-  /*
-  AddMetaData("appname", app_Name);
-
-  app_Descr = this_->GetChildNodeTextOf(n_AppNode, "descr");
-  AddMetaData("appdescr", app_Descr);
-
-  TiXmlElement* n_Doc    = n_AppNode->FirstChildElement("doc");
-
-  std::string doc_Name, doc_Descr, doc_Author, doc_Limitation, doc_SeeAlso;
-
-  doc_Name = this_->GetChildNodeTextOf(n_Doc, "name");
-  AddMetaData("docname", doc_Name);
-
-  doc_Descr = this_->GetChildNodeTextOf(n_Doc, "longdescr");
-  AddMetaData("doclongdescr", doc_Descr);
-
-  doc_Author = this_->GetChildNodeTextOf(n_Doc, "authors");
-  AddMetaData("docauthors", doc_Author);
-
-  doc_Limitation = this_->GetChildNodeTextOf(n_Doc, "limitations");
-  AddMetaData("doclimitations", doc_Limitation);
-
-  doc_SeeAlso = this_->GetChildNodeTextOf(n_Doc, "seealso");
-  AddMetaData("docseealso", doc_SeeAlso);
-  */
-
-  expression.append(moduleName);
-
-  for( TiXmlElement* n_Parameter = n_AppNode->FirstChildElement("parameter"); n_Parameter != nullptr;
-       n_Parameter = n_Parameter->NextSiblingElement() )
-    {
-    std::string key="-";
-    key.append(GetChildNodeTextOf(n_Parameter, "key"));
-
-    TiXmlElement* n_Values = nullptr;
-    n_Values = n_Parameter->FirstChildElement("values");
-    if(n_Values)
-      {
-      std::string values;
-      for(TiXmlElement* n_Value = n_Values->FirstChildElement("value"); n_Value != nullptr;
-          n_Value = n_Value->NextSiblingElement())
-        {
-        values.append(n_Value->GetText());
-        values.append(" ");
-        }
-      values = values.substr(0,values.size()-1);
-      expression.append(" ");
-      expression.append(key);
-      expression.append(" ");
-      expression.append(values);
-      }
-    else
-      {
-      std::string value;
-      value = GetChildNodeTextOf(n_Parameter, "value");
-
-      expression.append(" ");
-      expression.append(key);
-      expression.append(" ");
-      expression.append(value);
-
-      std::string type = GetChildNodeTextOf(n_Parameter, "type");
-      if (type == "OutputImage")
-        {
-        std::string t = GetChildNodeTextOf(n_Parameter, "pixtype");
-        expression.append(" ");
-        expression.append(t);
-        }
-      }
-    }
-
-  fclose(fp);
-
-  return expression;
-}
-
-std::vector<std::string> PrepareVectorExpressionFromXML(std::string filename)
-{
-  std::vector<std::string> expression;
-
-  if(filename.empty())
-    {
-    std::cerr <<"Input XML Filename is empty" << std::endl;
-    return expression;
-    }
-  std::string ext = filename.substr(filename.size()-4,filename.size());
-  if(ext != ".xml" )
-    std::cerr << ext  << " is a wrong extension: Expected .xml " << __FILE__ << std::endl;
-
-  // Open the xml file
-  TiXmlDocument doc;
-
-  //Use itksys::SystemTools::FOpen() and close it below because
-  //TiXmlDocument::TiXmlFileOpen( ) is not exposed from tinyXML library. Even
-  //though its available in the TiXmlDocument::SaveFile().
-  FILE* fp =  itksys::SystemTools::Fopen(filename, "rb");
-
-  if (!doc.LoadFile(fp , TIXML_ENCODING_UTF8))
-    {
-    std::cerr << "Can't open file " << filename << std::endl;
-    fclose(fp);
-    exit(1);
-
-    }
-
-  TiXmlHandle handle(&doc);
-
-  TiXmlElement *n_OTB;
-  n_OTB = handle.FirstChild("OTB").Element();
-
-  if(!n_OTB)
-  {
-    std::string info = "Input XML file " + filename + " is invalid.";
-    std::cerr << info  << std::endl;
-    fclose(fp);
-    exit(1);
-  }
-
-  TiXmlElement *n_AppNode   = n_OTB->FirstChildElement("application");
-
-  std::string moduleName;
-  moduleName = GetChildNodeTextOf(n_AppNode, "name");
-
-  expression.push_back(CleanWord(moduleName));
-
-  for( TiXmlElement* n_Parameter = n_AppNode->FirstChildElement("parameter"); n_Parameter != nullptr;
-       n_Parameter = n_Parameter->NextSiblingElement() )
-    {
-    std::string key="-";
-    key.append(GetChildNodeTextOf(n_Parameter, "key"));
-    expression.push_back(CleanWord(key));
-
-    TiXmlElement* n_Values = nullptr;
-    n_Values = n_Parameter->FirstChildElement("values");
-    if(n_Values)
-      {
-      std::string values;
-      for(TiXmlElement* n_Value = n_Values->FirstChildElement("value"); n_Value != nullptr;
-          n_Value = n_Value->NextSiblingElement())
-        {
-        expression.push_back(CleanWord(n_Value->GetText()));
-        }
-      }
-    else
-      {
-      std::string value;
-      value = GetChildNodeTextOf(n_Parameter, "value");
-      expression.push_back(CleanWord(value));
-
-      std::string type = GetChildNodeTextOf(n_Parameter, "type");
-      if (type == "OutputImage")
-        {
-        std::string t = GetChildNodeTextOf(n_Parameter, "pixtype");
-        expression.push_back(CleanWord(t));
-        }
-      }
-    }
-
-  fclose(fp);
-
-  return expression;
-}
-
 std::string CleanWord(const std::string & word)
 {
   std::string res("");
@@ -272,26 +57,18 @@ int main(int argc, char* argv[])
 
   std::vector<std::string> vexp;
 
-  std::string exp;
-  if (strcmp(argv[1], "-inxml") == 0)
-    {
-    vexp = PrepareVectorExpressionFromXML(argv[2]);
-    }
-  else
+  // Construct the string expression
+  for (int i = 1; i < argc; i++)
+  {
+    std::string strarg(argv[i]);
+    std::string cleanArg = CleanWord(strarg);
+    if (cleanArg.empty())
     {
-    // Construct the string expression
-    for (int i = 1; i < argc; i++)
-      {
-      std::string strarg(argv[i]);
-      std::string cleanArg = CleanWord(strarg);
-      if (cleanArg.empty())
-        {
-        // Empty argument !
-        continue;
-        }
-      vexp.push_back(cleanArg);
-      }
+      // Empty argument!
+      continue;
     }
+    vexp.push_back(cleanArg);
+  }
 
   if (vexp.empty())
   {
@@ -317,31 +94,3 @@ int main(int argc, char* argv[])
   #endif
   return success ? EXIT_SUCCESS : EXIT_FAILURE;
 }
-
-const std::string GetChildNodeTextOf(TiXmlElement *parentElement, std::string key)
-{
-  std::string value="";
-
-  if(parentElement)
-    {
-    TiXmlElement* childElement = nullptr;
-    childElement = parentElement->FirstChildElement(key.c_str());
-
-    //same as childElement->GetText() does but that call is failing if there is
-    //no such node.
-    //but the below code works and is a replacement for GetText()
-    if(childElement)
-      {
-      const TiXmlNode* child = childElement->FirstChild();
-      if ( child )
-        {
-        const TiXmlText* childText = child->ToText();
-        if ( childText )
-          {
-          value = childText->Value();
-          }
-        }
-      }
-    }
-  return value;
-}
diff --git a/Modules/Wrappers/CommandLine/src/otbWrapperCommandLineLauncher.cxx b/Modules/Wrappers/CommandLine/src/otbWrapperCommandLineLauncher.cxx
index b5ef08d6acaf9814579046f6a50a0db917dac063..728d349b0ca37684df34c2aeb86322eebd2afd45 100644
--- a/Modules/Wrappers/CommandLine/src/otbWrapperCommandLineLauncher.cxx
+++ b/Modules/Wrappers/CommandLine/src/otbWrapperCommandLineLauncher.cxx
@@ -31,7 +31,6 @@
 #include "otbWrapperOutputVectorDataParameter.h"
 #include "otbWrapperNumericalParameter.h"
 #include "otbWrapperListViewParameter.h"
-#include "otbWrapperOutputProcessXMLParameter.h"
 #include "otbWrapperAddProcessToWatchEvent.h"
 
 // List value parameter
@@ -137,19 +136,27 @@ bool CommandLineLauncher::Execute()
 
 bool CommandLineLauncher::ExecuteAndWriteOutputNoCatch()
 {
-   if (this->BeforeExecute() == false)
-      {
-      return false;
-      }
-    if( m_Application->ExecuteAndWriteOutput() == 0 )
-      {
-      this->DisplayOutputParameters();
-      }
-    else
-      {
-      return false;
-      }
-    return true;
+  if (this->BeforeExecute() == false)
+  {
+    return false;
+  }
+
+  if (m_Application->ExecuteAndWriteOutput() != 0)
+  {
+    return false;
+  }
+
+  this->DisplayOutputParameters();
+
+  // After execution, write parameters to the xml file if requested
+  const char* attrib = "-outxml";
+  if (m_Parser->IsAttributExists(attrib, m_VExpression))
+  {
+    std::vector<std::string> outXMLValues = m_Parser->GetAttribut(attrib, m_VExpression);
+    m_Application->SaveParametersToXML(outXMLValues[0]);
+  }
+
+  return true;
 }
 
 bool CommandLineLauncher::ExecuteAndWriteOutput()
@@ -282,7 +289,12 @@ bool CommandLineLauncher::BeforeExecute()
     return false;
     }
 
-  return true;
+    if (m_Application->IsDeprecated())
+    {
+      m_Application->GetLogger()->Warning("This application is deprecated and will be removed in a future OTB release.\n");
+    }
+
+    return true;
 }
 
 bool CommandLineLauncher::LoadPath()
@@ -358,22 +370,16 @@ CommandLineLauncher::ParamResultType CommandLineLauncher::LoadParameters()
     itkExceptionMacro("No application loaded");
     }
 
-  /* Check for inxml parameter. If exists Update all Parameters from xml and
-   * check for user defined parameters for overriding those from XML
-   */
-  const char *inXMLKey =  "inxml";
-  const char *attrib   = "-inxml";
-  const bool paramInXMLExists(m_Parser->IsAttributExists(attrib, m_VExpression));
-  if(paramInXMLExists)
+    // Read parameters from xml file if provided
+    const char* attrib = "-inxml";
+    if (m_Parser->IsAttributExists(attrib, m_VExpression))
     {
-    std::vector<std::string> inXMLValues;
-    inXMLValues = m_Parser->GetAttribut(attrib, m_VExpression);
-    m_Application->SetParameterString(inXMLKey, inXMLValues[0]);
-    m_Application->UpdateParameters();
+      std::vector<std::string> inXMLValues = m_Parser->GetAttribut(attrib, m_VExpression);
+      m_Application->LoadParametersFromXML(inXMLValues[0]);
     }
 
-  // Check for the progress report parameter
-  if (m_Parser->IsAttributExists("-progress", m_VExpression) == true)
+    // Check for the progress report parameter
+    if (m_Parser->IsAttributExists("-progress", m_VExpression) == true)
     {
     std::vector<std::string> val = m_Parser->GetAttribut("-progress", m_VExpression);
     if (val.size() == 1 && (val[0] == "1" || val[0] == "true"))
@@ -429,21 +435,10 @@ CommandLineLauncher::ParamResultType CommandLineLauncher::LoadParameters()
           // Multiple values parameters
           m_Application->SetParameterStringList(paramKey, values);
           }
-        else if (type == ParameterType_Choice ||
-                 type == ParameterType_Float ||
-                 type == ParameterType_Int ||
-                 type == ParameterType_Radius ||
-                 type == ParameterType_Directory ||
-                 type == ParameterType_String ||
-                 type == ParameterType_InputFilename ||
-                 type == ParameterType_OutputFilename ||
-                 type == ParameterType_InputImage ||
-                 type == ParameterType_OutputImage ||
-                 type == ParameterType_InputVectorData ||
-                 type == ParameterType_OutputVectorData ||
-                 type == ParameterType_RAM ||
-                 type == ParameterType_OutputProcessXML ||
-                 type == ParameterType_Bool) // || type == ParameterType_InputProcessXML)
+          else if (type == ParameterType_Choice || type == ParameterType_Float || type == ParameterType_Int || type == ParameterType_Radius ||
+                   type == ParameterType_Directory || type == ParameterType_String || type == ParameterType_InputFilename ||
+                   type == ParameterType_OutputFilename || type == ParameterType_InputImage || type == ParameterType_OutputImage ||
+                   type == ParameterType_InputVectorData || type == ParameterType_OutputVectorData || type == ParameterType_RAM || type == ParameterType_Bool)
           {
           // Single value parameter
           m_Application->SetParameterString(paramKey, values[0]);
@@ -582,7 +577,13 @@ void CommandLineLauncher::LinkWatchers(itk::Object * itkNotUsed(caller), const i
 void CommandLineLauncher::DisplayHelp(bool longHelp)
 {
   std::cerr<<std::endl;
-  std::cerr << "This is the "<<m_Application->GetDocName() << " ("<<m_Application->GetName()<<") application, version " << OTB_VERSION_STRING <<std::endl<<std::endl;
+  std::cerr << "This is the " << m_Application->GetName() << " application, version " << OTB_VERSION_STRING << std::endl << std::endl;
+
+  if (m_Application->IsDeprecated())
+  {
+    std::cerr << "WARNING: This application is deprecated, it will be removed in a future OTB release." << std::endl;
+    std::cerr << std::endl;
+  }
 
   std::cerr << m_Application->GetDescription() << std::endl;
 
@@ -718,9 +719,9 @@ std::string CommandLineLauncher::DisplayParameterHelp(const Parameter::Pointer &
     {
     oss << "<float>         ";
     }
-  else if (type == ParameterType_InputFilename || type == ParameterType_OutputFilename ||type == ParameterType_Directory || type == ParameterType_InputImage || type == ParameterType_OutputProcessXML || type == ParameterType_InputProcessXML ||
-          type == ParameterType_InputVectorData || type == ParameterType_OutputVectorData || type == ParameterType_String || 
-          type == ParameterType_Choice || (type == ParameterType_ListView && singleSelectionForListView))
+    else if (type == ParameterType_InputFilename || type == ParameterType_OutputFilename || type == ParameterType_Directory ||
+             type == ParameterType_InputImage || type == ParameterType_InputVectorData || type == ParameterType_OutputVectorData ||
+             type == ParameterType_String || type == ParameterType_Choice || (type == ParameterType_ListView && singleSelectionForListView))
     {
     oss << "<string>        ";
     }
@@ -894,6 +895,8 @@ bool CommandLineLauncher::CheckKeyValidity(std::string& refKey)
   appKeyList.push_back("progress");
   appKeyList.push_back("testenv");
   appKeyList.push_back("version");
+  appKeyList.push_back("inxml");
+  appKeyList.push_back("outxml");
 
   // Check if each key in the expression exists in the application
   for (unsigned int i = 0; i < expKeyList.size(); i++)
diff --git a/Modules/Wrappers/QGIS/src/otbQgisDescriptor.cxx b/Modules/Wrappers/QGIS/src/otbQgisDescriptor.cxx
index 6d757472971fe66922b22cc70c550dc4f6bc764a..609a8e658750f459382830d6c818eee13315ab2f 100644
--- a/Modules/Wrappers/QGIS/src/otbQgisDescriptor.cxx
+++ b/Modules/Wrappers/QGIS/src/otbQgisDescriptor.cxx
@@ -131,13 +131,10 @@ int main(int argc, char* argv[])
     const ParameterType type = appli->GetParameterType(name);
     const std::string description = appli->GetParameterName(name);
     if (  type == ParameterType_Group  ||
-          type == ParameterType_OutputProcessXML  ||
-          type == ParameterType_InputProcessXML  ||
           type == ParameterType_RAM ||
           param->GetRole() == Role_Output )
       {
       // group parameter cannot have any value.
-      // outxml and inxml parameters are not relevant for QGIS and is considered a bit noisy
       // ram is added by qgis-otb processing provider plugin as an advanced parameter for all apps
       // parameter role cannot be of type Role_Output
       continue;
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputProcessXMLParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputProcessXMLParameter.h
deleted file mode 100644
index dbd5e4a45b737abfc47564fd951623c03f2e628b..0000000000000000000000000000000000000000
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputProcessXMLParameter.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2005-2019 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 otbWrapperQtWidgetInputProcessXMLParameter_h
-#define otbWrapperQtWidgetInputProcessXMLParameter_h
-
-#include <QtWidgets>
-#include "otbWrapperInputProcessXMLParameter.h"
-#include "otbWrapperQtWidgetParameterBase.h"
-
-
-namespace otb
-{
-namespace Wrapper
-{
-
-/** \class QtWidgetInputProcessXMLParameter
- * \brief
- *
- * \ingroup OTBQtWidget
- */
-class OTBQtWidget_EXPORT QtWidgetInputProcessXMLParameter : public QtWidgetParameterBase
-{
-  Q_OBJECT
-public:
-  QtWidgetInputProcessXMLParameter(InputProcessXMLParameter*, QtWidgetModel*, QWidget*);
-  ~QtWidgetInputProcessXMLParameter() override;
-
-  const QLineEdit* GetInput() const;
-  QLineEdit* GetInput();
-
-protected slots:
-  void SetFileName( const QString& value );
-  void SelectFile();
-
-private:
-  QtWidgetInputProcessXMLParameter(const QtWidgetInputProcessXMLParameter&) = delete;
-  void operator=(const QtWidgetInputProcessXMLParameter&) = delete;
-
-  void DoCreateWidget() override;
-
-  void DoUpdateGUI() override;
-
-
-  InputProcessXMLParameter::Pointer m_XMLParam;
-
-  QHBoxLayout * m_HLayout;
-  QLineEdit*    m_Input;
-  QPushButton * m_Button;
-};
-
-
-}
-}
-
-#endif
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetMainWindow.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetMainWindow.h
index 70d922b8116411a6201c0cb9569d74534153ee34..0bd6704b59175cf80e237f95503d4b5a463781ad 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetMainWindow.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetMainWindow.h
@@ -65,6 +65,8 @@ public slots:
   void UpdateMessageAfterExecution(int status);
   void on_executeButton_clicked();
   void CopyCommandLine();
+  void LoadFromXML();
+  void SaveToXML();
 
 private:
   ::Ui::AppMainWindow* ui;
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetModel.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetModel.h
index 13dffe9fe1078859117eb80c4ae90bdb1be445e4..dc6ec0b88dc32a476caf52a7781b9ce32d5bb418 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetModel.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetModel.h
@@ -110,13 +110,6 @@ public:
   /** Logger debug message sender */
   void SendLogDEBUG( const std::string & mes );
 
-  /** Used by inxml when forcing xml parse flag to update widget data via UpdateGui */
-  void UpdateAllWidgets()
-  {
-    GetApplication()->ForceInXMLParseFlag();
-    emit UpdateGui();
-  }
-
 signals:
   void SetApplicationReady(bool);
 
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetOutputProcessXMLParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetOutputProcessXMLParameter.h
deleted file mode 100644
index 5896481a4d4fe39cf9bfd96c5cd26c147cf36ef7..0000000000000000000000000000000000000000
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetOutputProcessXMLParameter.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2005-2019 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 otbWrapperQtWidgetOutputProcessXMLParameter_h
-#define otbWrapperQtWidgetOutputProcessXMLParameter_h
-
-#include <QtWidgets>
-#include "otbWrapperOutputProcessXMLParameter.h"
-#include "otbWrapperQtWidgetParameterBase.h"
-
-
-namespace otb
-{
-namespace Wrapper
-{
-
-/** \class QtWidgetOutputProcessXMLParameter
- * \brief
- *
- * \ingroup OTBQtWidget
- */
-class OTBQtWidget_EXPORT QtWidgetOutputProcessXMLParameter : public QtWidgetParameterBase
-{
-  Q_OBJECT
-public:
-  QtWidgetOutputProcessXMLParameter(OutputProcessXMLParameter*, QtWidgetModel*, QWidget*);
-  ~QtWidgetOutputProcessXMLParameter() override;
-
-  const QLineEdit* GetInput() const;
-  QLineEdit* GetInput();
-
-public slots:
-  void SetFileName( const QString& value );
-
-protected slots:
-  void SelectFile();
-
-private:
-  QtWidgetOutputProcessXMLParameter(const QtWidgetOutputProcessXMLParameter&) = delete;
-  void operator=(const QtWidgetOutputProcessXMLParameter&) = delete;
-
-  void DoCreateWidget() override;
-
-  void DoUpdateGUI() override;
-
-
-  OutputProcessXMLParameter::Pointer m_XMLParam;
-
-  QHBoxLayout * m_HLayout;
-  QLineEdit*    m_Input;
-  QPushButton * m_Button;
-};
-
-
-}
-}
-
-#endif
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetParameterGroup.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetParameterGroup.h
index a84acb452ddb484f934f8c7d4f6275f312a36f95..3eb77f9f800174904918eb1cc00473d216c60abf 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetParameterGroup.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetParameterGroup.h
@@ -24,8 +24,8 @@
 #include <QtWidgets>
 #include "otbWrapperParameterGroup.h"
 #include "otbWrapperQtWidgetParameterBase.h"
-#include "otbWrapperInputProcessXMLParameter.h"
-#include "otbWrapperOutputProcessXMLParameter.h"
+#include "otbWrapperInputXML.h"
+#include "otbWrapperOutputXML.h"
 
 namespace otb
 {
diff --git a/Modules/Wrappers/QtWidget/src/CMakeLists.txt b/Modules/Wrappers/QtWidget/src/CMakeLists.txt
index 41fc9f1b190b29da9d7272d41f245b0c06d1a863..461bd06209a5bc418ae79972b7e221efe0c55bc1 100644
--- a/Modules/Wrappers/QtWidget/src/CMakeLists.txt
+++ b/Modules/Wrappers/QtWidget/src/CMakeLists.txt
@@ -24,7 +24,6 @@ set(OTBQtWidget_SRC
   otbWrapperQtWidgetParameterLabel.cxx
   otbWrapperQtWidgetView.cxx
   otbWrapperQtWidgetMainWindow.cxx
-  otbWrapperQtWidgetInputProcessXMLParameter.cxx
   otbWrapperQtWidgetIntParameter.cxx
   otbWrapperQtWidgetInputVectorDataListParameter.cxx
   otbWrapperQtWidgetSimpleProgressReport.cxx
@@ -44,7 +43,6 @@ set(OTBQtWidget_SRC
   otbWrapperQtWidgetParameterGroup.cxx
   otbWrapperQtWidgetInputFilenameListParameter.cxx
   otbWrapperQtWidgetRAMParameter.cxx
-  otbWrapperQtWidgetOutputProcessXMLParameter.cxx
   otbWrapperQtWidgetParameterBase.cxx
   otbWrapperQtWidgetInputImageParameter.cxx
   otbWrapperQtWidgetStringListParameter.cxx
@@ -70,8 +68,6 @@ set(OTBQtWidget_MOC_HDR
   ../include/otbWrapperQtWidgetInputVectorDataParameter.h
   ../include/otbWrapperQtWidgetOutputImageParameter.h
   ../include/otbWrapperQtWidgetOutputVectorDataParameter.h
-  ../include/otbWrapperQtWidgetOutputProcessXMLParameter.h
-  ../include/otbWrapperQtWidgetInputProcessXMLParameter.h
   ../include/otbWrapperQtWidgetParameterGroup.h
   ../include/otbWrapperQtWidgetParameterLabel.h
   ../include/otbWrapperQtWidgetParameterBase.h
diff --git a/Modules/Wrappers/QtWidget/src/appmainwindow.ui b/Modules/Wrappers/QtWidget/src/appmainwindow.ui
index c376f1984f3cec0518739bf1dd22fe3b6fb4f4be..1a2408b89cc9fbbe307a8cdb128f779dfdf517cd 100644
--- a/Modules/Wrappers/QtWidget/src/appmainwindow.ui
+++ b/Modules/Wrappers/QtWidget/src/appmainwindow.ui
@@ -117,6 +117,13 @@
       </widget>
      </widget>
     </item>
+    <item alignment="Qt::AlignHCenter|Qt::AlignVCenter">
+     <widget class="QLabel" name="deprecation">
+      <property name="text">
+       <string>Deprecation status</string>
+      </property>
+     </widget>
+    </item>
     <item>
      <widget class="QLabel" name="message">
       <property name="text">
@@ -171,6 +178,9 @@
     </property>
     <addaction name="separator"/>
     <addaction name="actionCopy_command_line"/>
+    <addaction name="actionLoad_from_XML"/>
+    <addaction name="actionSave_to_XML"/>
+    <addaction name="separator"/>
     <addaction name="actionQuit"/>
    </widget>
    <widget class="QMenu" name="menuHelp">
@@ -195,31 +205,6 @@
     <string>F1</string>
    </property>
   </action>
-  <action name="actionAboutOTB">
-   <property name="text">
-    <string>About</string>
-   </property>
-  </action>
-  <action name="actionAbout">
-   <property name="text">
-    <string>About</string>
-   </property>
-  </action>
-  <action name="actionView_log">
-   <property name="text">
-    <string>View log</string>
-   </property>
-  </action>
-  <action name="actionLoad_parameters">
-   <property name="text">
-    <string>Load parameters</string>
-   </property>
-  </action>
-  <action name="actionSave_parameters">
-   <property name="text">
-    <string>Save parameters</string>
-   </property>
-  </action>
   <action name="actionQuit">
    <property name="text">
     <string>Quit</string>
@@ -228,14 +213,9 @@
     <string>Ctrl+Q</string>
    </property>
   </action>
-  <action name="actionReset_parameters">
-   <property name="text">
-    <string>Reset parameters</string>
-   </property>
-  </action>
-  <action name="actionReset">
+  <action name="actionCopy_command_line">
    <property name="text">
-    <string>Reset All</string>
+    <string>Copy command line to clipboard</string>
    </property>
   </action>
   <action name="actionLoad_from_XML">
@@ -248,11 +228,6 @@
     <string>Save to XML</string>
    </property>
   </action>
-  <action name="actionCopy_command_line">
-   <property name="text">
-    <string>Copy command line to clipboard</string>
-   </property>
-  </action>
  </widget>
  <customwidgets>
   <customwidget>
diff --git a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetInputProcessXMLParameter.cxx b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetInputProcessXMLParameter.cxx
deleted file mode 100644
index fdd95d1135ec9ebe62d2ccfe179a963dd28ab488..0000000000000000000000000000000000000000
--- a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetInputProcessXMLParameter.cxx
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (C) 2005-2019 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 "otbWrapperQtWidgetInputProcessXMLParameter.h"
-
-
-#include <otbQtAdapters.h>
-
-
-namespace otb
-{
-namespace Wrapper
-{
-
-QtWidgetInputProcessXMLParameter::QtWidgetInputProcessXMLParameter(InputProcessXMLParameter* param, QtWidgetModel* m, QWidget * parent)
-: QtWidgetParameterBase(param, m, parent),
-  m_XMLParam(param)
-{
-}
-
-QtWidgetInputProcessXMLParameter::~QtWidgetInputProcessXMLParameter()
-{
-}
-
-const QLineEdit*
-QtWidgetInputProcessXMLParameter
-::GetInput() const
-{
-  return m_Input;
-}
-
-QLineEdit*
-QtWidgetInputProcessXMLParameter
-::GetInput()
-{
-  return m_Input;
-}
-
-void QtWidgetInputProcessXMLParameter::DoUpdateGUI()
-{
-  if (m_XMLParam->HasUserValue())
-    {
-    // Update the lineEdit
-    QString text(
-      QFile::decodeName( m_XMLParam->GetFileName() )
-    );
-
-    if (text != m_Input->text())
-      m_Input->setText(text);
-    }
-}
-
-void QtWidgetInputProcessXMLParameter::DoCreateWidget()
-{
-  // Set up input text edit
-  m_HLayout = new QHBoxLayout;
-  m_HLayout->setSpacing(0);
-  m_HLayout->setContentsMargins(0, 0, 0, 0);
-  m_Input = new QLineEdit(this);
-  m_Input->setToolTip(
-    QString::fromStdString( m_XMLParam->GetDescription() )
-  );
-  connect( m_Input, &QLineEdit::textChanged, this, &QtWidgetInputProcessXMLParameter::SetFileName );
-  connect( m_Input, &QLineEdit::textChanged, GetModel(), &QtWidgetModel::NotifyUpdate );
-
-  m_HLayout->addWidget(m_Input);
-
-  // Set up input text edit
-  m_Button = new QPushButton(this);
-  m_Button->setText("...");
-  m_Button->setToolTip("Select file...");
-  m_Button->setMaximumWidth(m_Button->width());
-  connect( m_Button, &QPushButton::clicked, this, &QtWidgetInputProcessXMLParameter::SelectFile );
-  m_HLayout->addWidget(m_Button);
-
-  this->setLayout(m_HLayout);
-}
-
-
-void
-QtWidgetInputProcessXMLParameter
-::SelectFile()
-{
-  assert( m_Input!=NULL );
-
-  QString filename(
-    otb::GetOpenFilename(
-      this,
-      QString(),
-      m_Input->text(),
-      tr( "XML File (*.xml)" ),
-      NULL,
-      QFileDialog::ReadOnly
-    )
-  );
-
-  if( filename.isEmpty() )
-    return;
-
-  m_Input->setText( filename  );
-}
-
-
-void QtWidgetInputProcessXMLParameter::SetFileName(const QString& value)
-{
-  // load xml file name
-  if( m_XMLParam->SetFileName(
-	QFile::encodeName( value ).constData() ) )
-    {
-    // notify of value change
-    QString key( m_XMLParam->GetKey() );
-    emit ParameterChanged(key);
-    GetModel()->GetApplication()->ForceInXMLParseFlag();
-    }
-}
-
-}
-
-}
diff --git a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetMainWindow.cxx b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetMainWindow.cxx
index 93c3f459e2e43b49d43e879a84e3f83ccfa30345..40cd64b48a3f6064280007b6706dc2989c4bd629 100644
--- a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetMainWindow.cxx
+++ b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetMainWindow.cxx
@@ -19,11 +19,11 @@
  */
 
 #include "otbWrapperQtWidgetMainWindow.h"
+#include "otbWrapperOutputXML.h"
 
 #include <QtWidgets>
 
 #include "otbWrapperQtWidgetView.h"
-#include "otbWrapperQtWidgetOutputProcessXMLParameter.h"
 
 #include "ui_appmainwindow.h"
 
@@ -44,11 +44,13 @@ QtMainWindow::QtMainWindow(Application::Pointer app, QtWidgetView* gui, QWidget*
   ui->scrollArea->setWidget(gui);
 
   // Connect menu buttons
-  connect(ui->actionQuit, &QAction::triggered, this, &QMainWindow::close);
   const auto url = std::string("https://www.orfeo-toolbox.org/CookBook/Applications/app_") + app->GetName() + std::string(".html");
   connect(ui->actionDocumentation, &QAction::triggered, this, [=] { QDesktopServices::openUrl(QUrl(QString::fromStdString(url))); });
 
   connect(ui->actionCopy_command_line, &QAction::triggered, this, &QtMainWindow::CopyCommandLine);
+  connect(ui->actionLoad_from_XML, &QAction::triggered, this, &QtMainWindow::LoadFromXML);
+  connect(ui->actionSave_to_XML, &QAction::triggered, this, &QtMainWindow::SaveToXML);
+  connect(ui->actionQuit, &QAction::triggered, this, &QMainWindow::close);
 
   // Setup execute / cancel button
   ui->executeButton->setDefault(true);
@@ -70,6 +72,18 @@ QtMainWindow::QtMainWindow(Application::Pointer app, QtWidgetView* gui, QWidget*
   // Setup the progress bar to observe the model
   ui->progressBar->SetModel(gui->GetModel());
 
+  // Fill and display the deprecation status label if needed, or hide it.
+  if (app->IsDeprecated())
+  {
+    ui->deprecation->setVisible(true);
+    ui->deprecation->setText("<font color='#E65100'>This application is deprecated and will be removed in a future release.</font>");
+  }
+  else
+  {
+    ui->deprecation->setVisible(false);
+    ui->deprecation->setText("");
+  }
+
   // Connect application progress text to the QLabel
   connect(ui->progressBar, &QtWidgetSimpleProgressReport::SetText, ui->message, &QLabel::setText);
 
@@ -128,7 +142,7 @@ void QtMainWindow::on_executeButton_clicked()
 void QtMainWindow::CopyCommandLine()
 {
   // Get command line
-  std::string cmdLine = OutputProcessXMLParameter::MakeCommandLine(gui->GetModel()->m_Application);
+  std::string cmdLine = otb::Wrapper::XML::MakeCommandLine(gui->GetModel()->m_Application);
 
   // Copy it to clipboard
   QClipboard* clipboard = QGuiApplication::clipboard();
@@ -138,6 +152,27 @@ void QtMainWindow::CopyCommandLine()
   gui->GetModel()->SendLogINFO(cmdLine);
 }
 
+void QtMainWindow::LoadFromXML()
+{
+  QString filename = QFileDialog::getOpenFileName(this, tr("Load from XML"), "", tr("XML files (*.xml);;All files (*)"));
+
+  if (!filename.isNull())
+  {
+    gui->GetModel()->m_Application->LoadParametersFromXML(filename.toStdString());
+    gui->GetModel()->UpdateGui();
+  }
+}
+
+void QtMainWindow::SaveToXML()
+{
+  QString filename = QFileDialog::getSaveFileName(this, tr("Save to XML"), "", tr("XML files (*.xml);;All files (*)"));
+
+  if (!filename.isNull())
+  {
+    gui->GetModel()->m_Application->SaveParametersToXML(filename.toStdString());
+  }
+}
+
 QtMainWindow::~QtMainWindow()
 {
   delete ui;
diff --git a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetModel.cxx b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetModel.cxx
index dc0e9278dd532fed974eb1c8adc900e9fc5fd32b..9047819d649166b1e25ba2f0e6ca9953dd8c7e7f 100644
--- a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetModel.cxx
+++ b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetModel.cxx
@@ -21,7 +21,7 @@
 #include "otbWrapperQtWidgetModel.h"
 
 //Use to create command line from the application parameters
-#include "otbWrapperOutputProcessXMLParameter.h"
+#include "otbWrapperOutputXML.h"
 
 using std::string;
 
diff --git a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetOutputProcessXMLParameter.cxx b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetOutputProcessXMLParameter.cxx
deleted file mode 100644
index 42418fb5f174fabaf7aaeb4f4142581b67eafbc3..0000000000000000000000000000000000000000
--- a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetOutputProcessXMLParameter.cxx
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (C) 2005-2019 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 "otbWrapperQtWidgetOutputProcessXMLParameter.h"
-
-#include <otbQtAdapters.h>
-
-namespace otb
-{
-namespace Wrapper
-{
-
-QtWidgetOutputProcessXMLParameter::QtWidgetOutputProcessXMLParameter(OutputProcessXMLParameter* param, QtWidgetModel* m, QWidget * parent)
-: QtWidgetParameterBase(param, m, parent),
-  m_XMLParam(param)
-{
-}
-
-QtWidgetOutputProcessXMLParameter::~QtWidgetOutputProcessXMLParameter()
-{
-}
-
-const QLineEdit*
-QtWidgetOutputProcessXMLParameter
-::GetInput() const
-{
-  return m_Input;
-}
-
-QLineEdit*
-QtWidgetOutputProcessXMLParameter
-::GetInput()
-{
-  return m_Input;
-}
-
-void QtWidgetOutputProcessXMLParameter::DoUpdateGUI()
-{
-  // Update the lineEdit
-  QString text(
-    QFile::decodeName( m_XMLParam->GetFileName() )
-  );
-;
-  if (text != m_Input->text())
-    m_Input->setText(text);
-}
-
-void QtWidgetOutputProcessXMLParameter::DoCreateWidget()
-{
-  // Set up input text edit
-  m_HLayout = new QHBoxLayout;
-  m_HLayout->setSpacing(0);
-  m_HLayout->setContentsMargins(0, 0, 0, 0);
-  m_Input = new QLineEdit(this);
-  m_Input->setToolTip(
-    QString::fromStdString( m_XMLParam->GetDescription() )
-  );
-  connect( m_Input, &QLineEdit::textChanged, this, &QtWidgetOutputProcessXMLParameter::SetFileName );
-  connect( m_Input, &QLineEdit::textChanged, GetModel(), &QtWidgetModel::NotifyUpdate );
-
-  m_HLayout->addWidget(m_Input);
-
-  // Set up input text edit
-  m_Button = new QPushButton(this);
-  m_Button->setText("...");
-  m_Button->setToolTip("Select file...");
-  m_Button->setMaximumWidth(m_Button->width());
-  connect( m_Button, &QPushButton::clicked, this, &QtWidgetOutputProcessXMLParameter::SelectFile );
-  m_HLayout->addWidget(m_Button);
-
-  this->setLayout(m_HLayout);
-}
-
-
-void
-QtWidgetOutputProcessXMLParameter
-::SelectFile()
-{
-  assert( m_Input!=NULL );
-
-  QString filename(
-    otb::GetSaveFilename(
-      this,
-      QString(),
-      m_Input->text(),
-      tr( "XML File (*.xml)" ),
-      NULL )
-  );
-
-  if( filename.isEmpty() )
-    return;
-
-  m_Input->setText( filename );
-}
-
-
-void QtWidgetOutputProcessXMLParameter::SetFileName(const QString& value)
-{
-  // save xml file name
-  m_XMLParam->SetValue(
-    QFile::encodeName( value ).constData()
-  );
-
-  // notify of value change
-  QString key( m_XMLParam->GetKey() );
-  emit ParameterChanged(key);
-
-
-}
-
-}
-}
diff --git a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetParameterFactory.cxx b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetParameterFactory.cxx
index 2f382da98d8ba177b763b3264fae37c5a239f378..2b2ae79bd1add2aee3f4f376ff7d22168626ca09 100644
--- a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetParameterFactory.cxx
+++ b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetParameterFactory.cxx
@@ -33,14 +33,12 @@
 #include "otbWrapperQtWidgetInputFilenameListParameter.h"
 #include "otbWrapperQtWidgetInputImageParameter.h"
 #include "otbWrapperQtWidgetInputImageListParameter.h"
-#include "otbWrapperQtWidgetInputProcessXMLParameter.h"
 #include "otbWrapperQtWidgetInputVectorDataListParameter.h"
 #include "otbWrapperQtWidgetInputVectorDataParameter.h"
 #include "otbWrapperQtWidgetListViewParameter.h"
 #include "otbWrapperQtWidgetModel.h"
 #include "otbWrapperQtWidgetOutputFilenameParameter.h"
 #include "otbWrapperQtWidgetOutputImageParameter.h"
-#include "otbWrapperQtWidgetOutputProcessXMLParameter.h"
 #include "otbWrapperQtWidgetOutputVectorDataParameter.h"
 #include "otbWrapperQtWidgetParameterBase.h"
 #include "otbWrapperQtWidgetParameterGroup.h"
@@ -121,8 +119,6 @@ QtWidgetParameterFactory::CreateQtWidget( Parameter* param, QtWidgetModel* model
   CREATEWIDGET(BoolParameter,          QtWidgetBoolParameter)
   CREATEWIDGET(ParameterGroup,          QtWidgetParameterGroup)
   CREATEWIDGET(RAMParameter,            QtWidgetRAMParameter)
-  CREATEWIDGET(OutputProcessXMLParameter,        QtWidgetOutputProcessXMLParameter)
-  CREATEWIDGET(InputProcessXMLParameter,        QtWidgetInputProcessXMLParameter)
 #undef CREATEWIDGET
 
   if (widget)
diff --git a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetParameterGroup.cxx b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetParameterGroup.cxx
index 5aadbca9ef2e90ef9261442586dc71882302a225..7faea2ce2294065ac3a3b9d331891c9585e4451e 100644
--- a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetParameterGroup.cxx
+++ b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetParameterGroup.cxx
@@ -62,15 +62,9 @@ void QtWidgetParameterGroup::DoCreateWidget()
       {
       ParameterGroup* paramAsGroup = dynamic_cast<ParameterGroup*>(param);
       ChoiceParameter* paramAsChoice = dynamic_cast<ChoiceParameter*>(param);
-      OutputProcessXMLParameter* paramAsInXML = dynamic_cast<OutputProcessXMLParameter*>(param);
-      InputProcessXMLParameter* paramAsOutXML = dynamic_cast<InputProcessXMLParameter*>(param);
 
-      bool paramIsXML = false;
-      if(paramAsInXML != nullptr || paramAsOutXML != nullptr)
-        paramIsXML = true;
-
-      if (paramAsGroup == nullptr && paramAsChoice == nullptr && !paramIsXML)
-        {
+      if (paramAsGroup == nullptr && paramAsChoice == nullptr)
+      {
         // Label (col 1)
         QWidget* label = new QtWidgetParameterLabel( rawParam , this);
         gridLayout->addWidget(label, i, 1);
diff --git a/Modules/Wrappers/SWIG/src/otbApplication.i b/Modules/Wrappers/SWIG/src/otbApplication.i
index 896016f85cd3f57816980e21b683ee351abf3cc2..fbfcdb06a6edf8a272cb0d4b15d5eff2eb1461f2 100644
--- a/Modules/Wrappers/SWIG/src/otbApplication.i
+++ b/Modules/Wrappers/SWIG/src/otbApplication.i
@@ -95,8 +95,6 @@ namespace Wrapper
     ParameterType_Group,
     ParameterType_ListView,
     ParameterType_RAM,
-    ParameterType_OutputProcessXML,
-    ParameterType_InputProcessXML,
     ParameterType_Bool
   } ParameterType;
 
@@ -219,12 +217,16 @@ public:
   int Execute();
   int ExecuteAndWriteOutput();
 
+  void LoadParametersFromXML(const std::string& filename);
+  void SaveParametersToXML(const std::string& filename);
+
 #if SWIGPYTHON
   Logger* GetLogger();
 #endif
   unsigned long itk::Object::AddObserver(const EventObject & event, 
                                           Command * command);
 
+  bool IsDeprecated();
 
 #if SWIGPYTHON
   %extend 
@@ -312,8 +314,6 @@ public:
 
   void FreeRessources();
 
-  itkSetStringMacro(DocName);
-  itkGetStringMacro(DocName);
   itkSetStringMacro(DocLongDescription);
   itkGetStringMacro(DocLongDescription);
   itkSetStringMacro(DocAuthors);
@@ -574,17 +574,12 @@ class ApplicationProxy(object):
   %pythoncode
     {
 
-		def __str__(self):
-			s  = self.GetDocName()
-
 		def GetParameterTypeAsString(self, parameter_type):
 			return {
-				ParameterType_InputProcessXML : 'ParameterType_InputProcessXML',
 				ParameterType_String : 'ParameterType_String',
 				ParameterType_InputFilename : 'ParameterType_InputFilename',
 				ParameterType_OutputImage : 'ParameterType_OutputImage',
 				ParameterType_OutputVectorData : 'ParameterType_OutputVectorData',
-				ParameterType_OutputProcessXML : 'ParameterType_OutputProcessXML',
 				ParameterType_OutputFilename : 'ParameterType_OutputFilename',
 				ParameterType_Directory : 'ParameterType_Directory',
 				ParameterType_InputImage : 'ParameterType_InputImage',
@@ -604,7 +599,7 @@ class ApplicationProxy(object):
 			}.get(parameter_type, 'ParameterType_UNKNOWN')
 
 		def __str__(self):
-			s  = self.GetDocName()
+			s  = self.GetName()
 			s += '\n'
 			s += self.GetDocLongDescription()
 			return s
@@ -615,10 +610,10 @@ class ApplicationProxy(object):
 
 		def SetParameterValue(self, paramKey, value):
 			paramType = self.GetParameterType(paramKey)
-			if paramType in [ParameterType_InputProcessXML, ParameterType_RAM,
+			if paramType in [ParameterType_RAM,
 											 ParameterType_String, ParameterType_InputFilename,
 											 ParameterType_OutputImage, ParameterType_OutputVectorData,
-											 ParameterType_OutputProcessXML, ParameterType_OutputFilename,
+											 ParameterType_OutputFilename,
 											 ParameterType_Directory, ParameterType_InputImage,
 											 ParameterType_InputVectorData]:
 			  return self.SetParameterString(paramKey, value)
@@ -649,10 +644,10 @@ class ApplicationProxy(object):
 
 		def GetParameterValue(self, paramKey):
 			paramType = self.GetParameterType(paramKey)
-			if paramType in [ParameterType_InputProcessXML,
+			if paramType in [
 											 ParameterType_String, ParameterType_InputFilename,
 											 ParameterType_OutputImage, ParameterType_OutputVectorData,
-											 ParameterType_OutputProcessXML, ParameterType_OutputFilename,
+											 ParameterType_OutputFilename,
 											 ParameterType_Directory, ParameterType_InputImage,
 											 ParameterType_InputVectorData]:
 			  return self.GetParameterString(paramKey)
@@ -906,6 +901,8 @@ public:
         application = _otbApplication.Registry_CreateApplicationWithoutLogger(name)
         if application is not None:
             application.SetupLogger()
+            if application.IsDeprecated():
+                application.GetLogger().Warning("This application is deprecated and will be removed in a future OTB release")
         return application
   }
   #else
diff --git a/Modules/Wrappers/SWIG/src/otbPythonLogOutput.i b/Modules/Wrappers/SWIG/src/otbPythonLogOutput.i
index 4bd7852b2ee7540e8cacb172ecbca7ba2d376ffa..748c8bfef4820b6bd9a04c6d19d8c57f61ca7a84 100644
--- a/Modules/Wrappers/SWIG/src/otbPythonLogOutput.i
+++ b/Modules/Wrappers/SWIG/src/otbPythonLogOutput.i
@@ -72,6 +72,15 @@ public:
   virtual void AddLogOutput(itkLogOutput *output);
   static Logger * Instance();
   void ResetOutputs();
+
+  // Wrap message methods so we can print stuff from Python
+  void Debug(std::string const & message);
+  void Info(std::string const & message);
+  void Warning(std::string const & message);
+  void Critical(std::string const & message);
+  void Error(std::string const & message);
+  void Fatal(std::string const & message);
+
 protected:
   Logger();
   virtual ~Logger();
diff --git a/Modules/Wrappers/SWIG/test/python/PythonInXMLTest.py b/Modules/Wrappers/SWIG/test/python/PythonInXMLTest.py
index be223358df88ffa2f417a5c8c320f87b7120400f..70207aaf49acc0655e6213e8e3f3431a45a6944e 100644
--- a/Modules/Wrappers/SWIG/test/python/PythonInXMLTest.py
+++ b/Modules/Wrappers/SWIG/test/python/PythonInXMLTest.py
@@ -26,10 +26,10 @@
 #
 
 def test(otb, argv):
-	app = otb.Registry.CreateApplication('BandMath')
+    app = otb.Registry.CreateApplication('BandMath')
 
-	app.SetParameterString("inxml", argv[1])
-	app.UpdateParameters()
+    app.LoadParametersFromXML(argv[1])
+    #app.UpdateParameters()
 
-	app.SetParameterString("out"  , argv[-1])
-	app.ExecuteAndWriteOutput()
+    app.SetParameterString("out"  , argv[-1])
+    app.ExecuteAndWriteOutput()
diff --git a/Modules/Wrappers/SWIG/test/python/PythonNewStyleParametersTest.py b/Modules/Wrappers/SWIG/test/python/PythonNewStyleParametersTest.py
index d1c0fa45a5e840fe3e1ff3482e39a35f99b29dd3..ea6203a0545a537a4f60bc7a556fd69d947b21d6 100644
--- a/Modules/Wrappers/SWIG/test/python/PythonNewStyleParametersTest.py
+++ b/Modules/Wrappers/SWIG/test/python/PythonNewStyleParametersTest.py
@@ -98,14 +98,6 @@ def test(otb, argv):
 	app.SetParameterString('outputs.mode', 'orthofit')
 	cm_assert(app.OUTPUTS.MODE, 'orthofit')
 
-	#14 - inputxml parameter set
-	app.INXML = argv[3]
-	cm_assert(app.GetParameterString('inxml'), argv[3])
-
-	#15 - outputxml parameter get
-	app.SetParameterString('outxml', 'output.xml')
-	cm_assert("output.xml", app.OUTXML)
-
 	#16 - parameter float get
 	app.SetParameterFloat('elev.default', 5.0)
 	cm_assert(5.0, app.ELEV.DEFAULT)
diff --git a/Modules/Wrappers/SWIG/test/python/PythonOutXMLTest.py b/Modules/Wrappers/SWIG/test/python/PythonOutXMLTest.py
index dcbe45c4a52514521ed50a4ae34df24a5c141e23..dca30937e29c676d209b719fd43750e1547824b3 100644
--- a/Modules/Wrappers/SWIG/test/python/PythonOutXMLTest.py
+++ b/Modules/Wrappers/SWIG/test/python/PythonOutXMLTest.py
@@ -26,17 +26,16 @@
 #
 
 def test(otb, argv):
-	imagelist = argv[1:-2]
-	exp = "cos(im1b1)+im2b1*im3b1-im3b2+ndvi(im3b3, im3b4)"
-	out = argv[-2]
-	outxml = argv[-1]
-	app = otb.Registry.CreateApplication('BandMath')
-	app.SetParameterStringList("il", imagelist, True)
-	app.SetParameterString("out", out, True)
-	app.SetParameterString("exp", exp, True)
-	app.SetParameterString("outxml", outxml, True)
-	app.UpdateParameters()
-#for paramKey in app.GetParametersKeys():
-  #app.GetParameterValue(paramKey)
-  #print app.HasUserValue(paramKey)
-	app.ExecuteAndWriteOutput()
+    imagelist = argv[1:-2]
+    exp = "cos(im1b1)+im2b1*im3b1-im3b2+ndvi(im3b3, im3b4)"
+    out = argv[-2]
+    outxml = argv[-1]
+
+    app = otb.Registry.CreateApplication('BandMath')
+    app.SetParameterStringList("il", imagelist, True)
+    app.SetParameterString("out", out, True)
+    app.SetParameterString("exp", exp, True)
+
+    app.SaveParametersToXML(outxml)
+
+    app.ExecuteAndWriteOutput()
diff --git a/NOTICE b/NOTICE
index 10cc07d9a347054e581a312b95d868cd410b35ea..ece9fc15b3d6f6a430463bfdde6512cb794595ee 100644
--- a/NOTICE
+++ b/NOTICE
@@ -334,20 +334,6 @@ binaries:
     http://www.boost.org/LICENSE_1_0.txt
 
 
-* CMake/UseJava.cmake
-    Copyright 2010-2011 Andreas schneider <asn@redhat.com>
-    Copyright 2010 Ben Boeckel <ben.boeckel@kitware.com>
-    BSD 3-Clause license
-    https://opensource.org/licenses/BSD-3-Clause
-
-
-* CMake/UseJavaClassFilelist.cmake
-* CMake/UseJavaSymlinks.cmake
-    Copyright 2010-2011 Andreas schneider <asn@redhat.com>
-    BSD 3-Clause license
-    https://opensource.org/licenses/BSD-3-Clause
-
-
 * CMake/UseSWIGLocal.cmake
     Copyright 2004-2009 Kitware, Inc.
     Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
diff --git a/Packaging/CMakeLists.txt b/Packaging/CMakeLists.txt
index ca735ac2a31163959094441a3163fc86f3f2a9d3..18b1b9fc8b6526fc428792bf663d1a974a771ee9 100644
--- a/Packaging/CMakeLists.txt
+++ b/Packaging/CMakeLists.txt
@@ -136,7 +136,6 @@ include(cleanup_package)
 include(install_include_dirs)
 include(install_importlibs)
 include(install_python_bindings)
-include(install_java_bindings)
 include(install_share_dirs)
 include(install_cmake_files)
 include(install_qtdev_files)
diff --git a/Packaging/install_java_bindings.cmake b/Packaging/install_java_bindings.cmake
deleted file mode 100644
index 0c9d9358b042a3f16f7f8b1c2441ff8f421ca41e..0000000000000000000000000000000000000000
--- a/Packaging/install_java_bindings.cmake
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-# Copyright (C) 2005-2019 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.
-#
-
-function(install_java_bindings)
-  if(HAVE_JAVA)
-    install(FILES ${SUPERBUILD_INSTALL_DIR}/lib/otb/java/org.otb.application.jar
-      DESTINATION ${PKG_STAGE_DIR}/lib/java
-      )
-  endif()
-endfunction()
diff --git a/SuperBuild/CMake/External_otb.cmake b/SuperBuild/CMake/External_otb.cmake
index 556ff87310f79077eb82dfa548106c40c9cf9cd9..d27d88196847396ba6037414ff4f47413b09bf0a 100644
--- a/SuperBuild/CMake/External_otb.cmake
+++ b/SuperBuild/CMake/External_otb.cmake
@@ -79,7 +79,7 @@ if(OTB_USE_MUPARSERX)
   ADD_SUPERBUILD_CMAKE_VAR(OTB MUPARSERX_LIBRARY)
 endif()
 
-if(OTB_WRAP_PYTHON OR OTB_WRAP_JAVA)
+if(OTB_WRAP_PYTHON)
   ADD_SUPERBUILD_CMAKE_VAR(OTB SWIG_EXECUTABLE)
   ADDTO_DEPENDENCIES_IF_NOT_SYSTEM(OTB SWIG)
 endif()
@@ -207,7 +207,6 @@ ExternalProject_Add(OTB
   -DOTB_USE_OPENMP:BOOL=${OTB_USE_OPENMP}
   -DOTB_USE_GSL:BOOL=${OTB_USE_GSL}
   -DOTB_WRAP_PYTHON:BOOL=${OTB_WRAP_PYTHON}
-  -DOTB_WRAP_JAVA:BOOL=${OTB_WRAP_JAVA}
   -DOTB_USE_MPI:BOOL=${OTB_USE_MPI}
   -DOTB_USE_SPTW:BOOL=${OTB_USE_SPTW}
   -DPYTHON_EXECUTABLE:PATH=${PYTHON_EXECUTABLE}
diff --git a/SuperBuild/CMakeLists.txt b/SuperBuild/CMakeLists.txt
index a4d361d3aecbe6c35fd496837d27b1db35070653..4eaa0f1c4a6a6666564b20a23d582338053dfd00 100644
--- a/SuperBuild/CMakeLists.txt
+++ b/SuperBuild/CMakeLists.txt
@@ -350,7 +350,6 @@ find_path(OTB_DATA_ROOT README-OTB-Data
 
 # SWIG Wrapping
 option(OTB_WRAP_PYTHON "Enable python wrappers for OTB applications (requires SWIG)" ON)
-option(OTB_WRAP_JAVA "Enable java wrappers for OTB applications (requires SWIG)" OFF)
 
 configure_file(${CMAKE_SOURCE_DIR}/CMake/CTestCustom.cmake.in
   ${CMAKE_BINARY_DIR}/CTestCustom.cmake @ONLY)