diff --git a/sen2chain/__init__.py b/sen2chain/__init__.py
index 9f9aad6d4e3c151f2651ef0ba8116c5657b32327..68777602428acac244163958a1cafa8fdef54ea0 100644
--- a/sen2chain/__init__.py
+++ b/sen2chain/__init__.py
@@ -63,7 +63,7 @@ from .multi_processing import (
 from .tileset import TileSet
 from .jobs import Jobs, Job
 
-__version__ = "0.7.0"
+__version__ = "v1.01.00"
 __author__ = (
     "Jérémy Commins <jebins@laposte.net> & Impact <pascal.mouquet@ird.fr>"
 )
diff --git a/sen2chain/cloud_mask.py b/sen2chain/cloud_mask.py
index 26ed50b9a2df841425d2c748c8613b984979bd1f..07073afd359c5a50a41ab18caf90e62981a33e7f 100755
--- a/sen2chain/cloud_mask.py
+++ b/sen2chain/cloud_mask.py
@@ -298,6 +298,7 @@ def create_cloud_mask_v2(
 
     out_temp_path = Path(Config().get("temp_path"))
     out_dilate = str(out_temp_path / (out_path.stem + "_tmp_dilate.tif"))
+    out_temp2 = str(out_temp_path / (out_path.stem + "_tmp_dilate_2.tif"))
 
     CLD_seuil = 25
     with rasterio.open(str(cloud_mask)) as cld_src:
@@ -341,6 +342,7 @@ def create_cloud_mask_v2(
 
     # Save to JP2000
     src_ds = gdal.Open(out_dilate)
+    src_ds = gdal.Translate(out_temp2, src_ds, outputType=gdal.GDT_Byte)
     driver = gdal.GetDriverByName("JP2OpenJPEG")
     dst_ds = driver.CreateCopy(
         str(out_path),
@@ -349,8 +351,8 @@ def create_cloud_mask_v2(
     )
     dst_ds = None
     src_ds = None
-
     os.remove(out_dilate)
+    os.remove(out_temp2)
     logger.info("Done: {}".format(out_path.name))
 
 
@@ -373,6 +375,7 @@ def create_cloud_mask_b11(
 
     out_temp_path = Path(Config().get("temp_path"))
     out_mask = str(out_temp_path / (out_path.stem + "_tmp_mask.tif"))
+    out_temp2 = str(out_temp_path / (out_path.stem + "_tmp_mask_2.tif"))
 
     b11_seuil = 1500
     with rasterio.open(str(b11_path)) as b11_src:
@@ -439,6 +442,7 @@ def create_cloud_mask_b11(
 
     # Save to JP2000
     src_ds = gdal.Open(out_mask)
+    src_ds = gdal.Translate(out_temp2, src_ds, outputType=gdal.GDT_Byte)
     driver = gdal.GetDriverByName("JP2OpenJPEG")
     dst_ds = driver.CreateCopy(
         str(out_path),
@@ -449,6 +453,7 @@ def create_cloud_mask_b11(
     src_ds = None
 
     os.remove(out_mask)
+    os.remov(out_temp2)
     logger.info("Done: {}".format(out_path.name))
 
 
@@ -456,7 +461,7 @@ def create_cloud_mask_v003(
     cloud_mask: Union[str, pathlib.PosixPath],
     out_path="./CM003.jp2",
     probability: int = 1,
-    iterations: int = 5,
+    iterations: int = 1,
 ) -> None:
     
     """
@@ -472,6 +477,7 @@ def create_cloud_mask_v003(
 
     out_temp_path = Path(Config().get("temp_path"))
     out_temp = str(out_temp_path / (out_path.stem + "_tmp_cm003.tif"))
+    out_temp2 = str(out_temp_path / (out_path.stem + "_tmp_cm003_2.tif"))
 
     with rasterio.open(str(cloud_mask)) as cld_src:
         cld_profile = cld_src.profile
@@ -500,6 +506,7 @@ def create_cloud_mask_v003(
 
     # Save to JP2000
     src_ds = gdal.Open(out_temp)
+    src_ds = gdal.Translate(out_temp2, src_ds, outputType=gdal.GDT_Byte)
     driver = gdal.GetDriverByName("JP2OpenJPEG")
     dst_ds = driver.CreateCopy(
         str(out_path),
@@ -510,13 +517,14 @@ def create_cloud_mask_v003(
     src_ds = None
 
     os.remove(out_temp)
+    os.remove(out_temp2)
     logger.info("Done: {}".format(out_path.name))
 
 
 def create_cloud_mask_v004(
     scl_path: Union[str, pathlib.PosixPath],
     out_path="./CM004.jp2",
-    iterations: int = 5,
+    iterations: int = 1,
     cld_shad: bool = True,
     cld_med_prob: bool = True,
     cld_hi_prob: bool = True,
@@ -537,6 +545,7 @@ def create_cloud_mask_v004(
 
     out_temp_path = Path(Config().get("temp_path"))
     out_temp = str(out_temp_path / (out_path.stem + "_tmp_cm004.tif"))
+    out_temp2 = str(out_temp_path / (out_path.stem + "_tmp_cm004_2.tif"))
 
     with rasterio.open(str(scl_path)) as scl_src:
         scl_profile = scl_src.profile
@@ -575,6 +584,8 @@ def create_cloud_mask_v004(
 
     # Save to JP2000
     src_ds = gdal.Open(out_temp)
+    src_ds = gdal.Translate(out_temp2, src_ds, outputType=gdal.GDT_Byte)
+    
     driver = gdal.GetDriverByName("JP2OpenJPEG")
     dst_ds = driver.CreateCopy(
         str(out_path),
@@ -583,6 +594,8 @@ def create_cloud_mask_v004(
     )
     dst_ds = None
     src_ds = None
-
+    
     os.remove(out_temp)
-    logger.info("Done: {}".format(out_path.name))
+    os.remove(out_temp2)
+    
+    logger.info("Done : {}".format(out_path.name))
diff --git a/sen2chain/tiles.py b/sen2chain/tiles.py
index b497f4b28677b21884b526f703c7dc926e92befd..3cb1674f39540d33e9622f611b83a718bb851366 100644
--- a/sen2chain/tiles.py
+++ b/sen2chain/tiles.py
@@ -21,6 +21,7 @@ from pprint import pformat
 import multiprocessing
 from queue import Queue
 from threading import Thread
+from jpylyzer import jpylyzer
 
 # type annotations
 from typing import List, Dict, Iterable
@@ -1859,6 +1860,27 @@ class Tile:
                         )
                         f.unlink()
                         nb_rm += 1
+            
+            # check jp2 validity 
+            for key, sub_path in self._paths["indices"].items():
+                sub_path = Path(sub_path)  # Convertit le chemin en objet Path
+                print(f"Exploration du dossier {key}: {sub_path}")
+                for jp2_file in sub_path.rglob("*.jp2"):
+                    #print(f"  - Fichier : {jp2_file}")
+                    test_validity = jpylyzer.checkOneFile(jp2_file).findtext('isValid')
+                    if test_validity == 'False':
+                        txt = "Invalid jp2 {} (jpylyzer)".format(jp2_file.name)
+                        prob_id.append(txt)
+                        logger.info(txt)
+                        nb_id += 1
+                        if remove:
+                            logger.info(
+                                "Removing invalid jp2 {} from L2A folder".format(
+                                    jp2_file.name
+                                )
+                            )
+                            jp2_file.unlink()
+                            nb_rm += 1
                         
         # identify 0B or absent indice QL
         """