diff --git a/json_schemas/schema_MultiSlc.json b/json_schemas/schema_MultiSlc.json
new file mode 100644
index 0000000000000000000000000000000000000000..45a21150d10e9eb5dad27fba1e8521a78eed6c45
--- /dev/null
+++ b/json_schemas/schema_MultiSlc.json
@@ -0,0 +1,132 @@
+{    
+    "$schema": "http://json-schema.org/schema#",
+    "title": "JSON SCHEMA for MultiSlc",
+    "description": "JSON organization for the script SAR_MultiSlc.py",
+
+    "type": "object",
+
+    "allOf": [{"required": ["Global", "Pre_Processing", "Metadata_Correction", "DIn_SAR"]}],
+
+    "properties":
+    {
+	"Global": 
+	{
+	    "type": "object",
+	    "properties": 
+	    {
+		"in": 
+		{
+		    "type": "object", 
+		    "required": ["SRTM_Shapefile", "SRTM_Path", "Geoid", "Master_Image", "Start_Date", 
+				"End_Date", "Input_Path"],
+		    "additionalProperties": false,
+		    "properties": {"SRTM_Shapefile": {"type": "string"}, 
+				  "SRTM_Path": {"type": "string"},
+				  "Geoid": {"type": "string"},
+				  "Master_Image": {"type": "string"},
+				  "Start_Date": {"type": "string"},
+				  "End_Date": {"type": "string"},
+				  "Exclude": {"type": "string", "default": "-9999"},
+				  "Input_Path": {"type": "string"}}
+		}, 
+		"out": 
+		{
+		    "type": "object",
+		    "required": ["Output_Path"],
+		    "additionalProperties": false,
+		    "properties": {"Output_Path": {"type": "string"}}
+		},
+		"parameter": 
+		{
+		    "type": "object",
+		    "additionalProperties": false,
+		    "properties": {"clean": {"type": "string", "default": "yes"},
+				  "optram": {"type": "number", "default": 4000}}
+		}
+	    },
+	    "additionalProperties": false,
+	    "required": ["in", "out"]
+	},
+
+        "Pre_Processing": 
+	{
+	    "type": "object",
+	    "properties": 
+	    {
+		"out": 
+		{
+		    "type": "object",
+		    "required": ["doppler_file"],
+		    "additionalProperties": false,
+		    "properties": {"doppler_file": {"type": "string"}}
+		}, 
+		"parameter": 
+		{
+		    "type": "object",
+		    "required": ["ML_gain"],
+		    "additionalProperties": false,
+		    "properties": {"ML_ran": {"type": "number", "default" : 3},
+				   "ML_azi": {"type": "number", "default" : 3},
+				   "ML_gain": {"type": "number"}}
+
+		}
+	    },
+	    "additionalProperties": false,
+	    "required": ["out", "parameter"]
+	},
+	
+        "Metadata_Correction": 
+	{
+	    "type": "object",
+	    "properties": 
+	    {
+		"out": 
+		{
+		    "type": "object",
+		    "required": ["fine_metadata_file"],
+		    "additionalProperties": false,
+		    "properties": {"fine_metadata_file": {"type": "string"}}
+		}, 
+		"parameter": 
+		{
+		    "type": "object",
+		    "required": ["activate", "GridStep_range", "GridStep_azimut"],
+		    "additionalProperties": false,
+		    "properties": {"activate": {"type": "boolean"},
+				   "GridStep_range": {"type": "number"},
+				   "GridStep_azimut": {"type": "number"}}
+
+		}
+	    },
+	    "additionalProperties": false,
+	    "required": ["out", "parameter"]
+	},
+
+        "DIn_SAR": 
+	{
+	    "type": "object",
+	    "properties": 
+	    {
+		"parameter": 
+		{
+		    "type": "object",
+		    "required": ["GridStep_range", "GridStep_azimut", "Grid_Threshold", "Grid_Gap", 
+				 "Interferogram_gain"],
+		    "additionalProperties": false,
+		    "properties": {"GridStep_range": {"type": "number"},
+				   "GridStep_azimut": {"type": "number"},
+				   "Grid_Threshold": {"type": "number"},
+				   "Grid_Gap": {"type": "number"},
+				   "Interferogram_gain": {"type": "number"},
+				   "Activate_Interferogram": {"type": "string", "default": "yes"},
+				   "Activate_Ortho": {"type": "string"},
+				   "Spacingxy": {"type": "number", "default": 0.0001},
+				   "roi": {"type": "string"}
+				  }
+		}
+	    },
+	    "additionalProperties": false,
+	    "required": ["parameter"]
+	}
+    }
+}
diff --git a/json_schemas/schema_MultiSlc_IW.json b/json_schemas/schema_MultiSlc_IW.json
new file mode 100644
index 0000000000000000000000000000000000000000..774f1cd9372bdabfc37e0dd30ae8b562e21549c1
--- /dev/null
+++ b/json_schemas/schema_MultiSlc_IW.json
@@ -0,0 +1,107 @@
+{    
+    "$schema": "http://json-schema.org/schema#",
+    "title": "JSON SCHEMA for MultiSlc",
+    "description": "JSON organization for the script SAR_MultiSlc_IW.py",
+
+    "type": "object",
+
+    "allOf": [{"required": ["Global", "Pre_Processing", "DIn_SAR"]}],
+
+    "properties":
+    {
+	"Global": 
+	{
+	    "type": "object",
+	    "properties": 
+	    {
+		"in": 
+		{
+		    "type": "object", 
+		    "required": ["SRTM_Shapefile", "SRTM_Path", "Geoid", "Master_Image", "Start_Date", 
+				"End_Date", "Input_Path"],
+		    "additionalProperties": false,
+		    "properties": {"SRTM_Shapefile": {"type": "string"}, 
+				  "SRTM_Path": {"type": "string"},
+				  "Geoid": {"type": "string"},
+				  "Master_Image": {"type": "string"},
+				  "Start_Date": {"type": "string"},
+				  "End_Date": {"type": "string"},
+				  "Exclude": {"type": "string", "default": "-9999"},
+				  "Input_Path": {"type": "string"}}
+		}, 
+		"out": 
+		{
+		    "type": "object",
+		    "required": ["Output_Path"],
+		    "additionalProperties": false,
+		    "properties": {"Output_Path": {"type": "string"}}
+		},
+		"parameter": 
+		{
+		    "type": "object",
+		    "additionalProperties": false,
+		    "properties": {"clean": {"type": "string", "default": "yes"},
+				   "burst_index": {"type": "string", "default": "0-8"},
+				  "optram": {"type": "number", "default": 4000}}
+		}
+	    },
+	    "additionalProperties": false,
+	    "required": ["in", "out"]
+	},
+
+        "Pre_Processing": 
+	{
+	    "type": "object",
+	    "properties": 
+	    {
+		"out": 
+		{
+		    "type": "object",
+		    "required": ["doppler_file"],
+		    "additionalProperties": false,
+		    "properties": {"doppler_file": {"type": "string"}}
+		}, 
+		"parameter": 
+		{
+		    "type": "object",
+		    "required": ["ML_gain"],
+		    "additionalProperties": false,
+		    "properties": {"ML_ran": {"type": "number", "default" : 3},
+				   "ML_azi": {"type": "number", "default" : 3},
+				   "ML_gain": {"type": "number"}}
+
+		}
+	    },
+	    "additionalProperties": false,
+	    "required": ["out", "parameter"]
+	},
+
+        "DIn_SAR": 
+	{
+	    "type": "object",
+	    "properties": 
+	    {
+		"parameter": 
+		{
+		    "type": "object",
+		    "required": ["GridStep_range", "GridStep_azimut", "Grid_Threshold", "Grid_Gap", 
+				 "Interferogram_gain"],
+		    "additionalProperties": false,
+		    "properties": {"GridStep_range": {"type": "number"},
+				   "GridStep_azimut": {"type": "number"},
+				   "Grid_Threshold": {"type": "number"},
+				   "Grid_Gap": {"type": "number"},
+				   "Interferogram_gain": {"type": "number"},
+				   "Activate_Interferogram": {"type": "string", "default": "yes"},
+				   "Activate_Ortho": {"type": "string"},
+				   "Spacingxy": {"type": "number", "default": 0.0001},
+				   "roi": {"type": "string"},
+				   "ESD_iter" : {"type": ["integer","string"]}
+				  }
+		}
+	    },
+	    "additionalProperties": false,
+	    "required": ["parameter"]
+	}
+    }
+}
diff --git a/python_src/SAR_MultiSlc.py b/python_src/SAR_MultiSlc.py
index fc893d7fd24fc02ed0487919f0f205960466843d..c3e68d880afe5a1fa61416c90db7ce1650aa2431 100644
--- a/python_src/SAR_MultiSlc.py
+++ b/python_src/SAR_MultiSlc.py
@@ -66,45 +66,6 @@ if __name__ == "__main__":
     parser.add_argument("configfile",
                         help="""input conguration file for the
                         application DiapOTB""")
-    parser.add_argument("-d", "--start_date", dest="start_date",
-                        action="store", help="start date, fmt('20151222')",
-                        default=None)
-    parser.add_argument("-f", "--end_date", dest="end_date", action="store",
-                        help="end date, fmt('20151223')", default=None)
-    parser.add_argument("-m", "--master", dest="master", action="store",
-                        help="master image, fmt (.tiff or .h5)", default=None)
-    parser.add_argument("-e", "--exclude", dest="exclude", nargs="+",
-                        action="store", help=""""excluded date(s) from the time
-                        serie, exemple('20151221 20160114')""", default="-9999")
-    parser.add_argument("-roi", "--roi", dest="roi", nargs="+", action="store",
-                        help=""""Define the lat lng ROI coordinates,
-                        fmt('ulx uly lrx lry'), ex: -roi 2.44115 48.96126
-                        2.44176 48.95927""", default=None)
-    parser.add_argument("-i", "--interferogram", dest="interferogram",
-                        action="store", help=""" Simply write ' -i no ' to
-                        deactivate interferogram output. Activated by default.
-                        Returns: Interferogram.tif""", default="yes")
-    parser.add_argument("-o", "--ortho", dest="ortho",
-                        action="store", help=""" Simply write ' -o yes ' to
-                        activate Orthorectified interferogram output. If activated,
-                        returns: Ortho_Interferogram.tif""", default=None)
-    parser.add_argument("-l", "--light", dest="light", action="store",
-                        help="""" -l no' to deactivate. If activated, returns a
-                        light version: Interferogram.tif + Coregistrated.tif +
-                        Concatenated (deramped, and multilooked) bursts.tif""",
-                        default="yes")
-    parser.add_argument("-ram", "--optram", dest="optram",
-                        action="store", help="""Available RAM (mb),
-                        by default value is 4OOO""",
-                        default="4000")
-    parser.add_argument("-spacingxy", "--spacingxy", dest="spacingxy",
-                        action="store", help="""Set the spatial resolution 
-                        for OrthoRectification in degrees,
-                        Default value is 0.0001""",
-                        default="0.0001") 
-    parser.add_argument("-ml", "--multilook", dest="multi", nargs="+", action="store",
-                        help=""""Set the range and azimuth (in this order) you want 
-                        for the multilook. Default is 3 3""", default='3' '3')
     args = parser.parse_args()
 
     print(args.configfile)
@@ -112,61 +73,63 @@ if __name__ == "__main__":
     func_utils.init_logger()
 
     # ====== Read and Load the configuration file
-    dataConfig = func_utils.load_configfile(args.configfile)
+    dataConfig = func_utils.load_configfile(args.configfile, mode="multi_S1")
+
+    # ====== Get dictionaries
+    dict_Global = dataConfig['Global']
+    dict_PreProcessing = dataConfig['Pre_Processing']
+    dict_Metadata_Correction = dataConfig['Metadata_Correction']
+    dict_DInSAR = dataConfig['DIn_SAR']
 
     # ====== Check extension (if .h5 => HDF5 file => Cosmo Sensor)
-    master_ext = args.master.split(".")[-1:]
+    master_ext = dict_Global['in']['Master_Image'].split(".")[-1:]
 
-    # =================================
-    # Get elements from users arguments
-    # =================================
+    # ====== Get elements from configuration file
+    # ====== Global
+    srtm_shapefile = dict_Global['in']['SRTM_Shapefile']
+    hgts_path = dict_Global['in']['SRTM_Path']
+    geoid_path = dict_Global['in']['Geoid']
+
+    output_dir = dict_Global['out']['Output_Path']
 
-    # ====== Set the variables names
-    iso_start, iso_end = func_utils.argDates_to_isoDates(args.start_date, args.end_date)
-    start_time = int(args.start_date)
-    end_time = int(args.end_date)
-    master_Image_base = args.master
+    if not os.path.exists(output_dir):
+        print("The output directory does not exist and will be created")
+        os.makedirs(output_dir)
+    else :
+        print("The output directory exists. Some files can be overwritten")
+
+    iso_start, iso_end = func_utils.argDates_to_isoDates(dict_Global['in']['Start_Date'], dict_Global['in']['End_Date'])
+    start_time = int(dict_Global['in']['Start_Date'])
+    end_time = int(dict_Global['in']['End_Date'])
+    master_Image_base = dict_Global['in']['Master_Image']
     master_Image = "" 
     pol = ""
-    spacingxy = args.spacingxy
-    exclude = args.exclude
-    roi = args.roi
-    light_version = args.light
+    exclude = "-9999"
+    if 'Exclude' in dict_Global['in']:
+        exclude = dict_Global['in']['Exclude']
     relative_orbit = ""
     manifest = ""
+    light_version = "yes"
+    ram = 4000
+    if 'parameter' in dict_Global: 
+        if 'optram' in dict_Global['parameter']:
+            ram =  dict_Global['parameter']['optram']
+        if 'clean' in dict_Global['parameter']:
+            light_version = dict_Global['parameter']['clean']
+    light_version = func_utils.str2bool(light_version)
 
     if master_ext[0] == "h5" : # Cosmo case
-        master_Image = func_utils.get_imgFromDir(args.master)
+        master_Image = func_utils.get_imgFromDir(dict_Global['in']['Master_Image'], dict_Global['in']['Input_Path'])
         master_date = master_Image_base.split("_")[8][:8]
         pol = master_Image_base.split("_")[5]
         
     else : #S1 SM case
-        master_Image = func_utils.get_imgFromSAFE(args.master)
+        master_Image = func_utils.get_imgFromSAFE(dict_Global['in']['Master_Image'], dict_Global['in']['Input_Path'])
         master_date = master_Image_base.split("-")[4].split("t")[0]
         pol = master_Image_base.split("-")[3]
         manifest = master_Image.split("measurement")[0]+"/manifest.safe"
         relative_orbit = func_utils.get_relative_orbit(manifest)
 
-    version_interferogram = args.interferogram
-    ortho_interferogram = args.ortho
-    if roi:
-        ortho_interferogram = "yes"
-        print("ortho_interferogram", ortho_interferogram)
-    ram = args.optram
-    rng,azi = args.multi
-
-    # ====== Get dictionaries
-    dict_Global = dataConfig['Global']
-    dict_PreProcessing = dataConfig['Pre_Processing']
-    dict_Metadata_Correction = dataConfig['Metadata_Correction']
-    dict_DInSAR = dataConfig['DIn_SAR']
-
-    # ====== Get elements from configuration file
-    # ====== Global
-    srtm_shapefile = dict_Global['in']['SRTMShapefile']
-    hgts_path = dict_Global['in']['Datalake']
-    geoid_path = dict_Global['in']['Geoid']
-
     satellite = "default"
     mode = "default"
 
@@ -175,6 +138,12 @@ if __name__ == "__main__":
         mode = dict_Global['sensor']['mode']
 
     # ====== Pre_Processing
+    rng = 3
+    azi = 3
+    if "ML_ran" in dict_PreProcessing['parameter']:
+        rng = dict_PreProcessing['parameter'].get('ML_ran')
+    if "ML_azi" in dict_PreProcessing['parameter']:
+        azi = dict_PreProcessing['parameter'].get('ML_azi')
     ml_range = int(rng)
     ml_azimut = int(azi)
     ml_gain = dict_PreProcessing['parameter']['ML_gain']
@@ -192,13 +161,23 @@ if __name__ == "__main__":
     fine_metadata_file = dict_Metadata_Correction['out']['fine_metadata_file']
 
     # ====== DIn_SAR
+    spacingxy = 0.0001
+    if "Spacingxy" in dict_DInSAR['parameter']:
+        spacingxy = dict_DInSAR['parameter']['Spacingxy']
+    roi = None
+    if 'roi' in dict_DInSAR['parameter']:
+        roi = dict_DInSAR['parameter']['roi']
+    version_interferogram = dict_DInSAR['parameter']['Activate_Interferogram']
+    ortho_interferogram = None
+    if 'Activate_Ortho' in dict_DInSAR['parameter']:
+        ortho_interferogram = dict_DInSAR['parameter']['Activate_Ortho']
+    if roi:
+        ortho_interferogram = "yes"
+        print("ortho_interferogram", ortho_interferogram)
     geoGrid_gridstep_range = dict_DInSAR['parameter']['GridStep_range']
     geoGrid_gridstep_azimut = dict_DInSAR['parameter']['GridStep_azimut']
     geoGrid_threshold = dict_DInSAR['parameter']['Grid_Threshold']
-    if not master_ext[0] == "h5":
-        geoGrid_gap = dict_DInSAR['parameter']['Grid_Gap_S1']
-    else:
-        geoGrid_gap = dict_DInSAR['parameter']['Grid_Gap_Co']
+    geoGrid_gap = dict_DInSAR['parameter']['Grid_Gap']
     ml_geoGrid_range = ml_range
     ml_geoGrid_azimut = ml_azimut
     gain_interfero = dict_DInSAR['parameter']['Interferogram_gain']
@@ -213,14 +192,15 @@ if __name__ == "__main__":
     func_utils.check_ifExist(master_Image)
 
     # ====== Create global folder with starting and ending dates + master date
-    output_glob = "./output_{}_to_{}_m_{}".format(start_time, end_time,
-                                                  master_date)
+    output_glob = "{}/output_{}_to_{}_m_{}".format(output_dir, start_time, 
+                                                   end_time, master_date)
     if not os.path.exists(output_glob):
         os.makedirs(output_glob)
 
     # ====== Create Digital Elevation Model
     dem, target_dir = func_utils.build_virutal_raster(master_Image, start_time, end_time,
-                                                      master_date, srtm_shapefile, hgts_path)
+                                                      master_date, srtm_shapefile, hgts_path,
+                                                      output_dir)
     print("\n Removing master_image_envelope shp files...\n")
     for i in os.listdir(target_dir):
         if i.startswith("master_envelope"):
@@ -233,11 +213,22 @@ if __name__ == "__main__":
     
     # Recap of input parameter into info.log
     func_utils.log(logging.INFO, "########### Input Parameters for the current execution ############## ")
+    # Global
     func_utils.log(logging.INFO, " Global : ")
     func_utils.log(logging.INFO, "srtm_shapefile : {param}".format(param=srtm_shapefile))
     func_utils.log(logging.INFO, "hgts_path : {param}".format(param=hgts_path))
     func_utils.log(logging.INFO, "geoid_path : {param}".format(param=geoid_path))
-
+    func_utils.log(logging.INFO, "Input_Path : {param}".format(param=dict_Global['in']['Input_Path']))
+    func_utils.log(logging.INFO, "Start_Date : {param}".format(param=start_time))
+    func_utils.log(logging.INFO, "End_Date : {param}".format(param=end_time))
+    func_utils.log(logging.INFO, "Master_Image : {param}".format(param=master_Image_base))
+    func_utils.log(logging.INFO, "Exclude : {param}".format(param=exclude))
+    func_utils.log(logging.INFO, "clean : {param}".format(param=light_version))
+    func_utils.log(logging.INFO, "optram : {param}".format(param=ram))
+    func_utils.log(logging.INFO, "satellite : {param}".format(param=satellite))
+    func_utils.log(logging.INFO, "mode : {param}".format(param=mode))
+
+    # Pre_Processing
     func_utils.log(logging.INFO, " Pre_Processing : ")
     func_utils.log(logging.INFO, "ml_range : {param}".format(param=ml_range))
     func_utils.log(logging.INFO, "ml_azimut : {param}".format(param=ml_azimut))
@@ -252,13 +243,17 @@ if __name__ == "__main__":
     func_utils.log(logging.INFO, "ml_geoGrid_range : {param}".format(param=ml_geoGrid_range))
     func_utils.log(logging.INFO, "ml_geoGrid_azimut : {param}".format(param=ml_geoGrid_azimut))
     func_utils.log(logging.INFO, "gain_interfero : {param}".format(param=gain_interfero))
+    func_utils.log(logging.INFO, "Spacingxy : {param}".format(param=spacingxy))
+    func_utils.log(logging.INFO, "roi : {param}".format(param=roi))
+    func_utils.log(logging.INFO, "Activate_Interferogram : {param}".format(param=version_interferogram))
+    func_utils.log(logging.INFO, "Activate_Ortho : {param}".format(param=ortho_interferogram))
 
     # =============================
     # Get the elements from os.dirs
     # =============================
 
     # ====== Get the list of GTiff corresponding to dates
-    tiff_list = func_utils.get_AllTiff(pol=pol, ext=master_ext[0])
+    tiff_list = func_utils.get_AllTiff(pol=pol, ext=master_ext[0], searchDir=dict_Global["in"]["Input_Path"])
     tiff_dates = func_utils.get_Tiff_WithDates(start_time, end_time, exclude, tiff_list, master_ext[0])
     counter = 0
 
@@ -268,9 +263,9 @@ if __name__ == "__main__":
         slave_Image_base = i
         slave_Image = ""
         if not master_ext[0] == "h5" :
-            slave_Image = func_utils.get_imgFromSAFE(slave_Image_base)
+            slave_Image = func_utils.get_imgFromSAFE(slave_Image_base, searchDir=dict_Global["in"]["Input_Path"])
         else :
-            slave_Image = func_utils.get_imgFromDir(slave_Image_base)
+            slave_Image = func_utils.get_imgFromDir(slave_Image_base, searchDir=dict_Global["in"]["Input_Path"])
         slave_date = func_utils.get_Date(i, master_ext[0])
         counter += 1
         output_dir = output_glob + "/{}_m_{}_s".format(master_date, slave_date)
@@ -550,7 +545,7 @@ if __name__ == "__main__":
             func_utils.silentremove(output_dir, interf_roi)
 
 
-        if light_version == "yes":
+        if light_version is True:
             func_utils.log(logging.INFO, "\n Removing files for light version \n")
             func_utils.silentremove(output_dir, dop_file)
             func_utils.silentremove(output_dir, demProj_Slave)
@@ -565,7 +560,7 @@ if __name__ == "__main__":
             func_utils.silentremove(output_dir, i_file)
 
 
-    if light_version == "yes":
+    if light_version is True:
         func_utils.log(logging.INFO, "\n Removing files for light version \n")
         if os.path.exists(os.path.join(master_data_dir, dop_file)):
             func_utils.silentremove(master_data_dir, dop_file)
diff --git a/python_src/SAR_MultiSlc_IW.py b/python_src/SAR_MultiSlc_IW.py
index 9fc4e2ed807a536f937e1679ad86d8b1871164c7..2ed1cb87481e182a9a71f44f4cebde54251b5fd3 100644
--- a/python_src/SAR_MultiSlc_IW.py
+++ b/python_src/SAR_MultiSlc_IW.py
@@ -69,84 +69,14 @@ if __name__ == "__main__":
     parser.add_argument("configfile",
                         help="""input conguration file for the
                         application DiapOTB""")
-    parser.add_argument("-d", "--start_date", dest="start_date",
-                        action="store", help="start date, fmt('20151222')",
-                        default=None)
-    parser.add_argument("-f", "--end_date", dest="end_date", action="store",
-                        help="end date, fmt('20151223')", default=None)
-    parser.add_argument("-m", "--master", dest="master", action="store",
-                        help="master image, fmt (.tiff or .h5)", default=None)
-    parser.add_argument("-e", "--exclude", dest="exclude", nargs="+",
-                        action="store", help=""""excluded date(s) from the time
-                        serie, exemple('20151221 20160114')""", default="-9999")
-    parser.add_argument("-b", "--burst", dest="burst", action="store",
-                        help="Select the bursts you want to work on, fmt(0-4)",
-                        default="0-8")
-    parser.add_argument("-roi", "--roi", dest="roi", nargs="+", action="store",
-                        help=""""Define the lng lat ROI coordinates,
-                        fmt('ulx uly lrx lry'), ex: -roi 2.44115 48.96126
-                        2.44176 48.95927""", default=None)
-    parser.add_argument("-i", "--interferogram", dest="interferogram",
-                        action="store", help=""" Simply write ' -i no ' to
-                        deactivate interferogram output. Activated by default.
-                        Returns: Interferogram.tif""", default="yes")
-    parser.add_argument("-o", "--ortho", dest="ortho",
-                        action="store", help=""" Simply write ' -o yes ' to
-                        activate Orthorectified interferogram output. If activated,
-                        returns: Ortho_Interferogram.tif""", default=None)
-    parser.add_argument("-l", "--light", dest="light", action="store",
-                        help="""" -l no' to deactivate. If activated, returns a
-                        light version: Interferogram.tif + Coregistrated.tif +
-                        multilook.tif""", default="yes")
-    parser.add_argument("-ram", "--optram", dest="optram",
-                        action="store", help="""Available RAM (mb), 
-                        by default value is 4OOO""",
-                        default="4000")
-    parser.add_argument("-spacingxy", "--spacingxy", dest="spacingxy",
-                        action="store", help="""Set the spatial resolution 
-                        for OrthoRectification in degrees,
-                        Default value is 0.0001""",
-                        default="0.0001") 
-    parser.add_argument("-ml", "--multilook", dest="multi", nargs="+", action="store",
-                        help=""""Set the range and azimuth (in this order) you want 
-                        for the multilook. Default is 3 3""", default='3' '3')
     args = parser.parse_args()
 
     print(args.configfile)
     
     func_utils.init_logger()
 
-    dataConfig = func_utils.load_configfile(args.configfile, "S1_IW")
+    dataConfig = func_utils.load_configfile(args.configfile, "multi_SW")
                 
-    # =================================
-    # Get elements from user's arguments
-    # =================================
-
-    # ====== Set the variables names
-    iso_start, iso_end = func_utils.argDates_to_isoDates(args.start_date, args.end_date)
-    start_time = int(args.start_date)
-    end_time = int(args.end_date)
-    master_Image_base = args.master
-    master_Image = func_utils.get_imgFromSAFE(args.master)
-    master_date = master_Image_base.split("-")[4].split("t")[0]
-    pol = master_Image_base.split("-")[3]
-    iw = master_Image_base.split("-")[1]
-    burst_index = args.burst
-    print(burst_index)###############################################################################
-    exclude = args.exclude
-    version_interferogram = args.interferogram
-    light_version = args.light
-    manifest = master_Image.split("measurement")[0]+"/manifest.safe"
-    relative_orbit = func_utils.get_relative_orbit(manifest)
-    ortho_interferogram = args.ortho
-    roi = args.roi
-    if roi:
-        ortho_interferogram = "yes"
-        print("ortho_interferogram", ortho_interferogram)
-    ram = args.optram
-    spacingxy = args.spacingxy
-    rng,azi = args.multi
-
     # ====================================
     # Get elements from configuration file
     # ====================================
@@ -156,15 +86,55 @@ if __name__ == "__main__":
     dict_PreProcessing = dataConfig['Pre_Processing']
     dict_Ground = dataConfig['Ground']
     dict_DInSAR = dataConfig['DIn_SAR']
-   
          
     # ====== Get elements from dictionaries
     # ====== Global
-    srtm_shapefile = dict_Global['in']['SRTMShapefile']
-    hgts_path = dict_Global['in']['Datalake']
+    srtm_shapefile = dict_Global['in']['SRTM_Shapefile']
+    hgts_path = dict_Global['in']['SRTM_Path']
     geoid_path = dict_Global['in']['Geoid']
 
+    output_dir = dict_Global['out']['Output_Path']
+
+    if not os.path.exists(output_dir):
+        print("The output directory does not exist and will be created")
+        os.makedirs(output_dir)
+    else :
+        print("The output directory exists. Some files can be overwritten")
+
+    # ====== Set the variables names
+    iso_start, iso_end = func_utils.argDates_to_isoDates(dict_Global['in']['Start_Date'], dict_Global['in']['End_Date'])
+    start_time = int(dict_Global['in']['Start_Date'])
+    end_time = int(dict_Global['in']['End_Date'])
+    master_Image_base = dict_Global['in']['Master_Image']
+    master_Image = func_utils.get_imgFromSAFE(dict_Global['in']['Master_Image'], dict_Global['in']['Input_Path'])
+    master_date = master_Image_base.split("-")[4].split("t")[0]
+    pol = master_Image_base.split("-")[3]
+    iw = master_Image_base.split("-")[1]
+    burst_index = "0-8"
+    ram = 4000
+    light_version = "yes"
+    if 'parameter' in dict_Global: 
+        if 'optram' in dict_Global['parameter']:
+            ram =  dict_Global['parameter']['optram']
+        if 'clean' in dict_Global['parameter']:
+            light_version = dict_Global['parameter']['clean']
+        if 'burst_index' in dict_Global['parameter']:
+            burst_index = dict_Global['parameter']['burst_index']
+    light_version = func_utils.str2bool(light_version)
+    print(burst_index)###############################################################################
+    exclude = "-9999"
+    if 'Exclude' in dict_Global['in']:
+        exclude = dict_Global['in']['Exclude']
+    manifest = master_Image.split("measurement")[0]+"/manifest.safe"
+    relative_orbit = func_utils.get_relative_orbit(manifest)
+
     # ====== Pre_Processing
+    rng = 3
+    azi = 3
+    if "ML_ran" in dict_PreProcessing['parameter']:
+        rng = dict_PreProcessing['parameter'].get('ML_ran')
+    if "ML_azi" in dict_PreProcessing['parameter']:
+        azi = dict_PreProcessing['parameter'].get('ML_azi')
     ml_range = int(rng)
     ml_azimut = int(azi)
     ml_gain = dict_PreProcessing['parameter']['ML_gain']
@@ -173,6 +143,21 @@ if __name__ == "__main__":
     # ====== Ground
 
     # ====== DIn_SAR
+    version_interferogram = "yes"
+    if "Activate_Interferogram" in dict_DInSAR['parameter']:
+        version_interferogram = dict_DInSAR['parameter']['Activate_Interferogram']
+    ortho_interferogram = None
+    if 'Activate_Ortho' in dict_DInSAR['parameter']:
+        ortho_interferogram = dict_DInSAR['parameter']['Activate_Ortho']
+    roi = None
+    if 'roi' in dict_DInSAR['parameter']:
+        roi = dict_DInSAR['parameter']['roi']
+    if roi:
+        ortho_interferogram = "yes"
+        print("ortho_interferogram", ortho_interferogram)
+    spacingxy = 0.0001
+    if "Spacingxy" in dict_DInSAR['parameter']:
+        spacingxy = dict_DInSAR['parameter']['Spacingxy']
     geoGrid_gridstep_range = dict_DInSAR['parameter']['GridStep_range']
     geoGrid_gridstep_azimut = dict_DInSAR['parameter']['GridStep_azimut']
     geoGrid_threshold = dict_DInSAR['parameter']['Grid_Threshold']
@@ -180,6 +165,10 @@ if __name__ == "__main__":
     ml_geoGrid_range = int(rng)
     ml_geoGrid_azimut = int(azi)
     gain_interfero = dict_DInSAR['parameter']['Interferogram_gain']
+    esd_NbIter = 0
+    esd_AutoMode = "none"
+    if 'ESD_iter' in dict_DInSAR['parameter']:
+        esd_NbIter, esd_AutoMode = dict_DInSAR['parameter']['ESD_iter']
 
     # ====== Check Threshold
     if (geoGrid_threshold < 0) or (geoGrid_threshold > 1) :
@@ -196,8 +185,8 @@ if __name__ == "__main__":
     print("from check regex",firstBurst, lastBurst)###########################################################
     
     # ====== Create global folder with starting and ending dates + master date
-    output_glob = "./output_{}_to_{}_m_{}".format(start_time, end_time,
-                                                  master_date)
+    output_glob = "{}/output_{}_to_{}_m_{}".format(output_dir, start_time, 
+                                                   end_time, master_date)
     if os.path.exists(output_glob):
         shutil.rmtree(output_glob)
     if not os.path.exists(output_glob):
@@ -205,7 +194,8 @@ if __name__ == "__main__":
         
     # ====== Create Digital Elevation Model
     dem, target_dir = func_utils.build_virutal_raster(master_Image, start_time, end_time,
-                                                      master_date, srtm_shapefile, hgts_path)
+                                                      master_date, srtm_shapefile, hgts_path,
+                                                      output_dir)
     print("\n Removing master_image_envelope shp files...\n")
     for i in os.listdir(target_dir):
         if i.startswith("master_envelope"):
@@ -219,9 +209,17 @@ if __name__ == "__main__":
     # Recap of input parameter into info.log
     func_utils.log(logging.INFO, "########### Input Parameters for the current execution ############## ")
     func_utils.log(logging.INFO, " Global : ")
+    func_utils.log(logging.INFO, "Input_Path :  {param}".format(param=dict_Global['in']['Input_Path']))
+    func_utils.log(logging.INFO, "Master_Image : {param}".format(param=master_Image_base))
+    func_utils.log(logging.INFO, "Start_Date : {param}".format(param=start_time))
+    func_utils.log(logging.INFO, "End_Date : {param}".format(param=end_time))
     func_utils.log(logging.INFO, "srtm_shapefile : {param}".format(param=srtm_shapefile))
     func_utils.log(logging.INFO, "hgts_path : {param}".format(param=hgts_path))
     func_utils.log(logging.INFO, "geoid_path : {param}".format(param=geoid_path))
+    func_utils.log(logging.INFO, "optram : {param}".format(param=ram))
+    func_utils.log(logging.INFO, "clean : {param}".format(param=light_version))
+    func_utils.log(logging.INFO, "burst_index : {param}".format(param=burst_index))
+    func_utils.log(logging.INFO, "Exclude : {param}".format(param=exclude))
 
     func_utils.log(logging.INFO, " Pre_Processing : ")
     func_utils.log(logging.INFO, "ml_range : {param}".format(param=ml_range))
@@ -237,20 +235,25 @@ if __name__ == "__main__":
     func_utils.log(logging.INFO, "ml_geoGrid_range : {param}".format(param=ml_geoGrid_range))
     func_utils.log(logging.INFO, "ml_geoGrid_azimut : {param}".format(param=ml_geoGrid_azimut))
     func_utils.log(logging.INFO, "gain_interfero : {param}".format(param=gain_interfero))
-    
+    func_utils.log(logging.INFO, "Activate_Interferogram : {param}".format(param=version_interferogram))
+    func_utils.log(logging.INFO, "Activate_Ortho : {param}".format(param=ortho_interferogram))
+    func_utils.log(logging.INFO, "roi : {param}".format(param=roi))
+    func_utils.log(logging.INFO, "Spacingxy : {param}".format(param=spacingxy))
+    func_utils.log(logging.INFO, "esd_NbIter : {param}".format(param=esd_NbIter))
+    func_utils.log(logging.INFO, "esd_AutoMode : {param}".format(param=esd_AutoMode))    
 
     # ============================
     # Get the elements from os.dirs
     # ============================
 
-    tiff_list = func_utils.get_AllTiff(pol, iw)
+    tiff_list = func_utils.get_AllTiff(pol, iw, searchDir=dict_Global["in"]["Input_Path"])
     tiff_dates = func_utils.get_Tiff_WithDates(start_time, end_time, exclude, tiff_list)
     counter = 0
 
     for i in (i for i in tiff_dates if i != master_Image_base):
         total_slaves = len(tiff_dates)-1
         slave_Image_base = i
-        slave_Image = func_utils.get_imgFromSAFE(slave_Image_base)
+        slave_Image = func_utils.get_imgFromSAFE(slave_Image_base, searchDir=dict_Global["in"]["Input_Path"])
         slave_date = func_utils.get_Date(i)
         counter += 1
         output_dir = output_glob + "/{}_m_{}_s".format(master_date, slave_date)
@@ -370,7 +373,7 @@ if __name__ == "__main__":
 
 
             # Master deramp
-            if light_version == "no":
+            if light_version is not True:
                 masterDeramp = os.path.splitext(master_Image_base)[0]+"_deramp.tif"
                 Con_masterDeramp = os.path.join(master_data_dir, masterDeramp)
                 diapOTBApp.concatenate(Deramp_BurstToConcatenateM, master_Image, firstBurst, Con_masterDeramp)
@@ -391,7 +394,7 @@ if __name__ == "__main__":
 
         # ###### Concatenating and georeferencing bursts ###### #
         # Slave Deramp
-        if light_version == "no":
+        if light_version is not True:
             Con_slaveDeramp = os.path.splitext(master_Image_base)[0] + "_deramp.tif"
             diapOTBApp.concatenate(Deramp_BurstToConcatenateS, slave_Image, firstBurst, Con_slaveDeramp)
 
@@ -447,8 +450,8 @@ if __name__ == "__main__":
         param['doppler0'] = dop0Slave
         param['gain_interfero'] = gain_interfero
         param['advantage'] = "projection" # By default projection
-        param['esd_NbIter'] = 0 
-        param['esd_AutoMode']  = "none"
+        param['esd_NbIter'] = esd_NbIter
+        param['esd_AutoMode']  = esd_AutoMode
         param['with_interferogram']  = version_interferogram
         param['with_concatenate']  = "no"
 
diff --git a/python_src/utils/func_utils.py b/python_src/utils/func_utils.py
index 21b869c133a03869ef3df767d8c75fae97e3a246..62efd84defb6b707482d358b95405b7ec16b91e8 100644
--- a/python_src/utils/func_utils.py
+++ b/python_src/utils/func_utils.py
@@ -156,9 +156,14 @@ def load_configfile(configfile, mode="Others"):
     schema_json = "schema_S1SM.json"  
     if mode == "S1_IW":
         schema_json = "schema_S1IW.json"
+    elif mode == "multi_S1":
+        schema_json = "schema_MultiSlc.json"
+    elif mode == "multi_SW":
+        schema_json = "schema_MultiSlc_IW.json"
 
     # Load schema (into DiapOTB install)
     diapOTB_install = os.getenv('DIAPOTB_INSTALL')
+
     if diapOTB_install is not None and os.path.exists(diapOTB_install):
         schemas_path = os.path.join(diapOTB_install, "json_schemas")
         if os.path.exists(schemas_path):
@@ -221,27 +226,25 @@ def getDEMInformation(dem):
     
 
 ### Functions for image/file selection
-def get_imgFromSAFE(arg):
+def get_imgFromSAFE(arg, searchDir="."):
     """
         Retrive selected image from a SAFE directory
     """
     img = []
-    for root, dirs, files in os.walk("."):
+    for root, dirs, files in os.walk(searchDir):
         for i in (i for i in files if i == arg):
-            img.append(os.path.join(os.getcwd()+root.split(".")[1] +
-                                            ".SAFE/measurement/"+(i)))
+            img.append(os.path.join(root, i))
             img = str("".join(img))
             return img
 
-def get_imgFromDir(arg):
+def get_imgFromDir(arg, searchDir="."):
     """
         Retrive selected image from a directory (for Cosmo sensor)
     """
     img = []
-    for root, dirs, files in os.walk("."):
+    for root, dirs, files in os.walk(searchDir):
         for i in (i for i in files if i == arg):
-            img.append(os.path.join(os.getcwd()+root.split(".")[1] +
-                                             "/"+(i)))
+            img.append(os.path.join(root, i))
             img = str("".join(img))
             return img
 
@@ -286,27 +289,27 @@ def check_srtm_coverage(inSHP_Geometry, SRTM):
     needed_srtm_tiles = srtm_tiles
     return needed_srtm_tiles
 
-def get_AllTiff(pol, iw="", ext=""):
+def get_AllTiff(pol, iw="", ext="", searchDir="."):
     """
         Get all tiff from an input directory
     """
     TiffList = []
 
     if not iw == "" :
-        for root, dirs, files in os.walk("."):
+        for root, dirs, files in os.walk(searchDir):
             for i in (i for i in files):  # if i != inTIF):
                 if i.endswith(".tiff") and pol == i.split("-")[3]:
                     if iw == i.split("-")[1]:
                         TiffList.append(i)
     else :
         if ext == "h5":
-            for root, dirs, files in os.walk("."):
+            for root, dirs, files in os.walk(searchDir):
                 for i in (i for i in files):  # if i != inTIF):
                     if i.endswith(".h5") and pol == i.split("_")[5]:
                         TiffList.append(i)
 
         if not ext == "h5":
-            for root, dirs, files in os.walk("."):
+            for root, dirs, files in os.walk(searchDir):
                 for i in (i for i in files):  # if i != inTIF):
                     if i.endswith(".tiff") and pol == i.split("-")[3]:
                         TiffList.append(i)
@@ -359,7 +362,7 @@ def get_relative_orbit(manifest):
     return int(root.find("metadataSection/metadataObject/metadataWrap/xmlData/{http://www.esa.int/safe/sentinel-1.0}orbitReference/{http://www.esa.int/safe/sentinel-1.0}relativeOrbitNumber").text)
 
 def build_virutal_raster(master_Image, start_time, end_time, master_date,
-                         srtm_shapefile, hgts_path):
+                         srtm_shapefile, hgts_path, output_dir="."):
     """
         Build a vrt file corresponding to a dem from hgt (SRTM) files.
         The hgt file are contained into a global path : hgts_path
@@ -377,10 +380,10 @@ def build_virutal_raster(master_Image, start_time, end_time, master_date,
         hgts_tuple.append(hgts_path + hgt)
 
     print("\n Creating virtual raster from intersected hgt files...\n")
-    dem = gdal.BuildVRT("./output_{}_to_{}_m_{}/dem_scene.vrt".format(
-                        start_time, end_time, master_date), hgts_tuple)
-    dem = "./output_{}_to_{}_m_{}/dem_scene.vrt".format(start_time, end_time,
-                                                        master_date)
+    dem = gdal.BuildVRT("{}/output_{}_to_{}_m_{}/dem_scene.vrt".format(
+                        output_dir, start_time, end_time, master_date), hgts_tuple)
+    dem = "{}/output_{}_to_{}_m_{}/dem_scene.vrt".format(output_dir, start_time, 
+                                                         end_time, master_date)
     return dem, target_dir
 
 def argDates_to_isoDates(start_date, end_date):