diff --git a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90
index af9abb4598831a05630e9f5c72c7f95621a684d8..cf21d21c4de1a4a0cf35a96e227d98cb265c22f9 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90
@@ -66,6 +66,9 @@ USE MODD_VAR_ll,      ONLY: IP
 
 use mode_field, only: Find_field_id_from_mnhname
 
+USE MODN_BACKUP, ONLY: BACKUP_NML_DEALLOCATE
+USE MODN_OUTPUT, ONLY: OUTPUT_NML_DEALLOCATE
+
 IMPLICIT NONE
 !
 INTEGER, INTENT(IN) :: KSUP    ! supp. time steps
@@ -582,11 +585,8 @@ DO IMI = 1, NMODEL
     !
 END DO ! IMI=1,NMODEL
 !
-DEALLOCATE(NBAK_STEP)
-DEALLOCATE(NOUT_STEP)
-DEALLOCATE(XBAK_TIME)
-DEALLOCATE(XOUT_TIME)
-DEALLOCATE(COUT_VAR)
+CALL BACKUP_NML_DEALLOCATE()
+CALL OUTPUT_NML_DEALLOCATE()
 !
 ! Set/initialize the pointers (necessary to use them now without OUT_MODEL(1)%...)
 CALL OUT_GOTO_MODEL( 1, 1 )
diff --git a/src/MNH/modn_backup.f90 b/src/MNH/modn_backup.f90
index 6dca60a3f305293bec0d9c5f14adba9e3c3c1d31..d1ec3226f0bfc56ea3059e086c17e7695fe39453 100644
--- a/src/MNH/modn_backup.f90
+++ b/src/MNH/modn_backup.f90
@@ -1,17 +1,17 @@
 !MNH_LIC Copyright 1996-2024 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ##################
       MODULE MODN_BACKUP
 !     ##################
 !
-!!****  *MODN_BACKUP* - declaration of namelist NAM_OUTPUT
+!!****  *MODN_BACKUP* - declaration of namelist NAM_BACKUP
 !!
 !!    PURPOSE
 !!    -------
-!       The purpose of this  module is to specify the namelist  NAM_OUTPUT
+!       The purpose of this  module is to specify the namelist NAM_BACKUP
 !       which concerns the instants and some parameters (compression and precision reduction)
 !       of the backups realized by all models.
 !
@@ -51,4 +51,31 @@ NAMELIST/NAM_BACKUP/LBAK_BEG,LBAK_END,&
                    LBAK_COMPRESS, NBAK_COMPRESS_LEVEL, &
                    CBAK_DIR
 !
+CONTAINS
+
+SUBROUTINE BACKUP_NML_ALLOCATE( )
+  USE MODD_CONF,       ONLY: NMODEL
+  USE MODD_IO,         ONLY: NFILE_NUM_MAX
+  USE MODD_PARAMETERS, ONLY: NNEGUNDEF, XNEGUNDEF
+
+  IF ( .NOT.ALLOCATED(XBAK_TIME) ) THEN
+    ALLOCATE( XBAK_TIME(NMODEL, NFILE_NUM_MAX) )
+    XBAK_TIME(:,:) = XNEGUNDEF
+  END IF
+
+  IF ( .NOT.ALLOCATED(NBAK_STEP) ) THEN
+    ALLOCATE( NBAK_STEP(NMODEL, NFILE_NUM_MAX) )
+    NBAK_STEP(:,:) = NNEGUNDEF
+  END IF
+
+END SUBROUTINE BACKUP_NML_ALLOCATE
+
+
+SUBROUTINE BACKUP_NML_DEALLOCATE( )
+
+  DEALLOCATE( XBAK_TIME )
+  DEALLOCATE( NBAK_STEP )
+
+END SUBROUTINE BACKUP_NML_DEALLOCATE
+
 END MODULE MODN_BACKUP
diff --git a/src/MNH/modn_output.f90 b/src/MNH/modn_output.f90
index 64429041d9ca7aa91ec9767e7ef55c72663f731a..df3fc7f410a4b1e30d1d9ef490f35011928424b8 100644
--- a/src/MNH/modn_output.f90
+++ b/src/MNH/modn_output.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1996-2023 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1996-2024 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -54,4 +54,37 @@ NAMELIST/NAM_OUTPUT/LOUT_BEG,LOUT_END,&
                    LOUT_COMPRESS_LOSSY, COUT_COMPRESS_LOSSY_ALGO, NOUT_COMPRESS_LOSSY_NSD, &
                    COUT_DIR
 !
+CONTAINS
+
+SUBROUTINE OUTPUT_NML_ALLOCATE( )
+  USE MODD_CONF,       ONLY: NMODEL
+  USE MODD_IO,         ONLY: NFILE_NUM_MAX
+  USE MODD_PARAMETERS, ONLY: NNEGUNDEF, XNEGUNDEF
+
+  IF ( .NOT.ALLOCATED(XOUT_TIME) ) THEN
+    ALLOCATE( XOUT_TIME(NMODEL, NFILE_NUM_MAX) )
+    XOUT_TIME(:,:) = XNEGUNDEF
+  END IF
+
+  IF ( .NOT.ALLOCATED(NOUT_STEP) ) THEN
+    ALLOCATE( NOUT_STEP(NMODEL, NFILE_NUM_MAX) )
+    NOUT_STEP(:,:) = NNEGUNDEF
+  END IF
+
+  IF ( .NOT.ALLOCATED(COUT_VAR) ) THEN
+    ALLOCATE( COUT_VAR(NMODEL, JPOUTVARMAX) )
+    COUT_VAR(:,:) = ''
+  END IF
+
+END SUBROUTINE OUTPUT_NML_ALLOCATE
+
+
+SUBROUTINE OUTPUT_NML_DEALLOCATE( )
+
+  DEALLOCATE( XOUT_TIME )
+  DEALLOCATE( NOUT_STEP )
+  DEALLOCATE( COUT_VAR  )
+
+END SUBROUTINE OUTPUT_NML_DEALLOCATE
+
 END MODULE MODN_OUTPUT
diff --git a/src/MNH/read_desfmn.f90 b/src/MNH/read_desfmn.f90
index c28f702cae40a0dc93d727f82f3706b6083df583..64049e92578cc549c553d70d53506c7017b591c3 100644
--- a/src/MNH/read_desfmn.f90
+++ b/src/MNH/read_desfmn.f90
@@ -500,26 +500,8 @@ IF (KMI == 1) THEN
   IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_NESTING)
   CALL POSNAM( TZDESFILE, 'NAM_BACKUP', GFOUND )
   IF (GFOUND) THEN
-    IF (.NOT.ALLOCATED(XBAK_TIME)) THEN
-      ALLOCATE(XBAK_TIME(NMODEL,NFILE_NUM_MAX))
-      XBAK_TIME(:,:) = XNEGUNDEF
-    END IF
-    IF (.NOT.ALLOCATED(XOUT_TIME)) THEN
-      ALLOCATE(XOUT_TIME(NMODEL,NFILE_NUM_MAX)) !Allocate *OUT* variables to prevent
-      XOUT_TIME(:,:) = XNEGUNDEF
-    END IF
-    IF (.NOT.ALLOCATED(NBAK_STEP)) THEN
-      ALLOCATE(NBAK_STEP(NMODEL,NFILE_NUM_MAX))
-      NBAK_STEP(:,:) = NNEGUNDEF
-    END IF
-    IF (.NOT.ALLOCATED(NOUT_STEP)) THEN
-      ALLOCATE(NOUT_STEP(NMODEL,NFILE_NUM_MAX)) !problems if NAM_OUTPUT does not exist
-      NOUT_STEP(:,:) = NNEGUNDEF
-    END IF
-    IF (.NOT.ALLOCATED(COUT_VAR)) THEN
-      ALLOCATE(COUT_VAR (NMODEL,JPOUTVARMAX))
-      COUT_VAR(:,:)  = ''
-    END IF
+    CALL BACKUP_NML_ALLOCATE()
+    CALL OUTPUT_NML_ALLOCATE() !Allocate *OUT* variables to prevent problems if NAM_OUTPUT does not exist
     READ(UNIT=ILUDES,NML=NAM_BACKUP)
   ELSE
     CALL POSNAM( TZDESFILE, 'NAM_FMOUT', GFOUND )
@@ -527,26 +509,8 @@ IF (KMI == 1) THEN
   END IF
   CALL POSNAM( TZDESFILE, 'NAM_OUTPUT', GFOUND )
   IF (GFOUND) THEN
-    IF (.NOT.ALLOCATED(XBAK_TIME)) THEN
-      ALLOCATE(XBAK_TIME(NMODEL,NFILE_NUM_MAX)) !Allocate *BAK* variables to prevent
-      XBAK_TIME(:,:) = XNEGUNDEF
-    END IF
-    IF (.NOT.ALLOCATED(XOUT_TIME)) THEN
-      ALLOCATE(XOUT_TIME(NMODEL,NFILE_NUM_MAX))
-      XOUT_TIME(:,:) = XNEGUNDEF
-    END IF
-    IF (.NOT.ALLOCATED(NBAK_STEP)) THEN
-      ALLOCATE(NBAK_STEP(NMODEL,NFILE_NUM_MAX)) !problems if NAM_BACKUP does not exist
-      NBAK_STEP(:,:) = NNEGUNDEF
-    END IF
-    IF (.NOT.ALLOCATED(NOUT_STEP)) THEN
-      ALLOCATE(NOUT_STEP(NMODEL,NFILE_NUM_MAX))
-      NOUT_STEP(:,:) = NNEGUNDEF
-    END IF
-    IF (.NOT.ALLOCATED(COUT_VAR)) THEN
-      ALLOCATE(COUT_VAR (NMODEL,JPOUTVARMAX))
-      COUT_VAR(:,:)  = ''
-    END IF
+    CALL BACKUP_NML_ALLOCATE() !Allocate *BAK* variables to prevent problems if NAM_BACKUP does not exist
+    CALL OUTPUT_NML_ALLOCATE()
     READ(UNIT=ILUDES,NML=NAM_OUTPUT)
   END IF
 ! Note: it is not useful to read the budget namelists in the .des files
diff --git a/src/MNH/read_exsegn.f90 b/src/MNH/read_exsegn.f90
index 4fc0ef4ee94eafd4e6b33202ca56c2bb89b3bb80..6e6c12581996622f14e0664b3dd5d2e1b796475c 100644
--- a/src/MNH/read_exsegn.f90
+++ b/src/MNH/read_exsegn.f90
@@ -599,26 +599,8 @@ IF (KMI == 1) THEN
   CALL POSNAM( TPEXSEGFILE, 'NAM_BACKUP', GFOUND )
   IF (GFOUND) THEN
     !Should have been allocated before in READ_DESFM_n
-    IF (.NOT.ALLOCATED(XBAK_TIME)) THEN
-      ALLOCATE(XBAK_TIME(NMODEL,NFILE_NUM_MAX))
-      XBAK_TIME(:,:) = XNEGUNDEF
-    END IF
-    IF (.NOT.ALLOCATED(XOUT_TIME)) THEN
-      ALLOCATE(XOUT_TIME(NMODEL,NFILE_NUM_MAX)) !Allocate *OUT* variables to prevent
-      XOUT_TIME(:,:) = XNEGUNDEF
-    END IF
-    IF (.NOT.ALLOCATED(NBAK_STEP)) THEN
-      ALLOCATE(NBAK_STEP(NMODEL,NFILE_NUM_MAX))
-      NBAK_STEP(:,:) = NNEGUNDEF
-    END IF
-    IF (.NOT.ALLOCATED(NOUT_STEP)) THEN
-      ALLOCATE(NOUT_STEP(NMODEL,NFILE_NUM_MAX)) !problems if NAM_OUTPUT does not exist
-      NOUT_STEP(:,:) = NNEGUNDEF
-    END IF
-    IF (.NOT.ALLOCATED(COUT_VAR)) THEN
-      ALLOCATE(COUT_VAR (NMODEL,JPOUTVARMAX))
-      COUT_VAR(:,:)  = ''
-    END IF
+    CALL BACKUP_NML_ALLOCATE()
+    CALL OUTPUT_NML_ALLOCATE() !Allocate *OUT* variables to prevent problems if NAM_OUTPUT does not exist
     READ(UNIT=ILUSEG,NML=NAM_BACKUP)
   ELSE
     CALL POSNAM( TPEXSEGFILE, 'NAM_FMOUT', GFOUND )
@@ -631,26 +613,8 @@ IF (KMI == 1) THEN
   CALL POSNAM( TPEXSEGFILE, 'NAM_OUTPUT', GFOUND )
   IF (GFOUND) THEN
     !Should have been allocated before in READ_DESFM_n
-    IF (.NOT.ALLOCATED(XBAK_TIME)) THEN
-      ALLOCATE(XBAK_TIME(NMODEL,NFILE_NUM_MAX)) !Allocate *BAK* variables to prevent
-      XBAK_TIME(:,:) = XNEGUNDEF
-    END IF
-    IF (.NOT.ALLOCATED(XOUT_TIME)) THEN
-      ALLOCATE(XOUT_TIME(NMODEL,NFILE_NUM_MAX))
-      XOUT_TIME(:,:) = XNEGUNDEF
-    END IF
-    IF (.NOT.ALLOCATED(NBAK_STEP)) THEN
-      ALLOCATE(NBAK_STEP(NMODEL,NFILE_NUM_MAX)) !problems if NAM_BACKUP does not exist
-      NBAK_STEP(:,:) = NNEGUNDEF
-    END IF
-    IF (.NOT.ALLOCATED(NOUT_STEP)) THEN
-      ALLOCATE(NOUT_STEP(NMODEL,NFILE_NUM_MAX))
-      NOUT_STEP(:,:) = NNEGUNDEF
-    END IF
-    IF (.NOT.ALLOCATED(COUT_VAR)) THEN
-      ALLOCATE(COUT_VAR (NMODEL,JPOUTVARMAX))
-      COUT_VAR(:,:)  = ''
-    END IF
+    CALL BACKUP_NML_ALLOCATE() !Allocate *BAK* variables to prevent problems if NAM_BACKUP does not exist
+    CALL OUTPUT_NML_ALLOCATE()
     READ(UNIT=ILUSEG,NML=NAM_OUTPUT)
   END IF
   CALL POSNAM( TPEXSEGFILE, 'NAM_BUDGET', GFOUND )