diff --git a/src/LIB/SURCOUCHE/src/fmreadwrit.f90 b/src/LIB/SURCOUCHE/src/fmreadwrit.f90
index 9a208a115ffc550e6e59f58b7b45e0aa6bd854ed..abdabfc4eaa17b2f821a6c4a70cd4330ceef7c51 100644
--- a/src/LIB/SURCOUCHE/src/fmreadwrit.f90
+++ b/src/LIB/SURCOUCHE/src/fmreadwrit.f90
@@ -492,6 +492,9 @@ END SUBROUTINE IO_READ_FIELD_LFI_L1
 !
 !
 SUBROUTINE IO_READ_FIELD_LFI_C0(TPFILE,TPFIELD,HFIELD,KRESP)
+!
+USE MODD_PARAMETERS, ONLY: NFILENAMELGTMAXLFI
+!
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -514,6 +517,14 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_C0',TRIM(TPFILE%CNAME)//': re
 !
 ILENG = LEN(HFIELD)
 !
+!Special treatment for MY_NAME and DAD_NAME fields (for backward compatibility)
+IF (TPFIELD%CMNHNAME=='MY_NAME' .OR. TPFIELD%CMNHNAME=='DAD_NAME') THEN
+  ILENG = NFILENAMELGTMAXLFI
+  IF (LEN(HFIELD)<NFILENAMELGTMAXLFI) &
+        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_LFI_C0',TRIM(TPFILE%CNAME)// &
+                      ': LEN(HFIELD)<NFILENAMELGTMAXLFI')
+END IF
+!
 CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) THEN
@@ -1269,6 +1280,8 @@ END SUBROUTINE IO_WRITE_FIELD_LFI_L1
 !
 SUBROUTINE IO_WRITE_FIELD_LFI_C0(TPFILE,TPFIELD,HFIELD,KRESP)
 !
+USE MODD_PARAMETERS, ONLY: NFILENAMELGTMAXLFI
+!
 IMPLICIT NONE
 !
 !*      0.1   Declarations of arguments
@@ -1290,6 +1303,14 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_C0','writing '//TRIM(TPFIELD
 ILENG=LEN(HFIELD)
 IF (ILENG==0) ILENG=1
 !
+!Special treatment for MY_NAME and DAD_NAME fields (for backward compatibility)
+IF (TPFIELD%CMNHNAME=='MY_NAME' .OR. TPFIELD%CMNHNAME=='DAD_NAME') THEN
+  ILENG = NFILENAMELGTMAXLFI
+  IF (LEN_TRIM(HFIELD)>ILENG) &
+        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_C0',TRIM(TPFILE%CNAME)// &
+                      ': MY_NAME was truncated from '//TRIM(HFIELD)//' to '//HFIELD(1:NFILENAMELGTMAXLFI))
+END IF
+!
 CALL WRITE_PREPARE(TPFIELD,ILENG,IWORK,ITOTAL,IRESP)
 !
 IF (IRESP==0) THEN
diff --git a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90
index 6f2588b1149edea6743ed12103d007a361ed7982..1376f06080cbe071d47db0fe1f6bcae632ef4bbf 100644
--- a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90
+++ b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90
@@ -297,12 +297,13 @@ CONTAINS
   SUBROUTINE IO_WRITE_HEADER(TPFILE,HDAD_NAME)
     !
     USE MODD_CONF
-    USE MODD_CONF_n, ONLY : CSTORAGE_TYPE
+    USE MODD_CONF_n,     ONLY: CSTORAGE_TYPE
+    USE MODD_PARAMETERS, ONLY: NFILENAMELGTMAXLFI
     !
     TYPE(TFILEDATA),          INTENT(IN)  :: TPFILE   ! File structure
     CHARACTER(LEN=*),OPTIONAL,INTENT(IN)  :: HDAD_NAME
     !
-    CHARACTER(LEN=28) :: YDAD_NAME !Necessary to use a character string of the right length for LFI files
+    CHARACTER(LEN=:),ALLOCATABLE :: YDAD_NAME
     !
     CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_HEADER','called for file '//TRIM(TPFILE%CNAME))
     !
@@ -321,16 +322,21 @@ CONTAINS
     CALL IO_WRITE_FIELD(TPFILE,'PROGRAM',     CPROGRAM)
     CALL IO_WRITE_FIELD(TPFILE,'STORAGE_TYPE',CSTORAGE_TYPE)
     CALL IO_WRITE_FIELD(TPFILE,'MY_NAME',     TPFILE%CNAME)
+    !
     IF ( ASSOCIATED(TPFILE%TDADFILE) ) THEN
-      YDAD_NAME = TPFILE%TDADFILE%CNAME
+      ALLOCATE(CHARACTER(LEN=MAX(NFILENAMELGTMAXLFI,LEN_TRIM(TPFILE%TDADFILE%CNAME))) :: YDAD_NAME)
+      YDAD_NAME(:) = TPFILE%TDADFILE%CNAME
     ELSE IF (PRESENT(HDAD_NAME)) THEN
-      YDAD_NAME = HDAD_NAME
+      ALLOCATE(CHARACTER(LEN=MAX(NFILENAMELGTMAXLFI,LEN_TRIM(HDAD_NAME))) :: YDAD_NAME)
+      YDAD_NAME(:) = HDAD_NAME
     ELSE
       CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_HEADER',TRIM(TPFILE%CNAME)// &
                      ': TPFILE%TDADFILE not associated and HDAD_NAME not provided')
-      YDAD_NAME = ' '
+      ALLOCATE(CHARACTER(LEN=NFILENAMELGTMAXLFI) :: YDAD_NAME)
+      YDAD_NAME(:) = ' '
     ENDIF
     CALL IO_WRITE_FIELD(TPFILE,'DAD_NAME',YDAD_NAME)
+    DEALLOCATE(YDAD_NAME)
     !
   END SUBROUTINE IO_WRITE_HEADER
 
diff --git a/src/MNH/modd_nesting.f90 b/src/MNH/modd_nesting.f90
index edb8b45ed0b4c06eed8c5ce2b4f58bbdaf3ac8ef..36db2361845cac3491967686dc1f5a3715cffccb 100644
--- a/src/MNH/modd_nesting.f90
+++ b/src/MNH/modd_nesting.f90
@@ -68,7 +68,7 @@ INTEGER,SAVE,  DIMENSION(JPMODELMAX,JPMODELMAX) :: NMSG_END ! timestep END
                                                             !   MeSsaGes concerning
 INTEGER,SAVE,  DIMENSION(JPMODELMAX,JPMODELMAX) :: NMSG_AVR_END ! AVeRage END
 !
-CHARACTER(LEN=28),SAVE,   DIMENSION(JPMODELMAX) :: CMY_NAME,CDAD_NAME
+CHARACTER(LEN=NFILENAMELGTMAX),SAVE,   DIMENSION(JPMODELMAX) :: CMY_NAME,CDAD_NAME
                                                   ! names of the initial FM-Files
                                                   ! then generic names of output FM-Files
                                                   ! of each model "m"
diff --git a/src/MNH/modd_parameters.f90 b/src/MNH/modd_parameters.f90
index 19ecd626f5f13720a0e9a27b6db511053c737f52..7970cb1450cefd2de714c24ed6b1474e38a33295 100644
--- a/src/MNH/modd_parameters.f90
+++ b/src/MNH/modd_parameters.f90
@@ -83,7 +83,9 @@ INTEGER, PARAMETER :: JPOUTVARMAX = 192 ! Maximum allowed number of variables in
 INTEGER, PARAMETER :: NMNHNAMELGTMAX = 32 ! Maximum length of a MNH variable name
 INTEGER, PARAMETER :: NSTDNAMELGTMAX = 64 ! Maximum length of the standard name of a variable (CF convention)
 !
-INTEGER, PARAMETER :: NFILENAMELGTMAX = 32 ! Maximum length of a file name
+INTEGER, PARAMETER :: NFILENAMELGTMAX = 32 ! Maximum length of a file name (must be at least NFILENAMELGTMAXLFI)
+INTEGER, PARAMETER :: NFILENAMELGTMAXLFI = 28 ! Maximum length of a file name in LFI file (this is necessary
+                                              ! to keep backward compatibility), MUST BE 28
 !
 INTEGER, PARAMETER :: JPLIMACCNMAX = 10 ! Maximum allowed number of CCN modes in LIMA
 INTEGER, PARAMETER :: JPLIMAIFNMAX = 10 ! Maximum allowed number of IFN modes in LIMA