diff --git a/json_schemas/schema_MultiSlc.json b/json_schemas/schema_MultiSlc.json
index 45a21150d10e9eb5dad27fba1e8521a78eed6c45..94b232ea36e02c7f9a9fa7d94d1e244b8b5d7676 100644
--- a/json_schemas/schema_MultiSlc.json
+++ b/json_schemas/schema_MultiSlc.json
@@ -118,6 +118,8 @@
 				   "Grid_Threshold": {"type": "number"},
 				   "Grid_Gap": {"type": "number"},
 				   "Interferogram_gain": {"type": "number"},
+				   "Interferogram_mlran": {"type": "number"},
+				   "Interferogram_mlazi": {"type": "number"},
 				   "Activate_Interferogram": {"type": "string", "default": "yes"},
 				   "Activate_Ortho": {"type": "string"},
 				   "Spacingxy": {"type": "number", "default": 0.0001},
diff --git a/json_schemas/schema_S1SM.json b/json_schemas/schema_S1SM.json
index e649de737ca723bdd7e2df4b51ef9368f8c5f792..2df1353ed431bb844abf14fccec2ab69e3c2ece2 100644
--- a/json_schemas/schema_S1SM.json
+++ b/json_schemas/schema_S1SM.json
@@ -29,7 +29,7 @@
 		    "required": ["output_dir"],
 		    "additionalProperties": false,
 		    "properties": {"output_dir": {"type": "string"}}
-		}
+		},
 		"sensor": 
 		{
 		    "type": "object",
@@ -113,6 +113,8 @@
 				   "Grid_Threshold": {"type": "number"},
 				   "Grid_Gap": {"type": "number"},
 				   "Interferogram_gain": {"type": "number"},
+				   "Interferogram_mlran": {"type": "number"},
+		                   "Interferogram_mlazi": {"type": "number"},
 				   "Interferogram_ortho": {"type": "boolean"}
 				  }
 		}
diff --git a/python_src/SAR_MultiSlc.py b/python_src/SAR_MultiSlc.py
index 1a0a27114f83cd2867130498fe2e9f5a96ec60e1..fe7d6c901795ba4986d1fe3b43df854aa6733efa 100644
--- a/python_src/SAR_MultiSlc.py
+++ b/python_src/SAR_MultiSlc.py
@@ -182,6 +182,16 @@ if __name__ == "__main__":
     ml_geoGrid_azimut = ml_azimut
     gain_interfero = dict_DInSAR['parameter']['Interferogram_gain']
 
+    ml_interf_range = ml_range
+    ml_interf_azimut = ml_azimut
+    
+    if "Interferogram_mlran" in dict_DInSAR['parameter'] :
+        ml_interf_range = int(dict_DInSAR['parameter']['Interferogram_mlran'])
+    
+    if "Interferogram_mlazi" in dict_DInSAR['parameter'] :
+        ml_interf_azimut = int(dict_DInSAR['parameter']['Interferogram_mlazi'])
+
+
     if (geoGrid_threshold < 0) or (geoGrid_threshold > 1):
         func_utils.log(logging.CRITICAL, "Error, Wrong Threshold for fine deformation grid")
         geoGrid_threshold = 0.3
@@ -253,11 +263,33 @@ 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, "ml_interf_range : {param}".format(param=ml_interf_range))
+    func_utils.log(logging.INFO, "ml_interf_azimut : {param}".format(param=ml_interf_azimut))
     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))
 
+
+    # Retrieve some information about our master image
+    dictKWLMaster = func_utils.getImageKWL(master_Image)
+    number_col = int(dictKWLMaster['number_samples'])
+    number_lines = int(dictKWLMaster['number_lines'])
+    
+    # Check input size (Master size) to protect memory. 
+    if (number_col > 15000 or number_lines > 15000) :
+        
+        intermediate_mlran = int(number_col/15000) + 1
+        intermediate_mlazi = int(number_lines/15000) + 1
+        
+        # Compare ml factor with intermediate
+        if ((intermediate_mlazi*intermediate_mlran) > (ml_range*ml_azimut)) :
+            func_utils.log(logging.CRITICAL, "ML Factors are not appropriate (too low) for these estimations. Please use other factors such as : {iran} x {iazi} \n".format(iran=intermediate_mlran, iazi=intermediate_mlazi))
+    
+            quit()
+
+
+    
     # =============================
     # Get the elements from os.dirs
     # =============================
@@ -458,6 +490,8 @@ if __name__ == "__main__":
         param['ml_range'] = ml_range
         param['ml_geoGrid_azimut'] = ml_geoGrid_azimut
         param['ml_geoGrid_range'] = ml_geoGrid_range
+        param['ml_interf_range'] = ml_interf_range  
+        param['ml_interf_azimut'] = ml_interf_azimut
         param['geoGrid_gridstep_range'] = geoGrid_gridstep_range
         param['geoGrid_gridstep_azimut'] = geoGrid_gridstep_azimut
         param['geoGrid_threshold'] = geoGrid_threshold
diff --git a/python_src/diapOTB.py b/python_src/diapOTB.py
index 2a562a8a71a8d1579dde54e37a723ee54bccea2b..6ce3e15503823b7821aaa13f3a5a10aa559c0f60 100644
--- a/python_src/diapOTB.py
+++ b/python_src/diapOTB.py
@@ -83,8 +83,8 @@ if __name__ == "__main__":
         mode = dict_Global['sensor']['mode']
 
     # Pre_Processing
-    ml_range = dict_PreProcessing['parameter']['ML_range'] 
-    ml_azimut = dict_PreProcessing['parameter']['ML_azimut']
+    ml_range = int(dict_PreProcessing['parameter']['ML_range']) 
+    ml_azimut = int(dict_PreProcessing['parameter']['ML_azimut'])
     ml_gain = dict_PreProcessing['parameter']['ML_gain']
     dop_file = dict_PreProcessing['out']['doppler_file']
 
@@ -107,7 +107,17 @@ if __name__ == "__main__":
     ml_geoGrid_range = ml_range
     ml_geoGrid_azimut = ml_azimut
     gain_interfero = dict_DInSAR['parameter']['Interferogram_gain']
+
+    ml_interf_range = ml_range
+    ml_interf_azimut = ml_azimut
+    
+    if "Interferogram_mlran" in dict_DInSAR['parameter'] :
+        ml_interf_range = int(dict_DInSAR['parameter']['Interferogram_mlran'])
     
+    if "Interferogram_mlazi" in dict_DInSAR['parameter'] :
+        ml_interf_azimut = int(dict_DInSAR['parameter']['Interferogram_mlazi'])
+
+
     if (geoGrid_threshold < 0) or (geoGrid_threshold > 1) :
         func_utils.log(logging.CRITICAL, "Error, Wrong Threshold for fine deformation grid")
 
@@ -162,7 +172,10 @@ 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, "ml_interf_range : {param}".format(param=ml_interf_range))
+    func_utils.log(logging.INFO, "ml_interf_azimut : {param}".format(param=ml_interf_azimut))
+    func_utils.log(logging.INFO, "ml_geoGrid_azimut : {param}".format(param=ml_geoGrid_azimut))
+
 
     func_utils.log(logging.INFO, "########### Input Images for the current execution ############## ")
         
@@ -226,7 +239,24 @@ if __name__ == "__main__":
     func_utils.log(logging.INFO, "slave_Image = {img}".format(img=slave_Image))
     func_utils.log(logging.INFO, "dem : {param}".format(param=dem))
 
-
+    # Retrieve some information about our master image
+    dictKWLMaster = func_utils.getImageKWL(master_Image)
+    number_col = int(dictKWLMaster['number_samples'])
+    number_lines = int(dictKWLMaster['number_lines'])
+    
+    # Check input size (Master size) to protect memory. 
+    if (number_col > 15000 or number_lines > 15000) :
+        
+        intermediate_mlran = int(number_col/15000) + 1
+        intermediate_mlazi = int(number_lines/15000) + 1
+        
+        # Compare ml factor with intermediate
+        if ((intermediate_mlazi*intermediate_mlran) > (ml_range*ml_azimut)) :
+            func_utils.log(logging.CRITICAL, "ML Factors are not appropriate (too low) for these estimations. Please use other factors such as : {iran} x {iazi} \n".format(iran=intermediate_mlran, iazi=intermediate_mlazi))
+    
+            quit()
+        
+        
     func_utils.printOnStd("\n Beginning of DiapOTB processing (S1 SM or Cosmo mode) \n")
     func_utils.log(logging.INFO, "############ Beginning of DiapOTB processing (S1 SM or Cosmo mode) ##############")
 
@@ -316,6 +346,8 @@ if __name__ == "__main__":
     param['ml_range'] = ml_range
     param['ml_geoGrid_azimut'] = ml_geoGrid_azimut
     param['ml_geoGrid_range'] = ml_geoGrid_range
+    param['ml_interf_range'] = ml_interf_range  
+    param['ml_interf_azimut'] = ml_interf_azimut
     param['geoGrid_gridstep_range'] = geoGrid_gridstep_range
     param['geoGrid_gridstep_azimut'] = geoGrid_gridstep_azimut
     param['geoGrid_threshold'] = geoGrid_threshold
diff --git a/python_src/processings/DInSar.py b/python_src/processings/DInSar.py
index 124246d3c8217ffd2565e5d404fdee76d5ea8723..a73fc76f5ba7fb5d664460dcdcc25091e995b54e 100644
--- a/python_src/processings/DInSar.py
+++ b/python_src/processings/DInSar.py
@@ -265,6 +265,16 @@ def gridToInterferogram_Others(dem, master_Image, master_Image_base, slave_Image
     ml_range = param['ml_range']
     ml_geoGrid_azimut = param['ml_geoGrid_azimut']
     ml_geoGrid_range = param['ml_geoGrid_range']
+    
+    ml_interf_range = ml_range
+    if "ml_interf_range" in param :
+        ml_interf_range = param['ml_interf_range']
+    
+    ml_interf_azimut = ml_azimut
+    if "ml_interf_azimut" in param :
+        ml_interf_azimut = param['ml_interf_azimut']
+    
+
     geoGrid_gridstep_range = param['geoGrid_gridstep_range']
     geoGrid_gridstep_azimut = param['geoGrid_gridstep_azimut']    
     geoGrid_threshold = param['geoGrid_threshold']
@@ -292,7 +302,7 @@ def gridToInterferogram_Others(dem, master_Image, master_Image_base, slave_Image
 
     derampApp = partial(diapOTBApp.deramp, gridsteprange=geoGrid_gridstep_range, gridstepazimut=geoGrid_gridstep_azimut, reramp="true", shift="true")
 
-    interferogramApp = partial(diapOTBApp.interferogram, gridsteprange=geoGrid_gridstep_range, gridstepazimut=geoGrid_gridstep_azimut, mlran=ml_range, mlazi=ml_azimut, gain=gain_interfero)
+    interferogramApp = partial(diapOTBApp.interferogram, gridsteprange=geoGrid_gridstep_range, gridstepazimut=geoGrid_gridstep_azimut, mlran=ml_interf_range, mlazi=ml_interf_azimut, gain=gain_interfero)
         
 
     # Empty list