diff --git a/src/LIB/SURCOUCHE/src/modd_io.f90 b/src/LIB/SURCOUCHE/src/modd_io.f90
index 809e1e089c7290033999228bdea50976acdd0744..b0290eaad360fa48e23fe49d784211c64867805d 100644
--- a/src/LIB/SURCOUCHE/src/modd_io.f90
+++ b/src/LIB/SURCOUCHE/src/modd_io.f90
@@ -71,6 +71,7 @@ TYPE TFILEDATA
   CHARACTER(LEN=7)  :: CFORMAT = "UNKNOWN" !Fileformat (NETCDF4, LFI...)
   CHARACTER(LEN=7)  :: CMODE   = "UNKNOWN" !Opening mode (read, write...)
   LOGICAL           :: LOPENED = .FALSE.   !Is the file opened
+  INTEGER           :: NOPEN_CURRENT = 0   !Number of times the file is currently opened (several opens without close are allowed)
   INTEGER           :: NOPEN   = 0         !Number of times the file has been opened (during the current execution)
   INTEGER           :: NCLOSE  = 0         !Number of times the file has been closed (during the current execution)
   !
diff --git a/src/LIB/SURCOUCHE/src/mode_fm.f90 b/src/LIB/SURCOUCHE/src/mode_fm.f90
index 04104bcc10a87567f27b35d1aefbb897a7add68f..e3a7cf3e409871d76b372f2113fe72104786b7bf 100644
--- a/src/LIB/SURCOUCHE/src/mode_fm.f90
+++ b/src/LIB/SURCOUCHE/src/mode_fm.f90
@@ -138,25 +138,29 @@ USE MODD_IO_ll, ONLY: ISP,LIOCDF4,LLFIOUT,LLFIREAD,TFILEDATA
 USE MODE_FD_ll, ONLY: FD_ll,GETFD
 USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
 !
-TYPE(TFILEDATA),  INTENT(INOUT) :: TPFILE ! File structure
-CHARACTER(LEN=*), INTENT(IN)    :: HFIPRI ! File for prints in FM
-INTEGER,          INTENT(OUT)   :: KRESP  ! Return code
-LOGICAL,          INTENT(IN),  OPTIONAL :: OPARALLELIO
+TYPE(TFILEDATA),POINTER,INTENT(INOUT) :: TPFILE ! File structure
+CHARACTER(LEN=*),       INTENT(IN)    :: HFIPRI ! File for prints in FM
+INTEGER,                INTENT(OUT)   :: KRESP  ! Return code
+LOGICAL,                INTENT(IN),  OPTIONAL :: OPARALLELIO
 !
 INTEGER :: ININAR ! Number of articles present in LFI file (unused here)
 INTEGER :: IRESP
 TYPE(FD_ll), POINTER  :: TZFDLFI
-TYPE(TFILEDATA),POINTER :: TZFILE
+TYPE(TFILEDATA),POINTER :: TZFILE_DUMMY
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_OPEN_ll','opening '//TRIM(TPFILE%CNAME)//' for '//TRIM(TPFILE%CMODE))
 !
+IF (.NOT.ASSOCIATED(TPFILE)) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_OPEN_ll','TPFILE is not associated')
+!
+TPFILE%NOPEN_CURRENT = TPFILE%NOPEN_CURRENT + 1
+!
 IF (TPFILE%LOPENED) THEN
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_OPEN_ll','file '//TRIM(TPFILE%CNAME)//' already opened')
+  CALL PRINT_MSG(NVERB_INFO,'IO','IO_FILE_OPEN_ll','file '//TRIM(TPFILE%CNAME)//' is already in open state')
   RETURN
 END IF
 !
 !Check if file is in filelist
-CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME),TZFILE,IRESP)
+CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME),TZFILE_DUMMY,IRESP)
 IF (IRESP/=0) CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_OPEN_ll','file '//TRIM(TPFILE%CNAME)//' not in filelist')
 !
 CALL FMOPEN_ll(TPFILE%CNAME,TPFILE%CMODE,HFIPRI,TPFILE%NLFINPRAR,TPFILE%NLFITYPE,TPFILE%NLFIVERB,ININAR,KRESP,&
@@ -438,6 +442,14 @@ IF (.NOT.TPFILE%LOPENED) THEN
   RETURN
 ENDIF
 !
+IF (TPFILE%NOPEN_CURRENT>1) THEN
+  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_CLOSE_ll',TRIM(TPFILE%CNAME)// &
+                 ': decrementing NOPEN_CURRENT (still opened after this call)')
+  TPFILE%NOPEN_CURRENT = TPFILE%NOPEN_CURRENT - 1
+  TPFILE%NCLOSE        = TPFILE%NCLOSE        + 1
+  RETURN
+END IF
+!
 !Next lines done before the close to be sure the FD_ll still exists
 TZFDLFI=>GETFD(ADJUSTL(TRIM(TPFILE%CNAME)//'.lfi'))
 INB_PROCIO=TZFDLFI%NB_PROCIO
@@ -448,9 +460,10 @@ ELSE
   CALL FMCLOS_ll(TPFILE%CNAME,'KEEP',HFIPRI,KRESP,OPARALLELIO=OPARALLELIO,TPFILE=TPFILE)
 END IF
 !
-TPFILE%LOPENED = .FALSE.
-TPFILE%NCLOSE  = TPFILE%NCLOSE + 1
-TPFILE%NNCID   = -1
+TPFILE%LOPENED       = .FALSE.
+TPFILE%NOPEN_CURRENT = 0
+TPFILE%NCLOSE        = TPFILE%NCLOSE + 1
+TPFILE%NNCID         = -1
 !
 IF (INB_PROCIO>1) THEN
   DO JI = 1,TZFDLFI%NB_PROCIO