diff --git a/src/LIB/SURCOUCHE/src/modd_io.f90 b/src/LIB/SURCOUCHE/src/modd_io.f90
index 52a69027988c304b9b8fa5147a488d71c3e0dc55..d2eb939e051c567e245bf9c28dcdd0e904b332ee 100644
--- a/src/LIB/SURCOUCHE/src/modd_io.f90
+++ b/src/LIB/SURCOUCHE/src/modd_io.f90
@@ -59,7 +59,6 @@ TYPE TOUTBAK
   INTEGER           :: NSTEP        !Timestep number
   REAL              :: XTIME        !Time from start of the segment (in seconds and rounded to a timestep)
   INTEGER           :: NOUTDAD = -1 !Index of the corresponding dad file (file with same time)
-  CHARACTER(LEN=28) :: CDADFILENAME !Filename of dad
   TYPE(TFILEDATA),POINTER :: TFILE => NULL() !Corresponding file
   TYPE(TFILE_ELT),DIMENSION(:),ALLOCATABLE :: TFILE_IOZ !Corresponding Z-splitted files
   INTEGER,DIMENSION(:),POINTER :: NFIELDLIST => NULL() !List of the fields to read or write
@@ -88,6 +87,7 @@ TYPE TFILEDATA
   LOGICAL                  :: LNCCOMPRESS = .FALSE. ! Do compression on fields
   INTEGER(KIND=IDCDF_KIND) :: NNCCOMPRESS_LEVEL = 0 ! Compression level
   !
+  TYPE(TFILEDATA),POINTER :: TDADFILE   => NULL() !Corresponding dad file
   TYPE(TFILEDATA),POINTER :: TFILE_PREV => NULL()
   TYPE(TFILEDATA),POINTER :: TFILE_NEXT => NULL()
 END TYPE TFILEDATA
diff --git a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90
index 25b3ffe3d168f547d08cab00d518aecd8df04fd1..bd3fd314526004f0e87cb401db707bc27737b12e 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90
@@ -178,11 +178,11 @@ DO IMI = 1, NMODEL
   IF (NDAD(IMI) == IMI .OR.  IMI == 1) THEN
     OUT_MODEL(IMI)%TBACKUPN(:)%NOUTDAD = 0
     DO IPOS = 1,OUT_MODEL(IMI)%NBAK_NUMB
-      OUT_MODEL(IMI)%TBACKUPN(IPOS)%CDADFILENAME = OUT_MODEL(IMI)%TBACKUPN(IPOS)%TFILE%CNAME
+      OUT_MODEL(IMI)%TBACKUPN(IPOS)%TFILE%TDADFILE => OUT_MODEL(IMI)%TBACKUPN(IPOS)%TFILE !Points to itself
     END DO
     OUT_MODEL(IMI)%TOUTPUTN(:)%NOUTDAD = 0
     DO IPOS = 1,OUT_MODEL(IMI)%NOUT_NUMB
-      OUT_MODEL(IMI)%TOUTPUTN(IPOS)%CDADFILENAME = OUT_MODEL(IMI)%TOUTPUTN(IPOS)%TFILE%CNAME
+      OUT_MODEL(IMI)%TOUTPUTN(IPOS)%TFILE%TDADFILE => OUT_MODEL(IMI)%TOUTPUTN(IPOS)%TFILE !Points to itself
     END DO
   ELSE
     DO IPOS = 1,OUT_MODEL(IMI)%NBAK_NUMB
@@ -197,10 +197,10 @@ DO IMI = 1, NMODEL
       IF (IDX>0) THEN
         OUT_MODEL(IMI)%TBACKUPN(IPOS)%NOUTDAD = IDX
         WRITE (YDADNUMBER,FMT="('.',I3.3)") OUT_MODEL(IMI)%TBACKUPN(IPOS)%NOUTDAD
-        OUT_MODEL(IMI)%TBACKUPN(IPOS)%CDADFILENAME = ADJUSTL(ADJUSTR(CDAD_NAME(IMI))//YDADNUMBER)
+        OUT_MODEL(IMI)%TBACKUPN(IPOS)%TFILE%TDADFILE => OUT_MODEL(NDAD(IMI))%TBACKUPN(IDX)%TFILE
       ELSE
         OUT_MODEL(IMI)%TBACKUPN(IPOS)%NOUTDAD = -1
-        WRITE ( OUT_MODEL(IMI)%TBACKUPN(IPOS)%CDADFILENAME , FMT="('NO_DAD_FILE')" )
+        NULLIFY(OUT_MODEL(IMI)%TBACKUPN(IPOS)%TFILE%TDADFILE) !No dad file
       END IF
     END DO
     DO IPOS = 1,OUT_MODEL(IMI)%NOUT_NUMB
@@ -215,10 +215,10 @@ DO IMI = 1, NMODEL
       IF (IDX>0) THEN
         OUT_MODEL(IMI)%TOUTPUTN(IPOS)%NOUTDAD = IDX
         WRITE (YDADNUMBER,FMT="('.',I3.3)") OUT_MODEL(IMI)%TOUTPUTN(IPOS)%NOUTDAD
-        OUT_MODEL(IMI)%TOUTPUTN(IPOS)%CDADFILENAME = ADJUSTL(ADJUSTR(CDAD_NAME(IMI))//YDADNUMBER)
+        OUT_MODEL(IMI)%TOUTPUTN(IPOS)%TFILE%TDADFILE => OUT_MODEL(NDAD(IMI))%TBACKUPN(IDX)%TFILE
       ELSE
         OUT_MODEL(IMI)%TOUTPUTN(IPOS)%NOUTDAD = -1
-        WRITE ( OUT_MODEL(IMI)%TOUTPUTN(IPOS)%CDADFILENAME , FMT="('NO_DAD_FILE')" )
+        NULLIFY(OUT_MODEL(IMI)%TOUTPUTN(IPOS)%TFILE%TDADFILE) !No dad file
       END IF
     END DO
   END IF
diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90
index be57b89705afb5e32d11ed5d5a343a9dd0cfcd29..abf1559c57c3c16c4e216ab322c4b09320b433f9 100644
--- a/src/MNH/ini_modeln.f90
+++ b/src/MNH/ini_modeln.f90
@@ -1551,6 +1551,7 @@ IF (KMI == 1) THEN
     LUNIT_MODEL(IMI)%TDIAFILE%CMODE      = 'WRITE'
     LUNIT_MODEL(IMI)%TDIAFILE%NLFITYPE   = 1
     LUNIT_MODEL(IMI)%TDIAFILE%NLFIVERB   = NVERB
+    LUNIT_MODEL(IMI)%TDIAFILE%TDADFILE => LUNIT_MODEL(NDAD(IMI))%TDIAFILE
   END DO
   !
   IF (CPROGRAM=='MESONH') THEN
diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90
index 40c69a5f2fcbe0bc3f005a84094afd54a14c3996..13ca3cf59d8218d2b2539cf5a7dd9ea3fb7fd750 100644
--- a/src/MNH/modeln.f90
+++ b/src/MNH/modeln.f90
@@ -420,7 +420,6 @@ INTEGER :: ILUOUT      ! Logical unit number for the output listing
 INTEGER :: IIU,IJU,IKU ! array size in first, second and third dimensions
 INTEGER :: IIB,IIE,IJB,IJE,IKB,IKE ! index values for the physical subdomain
 INTEGER :: JSV,JRR     ! Loop index for scalar and moist variables
-CHARACTER (LEN=28) :: YDADFILE  ! name of the corresponding DAD model OUTPUT FM-file
 INTEGER  :: INBVAR              ! number of HALO2_lls to allocate
 INTEGER  :: IRESP               ! return code in FM routines
 INTEGER  :: IINFO_ll            ! return code of parallel routine
@@ -908,14 +907,13 @@ IF (IBAK < NBAK_NUMB ) THEN
     GCLOSE_OUT=.TRUE.
     !
     TZBAKFILE => TBACKUPN(IBAK)%TFILE
-    YDADFILE = TBACKUPN(IBAK)%CDADFILENAME
     IVERB    = TZBAKFILE%NLFIVERB
     !
     CALL IO_FILE_OPEN_ll(TZBAKFILE,CLUOUT,IRESP)
     !
     CALL WRITE_DESFM_n(IMI,TRIM(TZBAKFILE%CNAME)//'.des',CLUOUT)
     CALL IO_WRITE_HEADER_NC4(TBACKUPN(IBAK)%TFILE,CLUOUT)
-    CALL WRITE_LFIFM_n(TBACKUPN(IBAK)%TFILE,YDADFILE)
+    CALL WRITE_LFIFM_n(TBACKUPN(IBAK)%TFILE,TBACKUPN(IBAK)%TFILE%TDADFILE%CNAME)
     COUTFMFILE = TZBAKFILE%CNAME
     CALL MNHWRITE_ZS_DUMMY_n(TZBAKFILE)
     IF (CSURF=='EXTE') THEN