diff --git a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90
index 7707fe94d801ab640abbf1d3b7624d2fee1ee597..48f87468966a926dd37e5728d1cdd5e998da2590 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90
@@ -574,10 +574,12 @@ END SUBROUTINE POPULATE_STRUCT
 END SUBROUTINE IO_PREPARE_BAKOUT_STRUCT
 !
 SUBROUTINE IO_FILE_ADD2LIST(TPFILE,HNAME,HTYPE,HMODE, &
-                            HFORM,HACCESS,KLFINPRAR,KLFITYPE,KLFIVERB,KRECL,TPDADFILE,TPDATAFILE,OOLD)
+                            HFORM,HACCESS,HFORMAT,KLFINPRAR,KLFITYPE,KLFIVERB,KRECL,TPDADFILE,TPDATAFILE,OOLD)
 !
-USE MODD_BAKOUT,         ONLY : LOUT_COMPRESS,LOUT_REDUCE_FLOAT_PRECISION,NOUT_COMPRESS_LEVEL
-USE MODE_MODELN_HANDLER, ONLY : GET_CURRENT_MODEL_INDEX
+USE MODD_BAKOUT,         ONLY: LOUT_COMPRESS,LOUT_REDUCE_FLOAT_PRECISION,NOUT_COMPRESS_LEVEL
+USE MODD_CONF,           ONLY: CPROGRAM
+!
+USE MODE_MODELN_HANDLER, ONLY: GET_CURRENT_MODEL_INDEX
 !
 TYPE(TFILEDATA),POINTER,         INTENT(INOUT) :: TPFILE    !File structure to return
 CHARACTER(LEN=*),                INTENT(IN)    :: HNAME     !Filename
@@ -585,6 +587,7 @@ CHARACTER(LEN=*),                INTENT(IN)    :: HTYPE     !Filetype (backup, o
 CHARACTER(LEN=*),                INTENT(IN)    :: HMODE     !Opening mode (read, write...)
 CHARACTER(LEN=*),       OPTIONAL,INTENT(IN)    :: HFORM     !Formatted/unformatted
 CHARACTER(LEN=*),       OPTIONAL,INTENT(IN)    :: HACCESS   !Direct/sequential
+CHARACTER(LEN=*),       OPTIONAL,INTENT(IN)    :: HFORMAT   !Fileformat (NETCDF4, LFI, LFICDF4...)
 INTEGER(KIND=LFI_INT),  OPTIONAL,INTENT(IN)    :: KLFINPRAR !Number of predicted articles of the LFI file (non crucial)
 INTEGER,                OPTIONAL,INTENT(IN)    :: KLFITYPE  !Type of the file (used to generate list of files to transfers)
 INTEGER,                OPTIONAL,INTENT(IN)    :: KLFIVERB  !LFI verbosity level
@@ -648,6 +651,18 @@ IF(PRESENT(HACCESS)) THEN
     CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','HACCESS should be DIRECT or SEQUENTIAL and not '//TRIM(HACCESS))
 END IF
 !
+IF (PRESENT(HFORMAT)) THEN
+  IF(CPROGRAM=='LFICDF') THEN
+    IF (HFORMAT/='LFI' .AND. HFORMAT/='NETCDF4') &
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid HFORMAT ('//TRIM(HFORMAT)//')')
+  ELSE
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_ADD2LIST','optional argument HFORMAT not tested for CPROGRAM='//TRIM(CPROGRAM))
+  END IF
+ELSE
+  IF(CPROGRAM=='LFICDF') &
+    CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_ADD2LIST','optional argument HFORMAT is necessary for CPROGRAM='//TRIM(CPROGRAM))
+END IF
+!
 IF(PRESENT(KLFINPRAR)) THEN
   ILFINPRAR = KLFINPRAR
 ELSE
@@ -771,7 +786,9 @@ SELECT CASE(TPFILE%CTYPE)
 
   CASE DEFAULT
     IF (TRIM(HMODE)=='READ') THEN
-      IF (LLFIREAD) THEN
+      IF (PRESENT(HFORMAT)) THEN
+        TPFILE%CFORMAT = TRIM(HFORMAT)
+      ELSE IF (LLFIREAD) THEN
         TPFILE%CFORMAT = 'LFI'
         TPFILE%NLFINPRAR = ILFINPRAR
       ELSE IF (LIOCDF4) THEN
@@ -780,7 +797,9 @@ SELECT CASE(TPFILE%CTYPE)
         CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_ADD2LIST','invalid format for file '//TRIM(HNAME))
       END IF
     ELSE IF (TRIM(HMODE)=='WRITE') THEN
-      IF (LLFIOUT .AND. LIOCDF4) THEN
+      IF (PRESENT(HFORMAT)) THEN
+        TPFILE%CFORMAT = TRIM(HFORMAT)
+      ELSE IF (LLFIOUT .AND. LIOCDF4) THEN
         TPFILE%CFORMAT = 'LFICDF4'
         TPFILE%NLFINPRAR = ILFINPRAR
       ELSE IF (LIOCDF4) THEN