diff --git a/src/LIB/SURCOUCHE/src/mode_io.f90 b/src/LIB/SURCOUCHE/src/mode_io.f90
index c6cfe08936fa374ef1691f733e97788b3afaf64c..50829cae70d09f953f71213eee2eea50a30534c3 100644
--- a/src/LIB/SURCOUCHE/src/mode_io.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io.f90
@@ -683,6 +683,7 @@ CONTAINS
                    IF (YACTION == 'READ' .AND. .NOT. LLFIREAD) THEN
                       ! Open NetCDF File for reading
                       TZFD_IOZ%CDF => NEWIOCDF()
+                      CALL PRINT_MSG(NVERB_DEBUG,'IO','OPEN_ll','NF90_OPEN(IO_ZSPLIT) for '//TRIM(FILE)//cfile//'.nc')
                       IOSCDF = NF90_OPEN(TRIM(FILE)//cfile//".nc", NF90_NOWRITE, TZFD_IOZ%CDF%NCID)
                       IF (IOSCDF /= NF90_NOERR) THEN
    PRINT *, 'Error in opening (NF90_OPEN) ', TRIM(FILE)//cfile//'.nc', ' : ', NF90_STRERROR(IOSCDF)
@@ -690,13 +691,13 @@ CONTAINS
                       ELSE
                          IOS = 0
                       END IF
-                      PRINT *, 'NF90_OPEN(IO_ZSPLIT): ',TRIM(FILE)//cfile//'.nc'
                    END IF
                    
                    IF (YACTION == 'WRITE') THEN
                       ! YACTION == 'WRITE'
                       ! Create NetCDF File for writing
                       TZFD_IOZ%CDF => NEWIOCDF()
+                      CALL PRINT_MSG(NVERB_DEBUG,'IO','OPEN_ll','NF90_CREATE(IO_ZSPLIT) for '//TRIM(FILE)//cfile//'.nc')
                       IOSCDF = NF90_CREATE(TRIM(FILE)//cfile//".nc", &
                            &IOR(NF90_CLOBBER,NF90_NETCDF4), TZFD_IOZ%CDF%NCID)
                       IF (IOSCDF /= NF90_NOERR) THEN
@@ -705,7 +706,6 @@ CONTAINS
                       ELSE
                          IOS = 0
                       END IF
-                      PRINT *, 'NF90_CREATE(IO_ZSPLIT): ',TRIM(FILE)//cfile//'.nc'
                    END IF
                 END IF
 #endif
diff --git a/src/MNH/advec_4th_order_aux.f90 b/src/MNH/advec_4th_order_aux.f90
index 9da1b685187d1ed71f69670f5b10840cd969db92..3d3bd9de828081ad3d24ce59d20f9cc5607a4914 100644
--- a/src/MNH/advec_4th_order_aux.f90
+++ b/src/MNH/advec_4th_order_aux.f90
@@ -113,7 +113,6 @@ END MODULE MODI_ADVEC_4TH_ORDER_AUX
 !
 USE MODE_ll
 !
-USE MODD_LUNIT
 USE MODD_CONF
 USE MODD_ARGSLIST_ll, ONLY : HALO2LIST_ll
 USE MODE_IO_ll
@@ -167,21 +166,8 @@ SELECT CASE ( HLBCX(1) ) ! X direction LBC type: (1) for left side
 !
 CASE ('CYCL')          ! In that case one must have HLBCX(1) == HLBCX(2)
 !
-!!$  IF(NHALO == 1) THEN
     IW=IIB+1
     IE=IIE
-!    IE=IIE-1
-!!$  ELSE
-!!$    CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT,IRESP)
-!!$    WRITE(ILUOUT,*) 'ERROR : 4th order advection in CYCLic case '
-!!$    WRITE(ILUOUT,*) 'cannot be used with NHALO=2'
-!!$    !callabortstop
-!!$    CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-!!$    CALL ABORT
-!!$    STOP
-!!$!    IW=IIB
-!!$!    IE=IIE
-!!$  END IF  
 !
   IF(KGRID == 2) THEN
     IWF=IW-1
@@ -294,21 +280,8 @@ IF ( .NOT. L2D ) THEN
   CASE ('CYCL')          ! In that case one must have HLBCY(1) == HLBCY(2)
 !
 !
-!!$    IF(NHALO == 1) THEN
       IS=IJB+1
       IN=IJE
-!      IN=IJE-1
-!!$    ELSE
-!!$      CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT,IRESP)
-!!$      WRITE(ILUOUT,*) 'ERROR : 4th order advection in CYCLic case '
-!!$      WRITE(ILUOUT,*) 'cannot be used with NHALO=2'
-!!$!callabortstop
-!!$      CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-!!$      CALL ABORT
-!!$      STOP
-!!$!      IS=IJB
-!!$!      IN=IJE
-!!$    END IF
 !
     IF(KGRID == 3) THEN
       ISF=IS-1
diff --git a/src/MNH/budget.f90 b/src/MNH/budget.f90
index bed79a905fbfa201cad576828aa8f4ae23e4c5b2..e5af6155b39ee9d70aeefd303d508d2e60a815bf 100644
--- a/src/MNH/budget.f90
+++ b/src/MNH/budget.f90
@@ -95,6 +95,7 @@ USE MODD_LES
 !
 USE MODE_FM
 USE MODE_IO_ll
+USE MODE_MSG
 !
 USE MODI_LES_BUDGET
 USE MODI_CART_COMPRESS
@@ -220,14 +221,12 @@ SELECT CASE (KBUDN)
     IF( IBUSV <= NSV ) THEN 
       CALL BUDGET_CASE(XBURSV(:,:,:,:,IBUSV))
     ELSE
-      CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
+      ILUOUT0 = TLUOUT0%NLU
       WRITE(UNIT=ILUOUT0,FMT='("BUDGET: SCALAR VARIABLE",I2," IS ABSENT !!")') &
                                 IBUSV
       WRITE(UNIT=ILUOUT0,FMT='("CHECK FOR THE CALL BUDGET OF THAT VARIABLE")')
 !callabortstop
-      CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','BUDGET','')
     END IF
 END SELECT
 !
@@ -327,7 +326,7 @@ CONTAINS
       CBUACTION(KBUDN,NBUCTR_ACTV(KBUDN))/='CC'     ) THEN
     IF( YBUVAR_ADJUSTED(100-ILEN:99) /= YBUCOMMENT_ADJUSTED(100-ILEN:99) &
                                              .OR. ILEN==0 ) THEN
-      CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
+      ILUOUT0 = TLUOUT0%NLU
       WRITE(UNIT=ILUOUT0,FMT='("BUDGET: WRONG BUDGET IDENTIFICATION !!")')
       WRITE(UNIT=ILUOUT0,FMT='("BUDGET: PRESENT  VARIABLE: ",I2)') KBUDN
       WRITE(UNIT=ILUOUT0,FMT='("BUDGET: PRESENT  IDENTIFIER: ",A99)') &
@@ -337,9 +336,7 @@ CONTAINS
       WRITE(UNIT=ILUOUT0,FMT='("PLEASE CHECK THE CALL BUDGET OF THE VARIABLE")')
       WRITE(UNIT=ILUOUT0,FMT='("AND THE BUDGET PROCESS ORDER IN INI_BUDGET !")')
 !callabortstop
-      CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','BUDGET','')
     END IF
   END IF
 !
diff --git a/src/MNH/call_rttov11.f90 b/src/MNH/call_rttov11.f90
index 5493c3f64fad161e44847861475c9f70a78a7278..f50ba1f01edadfe27af258e87ba7ae64689f63e8 100644
--- a/src/MNH/call_rttov11.f90
+++ b/src/MNH/call_rttov11.f90
@@ -105,6 +105,7 @@ USE MODE_FMREAD
 USE MODE_ll
 USE MODE_FM
 USE MODE_IO_ll
+USE MODE_MSG
 USE MODE_POS
 !
 #ifdef MNH_RTTOV_11
@@ -321,16 +322,12 @@ DO JSAT=1,IJSAT ! loop over sensors
   CALL rttov_read_coefs (errorstatus, coef_rttov, opts, instrument=instrument)
   IF(errorstatus /= 0) THEN
     WRITE(*,*) 'error rttov_readcoeffs :',errorstatus
-    CALL CLOSE_ll(CLUOUT)
-    CALL ABORT
-    STOP "error rttov_readcoeffs"
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','CALL_RTTOV11','error rttov_readcoeffs')
   ENDIF
 !  CALL rttov_initcoeffs (errorstatus,coef_rttov)
 !  IF( errorstatus/= 0) THEN
 !    WRITE(*,*) 'error rttov_initcoeffs :',errorstatus
-!    CALL CLOSE_ll(CLUOUT)
-!    CALL ABORT
-!    STOP "error rttov_initcoeffs"
+!    CALL PRINT_MSG(NVERB_FATAL,'GEN','CALL_RTTOV11','error rttov_initcoeffs')
 !  ENDIF
   
 ! Read coef file for cloud/rain absorption/scattering
diff --git a/src/MNH/call_rttov8.f90 b/src/MNH/call_rttov8.f90
index c41920a726cf7adc42f02bb0ec3b92e7d0f7d23c..2d857e5312646cf7249bc325701dba897c90c498 100644
--- a/src/MNH/call_rttov8.f90
+++ b/src/MNH/call_rttov8.f90
@@ -92,7 +92,6 @@ USE MODD_CST
 USE MODD_IO_ll, ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_GRID_n
-USE MODD_LUNIT_n
 USE MODD_DEEP_CONVECTION_n
 USE MODD_REF_n
 USE MODD_RADIATIONS_n,  ONLY : XSEA
@@ -110,6 +109,7 @@ USE MODE_FMREAD
 USE MODE_ll
 USE MODE_FM
 USE MODE_IO_ll
+USE MODE_MSG
 USE MODE_POS
 !
 #ifdef MNH_RTTOV_8
@@ -1161,17 +1161,13 @@ DO JSAT=1,IJSAT ! loop over sensors
   IF(errorstatus /= 0) THEN
     WRITE(*,*) 'error rttov_readcoeffs :',errorstatus
 !callabortstop
-    CALL CLOSE_ll(CLUOUT)
-    CALL ABORT
-    STOP "error rttov_readcoeffs"
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','CALL_RTTOV8','error rttov_readcoeffs')
   ENDIF
   CALL rttov_initcoeffs (errorstatus,coef)
   IF(errorstatus /= 0) THEN
     WRITE(*,*) 'error rttov_initcoeffs :',errorstatus
 !callabortstop
-    CALL CLOSE_ll(CLUOUT)
-    CALL ABORT
-    STOP "error rttov_initcoeffs"
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','CALL_RTTOV8','error rttov_initcoeffs')
   ENDIF
 
   ! Read coef file for cloud/rain absorption/scattering
diff --git a/src/MNH/close_file_mnh.f90 b/src/MNH/close_file_mnh.f90
index 39c99465dfc857b9f5d79f7c47c0bfa1b503c611..486db2897e554412c51a18e434d402e164c7be4c 100644
--- a/src/MNH/close_file_mnh.f90
+++ b/src/MNH/close_file_mnh.f90
@@ -60,6 +60,8 @@ END MODULE MODI_CLOSE_FILE_MNH
 USE MODE_ll
 USE MODE_FM
 USE MODE_IO_ll
+USE MODE_MSG
+!
 USE MODD_LUNIT,       ONLY : CLUOUT0
 USE MODD_CONF,        ONLY : CPROGRAM
 USE MODD_IO_NAM,      ONLY : CFILE
@@ -118,9 +120,7 @@ ELSE
   WRITE(ILUOUT,*) 'Error for closing a file: '
   WRITE(ILUOUT,*) 'logical unit ',KUNIT,' does not correspond to file', CFILE
 !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','CLOSE_FILE_MNH','')
 END IF
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/compare_with_pgd_domain.f90 b/src/MNH/compare_with_pgd_domain.f90
index 23a5b110e41f5f677dd9c5f45261b6f9b14b0a20..e30056cd612825ef8caeadd34b7dfc67184bc929 100644
--- a/src/MNH/compare_with_pgd_domain.f90
+++ b/src/MNH/compare_with_pgd_domain.f90
@@ -53,7 +53,7 @@ END MODULE MODI_COMPARE_WITH_PGD_DOMAIN
 !!      Module MODD_CONF      : contains configuration variables for all models.
 !!         NVERB : verbosity level for output-listing
 !!      Module MODD_LUNIT     :  contains logical unit names for all models
-!!         CLUOUT0 : name of output-listing
+!!         TLUOUT0 : output-listing file
 !!      Module MODD_GRID
 !!         XBETA   : rotation of the domain
 !!         XRPK    : parameter of projection
@@ -87,6 +87,7 @@ END MODULE MODI_COMPARE_WITH_PGD_DOMAIN
 !
 USE MODE_FM
 USE MODE_IO_ll
+USE MODE_MSG
 !
 USE MODD_CONF        ! declaration modules
 USE MODD_LUNIT
@@ -123,7 +124,7 @@ REAL, DIMENSION(SIZE(XPGDYHAT)) :: ZDIFFY ! difference between the two y coordin
 !*       1.    INITIALIZATIONS
 !              ---------------
 !
-CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
+ILUOUT0 = TLUOUT0%NLU
 ZEPS=1.E-7
 !
 !-------------------------------------------------------------------------------
@@ -187,9 +188,7 @@ IF (     (ABS(PLAT0-XLAT0)>ZEPS*MAX(1.,ABS(XLAT0)))                      &
   WRITE(ILUOUT0,*) '  +----------------------------------------------------------+'
   WRITE(ILUOUT0,*)
 !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','COMPARE_WITH_PGD_DOMAIN','')
 ENDIF
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/compute_r00.f90 b/src/MNH/compute_r00.f90
index 8b851d765dbfa8a8ab8ea707b8b1ca261dc04218..ef71107751d0a038f1db00d4b556a18df72299b7 100644
--- a/src/MNH/compute_r00.f90
+++ b/src/MNH/compute_r00.f90
@@ -42,7 +42,7 @@ END MODULE MODI_COMPUTE_R00
 !!    ------------------ 
 !!     MODD_STO_FILE : CFILES
 !!     MODD_GRID1 : XZZ, XXHAT,XYHAT
-!!     MODD_LUNIT1: CINIFILE, CLUOUT
+!!     MODD_LUNIT1: CINIFILE
 !!     MODD_FIELD1: XSVM
 !!     MODD_CONF : NVERB
 !!     MODD_PARAMETERS : NUNDEF
@@ -86,6 +86,7 @@ USE MODE_FMREAD
 USE MODE_IO_ll
 USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
 USE MODE_ll
+USE MODE_MSG
 USE MODD_TYPE_DATE
 !
 IMPLICIT NONE
@@ -153,9 +154,7 @@ IF (IFILECUR==0) THEN
   PRINT*,'PROBLEM WITH THE FOLLOWING FILE: ',CINIFILE
   PRINT*,CFILES
 !callabortstop
-  CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','COMPUTE_R00','')
 ENDIF
 !
 ! Search the number of the files(NFILES), where the Lagrangian tracers 
@@ -519,9 +518,7 @@ DO JK=1,NKU
         PRINT*,'XREL, YREL, Z =',ZXREL,ZYREL,ZZ
         PRINT*,'ZZLXY(NKU)',ZZLXY(NKU)
 !callabortstop
-        CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-        CALL ABORT
-        STOP
+        CALL PRINT_MSG(NVERB_FATAL,'GEN','COMPUTE_R00','')
       END IF 
       !
       ZEPS3=(ZZ-ZZLXY(IK))/(ZZLXY(IK+1)-ZZLXY(IK))
diff --git a/src/MNH/compute_spectre.f90 b/src/MNH/compute_spectre.f90
index 280e620f4ca36ffa5e3291ac8757086c359147b7..282da52f4583dbe66dd263fedc66f261c1a670ad 100644
--- a/src/MNH/compute_spectre.f90
+++ b/src/MNH/compute_spectre.f90
@@ -58,9 +58,10 @@ USE MODD_PARAMETERS
 USE MODD_CONF
 USE MODE_ll
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll
-USE MODD_LUNIT_n,  ONLY: CLUOUT
+USE MODD_LUNIT_n,  ONLY: TLUOUT
 USE MODE_FM
 USE MODE_IO_ll
+USE MODE_MSG
 USE MODE_SPLITTINGZ_ll
 !
 USE MODI_FFT55
@@ -146,6 +147,8 @@ INTEGER                         :: IRESP     ! return code in FM routines
 REAL                            :: ZMOY_C, ZMOY_S, ZVAR_C, ZVAR_S, ZVAR_S2 !computation of statistical moments
 !-------------------------------------------------------------------------------
 !
+ILUOUT = TLUOUT%NLU
+!
 !*       1.    COMPUTE LOOP BOUNDS
 !              -------------------
 !
@@ -179,13 +182,8 @@ ALLOCATE(ZTRIGSY(3*IJMAX_ll))
 
 !-- Safety limitation
 IF(PDXHATM/PDYHATM>1.2 .OR. PDYHATM/PDXHATM>1.2) THEN
-  WRITE(UNIT=ILUOUT,FMT="('   ERROR',/,                               &
-  & '     DELTA X AND DELTA Y MUST BE CLOSE'         ,/,&
-  & '     TOGETHER.')")
   !callabortstop
-  CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','COMPUTE_SPECTRE','delta X and delta Y must be close')
 ENDIF
 !
 !-------------------------------------------------------------------------------
@@ -196,15 +194,12 @@ ENDIF
 !
 CALL SET99(ZTRIGSX,IIFAXX,IIMAX_ll)
 IF (IIFAXX(10) /=  IIMAX_ll) THEN
-      CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)  
       WRITE(UNIT=ILUOUT,FMT="('   ERROR',/,                               &
       & '     THE FORM OF THE FFT REQUIRES'         ,/,&
       & '     THAT NIMAX MUST BE FACTORIZABLE'         ,/,&
       & '     AS A PRODUCT OF POWERS OF 2, 3 AND 5.')")
       !callabortstop
-      CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','COMPUTE_SPECTRE','')
 END IF 
 !
 !     extra trigs for shifted (co) sine transform (FFT55)
@@ -222,15 +217,12 @@ END IF
 IF (.NOT. L2D) THEN 
   CALL SET99(ZTRIGSY,IIFAXY,IJMAX_ll)
   IF (IIFAXY(10) /=  IJMAX_ll) THEN
-      CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)  
       WRITE(UNIT=ILUOUT,FMT="('   ERROR',/,                               &
       & '     THE FORM OF THE FFT REQUIRES'         ,/,&
       & '     THAT NJMAX MUST BE FACTORIZABLE'         ,/,&
       & '     AS A PRODUCT OF POWERS OF 2, 3 AND 5.')")
       !callabortstop
-      CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','COMPUTE_SPECTRE','')
   END IF 
  !
  !     extra trigs for shifted (co) sine transform
diff --git a/src/MNH/define_maskn.f90 b/src/MNH/define_maskn.f90
index aff1cd3ffcafd79fb657b1acc23fddcdf014335b..965c6deed63d01d91e4aa2b9496a58c2f6c44edf 100644
--- a/src/MNH/define_maskn.f90
+++ b/src/MNH/define_maskn.f90
@@ -68,6 +68,7 @@ USE MODD_NEST_PGD_n
 !
 USE MODE_FM
 USE MODE_IO_ll
+USE MODE_MSG
 USE MODE_MODELN_HANDLER
 !
 USE MODD_VAR_ll, ONLY : YSPLITTING
@@ -95,7 +96,7 @@ TYPE(ZONE_ll) :: TZCOARSESONGLB ! global son domain in father grid
 TYPE(ZONE_ll), DIMENSION(1) :: TZCOARSESONLCL ! intersection of global son domain and local father subdomain
 !-------------------------------------------------------------------------------
 !
-CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
+ILUOUT0 = TLUOUT0%NLU
 IMI=GET_CURRENT_MODEL_INDEX()
 !
 ALLOCATE ( NNESTMASK (NIMAX+2*JPHEXT,NJMAX+2*JPHEXT,1+COUNT(NDAD(:)==IMI)))
@@ -145,11 +146,8 @@ DO JLOOP=1,NMODEL
 END DO
 !
 IF (ANY (SUM(NNESTMASK(:,:,:),DIM=3)>1) ) THEN
-  WRITE(ILUOUT0,*) 'Two nested models in the same father are overlapping each other'
 !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','DEFINE_MASK_n','two nested models with the same father are overlapping each other')
 END IF
 !
 NNESTMASK(:,:,1) = 1.-SUM(NNESTMASK(:,:,:),DIM=3)
diff --git a/src/MNH/diag.f90 b/src/MNH/diag.f90
index 57d1784f95aff985f7a01fc3c96cf718ccef6fa1..ee4d8c32b3b31323c2768208a418135850164380 100644
--- a/src/MNH/diag.f90
+++ b/src/MNH/diag.f90
@@ -420,13 +420,8 @@ IF (LTRAJ) THEN
   !
   IF (JF/=1) THEN
     IF (CINIFILE==CFILES(JF-1)) THEN
-      PRINT*,'*****************************'
-      PRINT*,'* INITIAL FILE NON TREATED  *'
-      PRINT*,'*****************************'
 !callabortstop
-      CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','DIAG','initial file not treated')
     END IF
   END IF
 !
@@ -439,10 +434,8 @@ END IF
 !              -----------
 !
 IF ( LEN_TRIM(CINIFILE)==0 ) THEN
-       !callabortstop
-      CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-      CALL ABORT
- STOP
+  !callabortstop
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','DIAG','LEN_TRIM(CINIFILE)==0')
 ENDIF
 !
 INPRAR = 24 +2*(4+NRR+NSV)
@@ -461,7 +454,7 @@ ZTIME1=ZTIME2
 !
 CALL INIT_MNH
 !
-CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
+ILUOUT0 = TLUOUT0%NLU
 !
 WRITE(ILUOUT0,*) ' '
 WRITE(ILUOUT0,*) '****************************************'
@@ -489,10 +482,7 @@ IF (LRADAR .AND. NVERSION_RAD==2 .AND. NPROC/=1) THEN
       PRINT*, '-> JOB ABORTED'
       PRINT*, '***************************************'
      !callabortstop
-      CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
-
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','DIAG','')
 ENDIF
 !-------------------------------------------------------------------------------
 !
@@ -747,14 +737,12 @@ IF (GCLOSE_OUT) THEN
   CALL IO_FILE_CLOSE_ll(TINIFILE)
 END IF
 !
-CALL CLOSE_ll (CLUOUT,IOSTAT=IRESP)
+CALL IO_FILE_CLOSE_ll(TLUOUT)
 !
 CALL SECOND_MNH2(ZTIME2)
 ZTIME2=ZTIME2-ZTIME0
 !-------------------------------------------------------------------------------
 !
-!CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
-!
 !WRITE(ILUOUT0,*) '+--------------------------------------------------------------+'
 !WRITE(ILUOUT0,*) '|                                                              |'
 !WRITE(ILUOUT0,*) '|            COMPUTING TIME ANALYSIS in DIAG                   |'
@@ -799,9 +787,9 @@ WRITE(ILUOUT0,*) ' '
 WRITE(ILUOUT0,*) '***************************** **************'
 WRITE(ILUOUT0,*) '*            EXIT  DIAG CORRECTLY          *'
 WRITE(ILUOUT0,*) '**************************** ***************'
-!WRITE(ILUOUT0,*) '  (see time analysis in ',TRIM(CLUOUT0),' )'
+!WRITE(ILUOUT0,*) '  (see time analysis in ',TRIM(TLUOUT0%CNAME),' )'
 WRITE(ILUOUT0,*) ' '
-CALL CLOSE_ll (CLUOUT0,IOSTAT=IRESP)
+CALL IO_FILE_CLOSE_ll(TLUOUT0)
 !-------------------------------------------------------------------------------
 !
 !*      10.    FINALIZE THE PARALLEL SESSION
diff --git a/src/MNH/forcing.f90 b/src/MNH/forcing.f90
index 3aac75017d4fda72fe0973cd0a9254d3ba1b46c9..38ca0ed7fe6cc44badc5a3f3a14d68705cebd5a2 100644
--- a/src/MNH/forcing.f90
+++ b/src/MNH/forcing.f90
@@ -115,7 +115,7 @@ END MODULE MODI_FORCING
 !!        XGXTHFRC,XGYTHFRC: large scale gradient of Theta
 !!        XTENDTHFRC,XTENDRVFRC: large scale tendencies for Theta and Rv
 !!      Module MODD_LUNIT     :  contains logical unit names for all models
-!!         CLUOUT0 : name of output-listing
+!!         TLUOUT0 : output-listing file
 !!      Module MODD_PARAMETERS: declaration of parameter variables
 !!        JPVEXT: define the number of marginal points out of the 
 !!        physical domain along the vertical direction.    
@@ -152,6 +152,7 @@ END MODULE MODI_FORCING
 !
 USE MODE_FM
 USE MODE_IO_ll
+USE MODE_MSG
 !
 USE MODD_CONF
 USE MODD_DYN
@@ -242,14 +243,14 @@ IIU=SIZE(PUT,1)
 IJU=SIZE(PUT,2) 
 IKU=SIZE(PUT,3) 
 !
+ILUOUT0 = TLUOUT0%NLU
+!
 !*        1.   PREPARATION OF FORCING
 !              ----------------------
 !
 IF (GSFIRSTCALL) THEN
 !
   GSFIRSTCALL = .FALSE.
-!
-  CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
 !
 !*        1.1  printout number of forcing profiles
 !
@@ -390,7 +391,6 @@ ELSE
   IF( .NOT. TEMPORAL_LT ( TPDTCUR, TDTFRC(JXP) ) ) THEN
     JSX = JSX +1
     JXP= JSX +1
-    CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
     WRITE(UNIT=ILUOUT0,FMT='(" THE FORCING FIELDS ARE INTERPOLATED NOW" ,&
     & " BETWEEN SOUNDING NUMBER ",I2," AND SOUNDING NUMBER ",I2)') JSX,JXP
     CALL TEMPORAL_DIST ( TDTFRC(JXP)%TDATE%YEAR,TDTFRC(JXP)%TDATE%MONTH,   &
@@ -728,9 +728,7 @@ IF( LRELAX_THRV_FRC .OR. LRELAX_UV_FRC ) THEN
     CASE DEFAULT
       ! the following error should not occur, since tests are made earlier
 !callabortstop
-      CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-      CALL ABORT
-      STOP "Error in FORCING: wrong CRELAX_HEIGHT_TYPE option."
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','FORCING','wrong CRELAX_HEIGHT_TYPE option')
   END SELECT
   WHERE ( MZF(1,IKU,1,PZZ(:,:,:)) .LE. XRELAX_HEIGHT_FRC )
     GRELAX_MASK_FRC = .FALSE.
@@ -863,7 +861,6 @@ CONTAINS
   END DO
 !
   IF (NVERB >= 10) THEN
-    CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
     WRITE(ILUOUT0,*) 'DEFINE_RELAX_FORCING: IKGRAD_TH_MAX = ',IKGRAD_TH_MAX
   END IF
 !
diff --git a/src/MNH/horibl.f90 b/src/MNH/horibl.f90
index 05d80a55db5e8d1df0572a542168f4e8b51a238e..6ac7750c2b988017e5dcc0c14b7fbf808be1e570 100644
--- a/src/MNH/horibl.f90
+++ b/src/MNH/horibl.f90
@@ -144,6 +144,7 @@ END MODULE MODI_HORIBL
 !
 USE MODE_FM
 USE MODE_IO_ll
+USE MODE_MSG
 !
 USE MODD_LUNIT
 !
@@ -220,7 +221,6 @@ REAL                               :: ZVECT     ! -1 if input is vectorial
 LOGICAL                            :: LDLSM     ! Specify if land/sea mask is present or not
  ! Variables used for the out put listing
 INTEGER                            :: ILUOUT0   ! Logical unit number
-INTEGER                            :: IRET      ! Return code of FMLOOK
  ! Loop counters
 INTEGER                            :: JOPOS     ! Output position
 INTEGER                            :: JIPOS     ! Input position
@@ -239,7 +239,7 @@ INTEGER                            :: IRESP     ! Return code of FM-routines
 !
 CALL SECOND_MNH(ZTIME1)
 !
-CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRET)
+ILUOUT0 = TLUOUT0%NLU
 !
 !------------------------------------------------------------------------------
 !
@@ -525,12 +525,8 @@ DO JLOOP1 = 1, KOLEN
 !
   IF ((IOSS<1).OR.(IONN>IINLA).OR. &
      (IOSS<1).OR.(IONN>IINLA)) THEN
-    WRITE (ILUOUT0,'(A)') &
-      ' -> [HORIBL.F90] Input domain is smaller than output one - latitude. Abort'
 !callabortstop
-    CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-    CALL ABORT
-    STOP
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','HORIBL','input domain is smaller than output one')
  END IF
 !
       ! 3.1.2. northern
@@ -575,26 +571,16 @@ DO JLOOP1 = 1, KOLEN
         (IP3 <-2) .OR. (IP6 >IINLO(ION )+1) .OR. &
         (IP7 <-2) .OR. (IP10>IINLO(IOS )+1) .OR. &
       (IP11<-2) .OR. (IP12>IINLO(IOSS)+1)) THEN
-      WRITE (ILUOUT0,'(A,A)')                                         &
-         ' -> [HORIBL.F90] Input domain is smaller than output one ', &
-         '- longitude global, abort'
 !callabortstop
-      CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','HORIBL','input domain is smaller than output one - longitude global')
     END IF
   ELSE
     IF ((IP1 <0) .OR. (IP2 >IINLO(IONN)-1) .OR. &
         (IP3 <0) .OR. (IP6 >IINLO(ION )-1) .OR. &
         (IP7 <0) .OR. (IP10>IINLO(IOS )-1) .OR. &
         (IP11<0) .OR. (IP12>IINLO(IOSS)-1)) THEN
-      WRITE (ILUOUT0,'(A,A)')                                        &
-        ' -> [HORIBL.F90] Input domain is smaller than output one ', &
-        '- longitude local, abort'
 !callabortstop
-      CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','HORIBL','input domain is smaller than output one - longitude local')
     END IF
   END IF
 !
diff --git a/src/MNH/ini_lesn.f90 b/src/MNH/ini_lesn.f90
index e2a4b6890d4fadc3979eace5ea31d2b63aebdc36..1d839e333f81809ad7b2069fd680f0dbe9eb198f 100644
--- a/src/MNH/ini_lesn.f90
+++ b/src/MNH/ini_lesn.f90
@@ -41,6 +41,7 @@
 !
 USE MODE_ll
 USE MODE_IO_ll
+USE MODE_MSG
 USE MODE_MODELN_HANDLER
 !
 USE MODD_LES
@@ -103,7 +104,7 @@ CALL GET_GLOBALDIMS_ll(IIMAX_ll,IJMAX_ll)
 IIU_ll = IIMAX_ll+2*JPHEXT
 IJU_ll = IJMAX_ll+2*JPHEXT
 !
-CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)
+ILUOUT = TLUOUT%NLU
 !
 NLES_TOTADV  = 1
 NLES_RELA  = 2
@@ -163,9 +164,7 @@ IF (CTURB=='NONE') THEN
   WRITE(ILUOUT,FMT=*) 'You have chosen CTURB="NONE". You must choose a turbulence scheme.'
   WRITE(ILUOUT,FMT=*) 'STOP'
 !callabortstop
-  CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','WRITE_LB_n','')
 END IF
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90
index 8de68ce96f9a66b05f6ca0e28e71db95e8b35079..1ba26445a8dd9ee4b1dda0dadd69d4b91923ffdf 100644
--- a/src/MNH/ini_modeln.f90
+++ b/src/MNH/ini_modeln.f90
@@ -546,9 +546,7 @@ IF (LFORCING) THEN ! Retrieve the number of time-dependent forcings.
      "INI_MODEL_n ERROR: you want to read forcing variables from FMfile", &
      "                   but no fields have been found by IO_READ_FIELD"
 !callabortstop
-    CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-    CALL ABORT
-    STOP 1
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_MODEL_n','')
   END IF
 END IF
 !
@@ -561,9 +559,7 @@ END IF
       "INI_MODELn ERROR: you want to read forcing ADV variables from FMfile", &
       "                   but no fields have been found by IO_READ_FIELD"
     !callabortstop
-    CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-    CALL ABORT
-      STOP 1
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_MODEL_n','')
     END IF
     WRITE(ILUOUT,*) 'NADVFRC = ', NADVFRC
 END IF
@@ -576,9 +572,7 @@ IF ( L2D_REL_FRC ) THEN ! Retrieve the number of time-dependent forcings.
       "INI_MODELn ERROR: you want to read forcing REL variables from FMfile", &
       "                   but no fields have been found by IO_READ_FIELD"
     !callabortstop
-    CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-    CALL ABORT
-      STOP 1
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_MODEL_n','')
     END IF
     WRITE(ILUOUT,*) 'NRELFRC = ', NRELFRC
 END IF
@@ -593,9 +587,7 @@ IF (XALZBOT>=XZHAT(IKU) .AND. LVE_RELAX) THEN
   WRITE(ILUOUT,FMT=*) "                  but bottom of layer XALZBOT(",XALZBOT,")"
   WRITE(ILUOUT,FMT=*) "                  is upper than model top    (",XZHAT(IKU),")"
 !callabortstop
-  CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_MODEL_n','')
 END IF
 IF (LVE_RELAX) THEN
  IF (XALZBOT>=XZHAT(IKU-4) ) THEN
@@ -1947,9 +1939,7 @@ IF (CSURF=='EXTE' .AND. (CPROGRAM=='MESONH' .OR. CPROGRAM=='DIAG  ')) THEN
       WRITE(ILUOUT,FMT=*) "INI_MODEL_n ERROR TO OPEN THE FILE CINIFILEPGD=",CINIFILEPGD
       WRITE(ILUOUT,FMT=*) "CHECK YOUR NAMELIST NAM_LUNITn"
     !callabortstop
-      CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_MODEL_n','')
     ENDIF
   ELSE
   ! case after a spawning
@@ -1987,9 +1977,7 @@ IF (CSURF=='EXTE' .AND. (CPROGRAM=='SPAWN ')) THEN
     WRITE(ILUOUT,FMT=*) "INI_MODEL_n ERROR TO OPEN THE FILE CINIFILEPGD=",CINIFILEPGD
     WRITE(ILUOUT,FMT=*) "CHECK YOUR NAMELIST NAM_LUNIT2_SPA"
     !callabortstop
-    CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-    CALL ABORT
-    STOP
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_MODEL_n','')
   ENDIF
 ENDIF
 !
diff --git a/src/MNH/ini_segn.f90 b/src/MNH/ini_segn.f90
index 398af9c811d00c01ff01429232e28d1db3c86182..ec0e858ad15730f2a280e130265c86026417b87c 100644
--- a/src/MNH/ini_segn.f90
+++ b/src/MNH/ini_segn.f90
@@ -174,9 +174,9 @@ USE MODD_CONF
 USE MODD_CONF_n, ONLY : CSTORAGE_TYPE
 USE MODN_CONFZ
 USE MODD_DYN
-USE MODD_IO_ll,   ONLY : ISP,LIOCDF4,LLFIREAD,NVERB_FATAL,NVERB_WARNING,TFILEDATA
+USE MODD_IO_ll,   ONLY : ISP,LIOCDF4,LLFIREAD,NVERB_FATAL,NVERB_WARNING,TFILE_OUTPUTLISTING,TFILEDATA
 USE MODD_LUNIT
-USE MODD_LUNIT_n, ONLY : CINIFILE_n=> CINIFILE, TINIFILE_n => TINIFILE, CINIFILEPGD_n=> CINIFILEPGD
+USE MODD_LUNIT_n, ONLY : CINIFILE_n=> CINIFILE, TINIFILE_n => TINIFILE, CINIFILEPGD_n=> CINIFILEPGD, TLUOUT
 USE MODD_PARAM_n, ONLY : CSURF
 USE MODD_PARAMETERS
 USE MODD_REF,   ONLY : LBOUSS
@@ -264,9 +264,13 @@ TPINIFILE => NULL()
 !
 WRITE(YMI,'(I2.0)') KMI
 HLUOUT='OUTPUT_LISTING'//ADJUSTL(YMI)
-
-CALL OPEN_ll(UNIT=ILUOUT,FILE=HLUOUT,IOSTAT=IRESP,FORM='FORMATTED',ACTION='WRITE', &
-     MODE='GLOBAL')
+CALL IO_FILE_ADD2LIST(TLUOUT,HLUOUT,'OUTPUTLISTING','WRITE')
+CALL IO_FILE_OPEN_ll(TLUOUT)
+!
+!Set output file for PRINT_MSG
+TFILE_OUTPUTLISTING => TLUOUT
+!
+ILUOUT=TLUOUT%NLU
 !
 WRITE(UNIT=ILUOUT,FMT='(50("*"),/,"*",17X,"MODEL ",I1," LISTING",16X,"*",/,  &
             & 50("*"))') KMI
diff --git a/src/MNH/ini_seriesn.f90 b/src/MNH/ini_seriesn.f90
index e28bca423d9340cb280b10fae5eccc5ca5e76cce..56d0b75eabd6526db66011b3be3874791a340606 100644
--- a/src/MNH/ini_seriesn.f90
+++ b/src/MNH/ini_seriesn.f90
@@ -51,6 +51,7 @@
 !
 USE MODE_ll
 USE MODE_IO_ll
+USE MODE_MSG
 USE MODE_MODELN_HANDLER
 !
 USE MODD_TIME        ! Experiment and segment times (TDTEXP and TDTSEG)
@@ -62,7 +63,7 @@ USE MODD_PARAMETERS
 USE MODD_CONF_n, ONLY: LUSERV,LUSERC,LUSERR,LUSERI,LUSERS,LUSERG,LUSERH
 USE MODD_DIM_n, ONLY: NKMAX
 USE MODD_DYN_n, ONLY: XTSTEP,NSTOP
-USE MODD_LUNIT_n, ONLY: CLUOUT
+USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_PARAM_n, ONLY: CSURF
 USE MODD_PRECIP_n, ONLY: XINPRR,XINPRS,XINPRG
 USE MODD_TIME_n
@@ -109,7 +110,7 @@ IJB_ll = 1 ! + JPHEXT
 IIE_ll = IIMAX_ll ! + JPHEXT
 IJE_ll = IJMAX_ll ! + JPHEXT
 !
-CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)
+ILUOUT = TLUOUT%NLU
 !
 !
 !*       1.1   Dimensions
@@ -145,9 +146,7 @@ IF ( ( NFREQSERIES*XTSTEP < XSEGLEN )       .AND.                        &
                         NKCLS,NKCLA,NKLOW,NKMID,NKUP
    WRITE(ILUOUT,FMT=*) '**********************************************'
 !callabortstop
-   CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-   CALL ABORT
-   STOP
+   CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SERIES_n','')
 END IF
 !
 ALLOCATE(LINBOX(IIU,IJU))
@@ -183,9 +182,7 @@ IF (NBJSLICE > 0 ) THEN
         WRITE(ILUOUT,*) ' NJSLICEL=', NJSLICEL(JJ),'NJSLICEH=',NJSLICEH(JJ)
         WRITE(ILUOUT,*) ' NISL=',NISL(JJ),'NJSLICESL=',NJSLICESL(JJ),'NISH=',NISH(JJ),'NJSLICESH=',NJSLICESH(JJ)
 !callabortstop
-        CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-        CALL ABORT
-        STOP
+        CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SERIES_n','')
       END IF
       WRITE(UNIT=ILUOUT,FMT=*) 'INI_SERIESn: intersection with slice ',JJ
     ELSE ! the intersection is void
@@ -377,9 +374,7 @@ IF (ISB1.NE.NSTEMP_SERIE1) THEN
   WRITE(UNIT=ILUOUT,FMT=*) ' NUMBER OF SERIES1 DIFFERS FROM ALLOC, ISB1=', &
                             ISB1,' NSTEMP_SERIE1=',NSTEMP_SERIE1
 !callabortstop
-  CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SERIES_n','')
 END IF
 !
 !*       2.2   Temporal series (z,t)
@@ -426,9 +421,7 @@ IF (ISB2.NE.NSTEMP_SERIE2) THEN
   WRITE(ILUOUT,FMT=*) ' NUMBER OF SERIES2 DIFFERS FROM ALLOC, ISB2=',ISB2, &
                       ' NSTEMP_SERIE2=',NSTEMP_SERIE2
 !callabortstop
-  CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+   CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SERIES_n','')
 END IF
 !
 !*    2.3 Temporal series (x,t)
@@ -476,9 +469,7 @@ IF (ISB3.NE.NSTEMP_SERIE3) THEN
   WRITE(ILUOUT,FMT=*) ' NUMBER OF SERIES3 DIFFERS FROM ALLOC, ISB3=',ISB3, &
                       ' NTEMP_SERIE3=',NSTEMP_SERIE3
 !callabortstop
-  CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SERIES_n','')
 END IF
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/ini_size_spawn.f90 b/src/MNH/ini_size_spawn.f90
index b0ba2a6df49c7a6cea1636ab9754754241d2924d..ec110b5291b16f96ee330e5a14ccfd0509943a96 100644
--- a/src/MNH/ini_size_spawn.f90
+++ b/src/MNH/ini_size_spawn.f90
@@ -97,6 +97,7 @@ USE MODE_FMREAD
 USE MODE_GRIDPROJ
 USE MODE_IO_ll
 USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
+USE MODE_MSG
 USE MODE_MODELN_HANDLER
 USE MODE_SPLITTINGZ_ll
 !
@@ -147,7 +148,7 @@ TYPE(TFILEDATA),POINTER :: TZDOMAIN => NULL()
 IMI = GET_CURRENT_MODEL_INDEX()
 CALL GOTO_MODEL(2)
 !
-CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)
+ILUOUT = TLUOUT%NLU
 !
 !*   1.    INITIALIZATIONS :
 !
@@ -187,11 +188,8 @@ IF (LBAL_ONLY) THEN
   NYOR    =1
   IF (LEN_TRIM(CDADSPAFILE) >0 ) THEN
     IF (LEN_TRIM(CDADINIFILE) == 0 ) THEN
-      WRITE(ILUOUT,*) 'ERROR in INI_SIZE_SPAWN: YDADINIFILE not initialized in namelist NAM_LUNIT2_SPA'
 !callabortstop
-      CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SIZE_SPAWN','YDADINIFILE not initialized in namelist NAM_LUNIT2_SPA')
     ELSE
       CALL IO_READ_FIELD(TPINIFILE,'DAD_NAME',YDAD_NAME)
       IF (ADJUSTL(ADJUSTR(YDAD_NAME)) .NE. ADJUSTL(ADJUSTR(CDADINIFILE))) THEN
@@ -199,18 +197,13 @@ IF (LBAL_ONLY) THEN
         WRITE(ILUOUT,*) ' YDADINIFILE='//TRIM(CDADINIFILE)
         WRITE(ILUOUT,*) ' DAD_NAME of model1='//TRIM(YDAD_NAME)
 !callabortstop
-        CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-        CALL ABORT
-        STOP
+        CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SIZE_SPAWN','')
       ELSE
         !
         CALL COMPARE_DAD(CDADINIFILE,CDADSPAFILE,IRESP)
         IF (IRESP .NE. 0) THEN
-          WRITE(ILUOUT,*) 'ERROR in INI_SIZE_SPAWN: Unable to replace the DAD of model 1 with YDADSPAFILE'
 !callabortstop
-          CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-          CALL ABORT
-          STOP
+          CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SIZE_SPAWN','unable to replace the DAD of model 1 with YDADSPAFILE')
         ENDIF
         !
       ENDIF
diff --git a/src/MNH/ini_sizen.f90 b/src/MNH/ini_sizen.f90
index 146b6e7a8e735ceb5374c005f508d035c41378f8..7240fce03fbf0073358b3615e0d6b0612ddfffbf 100644
--- a/src/MNH/ini_sizen.f90
+++ b/src/MNH/ini_sizen.f90
@@ -123,6 +123,7 @@ USE MODE_ll
 USE MODE_IO_ll
 USE MODE_FMREAD
 USE MODE_FM
+USE MODE_MSG
 USE MODE_POS
 !
 !JUAN
@@ -163,18 +164,14 @@ CALL IO_READ_FIELD(TPINIFILE,'MY_NAME',CMY_NAME(KMI),IRESP)
 IF (IRESP /= 0)  THEN
   WRITE(ILUOUT,FMT=9000) 'MY_NAME',IRESP
 !callabortstop
-  CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SIZE_n','')
 END IF
 !
 CALL IO_READ_FIELD(TPINIFILE,'DAD_NAME',CDAD_NAME(KMI),IRESP)
 IF (IRESP /= 0)  THEN
   WRITE(ILUOUT,FMT=9000) 'DAD_NAME',IRESP
 !callabortstop
-  CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SIZE_n','')
 END IF
 !
 IF ( KMI > 1 ) THEN
@@ -185,9 +182,7 @@ IF ( KMI > 1 ) THEN
     WRITE(UNIT=ILUOUT,FMT=*) 'CDAD_NAME(KMI)='//TRIM(CDAD_NAME(KMI))
     WRITE(UNIT=ILUOUT,FMT=*) 'CMY_NAME(NDAD(KMI))='//TRIM(CMY_NAME(NDAD(KMI)))
 !callabortstop
-    CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-    CALL ABORT
-    STOP
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SIZE_n','')
   END IF
 END IF
 !
@@ -210,9 +205,7 @@ IF ( IJPHEXT .NE. JPHEXT ) THEN
         & JPHEXT=',JPHEXT
    WRITE(ILUOUT,FMT=*)' different from LFI file=',TPINIFILE%CNAME ,' value JPHEXT=',IJPHEXT
    WRITE(ILUOUT,FMT=*) '-> JOB ABORTED'
-   CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-   CALL ABORT   
-   STOP  
+   CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SIZE_n','')
    !WRITE(NLUOUT,FMT=*) ' JPHEXT HAS BEEN SET TO ', IJPHEXT
    !IJPHEXT = JPHEXT
 END IF
@@ -275,12 +268,8 @@ IF (KMI == 1) THEN
   ENDIF
   IF (L1D .AND. .NOT.GSMONOPROC) THEN
     WRITE(UNIT=ILUOUT,FMT=9003) KMI
-    WRITE(ILUOUT,FMT=*) 'THIS IS A 1D SIMULATION : IT  HAS TO BE &
-                      & PERFORMED WITH MONOPROCESSOR MODE'
 !callabortstop
-    CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-    CALL ABORT
-    STOP
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SIZE_n','this is a 1D simulation: it has to be performed in monoprocess mode')
   ENDIF
 !
   IF( (NIMAX_ll /= 1).AND.(NJMAX_ll == 1) .AND. .NOT.L2D) THEN
@@ -290,12 +279,8 @@ IF (KMI == 1) THEN
   ENDIF
   IF (L2D .AND. .NOT.GSMONOPROC) THEN
     WRITE(UNIT=ILUOUT,FMT=9003) KMI
-    WRITE(ILUOUT,FMT=*) 'THIS IS A 2D SIMULATION : IT  HAS TO BE &
-                      & PERFORMED WITH MONOPROCESSOR MODE'
 !callabortstop
-    CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-    CALL ABORT
-    STOP
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SIZE_n','this is a 2D simulation: it has to be performed in monoprocess mode')
   ENDIF
 !
   CALL SET_FMPACK_ll(L1D,L2D,LPACK)
diff --git a/src/MNH/init_mnh.f90 b/src/MNH/init_mnh.f90
index 8581cf671cafd0683a94f54dfa4f2d4148fd9f64..8a7b928f01c2a58b4db009faa7292dd1c32adf0b 100644
--- a/src/MNH/init_mnh.f90
+++ b/src/MNH/init_mnh.f90
@@ -82,13 +82,14 @@
 !              ------------
 USE MODD_CONF
 USE MODD_DYN_n, ONLY: CPRESOPT,NITR ! only for spawning purpose
-USE MODD_IO_ll, ONLY: TPTR2FILE
+USE MODD_IO_ll, ONLY: TFILE_OUTPUTLISTING,TPTR2FILE
 USE MODD_LBC_n, ONLY: CLBCX,CLBCY   ! only for spawning purpose
 USE MODD_LUNIT
 USE MODD_LUNIT_n
 USE MODD_PARAMETERS
 !
 USE MODE_IO_ll
+USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
 USE MODE_ll
 USE MODE_FM
 !
@@ -137,8 +138,11 @@ CHARACTER(LEN=4), DIMENSION(:), POINTER :: DPTR_CLBCX,DPTR_CLBCY
 !
 IF (CPROGRAM/='REAL  ') THEN
   CLUOUT0 = 'OUTPUT_LISTING0'
-  CALL OPEN_ll(UNIT=ILUOUT0,FILE=CLUOUT0,IOSTAT=IRESP,FORM='FORMATTED', &
-               ACTION='WRITE',MODE='GLOBAL')
+  CALL IO_FILE_ADD2LIST(TLUOUT0,'OUTPUT_LISTING0','OUTPUTLISTING','WRITE')
+  CALL IO_FILE_OPEN_ll(TLUOUT0)
+  !Set output file for PRINT_MSG
+  TFILE_OUTPUTLISTING => TLUOUT0
+  ILUOUT0=TLUOUT0%NLU
 ELSE
   CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
 END IF
diff --git a/src/MNH/mnhclose_namelist.f90 b/src/MNH/mnhclose_namelist.f90
index 54c36f3e476bf08282a10a9e016d926cd6e626f5..aa52de069b03901d2843bcb05dd09bb59c2a008b 100644
--- a/src/MNH/mnhclose_namelist.f90
+++ b/src/MNH/mnhclose_namelist.f90
@@ -60,6 +60,8 @@ END MODULE MODI_MNHCLOSE_NAMELIST
 USE MODE_ll
 USE MODE_FM
 USE MODE_IO_ll
+USE MODE_MSG
+!
 USE MODD_LUNIT,       ONLY : CLUOUT0
 USE MODD_CONF,        ONLY : CPROGRAM
 USE MODD_IO_NAM,      ONLY : CNAM
@@ -106,9 +108,7 @@ ELSE
   WRITE(ILUOUT,*) 'Error for closing a namelist file: '
   WRITE(ILUOUT,*) 'logical unit ',KLUNAM,' does not correspond to namelist file', CNAM 
 !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','MNHCLOSE_NAMELIST','')
 END IF
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/modd_lunit.f90 b/src/MNH/modd_lunit.f90
index fe133c5385b3bca541f61ad546d162cebaf59c3c..17ab524cccee1b52de4fd69adc6973dfabfe90e5 100644
--- a/src/MNH/modd_lunit.f90
+++ b/src/MNH/modd_lunit.f90
@@ -41,8 +41,12 @@
 !*       0.   DECLARATIONS
 !             ------------
 !
+USE MODD_IO_ll, ONLY: TFILEDATA
+!
 IMPLICIT NONE 
+!
 CHARACTER(LEN=16),SAVE :: CLUOUT0    ! Name of output_listing file
+TYPE(TFILEDATA),POINTER :: TLUOUT0 => NULL() ! output_listing file
 CHARACTER(LEN=28),SAVE :: COUTFMFILE ! name of the output FM-file being written
 CHARACTER(LEN=28),SAVE :: CPGDFILE   ! name of the PGD file for PREP_REAL_CASE
 !
diff --git a/src/MNH/modd_lunitn.f90 b/src/MNH/modd_lunitn.f90
index 1003455809274f4c3b5174c6cb1044cf9393f8b0..0a0437b7e3aebeb84629f6a9dd468863fcf6aa9b 100644
--- a/src/MNH/modd_lunitn.f90
+++ b/src/MNH/modd_lunitn.f90
@@ -60,6 +60,7 @@ TYPE LUNIT_t
   TYPE(TFILEDATA),POINTER :: TDIAFILE => NULL() ! diachronic output file
 !
   CHARACTER(LEN=16) :: CLUOUT = ''      ! Name of output_listing file
+  TYPE(TFILEDATA),POINTER :: TLUOUT => NULL() ! output_listing file
 !JUAN
   CHARACTER(LEN=28),DIMENSION(:),POINTER :: CCPLFILE =>NULL() ! Names of the
                                                            ! coupling FM-files
@@ -79,12 +80,16 @@ TYPE(TFILEDATA),   POINTER :: TINIFILEPGD => NULL()
 CHARACTER(LEN=24), POINTER :: COUTFILE=>NULL()
 TYPE(TFILEDATA),   POINTER :: TDIAFILE=>NULL()
 CHARACTER(LEN=16), POINTER :: CLUOUT=>NULL()
+TYPE(TFILEDATA),   POINTER :: TLUOUT=>NULL()
 CHARACTER(LEN=28),DIMENSION(:), POINTER :: CCPLFILE=>NULL()
 TYPE(TPTR2FILE),  DIMENSION(:), POINTER :: TCPLFILE=>NULL()
 
 CONTAINS
 
 SUBROUTINE LUNIT_GOTO_MODEL(KFROM, KTO)
+!
+USE MODD_IO_ll, ONLY : TFILE_OUTPUTLISTING
+!
 INTEGER, INTENT(IN) :: KFROM, KTO
 !
 !JUAN
@@ -94,7 +99,9 @@ ALLOCATE (LUNIT_MODEL(KTO)%TCPLFILE(JPCPLFILEMAX))
 LUNIT_FIRST_CALL(KTO) = .FALSE.
 ENDIF
 !JUAN
-
+!
+TFILE_OUTPUTLISTING => LUNIT_MODEL(KTO)%TLUOUT
+!
 ! Save current state for allocated arrays
 !
 ! Current model is set to model KTO
@@ -105,6 +112,7 @@ TINIFILEPGD=>LUNIT_MODEL(KTO)%TINIFILEPGD
 COUTFILE=>LUNIT_MODEL(KTO)%COUTFILE
 TDIAFILE=>LUNIT_MODEL(KTO)%TDIAFILE
 CLUOUT=>LUNIT_MODEL(KTO)%CLUOUT
+TLUOUT=>LUNIT_MODEL(KTO)%TLUOUT
 CCPLFILE=>LUNIT_MODEL(KTO)%CCPLFILE
 TCPLFILE=>LUNIT_MODEL(KTO)%TCPLFILE
 
diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90
index afd38b62b95ac7300a02acc1ab332f6122f0e4c1..89fcd75131782fa0e15268f43799068215e56369 100644
--- a/src/MNH/modeln.f90
+++ b/src/MNH/modeln.f90
@@ -569,7 +569,7 @@ CALL UPDATE_NSV(IMI)
 !
 !*       1.1   RECOVER THE LOGICAL UNIT NUMBER FOR THE OUTPUT PRINTS
 !
-CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)
+ILUOUT = TLUOUT%NLU
 !
 !*       1.2   SET ARRAY SIZE
 !
@@ -2080,8 +2080,8 @@ IF (OEXIT) THEN
   !
   !
   !
-  CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-  IF (IMI==NMODEL) CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
+  CALL IO_FILE_CLOSE_ll(TLUOUT)
+  IF (IMI==NMODEL) CALL IO_FILE_CLOSE_ll(TLUOUT0)
 END IF
 !
 END SUBROUTINE MODEL_n
diff --git a/src/MNH/open_luoutn.f90 b/src/MNH/open_luoutn.f90
deleted file mode 100644
index 6cbab5f6bd248035c86872e260e5eab658a087bd..0000000000000000000000000000000000000000
--- a/src/MNH/open_luoutn.f90
+++ /dev/null
@@ -1,95 +0,0 @@
-!MNH_LIC Copyright 1994-2014 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.
-!-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 prep_nest_pgd 2006/05/18 13:07:25
-!-----------------------------------------------------------------
-!######################
-MODULE MODI_OPEN_LUOUTn
-!######################
-!
-
-INTERFACE
-      SUBROUTINE OPEN_LUOUT_n(HLUOUT)
-!
-CHARACTER(LEN=28), INTENT(IN) :: HLUOUT ! name of the output listing file
-END SUBROUTINE OPEN_LUOUT_n
-!
-END INTERFACE
-END MODULE MODI_OPEN_LUOUTn
-!     ##############################
-      SUBROUTINE OPEN_LUOUT_n(HLUOUT)
-!     ##############################
-!
-!!****  *OPEN_LUOUT_n* - openning of listing file of model _n
-!!                         
-!!
-!!    PURPOSE
-!!    -------
-!!
-!!**  METHOD
-!!    ------
-!!
-!!
-!!    EXTERNAL
-!!    --------
-!!
-!!    Routine FMATTR
-!!    Routine FMOPEN
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!      Module MODD_LUNIT     :  contains logical unit names for all models
-!!         CLUOUT0  : name of output-listing
-!!      Module MODD_LUNIT_n   :  contains logical unit names for all models
-!!         CLUOUT   : name of output-listing for model _n
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!      Book 2
-!!
-!!    AUTHOR
-!!    ------
-!!	
-!!      V.Masson  Meteo-France
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original     30/09/96
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODE_IO_ll
-!
-USE MODD_LUNIT
-USE MODD_LUNIT_n
-!
-IMPLICIT NONE
-!
-!*       0.1   Declaration of arguments
-!              ------------------------
-!
-CHARACTER(LEN=28), INTENT(IN) :: HLUOUT ! name of the output listing file
-!
-!*       0.2   Declaration of local variables
-!              ------------------------------
-!
-INTEGER :: IRESP      ! return-code if problems eraised
-INTEGER :: ILUOUT     ! logical unit for listing file for model _n
-!-------------------------------------------------------------------------------
-!
-CLUOUT=HLUOUT
-CALL OPEN_ll(UNIT=ILUOUT,FILE=CLUOUT,IOSTAT=IRESP,FORM='FORMATTED',ACTION='WRITE', &
-     MODE='GLOBAL')
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE OPEN_LUOUT_n
diff --git a/src/MNH/open_nestpgd_files.f90 b/src/MNH/open_nestpgd_files.f90
index c2de84da91a94947ddee99bfee4573aef46dd04f..f0c06499f257bc984bc502c52cbc021f0a9b48bc 100644
--- a/src/MNH/open_nestpgd_files.f90
+++ b/src/MNH/open_nestpgd_files.f90
@@ -78,14 +78,14 @@ END MODULE MODI_OPEN_NESTPGD_FILES
 !              ------------
 !
 USE MODD_LUNIT
+USE MODD_LUNIT_n
 USE MODD_CONF
 USE MODD_NESTING
 USE MODD_PARAMETERS
-USE MODD_IO_ll, ONLY : LIOCDF4,LLFIOUT,TFILEDATA,TPTR2FILE
+USE MODD_IO_ll, ONLY : LIOCDF4,LLFIOUT,TFILE_OUTPUTLISTING,TFILEDATA,TPTR2FILE
 !
 USE MODI_OPEN_LUOUTn
 !
-USE MODE_FIELD, ONLY : INI_FIELD_LIST
 USE MODE_IO_ll
 USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
 USE MODE_FM
@@ -125,6 +125,7 @@ CHARACTER(LEN=28) :: YPGD1, YPGD2, YPGD3, YPGD4, &
                      YPGD5, YPGD6, YPGD7, YPGD8
 !                    ! name of all pgd files
 !                    ! in the namelist
+CHARACTER(LEN=100) :: YMSG
 INTEGER           :: IDAD    ! father of one model
 INTEGER           :: JPGD    ! loop counter
 LOGICAL           :: GADD    !
@@ -159,8 +160,12 @@ CLUOUT0='OUTPUT_LISTING0'
 !*       2.    OPENNING OF CLUOUT0
 !              -------------------
 !
-CALL OPEN_ll(UNIT=ILUOUT0,FILE=CLUOUT0,IOSTAT=IRESP,FORM='FORMATTED',ACTION='WRITE', &
-     MODE='GLOBAL')
+CALL IO_FILE_ADD2LIST(TLUOUT0,'OUTPUT_LISTING0','OUTPUTLISTING','WRITE')
+CALL IO_FILE_OPEN_ll(TLUOUT0)
+!Set output file for PRINT_MSG
+TFILE_OUTPUTLISTING => TLUOUT0
+!
+ILUOUT0=TLUOUT0%NLU
 !
 !-------------------------------------------------------------------------------
 !
@@ -247,9 +252,7 @@ DO JPGD=1,JPMODELMAX
     IF (JPGD==1) THEN
       WRITE(ILUOUT0,*) 'No pgd file was present for model 1 in namelist NAM_PGD1'
 !callabortstop
-      CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','OPEN_NESTPGD_FILES','No pgd file was present for model 1 in namelist NAM_PGD1')
     ELSE
       GADD=.FALSE.
       CYCLE
@@ -257,11 +260,9 @@ DO JPGD=1,JPMODELMAX
   END IF
   !
   IF ( (IDAD<1 .OR. IDAD>JPMODELMAX) .AND. (JPGD>1) ) THEN
-      WRITE(ILUOUT0,*) 'No father indicated for model ',JPGD,' in namelist NAM_PGD',JPGD
 !callabortstop
-      CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
+      WRITE(YMSG,*) 'No father indicated for model ',JPGD,' in namelist NAM_PGD',JPGD
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','OPEN_NESTPGD_FILES',YMSG)
   END IF
   !
   IF (GADD) THEN
@@ -271,9 +272,7 @@ DO JPGD=1,JPMODELMAX
       WRITE(ILUOUT0,*) 'pgd files are not correctly ordered:'
       WRITE(ILUOUT0,*) ' in namelist NAM_PGD',JPGD,' was found IDAD= ', IDAD
 !callabortstop
-      CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','OPEN_NESTPGD_FILES','')
     END IF
     !
     NDAD(JPGD)=IDAD
@@ -282,7 +281,18 @@ END DO
 !
 !-------------------------------------------------------------------------------
 !
-!*       5.    NAMES OF OUTPUT PGD FILES
+!*       5.    OPENING OF OUTPUT LISTING FILES FOR ALL MODELS
+!              ----------------------------------------------
+!
+DO JPGD=1,NMODEL
+  WRITE(YLUOUT,'("OUTPUT_LISTING",I0)') JPGD
+  CALL IO_FILE_ADD2LIST(LUNIT_MODEL(JPGD)%TLUOUT,YLUOUT,'OUTPUTLISTING','WRITE')
+  CALL IO_FILE_OPEN_ll(LUNIT_MODEL(JPGD)%TLUOUT)
+END DO
+!
+!-------------------------------------------------------------------------------
+!
+!*       6.    NAMES OF OUTPUT PGD FILES
 !              -------------------------
 !
 CALL POSNAM(IPRE_NEST_PGD,'NAM_NEST_PGD',GFOUND,ILUOUT0)
@@ -311,7 +321,7 @@ END DO
 CALL CLOSE_ll(HPRE_NEST_PGD)
 !-------------------------------------------------------------------------------
 !
-!*       6.    OPENING OF INPUT AND OUTPUT PGD FILES
+!*       7.    OPENING OF INPUT AND OUTPUT PGD FILES
 !              -------------------------------------
 !
 DO JPGD=1,NMODEL
@@ -321,15 +331,4 @@ END DO
 !
 !-------------------------------------------------------------------------------
 !
-!*       7.    OPENING OF OUTPUT LISTING FILES FOR ALL MODELS
-!              ----------------------------------------------
-!
-DO JPGD=1,NMODEL
-  CALL GOTO_MODEL(JPGD)
-  WRITE(YLUOUT,'("OUTPUT_LISTING",I0)') JPGD
-  CALL OPEN_LUOUT_n(YLUOUT)
-END DO
-!
-!-------------------------------------------------------------------------------
-!
 END SUBROUTINE OPEN_NESTPGD_FILES
diff --git a/src/MNH/open_prc_files.f90 b/src/MNH/open_prc_files.f90
index b6e20d86ad41f9c96f7d1bd5a0fd0f5c35792b6e..e9fdced51eafaa4ee0f68cc59cd62989132a923b 100644
--- a/src/MNH/open_prc_files.f90
+++ b/src/MNH/open_prc_files.f90
@@ -105,7 +105,7 @@ USE MODD_CONF_n
 !JUAN Z_SPLITTING
 !USE MODD_CONFZ
 !JUAN Z_SPLITTING
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO_ll, ONLY: TFILE_OUTPUTLISTING,TFILEDATA
 USE MODD_LUNIT
 USE MODD_LUNIT_n, CINIFILE_n=>CINIFILE , CINIFILEPGD_n=>CINIFILEPGD
 !
@@ -114,6 +114,7 @@ USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
 USE MODE_POS
 USE MODE_FM
 USE MODE_IO_ll
+USE MODE_MSG
 !
 USE MODN_CONFIO, ONLY : NAM_CONFIO
 !JUAN Z_SPLITTING
@@ -173,8 +174,12 @@ CLUOUT = CLUOUT0
 !*       2.    OPENNING OF THE OUTPUT LISTING FILE
 !              -----------------------------------
 !
-CALL OPEN_ll(UNIT=ILUOUT0,FILE=CLUOUT0,IOSTAT=IRESP,FORM='FORMATTED',ACTION='WRITE', &
-     MODE='GLOBAL')
+CALL IO_FILE_ADD2LIST(TLUOUT0,'OUTPUT_LISTING0','OUTPUTLISTING','WRITE')
+CALL IO_FILE_OPEN_ll(TLUOUT0)
+!Set output file for PRINT_MSG
+TFILE_OUTPUTLISTING => TLUOUT0
+!
+ILUOUT0=TLUOUT0%NLU
 !
 IF (NVERB>=5) WRITE(ILUOUT0,*) 'Routine OPEN_PRC_FILES started'
 !-------------------------------------------------------------------------------
@@ -185,11 +190,8 @@ IF (NVERB>=5) WRITE(ILUOUT0,*) 'Routine OPEN_PRC_FILES started'
 CALL OPEN_ll(UNIT=IPRE_REAL1,FILE=HPRE_REAL1,IOSTAT=IRESP,ACTION='READ', &
      DELIM='QUOTE',MODE='GLOBAL',STATUS='OLD')
 IF (IRESP.NE.0 ) THEN
-   PRINT "(' STOP :: Routine OPEN_PRC_FILES :: IRESP=',I6,' --> file PRE_REAL1.nam not found ')", IRESP
    !callabortstop
-   CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-   CALL ABORT
-   STOP
+   CALL PRINT_MSG(NVERB_FATAL,'GEN','OPEN_PRC_FILES','file PRE_REAL1.nam not found')
 ENDIF
 !
 !-------------------------------------------------------------------------------
@@ -228,11 +230,9 @@ IF (ILEN>0) THEN
   IF (HCHEMFILE==HATMFILE) HCHEMFILE=''
 END IF
 IF (LEN_TRIM(HCHEMFILE)>0 .AND. HATMFILETYPE/='GRIBEX') THEN
-  WRITE(ILUOUT0,*) 'Additional CHEMical file is only possible when ATMospheric file is of GRIBEX type'
 !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','OPEN_PRC_FILES',&
+                 'Additional CHEMical file is only possible when ATMospheric file is of GRIBEX type')
 END IF
 WRITE(ILUOUT0,*) 'HCHEMFILE=', HCHEMFILE
 !
@@ -262,10 +262,8 @@ IF (LEN_TRIM(HPGDFILE)==0) THEN
 !    HPGDFILE = HATMFILE
 !    WRITE(ILUOUT0,*) 'HPGDFILE set to ', HPGDFILE
 !  ELSE
-    WRITE(ILUOUT0,*) 'You need the HPGDFILE file when starting from a large-scale file'
-    CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-    CALL ABORT
-    STOP
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','OPEN_PRC_FILES',&
+                   'You need the HPGDFILE file when starting from a large-scale file')
 !  END IF
 ELSE
 !-------------------------------------------------------------------------------
@@ -276,11 +274,8 @@ ELSE
   CALL IO_FILE_ADD2LIST(TPPGDFILE,TRIM(HPGDFILE),'UNKNOWN','READ',KLFINPRAR=0,KLFITYPE=2,KLFIVERB=NVERB)
   CALL IO_FILE_OPEN_ll(TPPGDFILE,IRESP,OPARALLELIO=.FALSE.)
   IF (IRESP/=0) THEN
-    WRITE(ILUOUT0,*) 'STOP: problem during opening of PGD file ',HPGDFILE
 !callabortstop
-    CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-    CALL ABORT
-    STOP
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','OPEN_PRC_FILES',' problem during opening of PGD file '//TRIM(HPGDFILE))
   END IF
 END IF
 !
diff --git a/src/MNH/phys_paramn.f90 b/src/MNH/phys_paramn.f90
index cd4dee213e24606c191e9e5f904cd84a3937f192..1b573403b8ec59eba5ee5d29cbedfba7a63fe174 100644
--- a/src/MNH/phys_paramn.f90
+++ b/src/MNH/phys_paramn.f90
@@ -438,7 +438,7 @@ REAL, DIMENSION(:,:,:,:), ALLOCATABLE  :: ZSAVE_DIRFLASWD, ZSAVE_SCAFLASWD,ZSAVE
 NULLIFY(TZFIELDS_ll)
 IMI=GET_CURRENT_MODEL_INDEX()
 !
-CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)
+ILUOUT = TLUOUT%NLU
 CALL GET_DIM_EXT_ll ('B',IIU,IJU)
 IKU=SIZE(XTHT,3)
 IKB = 1 + JPVEXT
diff --git a/src/MNH/ppm.f90 b/src/MNH/ppm.f90
index 7f52edc77ef6ea6067c55bd8907c85db255d44df..e66202efca64a848be81afdc908539e0e1aea9f9 100644
--- a/src/MNH/ppm.f90
+++ b/src/MNH/ppm.f90
@@ -199,9 +199,6 @@ USE MODI_GET_HALO
 !
 USE MODD_CONF
 !USE MODD_ARGSLIST_ll, ONLY : HALO2LIST_ll
-!BEG JUAN PPM_LL
-USE MODD_LUNIT
-!END JUAN PPM_LL
 !
 IMPLICIT NONE
 !
@@ -253,15 +250,6 @@ IJN=IJE
 !
 !*              initialise & update halo & halo2 for PSRC
 !
-!!$IF(NHALO /= 1) THEN
-!!$    CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT,IRESP)
-!!$    WRITE(ILUOUT,*) 'ERROR : PPM ppm_met.f90 --> Juan '
-!!$    WRITE(ILUOUT,*) 'PPM not yet implemented/tested with NHALO /= 1'
-!!$   !callabortstop
-!!$    CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-!!$    CALL ABORT
-!!$    STOP
-!!$ENDIF
 CALL GET_HALO(PSRC)
 PR=PSRC
 ZQL=PSRC
@@ -647,9 +635,6 @@ USE MODI_GET_HALO
 !
 USE MODD_CONF
 !USE MODD_ARGSLIST_ll, ONLY : HALO2LIST_ll
-!BEG JUAN PPM_LL
-USE MODD_LUNIT
-!END JUAN PPM_LL
 !
 IMPLICIT NONE
 !
@@ -696,15 +681,6 @@ INTEGER                          :: IIW,IIA
 CALL GET_INDICE_ll(IIB,IJB,IIE,IJE)
 IIW=IIB
 IIA=IIE
-!!$IF(NHALO /= 1) THEN
-!!$    CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT,IRESP)
-!!$    WRITE(ILUOUT,*) 'ERROR : PPM ppm_met.f90 --> Juan '
-!!$    WRITE(ILUOUT,*) 'PPM not yet implemented/tested with NHALO /= 1'
-!!$   !callabortstop
-!!$    CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-!!$    CALL ABORT
-!!$    STOP
-!!$ENDIF
 CALL GET_HALO(PSRC)
 
 !
@@ -1299,7 +1275,6 @@ USE MODI_GET_HALO
 !
 USE MODD_CONF
 !BEG JUAN PPM_LL
-USE MODD_LUNIT
 USE MODD_ARGSLIST_ll, ONLY : HALO2LIST_ll
 !END JUAN PPM_LL
 !
@@ -1351,16 +1326,6 @@ IJN=IJE
 !
 !*              initialise & update halo & halo2 for PSRC
 !
-!!$IF(NHALO /= 1) THEN
-!!$    CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT,IRESP)
-!!$    WRITE(ILUOUT,*) 'ERROR : PPM ppm_met.f90 --> Juan '
-!!$    WRITE(ILUOUT,*) 'PPM not yet implemented/tested with NHALO /= 1'
-!!$   !callabortstop
-!!$    CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-!!$    CALL ABORT
-!!$    STOP
-!!$ENDIF
-!
 CALL GET_HALO2(PSRC,TZ_PSRC_HALO2_ll)
 ZPHAT=PSRC
 ZFPOS=PSRC
@@ -1574,7 +1539,6 @@ USE MODE_IO_ll
 USE MODI_SHUMAN
 USE MODI_GET_HALO
 !
-USE MODD_LUNIT
 USE MODD_CONF
 !USE MODD_ARGSLIST_ll, ONLY : HALO2LIST_ll
 !
@@ -1969,7 +1933,6 @@ USE MODE_IO_ll
 USE MODI_SHUMAN
 !
 USE MODD_CONF
-USE MODD_LUNIT
 USE MODD_PARAMETERS
 !USE MODD_ARGSLIST_ll, ONLY : HALO2LIST_ll
 !
@@ -2222,7 +2185,6 @@ USE MODE_ll
 USE MODE_IO_ll
 USE MODI_SHUMAN
 !
-USE MODD_LUNIT
 USE MODD_CONF
 USE MODD_PARAMETERS
 !USE MODD_ARGSLIST_ll, ONLY : HALO2LIST_ll
diff --git a/src/MNH/prep_ideal_case.f90 b/src/MNH/prep_ideal_case.f90
index 6f33b988d4844a10aa7505b60f38e5594d652448..304057d263fb629123cfe02c8a7414e9f13df2c6 100644
--- a/src/MNH/prep_ideal_case.f90
+++ b/src/MNH/prep_ideal_case.f90
@@ -319,6 +319,7 @@
 !             ------------
 !
 USE MODD_PARAMETERS       ! Declarative modules
+USE MODD_ARGSLIST_ll, ONLY : LIST_ll
 USE MODD_DIM_n
 USE MODD_CONF
 USE MODD_CST
@@ -344,7 +345,9 @@ USE MODD_CH_AEROSOL,ONLY:  LORILAM, CORGANIC, LVARSIGI, LVARSIGJ, LINITPM, XINIR
 USE MODD_DUST,      ONLY:  LDUST, NMODE_DST, CRGUNITD, XINISIG, XINIRADIUS, XN0MIN 
 USE MODD_SALT,      ONLY:  LSALT, NMODE_SLT, CRGUNITS, XINISIG_SLT, XINIRADIUS_SLT, XN0MIN_SLT
 USE MODD_VAR_ll,    ONLY:  NPROC
+USE MODD_LUNIT,     ONLY:  TLUOUT0
 USE MODD_LUNIT_n
+USE MODD_IO_ll,     ONLY: TFILE_OUTPUTLISTING
 USE MODD_CONF_n
 USE MODD_NSV,      ONLY : NSV,NSV_CHEM,           &
                           NSV_DSTEND, NSV_DSTBEG
@@ -360,7 +363,6 @@ USE MODE_FMREAD
 USE MODE_IO_ll
 USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
 USE MODE_ll
-USE MODD_ARGSLIST_ll, ONLY : LIST_ll
 USE MODE_MODELN_HANDLER
 USE MODE_FIELD
 USE MODE_MSG
@@ -676,8 +678,13 @@ CALL DEFAULT_EXPRE
 CLUOUT  = 'OUTPUT_LISTING1'
 CLUOUT0 = CLUOUT
 CEXPRE  = 'PRE_IDEA1.nam'
-CALL OPEN_ll(UNIT=NLUOUT,FILE=CLUOUT,IOSTAT=NRESP,FORM='FORMATTED',ACTION='WRITE', &
-     MODE='GLOBAL')
+CALL IO_FILE_ADD2LIST(TLUOUT0,CLUOUT0,'OUTPUTLISTING','WRITE')
+CALL IO_FILE_OPEN_ll(TLUOUT)
+NLUOUT = TLUOUT%NLU
+!Set output files for PRINT_MSG
+TLUOUT              => TLUOUT0
+TFILE_OUTPUTLISTING => TLUOUT0
+!
 CALL OPEN_ll(UNIT=NLUPRE,FILE=CEXPRE,IOSTAT=NRESP,ACTION='READ', &
      DELIM='QUOTE',MODE='GLOBAL')
 !
@@ -737,9 +744,7 @@ IF( LEN_TRIM(CPGD_FILE) /= 0 ) THEN
         & JPHEXT=',JPHEXT
      WRITE(NLUOUT,FMT=*) ' different from PGD files=', CINIFILEPGD,' value JPHEXT=',IJPHEXT
      WRITE(NLUOUT,FMT=*) '-> JOB ABORTED'
-     CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-     CALL ABORT  
-     STOP   
+     CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','')
      !WRITE(NLUOUT,FMT=*) ' JPHEXT HAS BEEN SET TO ', IJPHEXT
      !IJPHEXT = JPHEXT
   END IF
@@ -811,12 +816,8 @@ IF (.NOT.LUSERV) THEN
 END IF
 !
 IF((LUSERI .OR. LUSERC).AND. (CIDEAL /= 'RSOU')) THEN
-  WRITE(NLUOUT,FMT=*) 'USE OF HYDROMETEORS IS ONLY ALLOWED IN RSOU CASE'
-  WRITE(NLUOUT,FMT=*) '-> JOB ABORTED'
-   !callabortstop
-   CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-   CALL ABORT
-  STOP
+  !callabortstop
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','use of hydrometeors is only allowed in RSOU case')
 ENDIF
 IF (LUSERI) THEN
   LUSERC =.TRUE.
@@ -950,12 +951,8 @@ SELECT CASE(CIDEAL)
   CASE('RSOU','CSTN')
     IF (LGEOSBAL) ALLOCATE(XCORIOZ(NIU,NJU,NKU))  ! exceptionally a 3D array  
   CASE DEFAULT                      ! undefined preinitialization
-    WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE : CIDEAL IS NOT CORRECTLY DEFINED'
-    WRITE(NLUOUT,FMT=*) '-> JOB ABORTED'
    !callabortstop
-   CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-   CALL ABORT
-    STOP
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','CIDEAL is not correctly defined')
 END SELECT 
 !
 !*       4.4   Prognostic variables at M instant (module MODD_FIELD1):
@@ -1265,13 +1262,9 @@ ELSE
       WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE : XLATORI=' , XLATORI, &
                           ' XLONORI= ', XLONORI
     ELSE
-      WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE : LATITUDE AND LONGITUDE OF THE CENTER &
-                           & POINT MUST BE INITIALIZED ALL TOGETHER OR NOT'
-      WRITE(NLUOUT,FMT=*) '-> JOB ABORTED'
    !callabortstop
-      CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE',&
+                     'latitude and longitude of the center point must be initialized alltogether or not')
     END IF
   END IF
 !
@@ -1379,12 +1372,8 @@ IF (    LEN_TRIM(CPGD_FILE) == 0  .OR. .NOT. LREAD_ZS) THEN
     END DO
 !
   CASE DEFAULT   ! undefined  shape of orography
-    WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE: ERRONEOUS TERRAIN TYPE'
-    WRITE(NLUOUT,FMT=*) '-> JOB ABORTED'
    !callabortstop
-    CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-    CALL ABORT
-    STOP
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','erroneous terrain type')
   END SELECT
 !
   CALL ADD2DFIELD_ll(TZ_FIELDS_ll, XZS)
@@ -1397,11 +1386,8 @@ END IF
 ! ((CLBCX(1) /= "OPEN" ) .OR. &
 ! (CLBCX(2) /= "OPEN" ) .OR. (CLBCY(1) /= "OPEN" ) .OR. &
 ! (CLBCY(2) /= "OPEN" )) )  THEN 
-!  WRITE(NLUOUT,FMT=*) 'STOP:WITH A PGD FILE YOU CANNOT BE IN CYCLIC LBC'
 !   !callabortstop
-!  CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-!  CALL ABORT
-!  STOP
+!  CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','with a PGD file, you cannot be in a cyclic LBC')
 !END IF
 !
 IF (LWEST_ll())  THEN
@@ -1457,9 +1443,7 @@ IF (CTYPELOC =='LATLON' ) THEN
     WRITE(NLUOUT,FMT=*) 'CTYPELOC CANNOT BE LATLON IN CARTESIAN GEOMETRY'
     WRITE(NLUOUT,FMT=*) '-> JOB ABORTED'
    !callabortstop
-    CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-    CALL ABORT
-    STOP
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','CTYPELOC cannot be LATLON in cartesian geometry')
   END IF 
 END IF  
 !
@@ -1488,21 +1472,14 @@ END IF
 !               and 1D anelastic reference state
 !
 IF(LPV_PERT .AND. .NOT.(LGEOSBAL)) THEN
-  WRITE(NLUOUT,FMT=*) 'FOR PV INVERSION, LGEOSBAL HAS TO BE TRUE'
    !callabortstop
-  CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-  CALL ABORT
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','for PV inversion, LGEOSBAL has to be true')
   STOP
 ENDIF
 !
 IF(LPV_PERT .AND. NPROC>1) THEN
-    WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE : THE USE OF A PV INVERSION HAS TO BE &
-                        & PERFORMED WITH MONOPROCESSOR MODE'
-    WRITE(NLUOUT,FMT=*) '-> JOB ABORTED'
-   !callabortstop
-   CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-   CALL ABORT
-    STOP
+  !callabortstop
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','PV inversion has to be performed in monoprocess mode')
 ENDIF
 !
 !*       5.2.1  Use a Radiosounding : CIDEAL='RSOU''
@@ -1791,11 +1768,8 @@ IF (CSURF =='EXTE') THEN
     IF (LEN_TRIM(CPGD_FILE)/=0) THEN
       CINIFILEPGD=CPGD_FILE
     ELSE
-      WRITE(NLUOUT,FMT=*) 'STOP : CINIFILEPGD needed in NAM_LUNITn'
       !callabortstop
-      CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','CINIFILEPGD needed in NAM_LUNITn')
     ENDIF      
   ENDIF
   CALL SURFEX_ALLOC_LIST(1)
@@ -1934,7 +1908,7 @@ WRITE(NLUOUT,FMT=*) '****************************************************'
 WRITE(NLUOUT,FMT=*) '* PREP_IDEAL_CASE: PREP_IDEAL_CASE ENDS CORRECTLY. *'
 WRITE(NLUOUT,FMT=*) '****************************************************'
 !
-CALL CLOSE_ll(CLUOUT,IOSTAT=NRESP)
+CALL IO_FILE_CLOSE_ll(TLUOUT)
 CALL END_PARA_ll(IINFO_ll)
 !
 ! 
diff --git a/src/MNH/prep_nest_pgd.f90 b/src/MNH/prep_nest_pgd.f90
index dc16a5caa61dd074c23b394b520b6b138180eb27..0a65ebd0201298e38f90edc77bde49bc7fe49957 100644
--- a/src/MNH/prep_nest_pgd.f90
+++ b/src/MNH/prep_nest_pgd.f90
@@ -115,6 +115,7 @@ USE MODI_NEST_FIELD_n
 USE MODI_NEST_ZSMT_n
 USE MODI_READ_HGRID
 !
+USE MODE_FIELD, ONLY : INI_FIELD_LIST
 USE MODE_FM
 USE MODE_FMREAD
 USE MODE_FMWRIT
@@ -192,7 +193,7 @@ NVERB=1
 CALL OPEN_NESTPGD_FILES(TZFILEPGD,TZFILENESTPGD)
 CALL SET_JP_ll(JPMODELMAX,JPHEXT,JPVEXT,JPHEXT)
 !
-CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
+ILUOUT0 = TLUOUT0%NLU
 !
 CALL SURFEX_ALLOC_LIST(NMODEL)
 YSURF_CUR => YSURF_LIST(1)
@@ -392,7 +393,7 @@ WRITE(ILUOUT0,FMT=*)
 WRITE(ILUOUT0,FMT=*) '************************************************'
 WRITE(ILUOUT0,FMT=*) '* PREP_NEST_PGD: PREP_NEST_PGD ends correctly. *'
 WRITE(ILUOUT0,FMT=*) '************************************************'
-CALL CLOSE_ll(CLUOUT0)
+CALL IO_FILE_CLOSE_ll(TLUOUT0)
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/prep_pgd.f90 b/src/MNH/prep_pgd.f90
index 1bf38ed17e81d0d4fcf727b50d7879ac754904d4..cb2de5d16ed4deededc196d1f9f704dcac2540fd 100644
--- a/src/MNH/prep_pgd.f90
+++ b/src/MNH/prep_pgd.f90
@@ -77,17 +77,18 @@
 !
 USE MODD_CONF,   ONLY : CPROGRAM, L1D, L2D, LPACK, LCARTESIAN
 USE MODD_CONF_n,ONLY : CSTORAGE_TYPE
-USE MODD_LUNIT,  ONLY : CLUOUT0
+USE MODD_LUNIT,  ONLY : CLUOUT0,TLUOUT0
+USE MODD_LUNIT_n,ONLY : LUNIT_MODEL
 USE MODD_PARAMETERS, ONLY : XUNDEF
-USE MODD_IO_ll,   ONLY : GSMONOPROC,LIOCDF4,LLFIOUT,TFILEDATA,TFILE_SURFEX
+USE MODD_IO_ll,   ONLY : GSMONOPROC,LIOCDF4,LLFIOUT,TFILEDATA,TFILE_OUTPUTLISTING,TFILE_SURFEX
 USE MODD_IO_SURF_MNH, ONLY : NHALO
 USE MODD_SPAWN, ONLY : NDXRATIO,NDYRATIO,NXSIZE,NYSIZE,NXOR,NYOR
 !
 USE MODE_POS
+USE MODE_FM
 USE MODE_FMWRIT
 USE MODE_IO_ll
 USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
-USE MODE_FM
 USE MODE_MODELN_HANDLER
 USE MODE_MSG
 USE MODE_FIELD
@@ -127,6 +128,7 @@ INTEGER :: ININAR
 LOGICAL :: GFOUND
 CHARACTER(LEN=28) :: YDAD     =' '        ! name of dad of input FM file
 CHARACTER(LEN=28) :: CPGDFILE ='PGDFILE'  ! name of the output file
+CHARACTER(LEN=100) :: YMSG
 INTEGER           :: NZSFILTER=1          ! number of iteration for filter for fine   orography
 LOGICAL           :: LHSLOP=.FALSE.       ! filtering of slopes higher than XHSLOP   
 REAL              :: XHSLOP=1.2           ! if LHSLOP filtering of slopes higher than XHSLOP   
@@ -160,19 +162,22 @@ CALL INITIO_ll()
 NHALO=15
 !
 CLUOUT0='OUTPUT_LISTING0'                    ! Name of the output-listing.
+CALL IO_FILE_ADD2LIST(TLUOUT0,'OUTPUT_LISTING0','OUTPUTLISTING','WRITE')
+CALL IO_FILE_OPEN_ll(TLUOUT0)
 !
-CALL OPEN_ll(UNIT=ILUOUT0,FILE=CLUOUT0,IOSTAT=IRESP,    &
-             FORM='FORMATTED',ACTION='WRITE',MODE='GLOBAL')
+!Set output file for PRINT_MSG
+TFILE_OUTPUTLISTING => TLUOUT0
+!
+LUNIT_MODEL(1)%TLUOUT => TLUOUT0
+ILUOUT0=TLUOUT0%NLU
 !
 !JUAN
 CALL OPEN_ll(UNIT=ILUNAM,FILE='PRE_PGD1.nam',IOSTAT=IRESP,    &
              FORM='FORMATTED',ACTION='READ',STATUS='OLD',MODE='GLOBAL')
 IF (IRESP.NE.0 ) THEN
-PRINT "('PREP_PGD :: IRESP=',I6,' --> file PRE_PGD1.nam not found ')", IRESP
+  WRITE(YMSG,*) 'file PRE_PGD1.nam not found, IRESP=', IRESP
  !callabortstop
-CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-CALL ABORT
-STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_PGD',YMSG)
 ENDIF
 !JUAN
 
@@ -316,12 +321,13 @@ WRITE(ILUOUT0,*) '***************************'
 !             ----------------------
 !
 CALL IO_FILE_CLOSE_ll(TZFILE,OPARALLELIO=.FALSE.)
-CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP,OPARALLELIO=.FALSE.)
-!
-CALL END_PARA_ll(IINFO_ll)
 !
 CALL SURFEX_DEALLO_LIST
 !
+CALL IO_FILE_CLOSE_ll(TLUOUT0,OPARALLELIO=.FALSE.)
+!
+CALL END_PARA_ll(IINFO_ll)
+!
 !-------------------------------------------------------------------------------
 !
 END PROGRAM PREP_PGD
diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90
index 90016161f1e55cda908e8fe065871c0896c9327f..c03c6b73de46d58939087d96330d183a957fa88d 100644
--- a/src/MNH/prep_real_case.f90
+++ b/src/MNH/prep_real_case.f90
@@ -395,6 +395,7 @@ USE MODE_FMWRIT, ONLY : IO_WRITE_HEADER
 USE MODE_IO_ll
 USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
 USE MODE_ll
+USE MODE_MSG
 USE MODE_MODELN_HANDLER
 USE MODE_FMREAD
 USE MODE_FIELD
@@ -575,7 +576,7 @@ CALL OPEN_PRC_FILES(YPRE_REAL1,YATMFILE, YATMFILETYPE  &
                               ,YCHEMFILE,YCHEMFILETYPE &
                               ,YSURFFILE,YSURFFILETYPE &
                               ,YPGDFILE,TZPGDFILE)
-CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
+ILUOUT0 = TLUOUT0%NLU
 !
 CPGDFILE = YPGDFILE
 !
@@ -594,9 +595,7 @@ ELSE
   WRITE(ILUOUT0,FMT=*) 'EITHER MESONH OR GRIBEX'
   WRITE(ILUOUT0,FMT=*) '-> JOB ABORTED'
  !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_REAL_CASE','')
 END IF
 !                             
 LCPL_AROME=.FALSE.
@@ -1181,7 +1180,7 @@ END IF
 !-------------------------------------------------------------------------------
 !
 CALL IO_FILE_CLOSE_ll(TINIFILE)
-CALL CLOSE_ll(CLUOUT0, IOSTAT=IRESP)
+CALL IO_FILE_CLOSE_ll(TLUOUT0)
 !
 !
 CALL END_PARA_ll(IINFO_ll)
diff --git a/src/MNH/prep_surfex.f90 b/src/MNH/prep_surfex.f90
index 2a3e83afdaa5135a3621bc8c6c03e42adfbf6140..b17c1531fb4706f26f3fed57de6352f5f666589b 100644
--- a/src/MNH/prep_surfex.f90
+++ b/src/MNH/prep_surfex.f90
@@ -39,7 +39,7 @@ USE MODD_CONF,        ONLY : CPROGRAM,NMASDEV,NBUGFIX,CBIBUSER,&
                              L1D, L2D, LPACK
 USE MODD_CONF_n,      ONLY : CSTORAGE_TYPE
 USE MODD_IO_ll,       ONLY : TFILEDATA, LIOCDF4, LLFIOUT, TFILE_SURFEX
-USE MODD_LUNIT,       ONLY : CLUOUT0, CPGDFILE,COUTFMFILE
+USE MODD_LUNIT,       ONLY : CLUOUT0, CPGDFILE,COUTFMFILE, TLUOUT0
 USE MODD_LUNIT_n,     ONLY : CINIFILE
 USE MODD_MNH_SURFEX_n
 USE MODD_PARAMETERS,  ONLY : JPMODELMAX,JPHEXT,JPVEXT, NUNDEF, XUNDEF
@@ -52,6 +52,7 @@ USE MODE_FMWRIT
 USE MODE_IO_ll
 USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
 USE MODE_ll
+USE MODE_MSG
 USE MODE_MODELN_HANDLER
 USE MODE_SPLITTINGZ_ll
 !
@@ -111,7 +112,7 @@ CALL OPEN_PRC_FILES(YPRE_REAL1,YATMFILE, YATMFILETYPE  &
                               ,YCHEMFILE,YCHEMFILETYPE &
                               ,YSURFFILE,YSURFFILETYPE &
                               ,YPGDFILE,TZPGDFILE)
-CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
+ILUOUT0 = TLUOUT0%NLU
 !
 CPGDFILE = YPGDFILE
 !
@@ -205,7 +206,7 @@ WRITE(ILUOUT0,*) '|   PREP_SURFEX ends correctly   |'
 WRITE(ILUOUT0,*) '|                                |'
 WRITE(ILUOUT0,*) '----------------------------------'
 CALL IO_FILE_CLOSE_ll(TZFILE)
-CALL CLOSE_ll(CLUOUT0, IOSTAT=IRESP)
+CALL IO_FILE_CLOSE_ll(TLUOUT0)
 !
 CALL END_PARA_ll(IINFO_ll)
 CALL SURFEX_DEALLO_LIST
diff --git a/src/MNH/pressure_in_prep.f90 b/src/MNH/pressure_in_prep.f90
index f82bc45c3631bfc218a953b0ff5cd12930152083..df22cb3e9e6e64e5d8119eaa6e6521f3c668ac74 100644
--- a/src/MNH/pressure_in_prep.f90
+++ b/src/MNH/pressure_in_prep.f90
@@ -73,9 +73,9 @@ END MODULE MODI_PRESSURE_IN_PREP
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_FM
 USE MODE_ll
 USE MODE_IO_ll
+USE MODE_MSG
 !
 USE MODI_ANEL_BALANCE_n
 USE MODI_GDIV
@@ -134,7 +134,7 @@ INTEGER               :: I,J,K
 !*       1.    Initialisations
 !              ---------------
 !
-CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
+ILUOUT0 = TLUOUT0%NLU
 !
 IKB=1+JPVEXT
 IKE=NKMAX+JPVEXT
@@ -282,9 +282,7 @@ CALL EXTRAPOL('S',ZRV)
       WRITE(ILUOUT0,*) '******************************************************************************'
       WRITE(ILUOUT0,*) ' '
  !callabortstop
-CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-CALL ABORT
-      STOP
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','PRESSURE_IN_PREP','')
     END IF
   ELSE
 !*       7.    Happy conclusion
diff --git a/src/MNH/radar_scattering.f90 b/src/MNH/radar_scattering.f90
index 29269bbdd1d1dd5dd538fa3e1b189e584ace7e93..0d9437165a89985775cff1d0f17c23d3cbbfa709 100644
--- a/src/MNH/radar_scattering.f90
+++ b/src/MNH/radar_scattering.f90
@@ -104,16 +104,8 @@ END MODULE MODI_RADAR_SCATTERING
 !              ------------
 !
 USE MODD_CST
+USE MODD_LUNIT
 USE MODD_PARAMETERS
-USE MODD_RAIN_ICE_DESCR, ONLY: XALPHAR_I=>XALPHAR,XNUR_I=>XNUR,XDR_I=>XDR,XLBEXR_I=>XLBEXR,&
-                               XLBR_I=>XLBR,XCCR_I=>XCCR,XBR_I=>XBR,XCR_I=>XCR,&
-                               XALPHAS_I=>XALPHAS,XNUS_I=>XNUS,XDS_I=>XDS,XLBEXS_I=>XLBEXS,&
-                               XLBS_I=>XLBS,XCCS_I=>XCCS,XAS_I=>XAS,XBS_I=>XBS,XCXS_I=>XCXS,XCS_I=>XCS,&
-                               XALPHAG_I=>XALPHAG,XNUG_I=>XNUG,XDG_I=>XDG,XLBEXG_I=>XLBEXG,&
-                               XLBG_I=>XLBG,XCCG_I=>XCCG,XAG_I=>XAG,XBG_I=>XBG,XCXG_I=>XCXG,XCG_I=>XCG,&
-                               XALPHAI_I=>XALPHAI,XNUI_I=>XNUI,XDI_I=>XDI,XLBEXI_I=>XLBEXI,&
-                               XLBI_I=>XLBI,XAI_I=>XAI,XBI_I=>XBI,XC_I_I=>XC_I,&
-                               XRTMIN_I=>XRTMIN
 !!LIMA         
 USE MODD_PARAM_LIMA_WARM, ONLY: XDR_L=>XDR,XLBEXR_L=>XLBEXR,XLBR_L=>XLBR,XBR_L=>XBR,XCR_L=>XCR
 USE MODD_PARAM_LIMA_COLD, ONLY: XDI_L=>XDI,XLBEXI_L=>XLBEXI,XLBI_L=>XLBI,XAI_L=>XAI,XBI_L=>XBI,XC_I_L=>XC_I,&
@@ -126,17 +118,25 @@ USE MODD_PARAM_LIMA, ONLY: XALPHAR_L=>XALPHAR,XNUR_L=>XNUR,XALPHAS_L=>XALPHAS,XN
 !!LIMA
 USE MODD_RADAR, ONLY:XLAM_RAD,XSTEP_RAD,NBELEV,NDIFF,LATT,NPTS_GAULAG,LQUAD,XVALGROUND,NDGS, &
      LFALL,LWBSCS,LWREFL,XREFLVDOPMIN,XREFLMIN,LSNRT,XSNRMIN
+USE MODD_RAIN_ICE_DESCR, ONLY: XALPHAR_I=>XALPHAR,XNUR_I=>XNUR,XDR_I=>XDR,XLBEXR_I=>XLBEXR,&
+                               XLBR_I=>XLBR,XCCR_I=>XCCR,XBR_I=>XBR,XCR_I=>XCR,&
+                               XALPHAS_I=>XALPHAS,XNUS_I=>XNUS,XDS_I=>XDS,XLBEXS_I=>XLBEXS,&
+                               XLBS_I=>XLBS,XCCS_I=>XCCS,XAS_I=>XAS,XBS_I=>XBS,XCXS_I=>XCXS,XCS_I=>XCS,&
+                               XALPHAG_I=>XALPHAG,XNUG_I=>XNUG,XDG_I=>XDG,XLBEXG_I=>XLBEXG,&
+                               XLBG_I=>XLBG,XCCG_I=>XCCG,XAG_I=>XAG,XBG_I=>XBG,XCXG_I=>XCXG,XCG_I=>XCG,&
+                               XALPHAI_I=>XALPHAI,XNUI_I=>XNUI,XDI_I=>XDI,XLBEXI_I=>XLBEXI,&
+                               XLBI_I=>XLBI,XAI_I=>XAI,XBI_I=>XBI,XC_I_I=>XC_I,&
+                               XRTMIN_I=>XRTMIN
 USE MODD_TMAT
 ! 
 USE MODE_ARF
+USE MODE_FGAU , ONLY:GAULAG
 USE MODE_FSCATTER
+USE MODE_IO_ll
+USE MODE_MSG
 USE MODE_READTMAT
-USE MODE_FGAU , ONLY:GAULAG
-USE MODI_GAMMA, ONLY:GAMMA
 !
-USE MODE_FM
-USE MODE_IO_ll
-USE MODD_LUNIT
+USE MODI_GAMMA, ONLY:GAMMA
 !
 IMPLICIT NONE
 !
@@ -273,11 +273,11 @@ REAL ::  ZCCS,ZLBS,ZLBEXS,ZDS,ZALPHAS,ZNUS,ZAS,ZBS,ZCXS
 REAL ::  ZCCG,ZLBG,ZLBEXG,ZDG,ZALPHAG,ZNUG,ZAG,ZBG,ZCXG
 REAL ::       ZLBI,ZLBEXI,ZDI,ZALPHAI,ZNUI,ZAI,ZBI
 REAL,DIMENSION(:),ALLOCATABLE :: ZRTMIN
+CHARACTER(LEN=100) :: YMSG
 !
 !*       1.     INITIALISATION 
 !--------------
-! ouverture fichier listing
-CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
+ILUOUT0 = TLUOUT0%NLU
 ! 
 IF (PRESENT(PCR_RAY)) THEN
   GLIMA=.TRUE.
@@ -473,18 +473,14 @@ IF (GLIMA .AND. NDIFF==7) THEN
     WRITE(ILUOUT0,*) " ERROR : TMATRICE TABLE ARE MADE WITH XALPHAR=1 XNUR=2"
     WRITE(ILUOUT0,*) " FOR CCLOUD=LIMA. PLEASE CHANGE THIS VALUES OR PROVIDE "
     WRITE(ILUOUT0,*) " NEW TMATRICE TABLES "
-    CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-    CALL ABORT
-    STOP
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','RADAR_SCATTERING','')
   ENDIF
 ELSE
   IF (ZALPHAR/=1 .AND. ZNUR /=1.) THEN
     WRITE(ILUOUT0,*) " ERROR : TMATRICE TABLE ARE MADE WITH XALPHAR=1 XNUR=1"
     WRITE(ILUOUT0,*) " FOR CCLOUD=ICE3. PLEASE CHANGE THIS VALUEs OR PROVIDE "
     WRITE(ILUOUT0,*) " NEW TMATRICE TABLES "
-    CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-    CALL ABORT
-    STOP
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','RADAR_SCATTERING','')
   ENDIF
 ENDIF
 
@@ -584,9 +580,7 @@ DO JI=1,INBRAD
       WRITE(ILUOUT0,*) "Tmatrice tables are only available for XLAM_RAD=0.1062"
       WRITE(ILUOUT0,*) "or XLAM_RAD=0.053.2 or XLAM_RAD=0.031.8"
       WRITE(ILUOUT0,*) "change XLAM_RAD in namelist or compute new tmatrice table"
-      CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','RADAR_SCATTERING','')
     ENDIF
 
     !************ fichiers Min Max Pas et Coef Tmat ***********
@@ -633,10 +627,8 @@ DO JI=1,INBRAD
     !rain
     CALL OPEN_ll(UNIT=IUNIT,FILE=YFILE_COEFINT(1),FORM="FORMATTED",ACCESS="SEQUENTIAL",ACTION="READ",IOSTAT=IRESP,MODE='GLOBAL')
     IF ( IRESP /= 0 ) THEN       
-      WRITE(ILUOUT0,*) "STOP : PROBLEM OPENING FILE : ", YFILE_COEFINT(1)
-      CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-      CALL ABORT
-      STOP       
+      WRITE(YMSG,*) "problem opening file ",TRIM(YFILE_COEFINT(1))
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','RADAR_SCATTERING',YMSG)
     ENDIF
     ILINE=1
     DO WHILE (ILINE .LE. INB_LINE(1))
@@ -659,10 +651,8 @@ DO JI=1,INBRAD
     !snow
     CALL OPEN_ll(UNIT=IUNIT,FILE=YFILE_COEFINT(2),FORM="FORMATTED",ACCESS="SEQUENTIAL",ACTION="READ",IOSTAT=IRESP,MODE='GLOBAL')
     IF ( IRESP /= 0 ) THEN       
-      WRITE(ILUOUT0,*) "STOP : PROBLEM OPENING FILE : ", YFILE_COEFINT(2)
-      CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-      CALL ABORT
-      STOP       
+      WRITE(YMSG,*) "problem opening file ",TRIM(YFILE_COEFINT(2))
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','RADAR_SCATTERING',YMSG)
     ENDIF
     ILINE=1
     DO WHILE (ILINE .LE. INB_LINE(2))
@@ -685,10 +675,8 @@ DO JI=1,INBRAD
     !graupel
     CALL OPEN_ll(UNIT=IUNIT,FILE=YFILE_COEFINT(3),FORM="FORMATTED",ACCESS="SEQUENTIAL",ACTION="READ",IOSTAT=IRESP,MODE='GLOBAL')
     IF ( IRESP /= 0 ) THEN       
-      WRITE(ILUOUT0,*) "STOP : PROBLEM OPENING FILE : ", YFILE_COEFINT(3)
-      CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-      CALL ABORT
-      STOP       
+      WRITE(YMSG,*) "problem opening file ",TRIM(YFILE_COEFINT(3))
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','RADAR_SCATTERING',YMSG)
     ENDIF
     ILINE=1
     DO WHILE (ILINE .LE. INB_LINE(3))
@@ -711,10 +699,8 @@ DO JI=1,INBRAD
     !wet graupel
     CALL OPEN_ll(UNIT=IUNIT,FILE=YFILE_COEFINT(4),FORM="FORMATTED",ACCESS="SEQUENTIAL",ACTION="READ",IOSTAT=IRESP,MODE='GLOBAL')
     IF ( IRESP /= 0 ) THEN       
-      WRITE(ILUOUT0,*) "STOP : PROBLEM OPENING FILE : ", YFILE_COEFINT(4)
-      CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-      CALL ABORT
-      STOP       
+      WRITE(YMSG,*) "problem opening file ",TRIM(YFILE_COEFINT(4))
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','RADAR_SCATTERING',YMSG)
     ENDIF
     ILINE=1
     DO WHILE (ILINE .LE. INB_LINE(4))
diff --git a/src/MNH/radar_simulator.f90 b/src/MNH/radar_simulator.f90
index c43a351c4d26ea1f5a61d2973513700ba70ae249..b1ccff110d732a3932dec82844d6ec793521cc4c 100644
--- a/src/MNH/radar_simulator.f90
+++ b/src/MNH/radar_simulator.f90
@@ -139,7 +139,7 @@ USE MODD_PARAMETERS
 USE MODD_LUNIT
 !
 USE MODE_IO_ll
-USE MODE_FM
+USE MODE_MSG
 !
 USE MODD_GR_FIELD_n
 USE MODD_GRID_n
@@ -266,7 +266,7 @@ REAL, DIMENSION(:,:,:,:,:,:),ALLOCATABLE :: ZWORK
 !
 !*       1.1 IO and dimensions initialization
 !   
-CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
+ILUOUT0 = TLUOUT0%NLU
 !
 IIU=SIZE(PTEMP,1)
 IJU=SIZE(PTEMP,2)
@@ -531,12 +531,9 @@ DO JI=1,NBRAD
             IF(XRPK<0.)  ZLAT(JH,JV)=-ZLAT(JH,JV)     ! projection from north pole 
                
             IF(ABS(ZRPK-1.)>1.E-10 .AND. ABS(COS(ZRDSDG*ZLAT(JH,JV)))<1.E-10) THEN
-              WRITE(ILUOUT0,*) 'Error in projection : '
-              WRITE(ILUOUT0,*) 'pole in the domain, but not with stereopolar projection'
               !callabortstop
-              CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-              CALL ABORT
-              STOP
+              CALL PRINT_MSG(NVERB_FATAL,'GEN','RADAR_SIMULATOR',&
+                             'Error in projection: pole in the domain, but not with stereopolar projection')
             ENDIF
             !
             IF(ABS(ZCLAT0)<1.E-10 .AND. ABS(ZRPK-1.)<1.E-10) THEN
diff --git a/src/MNH/read_all_data_grib_case.f90 b/src/MNH/read_all_data_grib_case.f90
index 9852d64cd65691cf26978766e3eaf3cd8045e99f..7aec59f93abd084359477c9094f0ade3ed31a6d7 100644
--- a/src/MNH/read_all_data_grib_case.f90
+++ b/src/MNH/read_all_data_grib_case.f90
@@ -135,8 +135,7 @@ END MODULE MODI_READ_ALL_DATA_GRIB_CASE
 !
 !*      0. DECLARATIONS
 !------------
-USE MODE_FM
-USE MODE_IO_ll
+USE MODE_MSG
 USE MODE_TIME
 USE MODE_THERMO
 !
@@ -297,6 +296,7 @@ CHARACTER, PARAMETER               :: YPCOM = CHAR(44)! COMma character is ASCII
 CHARACTER(LEN=40), DIMENSION(:), ALLOCATABLE :: YMNHNAME ! species names
 INTEGER                            :: JN, JNREAL ! loop control variables
 CHARACTER(LEN=40)                  :: YFORMAT
+CHARACTER(LEN=100)                 :: YMSG
 ! temperature and humidity
 INTEGER                             :: IT,IQ
 REAL, DIMENSION(:,:), ALLOCATABLE   :: ZPF_G    ! Pressure (flux point)
@@ -328,7 +328,7 @@ IMI = GET_CURRENT_MODEL_INDEX()
 !* 1. READ PGD FILE
 !     -------------
 !
-CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRET)
+ILUOUT0 = TLUOUT0%NLU
 CALL READ_HGRID_n(TPPGDFILE,YPGD_NAME,YPGD_DAD_NAME,YPGD_TYPE)
 !
 ! 1.1 Domain restriction
@@ -379,11 +379,7 @@ ALLOCATE (ZYOUT(INO))
 IF (HFILE(1:3)=='ATM' .OR. HFILE=='CHEM') THEN
   WRITE (ILUOUT0,'(A,A4)') ' -- Grib reader started for ',HFILE
 ELSE
-  WRITE (ILUOUT0,'(A)') ' -> Bad input argument in read_all_data_grib_case - abort'
- !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE','bad input argument')
 END IF
 !
 !* 2.1 Charge in memory the grib messages
@@ -391,20 +387,16 @@ END IF
 ! open grib file
 CALL GRIB_OPEN_FILE(IUNIT,HGRIB,'R',IRET_GRIB)
 IF (IRET_GRIB /= 0) THEN
-  WRITE (ILUOUT0,'(A,A,A,I2)') ' -> Error opening the grib file ',HGRIB,', error code ', IRET_GRIB
   !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  WRITE(YMSG,*) 'Error opening the grib file ',TRIM(HGRIB),', error code ', IRET_GRIB
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
 END IF
 ! count the messages in the file
 CALL GRIB_COUNT_IN_FILE(IUNIT,ICOUNT,IRET_GRIB)
 IF (IRET_GRIB /= 0) THEN
-  WRITE (ILUOUT0,'(A,I2)')' -> Error in reading the grib file - error code ', IRET_GRIB
   !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  WRITE(YMSG,*) 'Error in reading the grib file ',TRIM(HGRIB),', error code ', IRET_GRIB
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
 END IF
 ALLOCATE(IGRIB(ICOUNT))
 ! initialize the tabular with a negativ number 
@@ -414,11 +406,9 @@ IGRIB(:)=-12
 DO JLOOP=1,ICOUNT
 CALL GRIB_NEW_FROM_FILE(IUNIT,IGRIB(JLOOP),IRET_GRIB)
 IF (IRET_GRIB /= 0) THEN
-  WRITE (ILUOUT0,'(A,I3,A,I2)') ' -> Error in reading the grib file - ILOOP= ',JLOOP,' - error code ', IRET_GRIB
   !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  WRITE(YMSG,*) 'Error in reading the grib file - ILOOP=',JLOOP,' - error code ', IRET_GRIB
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
 END IF
 END DO
 ! close the grib file
@@ -431,19 +421,15 @@ CALL GRIB_CLOSE_FILE(IUNIT)
 !
 CALL GRIB_GET(IGRIB(1),'centre',ICENTER,IRET_GRIB)
 IF (IRET_GRIB /= 0) THEN
-  WRITE (ILUOUT0,'(A,I2)')' -> Error in reading center - error code ', IRET_GRIB
   !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  WRITE(YMSG,*) 'Error in reading center - error code ', IRET_GRIB
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
 END IF
 CALL GRIB_GET(IGRIB(1),'typeOfGrid',HGRID,IRET_GRIB)
 IF (IRET_GRIB /= 0) THEN
-  WRITE (ILUOUT0,'(A,I2)')' -> Error in reading type of grid - error code ', IRET_GRIB
   !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  WRITE(YMSG,*) 'Error in reading type of grid - error code ', IRET_GRIB
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
 END IF
 !
 IMODEL = -1
@@ -481,11 +467,8 @@ SELECT CASE (ICENTER)
     END SELECT
 END SELECT
 IF (IMODEL==-1) THEN
-  WRITE (ILUOUT0,'(A)') ' -> Unsupported Grib file format - abort'
 !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE','unsupported Grib file format')
 END IF
 !
 !---------------------------------------------------------------------------------------
@@ -692,20 +675,16 @@ DO JLOOP1=1, INLEVEL
   ILEV1 = JLOOP1-1+ISTARTLEVEL
   CALL SEARCH_FIELD(IQ,109,ILEV1,-1,IGRIB,INUM)
   IF (INUM< 0) THEN
-    WRITE (ILUOUT0,'(A,I2,A)') ' -> Atmospheric humidity level ',JLOOP1,' is missing - abort'
 !callabortstop
-    CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-    CALL ABORT
-    STOP
+    WRITE(YMSG,*) 'atmospheric humidity level ',JLOOP1,' is missing'
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
   END IF
   CALL GRIB_GET(IGRIB(INUM),'values',ZQ_G(:,INLEVEL-JLOOP1+1))
   CALL SEARCH_FIELD(IT,109,ILEV1,-1,IGRIB,INUM)
   IF (INUM< 0) THEN
-    WRITE (ILUOUT0,'(A,I2,A)') ' -> Atmospheric temperature level ',JLOOP1,' is missing - abort'
     !callabortstop
-    CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-    CALL ABORT
-    STOP
+    WRITE(YMSG,*) 'atmospheric temperature level ',JLOOP1,' is missing'
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
   END IF
   CALL GRIB_GET(IGRIB(INUM),'values',ZT_G(:,INLEVEL-JLOOP1+1))
   CALL GRIB_GET(IGRIB(INUM),'Nj',INJ,IRET_GRIB)
@@ -737,11 +716,8 @@ IF (INLEVEL > 0) THEN
      ALLOCATE(ZPV(IPV))
      CALL GRIB_GET(IGRIB(INUM),'pv',ZPV)
   ELSE
-     WRITE (ILUOUT0,'(A)') "THERE IS NO PV VALUE IN THIS MESSAGE : abort"
      !callabortstop
-     CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-     CALL ABORT
-     STOP
+     CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE','there is no PV value in this message')
   ENDIF
   SELECT CASE (IMODEL)
     CASE (0,3,4)
@@ -769,11 +745,8 @@ IF (INLEVEL > 0) THEN
       END DO
   END SELECT
 ELSE
-  WRITE (ILUOUT0,'(A)') ' -> Level definition section is missing - abort'
  !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE','level definition section is missing')
 END IF
 !
 !*  2.5.3  Compute atmospheric pressure on grib grid
@@ -959,11 +932,9 @@ IF (NRR >1) THEN
       CALL SEARCH_FIELD(IPAR,109,ILEV1,-1,IGRIB,INUM)
 
       IF (INUM < 0) THEN
-        WRITE (ILUOUT0,'(A,I3,A,I2,A)') ' -> Specific ratio ',IPAR,' at level ',JLOOP1,' is missing - abort'
         !callabortstop
-        CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-        CALL ABORT
-        STOP
+        WRITE(YMSG,*) 'Specific ratio ',IPAR,' at level ',JLOOP1,' is missing'
+        CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
       END IF
       CALL GRIB_GET_SIZE(IGRIB(INUM),'values',ISIZE)
       ALLOCATE(ZVALUE(ISIZE))
@@ -985,11 +956,9 @@ IF (CTURB=='TKEL') THEN
     ILEV1 = JLOOP1-1+ISTARTLEVEL
     CALL SEARCH_FIELD(IPAR,109,ILEV1,-1,IGRIB,INUM)
     IF (INUM <  0) THEN
-      WRITE (ILUOUT0,'(A,I3,A,I2,A)') ' -> TKE at level ',JLOOP1,' is missing - abort'
       !callabortstop
-      CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
+      WRITE(YMSG,*) 'TKE at level ',JLOOP1,' is missing'
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
     END IF
     CALL GRIB_GET_SIZE(IGRIB(INUM),'values',ISIZE)
     ALLOCATE(ZVALUE(ISIZE))
@@ -1026,11 +995,8 @@ IF (IMODEL==5) THEN
     DEALLOCATE(XSV_LS)
     ALLOCATE (XSV_LS(IIU,IJU,INLEVEL,NSV))
   ELSE
-    WRITE (ILUOUT0,'(A)') ' -> Mocage model: Bad input argument in read_all_data_grib_case - abort'
     !callabortstop
-    CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-    CALL ABORT
-    STOP
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE','Mocage model: Bad input argument in read_all_data_grib_case')
   END IF
   XSV_LS(:,:,:,:) = 0.
   ITYP=109
@@ -1090,12 +1056,9 @@ IF (IMODEL==5) THEN
         ILEV1 = JLOOP1
         CALL SEARCH_FIELD(INUMGRIB(JN),ITYP,ILEV1,ILEV2,IGRIB,INUM)
         IF (INUM <  0) THEN
-          WRITE (ILUOUT0,'(A,I3,A,I2,A)') ' -> Atmospheric ',INUMGRIB(JN),&
-          ' grib chemical species level ',JLOOP1,' is missing - abort'
           !callabortstop
-          CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-          CALL ABORT
-          STOP
+          WRITE(YMSG,*) 'Atmospheric ',INUMGRIB(JN),' grib chemical species level ',JLOOP1,' is missing'
+          CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
         END IF
         CALL GRIB_GET(IGRIB(INUM),'Nj',INJ,IRET_GRIB)
         ALLOCATE(IINLO(INJ))
@@ -1187,12 +1150,9 @@ DO JLOOP1 = ISTARTLEVEL, ISTARTLEVEL+INLEVEL-1
   ! read component u 
   CALL SEARCH_FIELD(IPAR,ITYP,ILEV1,ILEV2,IGRIB,INUM)
   IF (INUM < 0) THEN
-    WRITE (ILUOUT0,'(A,I2,A)') ' -> Wind vector component "u", level ', &
-      JLOOP1,' is missing - abort'
     !callabortstop
-    CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-    CALL ABORT
-    STOP
+    WRITE(YMSG,*) 'wind vector component "u" at level ',JLOOP1,' is missing'
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
   END IF
   CALL GRIB_GET_SIZE(IGRIB(INUM),'values',ISIZE)
   ALLOCATE(ZVALUE(ISIZE))
@@ -1218,12 +1178,9 @@ DO JLOOP1 = ISTARTLEVEL, ISTARTLEVEL+INLEVEL-1
   ILEV1 = JLOOP1
   CALL SEARCH_FIELD(IPAR+1,ITYP,ILEV1,ILEV2,IGRIB,INUM)
   IF (INUM < 0) THEN
-    WRITE (ILUOUT0,'(A,I2,A)') ' -> Wind vector component "v", level ', &
-      JLOOP1,' is missing - abort'
     !callabortstop
-    CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-    CALL ABORT
-    STOP
+    WRITE(YMSG,*) 'wind vector component "v" at level ',JLOOP1,' is missing'
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
   END IF
   CALL GRIB_GET_SIZE(IGRIB(INUM),'values',ISIZE)
   ALLOCATE(ZVALUE(ISIZE))
@@ -1524,9 +1481,8 @@ IF (ODUMMY_REAL) THEN
   IF (IVAR /= IMOC) THEN
     WRITE (ILUOUT0,'(A,I3,A,I3,A)') ' -> Number of correct lines (',IVAR,') is different of ',IMOC,' - abort'
    !callabortstop
-    CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-    CALL ABORT
-    STOP
+    WRITE(YMSG,*) 'number of correct lines (',IVAR,') is different of ',IMOC
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
   END IF
   !
   !* 2.10.2 read and interpolate variables onto dummy variables XDUMMY_2D
@@ -1537,9 +1493,8 @@ IF (ODUMMY_REAL) THEN
     IF (INUM < 0) THEN
       WRITE (ILUOUT0,'(A,I3,A,I2,A)') ' -> 2D field ',INUMGRIB(JI),' is missing - abort'
       !callabortstop
-      CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
+      WRITE(YMSG,*) '2D field ',INUMGRIB(JI),' is missing'
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
     END IF
     CALL GRIB_GET(IGRIB(INUM),'Nj',INJ,IRET_GRIB)
     ALLOCATE(IINLO(INJ))
@@ -1614,11 +1569,8 @@ INTEGER                 :: JLOOP2_A1T2
 INTEGER                 :: JPOS_A1T2
 !
 IF (KN1 < KL1*KL2) THEN
-  WRITE (ILUOUT0,'(A)') ' | Error in "ARRAY_1D_TO_2D", sizes do not match - abort'
  !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','ARRAY_1D_TO_2D','sizes do not match')
 END IF
 JPOS_A1T2 = 1
 DO JLOOP2_A1T2 = 1, KL2
@@ -1642,7 +1594,6 @@ SUBROUTINE SEARCH_FIELD(KPARAM,KLTYPE,KLEV1,KLEV2,KGRIB,KNUM)
 USE MODD_LUNIT
 USE GRIB_API
 !
-USE MODE_FM
 USE MODE_IO_ll
 !
 IMPLICIT NONE
@@ -1670,7 +1621,7 @@ CHARACTER(LEN=20) :: YLTYPE
 ! Variables used to display messages
 INTEGER :: ILUOUT0   ! Logical unit number of the listing
 !
-CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRET)
+ILUOUT0 = TLUOUT0%NLU
 !
 SELECT CASE (KLTYPE) 
 CASE(109)
diff --git a/src/MNH/read_all_data_mesonh_case.f90 b/src/MNH/read_all_data_mesonh_case.f90
index 3f0280a2dc988f373615f7fa6ed9fce748631a47..70c1d45337b93ba36fa4a97bbb2873779cf57971 100644
--- a/src/MNH/read_all_data_mesonh_case.f90
+++ b/src/MNH/read_all_data_mesonh_case.f90
@@ -75,7 +75,7 @@ END MODULE MODI_READ_ALL_DATA_MESONH_CASE
 !!      Module MODD_CONF      : contains configuration variables for all models.
 !!         NVERB : verbosity level for output-listing
 !!      Module MODD_LUNIT     : contains logical unit names for all models
-!!         CLUOUT0 : name of output-listing
+!!         TLUOUT0 : output-listing file
 !!      Module MODD_PGDDIM    : contains dimension of PGD fields
 !!         NPGDIMAX: dimension along x (no external point)
 !!         NPGDJMAX: dimension along y (no external point)
@@ -117,9 +117,9 @@ END MODULE MODI_READ_ALL_DATA_MESONH_CASE
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_FM
 USE MODE_IO_ll
 USE MODE_FMREAD
+USE MODE_MSG
 !
 USE MODI_READ_GRID_TIME_MESONH_CASE ! interface modules
 USE MODI_READ_HGRID
@@ -184,7 +184,7 @@ INTEGER :: IXOR_LS    ! I shift between PGD file and LS atmospheric file
 INTEGER :: IYOR_LS    ! J shift between PGD file and LS atmospheric file
 !
 INTEGER :: IRESP      ! return-code if problems occured
-INTEGER :: ILUOUT0    ! logical unit for file CLUOUT0
+INTEGER :: ILUOUT0    ! logical unit for file TLUOUT0
 !
 CHARACTER(LEN=28) :: YPGD_NAME, YPGD_DAD_NAME
 CHARACTER(LEN=28) :: YOUTFILE
@@ -207,7 +207,7 @@ TYPE(LIST_ll), POINTER :: TZFIELDS_ll => NULL() ! list of fields to exchange
 !
 !------------------------------------------------------------------------------
 !
-CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
+ILUOUT0 = TLUOUT0%NLU
 !
 !-------------------------------------------------------------------------------
 !
@@ -275,12 +275,8 @@ CALL READ_VER_GRID(HPRE_REAL1,XZHAT_LS,LSLEVE_LS,XLEN1_LS,XLEN2_LS)
 IF (LBOGUSSING) THEN
   IF (LEN_TRIM(CDADBOGFILE) >0 ) THEN
     IF (LEN_TRIM(CDADATMFILE) == 0 ) THEN
-      WRITE(ILUOUT0,*) 'READ_ALL_DATA_MESONH_CASE: CDADATMFILE not initialized in nml NAM_HURR_CONF'
-      WRITE(ILUOUT0,*) '-> JOB ABORTED'
  !callabortstop
-      CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_MESONH_CASE','CDADATMFILE not initialized in nml NAM_HURR_CONF')
     ELSE 
       IF (LEN_TRIM(HDAD_NAME) >0 ) THEN
         IF (ADJUSTL(ADJUSTR(HDAD_NAME)) .NE. ADJUSTL(ADJUSTR(CDADATMFILE))) THEN
@@ -290,19 +286,13 @@ IF (LBOGUSSING) THEN
           WRITE(ILUOUT0,*) ' DAD_NAME of model1='//TRIM(HDAD_NAME)
           WRITE(ILUOUT0,*) '-> JOB ABORTED'
  !callabortstop
-          CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-          CALL ABORT
-          STOP
+          CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_MESONH_CASE','')
         ELSE    
           CALL COMPARE_DAD(CDADATMFILE,CDADBOGFILE,IRESP)
           IF (IRESP .NE. 0) THEN
-            WRITE(ILUOUT0,*) &
-              'READ_ALL_DATA_MESONH_CASE: Unable to replace the DAD of output file with CDADBOGFILE'
-            WRITE(ILUOUT0,*) '-> JOB ABORTED'
  !callabortstop
-            CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-            CALL ABORT
-            STOP
+            CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_MESONH_CASE',&
+                           'unable to replace the DAD of output file with CDADBOGFILE')
           ENDIF
           HDAD_NAME=CDADBOGFILE
         ENDIF
diff --git a/src/MNH/read_exspa.f90 b/src/MNH/read_exspa.f90
index 0d3137fc6cc5f10eaeac3fdb1462c030d02e6d5b..0cec68dfa8019854ed779f949f34af7b86f4e26b 100644
--- a/src/MNH/read_exspa.f90
+++ b/src/MNH/read_exspa.f90
@@ -105,10 +105,13 @@ END MODULE MODI_READ_EXSPA
 !               ------------
 !
 USE MODD_CONF
+USE MODD_IO_ll,   ONLY : TFILE_OUTPUTLISTING
 USE MODD_LUNIT_n, ONLY : LUNIT_MODEL
 USE MODD_PARAMETERS
 !
+USE MODE_FM, ONLY : IO_FILE_OPEN_ll
 USE MODE_IO_ll
+USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
 USE MODE_POS
 USE MODE_MODELN_HANDLER
 !
@@ -201,8 +204,13 @@ YDADINIFILE = ' '
 YDADSPAFILE = ' '
 !
 LUNIT_MODEL(2)%CLUOUT = 'OUTPUT_LISTING2'
-CALL OPEN_ll(UNIT=ILUOUT,FILE=LUNIT_MODEL(2)%CLUOUT,IOSTAT=IRESP,FORM='FORMATTED',ACTION='WRITE', &
-     MODE='GLOBAL')
+CALL IO_FILE_ADD2LIST(LUNIT_MODEL(2)%TLUOUT,LUNIT_MODEL(2)%CLUOUT,'OUTPUTLISTING','WRITE')
+CALL IO_FILE_OPEN_ll(LUNIT_MODEL(2)%TLUOUT)
+!
+!Set output file for PRINT_MSG
+TFILE_OUTPUTLISTING => LUNIT_MODEL(2)%TLUOUT
+!
+ILUOUT=LUNIT_MODEL(2)%TLUOUT%NLU
 !
 YEXSPA  = 'SPAWN1.nam'
 CALL OPEN_ll(unit=ILUSPA,FILE=YEXSPA,iostat=IRESP,status="OLD",action='READ',  &
diff --git a/src/MNH/read_hgrid.f90 b/src/MNH/read_hgrid.f90
index fa859bb0a8a4e718fdbfaf94eaf3f5048e94053c..ca8c0063c9167eb2512d510ffa46d1823ccf775d 100644
--- a/src/MNH/read_hgrid.f90
+++ b/src/MNH/read_hgrid.f90
@@ -65,8 +65,6 @@ END MODULE MODI_READ_HGRID
 !!        NJMAX
 !!      Module MODD_PARAMETERS :
 !!        JPHEXT
-!!      Module MODD_LUNIT :
-!!        CLUOUT0
 !!
 !!    REFERENCE
 !!    ---------
@@ -88,7 +86,6 @@ END MODULE MODI_READ_HGRID
 USE MODD_CONF, ONLY : CPROGRAM
 USE MODD_GRID
 USE MODD_IO_ll, ONLY: TFILEDATA
-USE MODD_LUNIT
 USE MODD_PARAMETERS
 USE MODD_PGDDIM
 USE MODD_PGDGRID
@@ -97,6 +94,7 @@ USE MODE_FIELD, ONLY : TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME
 USE MODE_FMREAD
 USE MODE_GRIDPROJ
 USE MODE_IO_ll
+USE MODE_MSG
 USE MODE_MODELN_HANDLER
 !
 USE MODI_READ_HGRID_n
@@ -127,12 +125,7 @@ TYPE(TFIELDDATA)       :: TZFIELD
 !               -------------------
 !
 ! KMI may be 0 !
-IF (KMI<0 .OR. KMI>JPMODELMAX) THEN
-   !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
-ENDIF
+IF (KMI<0 .OR. KMI>JPMODELMAX) CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_HGRID','KMI<0 .OR. KMI>JPMODELMAX')
 IF (KMI/=0) THEN
   IMI = GET_CURRENT_MODEL_INDEX()
   CALL GOTO_MODEL(KMI)
diff --git a/src/MNH/read_hgridn.f90 b/src/MNH/read_hgridn.f90
index 2d7685f0cbf5259cc2f0f24517cca8ea3f315a26..99ca4e03442831851d4430f4b270d8c4e494bd6c 100644
--- a/src/MNH/read_hgridn.f90
+++ b/src/MNH/read_hgridn.f90
@@ -90,10 +90,10 @@ USE MODD_LUNIT_n
 USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT, JPMODELMAX
 !
 USE MODE_FIELD, ONLY : TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME
-USE MODE_FM
 USE MODE_FMREAD
 USE MODE_GRIDPROJ
 USE MODE_IO_ll
+USE MODE_MSG
 USE MODE_MODELN_HANDLER
 !
 IMPLICIT NONE
@@ -124,7 +124,7 @@ INTEGER             :: IXOR, IYOR, IXEND, IYEND
 INTEGER             :: IJPHEXT
 TYPE(TFIELDDATA)    :: TZFIELD
 !
-CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)
+ILUOUT = TLUOUT%NLU
 !
 !*       1.     General information :
 !               -------------------
@@ -167,9 +167,7 @@ ELSE
     WRITE(ILUOUT,*) 'model 1 : XLAT0= ',XLAT0,' XLON0= ',XLON0, &
                                               ' XBETA= ',XBETA
  !callabortstop
-    CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-    CALL ABORT
-    STOP
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_HGRID_n','')
   END IF
   IF (.NOT.LCARTESIAN ) THEN
     IF ( ABS(XRPK-ZRPK)> ZEPS ) THEN
@@ -177,9 +175,7 @@ ELSE
       WRITE(ILUOUT,*) 'model ',IMI,' : XRPK= ',ZRPK
       WRITE(ILUOUT,*) 'model 1 : XRPK= ',XRPK
  !callabortstop
-      CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_HGRID_n','')
     END IF
   END IF
 END IF
@@ -206,9 +202,7 @@ IF (CPROGRAM/='IDEAL ') THEN
 
      WRITE(ILUOUT,FMT=*) ' different from PGD files=',TPFMFILE%CNAME ,' value JPHEXT=',IJPHEXT
      WRITE(ILUOUT,FMT=*) '-> JOB ABORTED'
-     CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-     CALL ABORT  
-     STOP   
+     CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_HGRID_n','')
   END IF
 END IF
 !
diff --git a/src/MNH/read_prc_fmfile.f90 b/src/MNH/read_prc_fmfile.f90
index 1f404226639caeb3707272de3d8be1d222bdd465..169e13ca0e022fcf91ab209adb9eb1697de5610d 100644
--- a/src/MNH/read_prc_fmfile.f90
+++ b/src/MNH/read_prc_fmfile.f90
@@ -118,9 +118,6 @@ USE MODD_GRID_n
 USE MODD_TIME_n
 USE MODD_PREP_REAL
 !
-USE MODE_FMREAD
-USE MODE_FM
-USE MODE_IO_ll
 USE MODE_FIELD
 !
 USE MODI_TRUNC_FIELD
@@ -193,7 +190,7 @@ IJU=KJSUP-KJINF+1
 ILU=SIZE(XTHT,3)
 CALL GET_INDICE_ll(IIB,IJB,IIE,IJE)
 !
-CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
+ILUOUT0 = TLUOUT0%NLU
 !
 !20131105 nullify tzfield
 NULLIFY(TZFIELDS_ll)
@@ -392,13 +389,6 @@ END IF
 !*       7.    ERASES LATERAL BOUNDARIES
 !              -------------------------
 !
-!!$IF (JPHEXT>1) THEN
-!!$  WRITE (ILUOUT0,*) 'READ_PRC_FMFILE: abort (JPHEXT= ',JPHEXT,' )'
-!!$ !callabortstop
-!!$  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-!!$  CALL ABORT
-!!$  STOP
-!!$END IF
 !
 !*       7.1   left boundary I=1+JPHEXT for U
 !              ------------------------------
diff --git a/src/MNH/read_ver_grid.f90 b/src/MNH/read_ver_grid.f90
index 510daad5d6d05061b5c0e74f191157de6a409dfb..ec7e6bb775cb0fc1ccd1f0dce945d9e0dd2cddfb 100644
--- a/src/MNH/read_ver_grid.f90
+++ b/src/MNH/read_ver_grid.f90
@@ -108,8 +108,8 @@ END MODULE MODI_READ_VER_GRID
 !              ------------
 !
 USE MODE_FM
+USE MODE_MSG
 USE MODE_POS
-USE MODE_IO_ll
 !
 USE MODI_DEFAULT_SLEVE
 !
@@ -165,7 +165,7 @@ NAMELIST/NAM_VER_GRID/ LTHINSHELL,NKMAX,YZGRID_TYPE,ZDZGRD,ZDZTOP,ZZMAX_STRGRD,Z
 !
 !*       1.    READING OF THE NAMELIST IN FILE HPRE_REAL1 :  
 !              ------------------------------------------
-CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
+ILUOUT0 = TLUOUT0%NLU
 CALL FMLOOK_ll(HPRE_REAL1,CLUOUT0,IPRE_REAL1,IRESP)
 !
 !*       1.1   Vertical grid default value
@@ -224,9 +224,7 @@ CASE('SAMEGR')
       WRITE(ILUOUT0,*) '  FM file: ',SIZE(PZHAT)-2*JPVEXT
       WRITE(ILUOUT0,*) '  NKMAX  : ',NKMAX_n
  !callabortstop
-      CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_VER_GRID','')
     END IF
 
     XZHAT(:)=PZHAT(1:NKMAX_n+2*JPVEXT)
@@ -248,12 +246,8 @@ CASE('SAMEGR')
     END IF
 
   ELSE
-    WRITE(ILUOUT0,*) 'ERROR IN READ_VER_GRID :'
-    WRITE(ILUOUT0,*) '  THE VERTICAL GRID CAN BE KEPT ONLY IF THE INPUT FILE IS A MESONH FILE'
  !callabortstop
-    CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-    CALL ABORT
-    STOP
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_VER_GRID','the vertical grid can be kept only if the input file is a MESONH file')
   END IF
 !
 !
@@ -275,9 +269,7 @@ CASE('FUNCTN')
       WRITE(ILUOUT0,*) 'CHANGE THESE PARAMETERS AND TRY AGAIN'
       WRITE(ILUOUT0,*) 'ZDZGRD =', ZDZGRD,'  ZDZTOP =', ZDZTOP
  !callabortstop
-      CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_VER_GRID','')
     END IF 
 !
     XZHAT(IKB-1)=-ZDZGRD
@@ -326,9 +318,7 @@ CASE DEFAULT
   WRITE(ILUOUT0,FMT=*) ' YZGRID_TYPE =',YZGRID_TYPE
   WRITE(ILUOUT0,FMT=*) '-> JOB ABORTED'
  !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP   
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_VER_GRID','')
 END SELECT
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/removal_vortex.f90 b/src/MNH/removal_vortex.f90
index 4d51e73a5727d33aa0fcb8224e0244ef888aefae..c79d1f8dde5fa13192c7b1ef097ee343829781e0 100644
--- a/src/MNH/removal_vortex.f90
+++ b/src/MNH/removal_vortex.f90
@@ -81,15 +81,14 @@ USE MODD_HURR_CONF
 USE MODD_CONF, ONLY: NVERB
 USE MODD_CST, ONLY: XPI
 USE MODD_PARAMETERS, ONLY: JPHEXT,XUNDEF
-USE MODD_LUNIT, ONLY: CLUOUT0
+USE MODD_LUNIT, ONLY: TLUOUT0
 USE MODD_HURR_FIELD_n
 USE MODD_DIM_n, ONLY: NIMAX,NJMAX
 USE MODD_GRID, ONLY: XLONORI,XLATORI
 USE MODD_GRID_n, ONLY: XXHAT,XYHAT
 !
-USE MODE_FM
 USE MODE_GRIDPROJ
-USE MODE_IO_ll
+USE MODE_MSG
 !
 USE MODI_SHUMAN
 USE MODI_BARNES_FILTER
@@ -112,7 +111,7 @@ REAL,DIMENSION(:,:), OPTIONAL, INTENT(INOUT)   :: PPS_LS ! Pressure (mass points
 !
 !*       0.2   Declarations of local variables
 !
-INTEGER                                                   :: IRET,ILUOUT0
+INTEGER                                                   :: ILUOUT0
 !
 REAL,DIMENSION(SIZE(PT_LS,1),SIZE(PT_LS,2),SIZE(PT_LS,3)) :: ZUMASS,ZVMASS
 REAL,DIMENSION(SIZE(PT_LS,1),SIZE(PT_LS,2),SIZE(PT_LS,3)) :: ZUDIS,ZVDIS
@@ -156,7 +155,7 @@ INTEGER          :: IRESP   ! Return code of FM-routines
 !*	 1. INITIALIZATIONS
 !           ---------------
 !             
-CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRET)
+ILUOUT0 = TLUOUT0%NLU
 IIU= SIZE(PT_LS,1)
 IJU= SIZE(PT_LS,2)
 IP= SIZE(PT_LS,3)
@@ -165,25 +164,19 @@ ZDELTAY= XYHAT(3) - XYHAT(2)
 ZDELTAR= MAX(ZDELTAX,ZDELTAY)
 !
 IF (XLATGUESS == XUNDEF .AND. XLONGUESS == XUNDEF) THEN
-  WRITE(ILUOUT0,'(A)')' -> You do not specify a first guess position of the cyclone (XLATGUESS, XLONGUESS) - abort'
  !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','REMOVAL_VORTEX',&
+                 'You do not specify a first guess position of the cyclone (XLATGUESS, XLONGUESS)')
 END IF
 IF (XBOXWIND == XUNDEF) THEN
-  WRITE(ILUOUT0,'(A)')' -> You do not specify a radius to determine the cyclone center inside (XBOXWIND,km) - abort'
  !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','REMOVAL_VORTEX',&
+                 'ou do not specify a radius to determine the cyclone center inside (XBOXWIND,km)')
 END IF
 IF (XRADGUESS == XUNDEF) THEN
-  WRITE(ILUOUT0,'(A)')' -> You do not specify a guess for the filtered radius (XRADGUESS,km) - abort'
  !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','REMOVAL_VORTEX',&
+                 'You do not specify a guess for the filtered radius (XRADGUESS,km)')
 END IF
 !
 ! Allocations
@@ -245,11 +238,8 @@ IF (NVERB>=5) WRITE(ILUOUT0,'(A,I3,A,I3)')' equivalent indexes in the Meso-NH gr
 !
 IF ( (IIMIN<1) .OR. (IIMIN>IIU+1) .OR. &
      (IJMIN<1) .OR. (IJMIN>IJU+1)      ) THEN
-  WRITE(ILUOUT0,'(A)')' -> The first guess position of the fix is not in the Meso-NH domain - abort'
  !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','REMOVAL_VORTEX','The first guess position of the fix is not in the Meso-NH domain')
 END IF
 !
 IAVGWINDI = NINT(XBOXWIND*1000./ZDELTAX)
diff --git a/src/MNH/select_avg_pgd.f90 b/src/MNH/select_avg_pgd.f90
index 0c277fe95b8f141936d034ef54198d5800d7a24c..045f16296bc6c1c9e294040ddd93335236cec4d4 100644
--- a/src/MNH/select_avg_pgd.f90
+++ b/src/MNH/select_avg_pgd.f90
@@ -59,8 +59,7 @@ END MODULE MODI_SELECT_AVG_PGD
 !            -----------
 !
 USE MODD_LUNIT
-USE MODE_FM
-USE MODE_IO_ll
+USE MODE_MSG
 !
 IMPLICIT NONE
 !
@@ -283,7 +282,7 @@ SELECT CASE (YFIELD)
 !-------------------------------------------------------------------------------
 !
   CASE DEFAULT
-    CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
+    ILUOUT0 = TLUOUT0%NLU
     WRITE(ILUOUT0) '*****************************************************************************'
     WRITE(ILUOUT0) ' '
     WRITE(ILUOUT0) 'Error in field name specification for a personal initialization:'
@@ -306,9 +305,7 @@ SELECT CASE (YFIELD)
     WRITE(ILUOUT0) ' '
     WRITE(ILUOUT0) '*****************************************************************************'
  !callabortstop
-    CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-    CALL ABORT
-    STOP
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','SELECT_AVG_PGD','')
 !
 END SELECT
 !
diff --git a/src/MNH/seriesn.f90 b/src/MNH/seriesn.f90
index a80c570f5e5c39c2ee93ec71bc4f957b4c57666b..09eecb4d64ca95580c0b8b6558dea6239e104a73 100644
--- a/src/MNH/seriesn.f90
+++ b/src/MNH/seriesn.f90
@@ -57,7 +57,7 @@ USE MODD_TYPE_DATE
 USE MODD_CONF_n,   ONLY: LUSERV,LUSERC,LUSERR,LUSERI,LUSERS,LUSERG,LUSERH
 USE MODD_FIELD_n,  ONLY: XTHT,XWT,XUT,XPABST,XRT
 USE MODD_GRID_n,   ONLY: XZZ
-USE MODD_LUNIT_n,  ONLY: CLUOUT
+USE MODD_LUNIT_n,  ONLY: TLUOUT
 USE MODD_PRECIP_n, ONLY: XINPRC,XINPRR,XINPRS,XINPRG,XINPRH, &
                          XACPRC,XACPRR,XACPRS,XACPRG,XACPRH
 USE MODD_TIME_n, ONLY: TDTCUR
@@ -66,6 +66,7 @@ USE MODI_GET_SURF_VAR_n
 !
 USE MODE_ll
 USE MODE_IO_ll
+USE MODE_MSG
 !
 USE MODI_TEMPORAL_DIST
 USE MODD_MNH_SURFEX_n
@@ -106,7 +107,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSERIES
 !*      1.   INITIALIZATIONS
 !            ---------------
 !
-CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)
+ILUOUT = TLUOUT%NLU
 !
 IKU=SIZE(XTHT,3)
 CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
@@ -218,9 +219,7 @@ IF (LSERIES1) THEN
        ELSE
          WRITE(UNIT=ILUOUT,FMT=1) 'INPRT','1',CSTITLE1(ISB1)
  !callabortstop
-         CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-         CALL ABORT
-         STOP
+         CALL PRINT_MSG(NVERB_FATAL,'GEN','SERIES_n','')
        END IF
      END IF
 !
@@ -251,9 +250,7 @@ IF (LSERIES1) THEN
        ELSE
          WRITE(UNIT=ILUOUT,FMT=1) 'ACPRT','1',CSTITLE1(ISB1)
  !callabortstop
-         CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-         CALL ABORT
-         STOP
+         CALL PRINT_MSG(NVERB_FATAL,'GEN','SERIES_n','')
        END IF
      END IF
 !
@@ -273,9 +270,7 @@ IF (LSERIES1) THEN
        ELSE
          WRITE(UNIT=ILUOUT,FMT=1) 'RVT  ','1',CSTITLE1(ISB1)
  !callabortstop
-         CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-         CALL ABORT
-         STOP
+         CALL PRINT_MSG(NVERB_FATAL,'GEN','SERIES_n','')
        END IF
      END IF
      !
@@ -293,9 +288,7 @@ IF (LSERIES1) THEN
        ELSE
          WRITE(UNIT=ILUOUT,FMT=1) 'RCT  ','1',CSTITLE1(ISB1)
  !callabortstop
-         CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-         CALL ABORT
-         STOP
+         CALL PRINT_MSG(NVERB_FATAL,'GEN','SERIES_n','')
        END IF
      END IF
      !
@@ -313,9 +306,7 @@ IF (LSERIES1) THEN
        ELSE
          WRITE(UNIT=ILUOUT,FMT=1) 'RRT  ','1',CSTITLE1(ISB1)
  !callabortstop
-         CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-         CALL ABORT
-         STOP
+         CALL PRINT_MSG(NVERB_FATAL,'GEN','SERIES_n','')
        END IF
      END IF
      !
@@ -333,9 +324,7 @@ IF (LSERIES1) THEN
        ELSE
          WRITE(UNIT=ILUOUT,FMT=1) 'RIT  ','1',CSTITLE1(ISB1)
  !callabortstop
-         CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-         CALL ABORT
-         STOP
+         CALL PRINT_MSG(NVERB_FATAL,'GEN','SERIES_n','')
        END IF
      END IF
      !
@@ -353,9 +342,7 @@ IF (LSERIES1) THEN
        ELSE
          WRITE(UNIT=ILUOUT,FMT=1) 'RST  ','1',CSTITLE1(ISB1)
  !callabortstop
-         CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-         CALL ABORT
-         STOP
+         CALL PRINT_MSG(NVERB_FATAL,'GEN','SERIES_n','')
        END IF
      END IF
      !
@@ -373,9 +360,7 @@ IF (LSERIES1) THEN
        ELSE
          WRITE(UNIT=ILUOUT,FMT=1) 'RGT  ','1',CSTITLE1(ISB1)
  !callabortstop
-         CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-         CALL ABORT
-         STOP
+         CALL PRINT_MSG(NVERB_FATAL,'GEN','SERIES_n','')
        END IF
      END IF
      !
@@ -393,9 +378,7 @@ IF (LSERIES1) THEN
        ELSE
          WRITE(UNIT=ILUOUT,FMT=1) 'RHT  ','1',CSTITLE1(ISB1)
  !callabortstop
-         CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-         CALL ABORT
-         STOP
+         CALL PRINT_MSG(NVERB_FATAL,'GEN','SERIES_n','')
        END IF
      END IF
 !SURFACE FIELDS
@@ -441,9 +424,7 @@ IF (LSERIES1) THEN
        ELSE
          WRITE(UNIT=ILUOUT,FMT=1) 'WMAX ','1',CSTITLE1(ISB1)
  !callabortstop
-         CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-         CALL ABORT
-         STOP
+         CALL PRINT_MSG(NVERB_FATAL,'GEN','SERIES_n','')
        END IF
        ! Min vertical velocity
        ISB1=ISB1+1
@@ -453,9 +434,7 @@ IF (LSERIES1) THEN
        ELSE
          WRITE(UNIT=ILUOUT,FMT=1) 'WMIN ','1',CSTITLE1(ISB1)
  !callabortstop
-         CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-         CALL ABORT
-         STOP
+         CALL PRINT_MSG(NVERB_FATAL,'GEN','SERIES_n','')
        END IF
      ENDIF
    END DO
@@ -483,9 +462,7 @@ IF (LSERIES2) THEN
     ELSE
       WRITE(UNIT=ILUOUT,FMT=1) 'WT   ','2',CSTITLE2(ISB2)
  !callabortstop
-      CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','SERIES_n','')
     END IF
 !
 !*      3.2  Potential Temperature
@@ -500,9 +477,7 @@ IF (LSERIES2) THEN
     ELSE
       WRITE(UNIT=ILUOUT,FMT=1) 'THT  ','2',CSTITLE2(ISB2)
  !callabortstop
-      CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','SERIES_n','')
     END IF
 !
 !*      3.3  Pressure
@@ -517,9 +492,7 @@ IF (LSERIES2) THEN
     ELSE
       WRITE(UNIT=ILUOUT,FMT=1) 'PASBT','2',CSTITLE2(ISB2)
  !callabortstop
-      CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','SERIES_n','')
     END IF
 !
 !*      3.4  Vapor
@@ -535,9 +508,7 @@ IF (LSERIES2) THEN
       ELSE
         WRITE(UNIT=ILUOUT,FMT=1) 'RVT  ','2',CSTITLE2(ISB2)
  !callabortstop
-        CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-        CALL ABORT
-        STOP
+        CALL PRINT_MSG(NVERB_FATAL,'GEN','SERIES_n','')
       END IF
     END IF
 !
@@ -554,9 +525,7 @@ IF (LSERIES2) THEN
       ELSE
         WRITE(UNIT=ILUOUT,FMT=1) 'RCT  ','2',CSTITLE2(ISB2)
  !callabortstop
-        CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-        CALL ABORT
-        STOP
+        CALL PRINT_MSG(NVERB_FATAL,'GEN','SERIES_n','')
       END IF
     END IF
 !
@@ -573,9 +542,7 @@ IF (LSERIES2) THEN
       ELSE
         WRITE(UNIT=ILUOUT,FMT=1) 'RRT  ','2',CSTITLE2(ISB2)
  !callabortstop
-        CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-        CALL ABORT
-        STOP
+        CALL PRINT_MSG(NVERB_FATAL,'GEN','SERIES_n','')
       END IF
     END IF
 !
@@ -592,9 +559,7 @@ IF (LSERIES2) THEN
       ELSE
         WRITE(UNIT=ILUOUT,FMT=1) 'RIT  ','2',CSTITLE2(ISB2)
  !callabortstop
-        CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-        CALL ABORT
-        STOP
+        CALL PRINT_MSG(NVERB_FATAL,'GEN','SERIES_n','')
       END IF
     END IF
 !
@@ -611,9 +576,7 @@ IF (LSERIES2) THEN
       ELSE
         WRITE(UNIT=ILUOUT,FMT=1) 'RST  ','2',CSTITLE2(ISB2)
  !callabortstop
-        CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-        CALL ABORT
-        STOP
+        CALL PRINT_MSG(NVERB_FATAL,'GEN','SERIES_n','')
       END IF
     END IF
 !
@@ -630,9 +593,7 @@ IF (LSERIES2) THEN
       ELSE
         WRITE(UNIT=ILUOUT,FMT=1) 'RGT  ','2',CSTITLE2(ISB2)
  !callabortstop
-        CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-        CALL ABORT
-        STOP
+        CALL PRINT_MSG(NVERB_FATAL,'GEN','SERIES_n','')
       END IF
     END IF
 !
diff --git a/src/MNH/set_advfrc.f90 b/src/MNH/set_advfrc.f90
index cd68f4b0b1963790241277ed4ed15e04b49d51ec..f62dd0c8ac2a17fa6ab02fa7c9da04dc806388bb 100644
--- a/src/MNH/set_advfrc.f90
+++ b/src/MNH/set_advfrc.f90
@@ -78,19 +78,18 @@ END MODULE MODI_SETADVFRC
 !
 USE MODD_CST 
 USE MODD_LUNIT_n
-USE MODD_LUNIT
 USE MODD_GRID_n
 USE MODD_CONF
 USE MODD_FRC
-
 USE MODD_GRID
 USE MODD_REF
 USE MODD_PARAMETERS  ! JPHEXT
 ! 
-USE MODE_THERMO 
 USE MODE_FM
-!
 USE MODE_IO_ll
+USE MODE_MSG
+USE MODE_THERMO
+!
 USE MODI_HEIGHT_PRESS  ! interface modules
 USE MODI_PRESS_HEIGHT
 USE MODI_THETAVPU_THETAVPM 
@@ -114,7 +113,6 @@ CHARACTER(LEN=*),       INTENT(IN)  :: HEXPRE ! name of input data file
 !*       0.2   Declarations of local variables :
 !
 INTEGER :: ILUPRE,IRESP ! logical unit number of the  EXPRE and FM return code
-INTEGER :: ILUOUT0 ! Logical unit number for output-listing
 INTEGER :: ILUOUT       ! Logical unit number for output-listing   
 INTEGER :: JKT,JL,JK,JI! Loop control   
 INTEGER :: IIU,IIB,IIE !dimensions du modele
@@ -144,9 +142,7 @@ print*,"!*	 1.     PROLOGUE : RETRIEVE LOGICAL UNIT NUMBERS "
 !	        ----------------------------------------
 !                           
 CALL FMLOOK_ll(HEXPRE,CLUOUT,ILUPRE,IRESP)
-CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)
-!
-CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
+ILUOUT = TLUOUT%NLU
 !
 !-------------------------------------------------------------------------------
 !
@@ -165,18 +161,12 @@ READ(ILUPRE,*) NPRESSLEV_ADV      ! nb of levels for low leves forcing=nb lev in
 !          and also by the name of forcing variables (format I3.3)
 !          You have to modify those if you need more forcing times :-(
 !
-IF (NADVFRC > 99*8) THEN
-  WRITE(ILUOUT,*) "SET_FRC ERROR: maximum forcing times NADVFRC is ", 99*8
-  CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-  CALL ABORT
-  STOP 1
-END IF
+IF (NADVFRC > 99*8) CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_ADVFRC','maximum forcing times NADVFRC is 99*8')
 !
-
 IIU=SIZE(XXHAT)
 IJU=SIZE(XYHAT)
 IKU=SIZE(XZHAT)
-
+!
 CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
 IKB= 1+ JPVEXT 
 IKE= IKU-JPVEXT 
@@ -353,10 +343,7 @@ DO JKT = 2,NADVFRC-1
                     TDTADVFRC(JKT)%TDATE%DAY,   &
                     TDTADVFRC(JKT)%TIME
  !callabortstop
- ! depuis m48
-    CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-    CALL ABORT
-    STOP 1
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_ADVFRC','')
   END IF
 END DO
 
diff --git a/src/MNH/set_bogus_vortex.f90 b/src/MNH/set_bogus_vortex.f90
index 90a77354295afaaa34e8e2a865c7e09fd897c0c2..d5d6d5f3d5c968b421c179dbada113cdc7c19b00 100644
--- a/src/MNH/set_bogus_vortex.f90
+++ b/src/MNH/set_bogus_vortex.f90
@@ -79,12 +79,13 @@ END MODULE MODI_SET_BOGUS_VORTEX
 USE MODE_ll
 USE MODE_IO_ll
 USE MODE_GRIDPROJ
+USE MODE_MSG
 !
 USE MODD_HURR_CONF,  ONLY: XLATBOG,XLONBOG,XVTMAXSURF,XRADWINDSURF, &
                            XANGCONV0,XANGCONV1000,XANGCONV2000, &
 			   XB_0, XMAX
 USE MODD_PARAMETERS, ONLY: XUNDEF,JPVEXT
-USE MODD_LUNIT,      ONLY: CLUOUT0
+USE MODD_LUNIT,      ONLY: TLUOUT0
 USE MODD_CST,        ONLY: XPI,XOMEGA 
 USE MODD_CONF,       ONLY: NVERB
 USE MODD_GRID,       ONLY: XLONORI,XLATORI
@@ -134,13 +135,14 @@ INTEGER          :: II,IJ        ! Indexes of the point of the 1st guess
 INTEGER          :: IIBOG,IJBOG
 INTEGER          :: IIU,IJU,IKU,IKB,IKE
 INTEGER          :: IRESP   ! Return code of FM-routines
+CHARACTER(LEN=100) :: YMSG
 !
 !-------------------------------------------------------------------------------
 !
 !*       1. INITIALIZATION
 !           --------------
 !
-CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRET)
+ILUOUT0 = TLUOUT0%NLU
 !
 WRITE(ILUOUT0,'(A)')' Begin of SET_BOGUS_VORTEX routine'
 !
@@ -153,25 +155,17 @@ IKE = IKU-JPVEXT
 ZRADSDG = XPI / 180.
 !
 IF (XLATBOG == XUNDEF .OR. XLONBOG == XUNDEF) THEN
-  WRITE(ILUOUT0,'(A)')' -> You do not specify a first guess position of the bogus (XLATBOG, XLONBOG) - abort'
  !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_BOGUS_VORTEX','You do not specify a first guess position of the bogus (XLATBOG, XLONBOG)')
 END IF
 IF (XVTMAXSURF == XUNDEF) THEN
-  WRITE(ILUOUT0,'(A)')' -> You do not specify a maximum for the tangential wind (XVTMAXSURF,m/s) - abort'
  !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_BOGUS_VORTEX','You do not specify a maximum for the tangential wind (XVTMAXSURF,m/s)')
 END IF
 IF (XRADWINDSURF == XUNDEF) THEN
-  WRITE(ILUOUT0,'(A)')' -> You do not specify a radius for the maximum tangential wind (XRADWINDSURF,m) - abort'
  !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN',&
+                 'SET_BOGUS_VORTEX','You do not specify a radius for the maximum tangential wind (XRADWINDSURF,m)')
 END IF
 !
 ZU_BOG(:,:,:) = 0.
@@ -197,11 +191,8 @@ IF (NVERB>=5) WRITE(ILUOUT0,'(A,I3,A,I3)')' equivalent indexes in the Meso-NH gr
 !
 IF ( (IIBOG<1) .OR. (IIBOG>IIU+1) .OR. &
      (IJBOG<1) .OR. (IJBOG>IJU+1)      ) THEN
-  WRITE(ILUOUT0,'(A)')' -> The first guess position of the vortex is not in the Meso-NH domain - abort'
  !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_BOGUS_VORTEX','The first guess position of the vortex is not in the Meso-NH domain')
 END IF
 !
 !
@@ -278,12 +269,9 @@ DO JK = IKB+1, IKE
   IF((ZZHATM(1,1,JK+1).GT.XMAX).AND.(XMAX.GE.ZZHATM(1,1,JK))) IREF_MAX=JK-1
 END DO
 IF (IREF_MAX==-1) THEN
-  WRITE(ILUOUT0,'(A,F4.1,A)')' -> The maximum height for the bogus vortex (',&
-       XMAX,'km) is not in the vertical grid - abort'
+  WRITE(YMSG,'(A,F4.1,A)')'The maximum height for the bogus vortex (',XMAX,' km) is not in the vertical grid'
  !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_BOGUS_VORTEX',YMSG)
 END IF
 ZTH_REF_MEAN = SUM(XTHVREFZ(IKB:IREF_MAX)) / (IREF_MAX-IKB+1)
 IF (NVERB>=10) THEN
diff --git a/src/MNH/set_frc.f90 b/src/MNH/set_frc.f90
index 1e5a1f2e4d5f3780cd1adb82634a9b313aa0f844..6541a1ce12444265bff5db1fe902a8fe7bfbcc62 100644
--- a/src/MNH/set_frc.f90
+++ b/src/MNH/set_frc.f90
@@ -112,6 +112,7 @@ USE MODD_PARAMETERS
 USE MODE_THERMO
 USE MODE_FM
 USE MODE_IO_ll
+USE MODE_MSG
 !
 USE MODI_HEIGHT_PRESS  ! interface modules
 USE MODI_PRESS_HEIGHT
@@ -155,6 +156,7 @@ REAL, DIMENSION(SIZE(XZHAT))    :: ZZHATM      ! Height of mass model grid
                                                ! levels  without orography
 REAL, DIMENSION(SIZE(XZHAT))    :: ZSHEAR      ! vertical wind shear
 CHARACTER(LEN=4)                :: YZP         ! choice of zfrc or pfrc
+CHARACTER(LEN=100)              :: YMSG
 !
 REAL, DIMENSION(SIZE(XZHAT))    :: ZEXREFZ,  & ! Pi_ref
                                    ZRVREFZ,  & ! r_vref
@@ -168,7 +170,7 @@ REAL                            :: ZEPS,     & ! XRV/XRD-1.0
 !               ----------------------------------------
 !
 CALL FMLOOK_ll(HEXPRE,CLUOUT,ILUPRE,IRESP)
-CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)
+ILUOUT = TLUOUT%NLU
 !
 ZRVSRD  = XRV/XRD
 !
@@ -181,12 +183,9 @@ BACKSPACE(ILUPRE)
 READ(ILUPRE,*) YZP   ! Z-altitude or P-altitude
 !
 IF( YZP/='PFRC' .AND. YZP/='ZFRC' ) THEN
-  WRITE(ILUOUT,*) "SET_FRC ERROR: undefined type of forcing:", YZP
-  WRITE(ILUOUT,*) "               it should be PFRC or ZFRC"
  !callabortstop
-  CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-  CALL ABORT
-  STOP 1
+  WRITE(YMSG,*) 'undefined type of forcing: ',TRIM(YZP),'. It should be PFRC or ZFRC'
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_FRC',YMSG)
 END IF
 !
 READ(ILUPRE,*) NFRC  ! Number of time-dependent forcing soundings
@@ -195,11 +194,8 @@ READ(ILUPRE,*) NFRC  ! Number of time-dependent forcing soundings
 !          and also by the name of forcing variables (format I3.3)
 !          You have to modify those if you need more forcing times :-(
 IF (NFRC > 99*8) THEN
-  WRITE(ILUOUT,*) "SET_FRC ERROR: maximum forcing times NFRC is ", 99*8
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_FRC','maximum forcing times NFRC is 99*8')
  !callabortstop
-  CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-  CALL ABORT
-  STOP 1
 END IF
 !
 !* Allocate the MODD_FRC forcing arrays
@@ -447,9 +443,7 @@ DO JKT = 2,NFRC-1
                     TDTFRC(JKT)%TDATE%DAY,   &
                     TDTFRC(JKT)%TIME
  !callabortstop
-    CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-    CALL ABORT
-    STOP 1
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_FRC','')
   END IF
 END DO
 !
diff --git a/src/MNH/set_relfrc.f90 b/src/MNH/set_relfrc.f90
index 397d333aa76a70688d829a72fe48af5bac8d430f..1fb2f63b04763981bcb8c1408e7ecfa57ce511b5 100644
--- a/src/MNH/set_relfrc.f90
+++ b/src/MNH/set_relfrc.f90
@@ -78,7 +78,6 @@ END MODULE MODI_SET_RELFRC
 !
 USE MODD_CST 
 USE MODD_LUNIT_n
-USE MODD_LUNIT
 USE MODD_GRID_n
 USE MODD_CONF
 USE MODD_FRC
@@ -89,6 +88,7 @@ USE MODD_PARAMETERS  ! JPHEXT
 ! 
 USE MODE_THERMO 
 USE MODE_FM
+USE MODE_MSG
 !
 USE MODE_IO_ll
 USE MODI_HEIGHT_PRESS  ! interface modules
@@ -114,7 +114,6 @@ CHARACTER(LEN=*),       INTENT(IN)  :: HEXPRE ! name of input data file
 !*       0.2   Declarations of local variables :
 !
 INTEGER :: ILUPRE,IRESP ! logical unit number of the  EXPRE and FM return code
-INTEGER :: ILUOUT0 ! Logical unit number for output-listing
 INTEGER :: ILUOUT       ! Logical unit number for output-listing   
 INTEGER :: JKT,JL,JK,JI! Loop control   
 INTEGER :: IIU,IIB,IIE !dimensions du modele
@@ -145,9 +144,7 @@ print*,"!*	 1.     PROLOGUE : RETRIEVE LOGICAL UNIT NUMBERS"
 !	        ----------------------------------------
 !                           
 CALL FMLOOK_ll(HEXPRE,CLUOUT,ILUPRE,IRESP)
-CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)
-!
-CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
+ILUOUT = TLUOUT%NLU
 !
 !-------------------------------------------------------------------------------
 !
@@ -167,10 +164,7 @@ READ(ILUPRE,*) NPRESSLEV_REL      ! nb of levels for low leves forcing=nb lev in
 !          You have to modify those if you need more forcing times :-(
 !
 IF (NRELFRC > 99*8) THEN
-  WRITE(ILUOUT,*) "SET_FRC ERROR: maximum forcing times NRELFRC is ", 99*8
-  CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-  CALL ABORT
-  STOP 1
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_RELFRC','maximum forcing times NRELFRC is 99*8')
 END IF
 !
 
@@ -373,10 +367,7 @@ DO JKT = 2,NRELFRC-1
                     TDTRELFRC(JKT)%TDATE%DAY,   &
                     TDTRELFRC(JKT)%TIME
  !callabortstop
- ! depuis m48
-    CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-    CALL ABORT
-    STOP 1
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_RELFRC','')
   END IF
 END DO
 
diff --git a/src/MNH/set_rsou.f90 b/src/MNH/set_rsou.f90
index 5bcc56b3ac511f74ac7e4e1806650c101f0ecdfe..dd51d3519bb7247e52d3b3ea0b31bc0d26045318 100644
--- a/src/MNH/set_rsou.f90
+++ b/src/MNH/set_rsou.f90
@@ -267,6 +267,7 @@ USE MODE_THERMO
 USE MODE_FM
 USE MODE_IO_ll
 USE MODE_ll
+USE MODE_MSG
 !
 USE MODI_HEIGHT_PRESS  ! interface modules
 USE MODI_PRESS_HEIGHT
@@ -380,6 +381,7 @@ REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT))   ::ZZS_LS
 REAL,DIMENSION(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT)) ::ZZFLUX_MX,ZZMASS_MX ! mixed grid
 INTEGER :: JJ,JI
 INTEGER :: JLOOP
+CHARACTER(LEN=100) :: YMSG
 !-------------------------------------------------------------------------------
 !
 !*	 1.     PROLOGUE : INITIALIZE SOME CONSTANTS, RETRIEVE LOGICAL
@@ -400,7 +402,7 @@ ZRDSRV = XRD/XRV
 !
 !                           
 CALL FMLOOK_ll(HEXPRE,CLUOUT,ILUPRE,IRESP)
-CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)
+ILUOUT = TLUOUT%NLU
 !
 !*       1.3  Read data kind in EXPRE file 
 !
@@ -408,39 +410,24 @@ READ(ILUPRE,*) YKIND
 !
 !
 IF(LUSERC .AND. YKIND/='PUVTHDMR' .AND. YKIND/='ZUVTHDMR' .AND.  YKIND/='ZUVTHLMR') THEN 
-  WRITE(ILUOUT,FMT=*) 'HYDROMETEORS ARE NOT ALLOWED FOR YKIND = ', YKIND
-  WRITE(ILUOUT,FMT=*)'JOB ABORTED '
+  WRITE(YMSG,*) 'hydrometeors are not allowed for YKIND = ', YKIND
  !callabortstop
-  CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_RSOU',YMSG)
 ENDIF
 ! Demande Thierry Bergot Sept 2012 
 !IF(LUSERC .AND.(YKIND == 'PUVTHDMR' .OR. YKIND == 'ZUVTHDMR').AND. .NOT. L1D) THEN
-!  WRITE(ILUOUT,FMT=*) 'USE OF HYDROMETEORS FOR YKIND=P(Z)UVTHDMR IS ONLY ALLOWED IN 1D CASE'
-!  WRITE(ILUOUT,FMT=*)'JOB ABORTED '
 ! !callabortstop
-!  CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-!  CALL ABORT
-!  STOP
+!  CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_RSOU','use of hydrometeors for YKIND=P(Z)UVTHDMR is only allowed in 1D case')
 !ENDIF
 !
 !IF(LUSERI .AND. YKIND=='ZUVTHLMR') THEN
-!  WRITE(ILUOUT,FMT=*) 'USE OF ICE FOR YKIND=ZUVTHLMR IS NOT ALLOWED'
-!  WRITE(ILUOUT,FMT=*)'JOB ABORTED '
 ! !callabortstop
-! CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-! CALL ABORT
-! STOP
+!  CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_RSOU','use of ice for  YKIND=ZUVTHLMR is not allowed')
 !ENDIF
 !
 IF(YKIND=='ZUVTHLMR' .AND. .NOT. LUSERC) THEN
-  WRITE(ILUOUT,FMT=*) 'LUSERC=T IS REQUIRED FOR YKIND=ZUVTHLMR'
-  WRITE(ILUOUT,FMT=*)'JOB ABORTED '
  !callabortstop
-  CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_RSOU','LUSERC=T is required for YKIND=ZUVTHLMR')
 ENDIF
 !
 GUSERC=.FALSE.
@@ -1127,12 +1114,9 @@ SELECT CASE(YKIND)
      ZRT(:)=ZMR(:)
      ZTHL(:)=ZTHV(:)*(1+ZRT(:))/(1+ZRVSRD*ZRT(:))
   CASE DEFAULT
-    WRITE(ILUOUT,FMT='("DATA TYPE YKIND IN PREFILE UNKNOWN",/, &
-                 &     "JOB ABORTED ")')
  !callabortstop
-    CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-    CALL ABORT
-    STOP
+    WRITE(YMSG,*) 'data type YKIND=',TRIM(YKIND),' in PREFILE unknown'
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_RSOU',YMSG)
 END SELECT
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/set_subdomain.f90 b/src/MNH/set_subdomain.f90
index 0564def4cf3b0cf07f6972266b133dd94f840a91..d5212659a497cc39871587153ec9742716429663 100644
--- a/src/MNH/set_subdomain.f90
+++ b/src/MNH/set_subdomain.f90
@@ -51,7 +51,7 @@ END MODULE MODI_SET_SUBDOMAIN
 !!      Module MODD_CONF      : contains configuration variables for all models.
 !!         NVERB : verbosity level for output-listing
 !!      Module MODD_LUNIT     :  contains logical unit names for all models
-!!         CLUOUT0 : name of output-listing
+!!         TLUOUT0 : output-listing file
 !!      Module MODD_PARAMETERS
 !!         JPHEXT
 !!      Module MODD_GRID1
@@ -93,6 +93,7 @@ USE MODE_GRIDPROJ       ! executive module
 USE MODE_POS
 USE MODE_FM
 USE MODE_IO_ll
+USE MODE_MSG
 !
 USE MODD_CONF           ! declaration modules
 USE MODD_IO_ll, ONLY : TFILEDATA
@@ -147,7 +148,7 @@ NAMELIST/NAM_MESONH_DOM/ NIMAX,NJMAX,NXOR,NYOR
 !                                                    ! definition of MESO-NH
 !                                                    ! horizontal domain
 !-------------------------------------------------------------------------------
-CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
+ILUOUT0 = TLUOUT0%NLU
 !-------------------------------------------------------------------------------
 !
 !*       1.    COMPUTATION OF THE LATITUDE AND LONGITUDE OF LARGE DOMAIN POINTS
@@ -199,18 +200,14 @@ IF ( NXOR==NUNDEF .OR. NYOR==NUNDEF ) THEN
     WRITE(ILUOUT0,*) 'NXOR = ',NXOR
     WRITE(ILUOUT0,*) 'Please also define NYOR or choose an other domain initialization mode'
  !callabortstop
-    CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-    CALL ABORT
-    STOP
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_SUBDOMAIN','bottom-left domain X index is given, but not its Y index')
   END IF
   IF ( NYOR/=NUNDEF ) THEN
     WRITE(ILUOUT0,*) 'bottom-left domain Y index is given, but not its X index'
     WRITE(ILUOUT0,*) 'NYOR = ',NYOR
     WRITE(ILUOUT0,*) 'Please also define NXOR or choose an other domain initialization mode'
  !callabortstop
-    CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-    CALL ABORT
-    STOP
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_SUBDOMAIN','bottom-left domain Y index is given, but not its X index')
   END IF
   NXOR= (IIU - NIMAX)/2
   NYOR= (IJU - NJMAX)/2
@@ -262,9 +259,7 @@ IF ( MOD(NIMAX,KDXRATIO) /= 0 ) THEN
   WRITE(ILUOUT0,*) 'Your NIMAX is :', NIMAX
   WRITE(ILUOUT0,*) '**************************************'
  !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_SUBDOMAIN','')
 END IF
 !
 IF ( MOD(NJMAX,KDYRATIO) /= 0 ) THEN
@@ -274,9 +269,7 @@ IF ( MOD(NJMAX,KDYRATIO) /= 0 ) THEN
   WRITE(ILUOUT0,*) 'Your NJMAX is :', NJMAX
   WRITE(ILUOUT0,*) '**************************************'
  !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_SUBDOMAIN','')
 END IF
 !
 IF ( MOD(NXOR-1,KDXRATIO) /= 0 ) THEN
@@ -330,9 +323,7 @@ THEN
   WRITE(ILUOUT0,*) '  +----------------------------------------------------------+'
   WRITE(ILUOUT0,*)
  !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','SET_SUBDOMAIN','input PGD domain too small or output domain not well centered')
 ENDIF
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/spawn_grid2.f90 b/src/MNH/spawn_grid2.f90
index 02936c8626aa7a6c1f29a8b5367bd2346a16169b..440b0ca5ce1fc49d782ef4b98ee48e0f245c0e13 100644
--- a/src/MNH/spawn_grid2.f90
+++ b/src/MNH/spawn_grid2.f90
@@ -175,7 +175,8 @@ USE MODI_BIKHARDT
 USE MODI_SPAWN_ZS
 !
 USE MODE_MODELN_HANDLER
-USE MODE_MPPDB  
+USE MODE_MPPDB
+USE MODE_MSG
 !
 IMPLICIT NONE
 !
@@ -281,26 +282,22 @@ ENDIF
 !
 !*       1.2  recovers logical unit number of output listing
 !
-CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)
+ILUOUT = TLUOUT%NLU
 !
 !*       1.3  checks that model 2 domain is included in the one of model 1
 IF ( (IXEND_F) > SIZE(XXHAT1) )  THEN   
   WRITE(ILUOUT,FMT=*) 'SPAWN_MODEL2:  MODEL 2 DOMAIN OUTSIDE THE MODEL1 DOMAIN  ',  &
                   ' IXOR_F = ', IXOR_F,' IXEND_F = ', IXEND_F,                      &
                   ' IIU of model1 = ',SIZE(XXHAT1)
- !callabortstop
-  CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  !callabortstop
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','SPAWN_GRID2','MODEL 2 DOMAIN OUTSIDE THE MODEL1 DOMAIN')
 END IF 
 IF ( (IYEND_F) > SIZE(XYHAT1) )  THEN  
   WRITE(ILUOUT,FMT=*) 'SPAWN_MODEL2:  MODEL 2 DOMAIN OUTSIDE THE MODEL1 DOMAIN  ',  &
                   ' IYOR_F = ', IYOR_F,' IYEND_F = ', IYEND_F,                  &
                   ' IJU of model1 = ',SIZE(XYHAT1)
- !callabortstop
-  CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  !callabortstop
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','SPAWN_GRID2','MODEL 2 DOMAIN OUTSIDE THE MODEL1 DOMAIN')
 END IF
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/spawn_model2.f90 b/src/MNH/spawn_model2.f90
index 97dd4c716ff2f9636912273104c78917206f3220..f727c5e86a2e64971a327970ded37739a147e16e 100644
--- a/src/MNH/spawn_model2.f90
+++ b/src/MNH/spawn_model2.f90
@@ -397,7 +397,7 @@ IMI = GET_CURRENT_MODEL_INDEX()
 CALL GOTO_MODEL(2)
 CSTORAGE_TYPE='TT'
 !
-CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)
+ILUOUT=TLUOUT%NLU
 !
 !*   1.    INITIALIZATIONS :
 !           ---------------
@@ -473,9 +473,7 @@ IKE = IKU - JPVEXT
 !  WRITE(ILUOUT,*) 'SPAWN_MODEL2:  MODEL 2 DOMAIN X-SIZE INCOHERENT WITH THE',  &
 !       ' MODEL1 MESH  ',' IIB = ',IIB,' IIE = ', IIE ,'NDXRATIO = ',NDXRATIO
 ! !callabortstop
-!  CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-!  CALL ABORT
-!  STOP
+!  CALL PRINT_MSG(NVERB_FATAL,'GEN','SPAWN_MODEL2','')
 !END IF
 !$
 !$20140506 the condition on NXSIZE*NXRATIO ==IIE-IIB+1 only works for monoproc
@@ -484,9 +482,7 @@ IKE = IKU - JPVEXT
 !  WRITE(ILUOUT,*) 'SPAWN_MODEL2:  MODEL 2 DOMAIN Y-SIZE INCOHERENT WITH THE',  &
 !       ' MODEL1 MESH  ',' IJB = ',IJB,' IJE = ', IJE ,'NDYRATIO = ',NDYRATIO
 ! !callabortstop
-!  CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-!  CALL ABORT
-!  STOP
+!  CALL PRINT_MSG(NVERB_FATAL,'GEN','SPAWN_MODEL2','')
 !END IF
 !$
 !
@@ -510,26 +506,20 @@ IF (LEN_TRIM(HSONFILE) /= 0 ) THEN
   IF (ADJUSTL(ADJUSTR(YDAD_SON)).NE.ADJUSTL(ADJUSTR(CMY_NAME(1)))) THEN 
     WRITE(ILUOUT,*) 'SPAWN_MODEL2: DAD of SON file is different from the one of model2'
     WRITE(ILUOUT,*) ' DAD of SON = ',TRIM(YDAD_SON),'  DAD of model2 = ',TRIM(CMY_NAME(1))
- !callabortstop
-    CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-    CALL ABORT
-    STOP
+    !callabortstop
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','SPAWN_MODEL2','DAD of SON file is different from the one of model2')
   END IF
   IF ( IDXRATIOSON /= NDXRATIO ) THEN
     WRITE(ILUOUT,*) 'SPAWN_MODEL2: RATIOX of input SON file is different from the one of model2' ,&
        ' RATIOX SON = ',IDXRATIOSON,' RATIOX model2 = ',NDXRATIO
- !callabortstop
-    CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-    CALL ABORT
-    STOP
+    !callabortstop
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','SPAWN_MODEL2','RATIOX of input SON file is different from the one of model2')
   END IF
   IF ( IDYRATIOSON /= NDYRATIO ) THEN
     WRITE(ILUOUT,*) 'SPAWN_MODEL2: RATIOY of input SON file is different from the one of model2' ,&
        ' RATIOY SON = ',IDYRATIOSON,' RATIOY model2 = ',NDYRATIO
- !callabortstop
-    CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-    CALL ABORT
-    STOP
+    !callabortstop
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','SPAWN_MODEL2','RATIOY of input SON file is different from the one of model2')
   END IF
   !
   IIUSON=IIMAXSON+2*JPHEXT
@@ -1670,7 +1660,7 @@ WRITE(ILUOUT,*) ' ------------------------------------------------------------ '
 6  FORMAT(' |    SPAWN_MODEL2     |     ',F8.3,'      |     ',F8.3,'     |')
 !
 !
-CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
+CALL IO_FILE_CLOSE_ll(TLUOUT)
 !
 9900  FORMAT(' K = 001    ZHAT = ',E14.7)
 9901  FORMAT(' K = ',I3.3,'    ZHAT = ',E14.7,'    DZ = ' ,E14.7)
diff --git a/src/MNH/spawning.f90 b/src/MNH/spawning.f90
index af2400ea90bb9ae4250f3e80c8bafc8ccb460db8..e35b0cf5169184f11bf3424c18172367c49e7b25 100644
--- a/src/MNH/spawning.f90
+++ b/src/MNH/spawning.f90
@@ -182,7 +182,7 @@ CALL READ_EXSPA(CINIFILE,CINIFILEPGD,&
 YEXSPA  = 'SPAWN1.nam'
 CALL OPEN_ll(unit=ILUSPA,FILE=YEXSPA,iostat=IRESP,status="OLD",action='READ',  &
              form='FORMATTED',position="REWIND",mode='GLOBAL')
-CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)
+ILUOUT = TLUOUT%NLU
 !
 CALL INIT_NMLVAR
 CALL POSNAM(ILUSPA,'NAM_SPAWN_SURF',GFOUND)
@@ -228,10 +228,10 @@ CALL MPPDB_CHECK3D(XUT,"SPAWNING-after boundaries::XUT",PRECISION)
 !
 CALL OPEN_ll(unit=ILUSPA,FILE=YEXSPA,iostat=IRESP,status="OLD",action='READ',  &
              form='FORMATTED',position="REWIND",mode='GLOBAL')
-CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)
+ILUOUT = TLUOUT%NLU
 CALL SET_POINTERS_TO_MODEL1()
 CALL GOTO_MODEL(2)
-CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)
+ILUOUT = TLUOUT%NLU
 CALL INIT_NMLVAR
 CALL POSNAM(ILUSPA,'NAM_SPAWN_SURF',GFOUND)
 IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_SPAWN_SURF)
@@ -246,7 +246,7 @@ CALL SPAWN_MODEL2 (NRR,NSV_USER,CTURB,CSURF,CCLOUD,                     &
                    CINIFILE, CINIFILEPGD, LSPAWN_SURF                   )
 !
 CALL SURFEX_DEALLO_LIST
-CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
+CALL IO_FILE_CLOSE_ll(TLUOUT)
 CALL END_PARA_ll(IINFO_ll)
 !JUAN CALL ABORT
 STOP
diff --git a/src/MNH/spectre.f90 b/src/MNH/spectre.f90
index 0e77a856225fb491ed941526a9d67886d0fd0741..db03b736c5db5c263ad4ea81ff8577419a78fe41 100644
--- a/src/MNH/spectre.f90
+++ b/src/MNH/spectre.f90
@@ -31,6 +31,7 @@ USE MODD_SPECTRE
 USE MODI_SPECTRE_MESONH
 USE MODI_SPECTRE_AROME
 !
+USE MODE_MSG
 USE MODE_POS
 USE MODE_IO_ll
 USE MODE_MODELN_HANDLER
@@ -172,10 +173,7 @@ CINIFILE = YINIFILE(1)
 !              -----------
 !
 IF ( LEN_TRIM(CINIFILE)==0 ) THEN
-       !callabortstop
-      CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','SPECTRE','LEN_TRIM(CINIFILE)==0')
 ENDIF
 !
 IF ( LEN_TRIM(YOUTFILE)==0 ) THEN
@@ -188,10 +186,8 @@ ENDIF
 !
 IF (CTYPEFILE=='MESONH') THEN
   CALL SPECTRE_MESONH(YOUTFILE)
-  ! close FM file
-  CALL CLOSE_ll (CLUOUT,IOSTAT=IRESP)
-  CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
-  CALL CLOSE_ll (CLUOUT0,IOSTAT=IRESP)
+  CALL IO_FILE_CLOSE_ll(TLUOUT)
+  CALL IO_FILE_CLOSE_ll(TLUOUT0)
 ELSEIF (CTYPEFILE=='AROME ')THEN
  CALL SPECTRE_AROME(CINIFILE,YOUTFILE,XDELTAX,XDELTAY,NI,NJ,NK)
 ELSE
diff --git a/src/MNH/ver_interp_to_mixed_grid.f90 b/src/MNH/ver_interp_to_mixed_grid.f90
index dbb9f1cc9337b112ae66104836b70a73a36d218f..5ddad2079695f8f27904fb4fb21f2dfd4c2f3237 100644
--- a/src/MNH/ver_interp_to_mixed_grid.f90
+++ b/src/MNH/ver_interp_to_mixed_grid.f90
@@ -200,6 +200,7 @@ USE MODE_REPRO_SUM
 USE MODE_ll
 USE MODE_EXTRAPOL
 !JUAN REALZ
+USE MODE_MSG
 USE MODE_REPRO_SUM
 !
 IMPLICIT NONE
@@ -260,7 +261,7 @@ INTEGER                                                  :: IINFO_ll
 
 !-------------------------------------------------------------------------------
 !
-CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
+ILUOUT0 = TLUOUT0%NLU
 !
 CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
 IIU=SIZE(PZMASS_LS,1)
@@ -286,9 +287,7 @@ IF (MINVAL(PZMASS_LS (:,:,ILU))<0.5*(XZHAT(IKE)+XZHAT(IKE+1))) THEN
   WRITE(ILUOUT0,*) 'MESONH highest physical mass level    : ', 0.5*(XZHAT(IKE)+XZHAT(IKE+1))
   WRITE(ILUOUT0,*) 'input  highest mass level             : ', MINVAL(PZMASS_LS (:,:,ILU))
  !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','VER_INTERP_TO_MIXED_GRID','MESONH highest mass level above highest input level')
 ENDIF
 !
 IF (HFILE=='ATM ') THEN
@@ -384,11 +383,7 @@ IF (HFILE=='ATM ') THEN
       XLSW_MX(:,:,:)  =VER_INTERP_LIN(PLSW_LS(:,:,:),NKLIN(:,:,:),XCOEFLIN(:,:,:))
     END IF
   ELSE
-    WRITE (ILUOUT0,'(A)') ' -> Bad input argument in ver_interp_to_mixed_grid - abort'
- !callabortstop
-    CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-    CALL ABORT
-    STOP
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','VER_INTERP_TO_MIXED_GRID','Bad HWLOC_LS input argument')
   END IF
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/write_diachro.f90 b/src/MNH/write_diachro.f90
index 57fcdec85a91b74df8270efe9ac43015412046fa..e0ef36feb4421099a55bf5110ed89466ed3cb6d7 100644
--- a/src/MNH/write_diachro.f90
+++ b/src/MNH/write_diachro.f90
@@ -116,7 +116,7 @@ REAL,DIMENSION(:,:,:,:,:,:),  INTENT(IN),OPTIONAL :: PMASK
 CHARACTER(LEN=20) :: YCOMMENT
 CHARACTER(LEN=3)  :: YJ
 INTEGER   ::   ILENG, ILENTITRE, ILENUNITE, ILENCOMMENT, IRESP
-INTEGER   ::   ILUOUTDIA, IRESPDIA,INPRARDIA,IFTYPEDIA,IVERBDIA,ININARDIA
+INTEGER   ::   ILUOUTDIA
 INTEGER   ::   II, IJ, IK, IT, IN, IP, INUM, J, JJ
 INTEGER   ::   INTRAJT, IKTRAJX, IKTRAJY, IKTRAJZ
 INTEGER   ::   ITTRAJX, ITTRAJY, ITTRAJZ
@@ -221,9 +221,9 @@ IF (NVERB>=5) THEN
   WRITE(ILUOUTDIA,*)' WRITE_DIACHRO: ',TRIM(HLUOUTDIA),' IRESP=',IRESP
 ENDIF
 !
-CALL FMLOOK_ll(TRIM(TPDIAFILE%CNAME)//'.lfi',HLUOUTDIA,INUM,IRESPDIA)
+CALL FMLOOK_ll(TRIM(TPDIAFILE%CNAME)//'.lfi',HLUOUTDIA,INUM,IRESP)
 IF (NVERB>=5) THEN
-  WRITE(ILUOUTDIA,*)' WRITE_DIACHRO: ',TRIM(TPDIAFILE%CNAME)//'.lfi',' IRESPDIA=',IRESPDIA
+  WRITE(ILUOUTDIA,*)' WRITE_DIACHRO: ',TRIM(TPDIAFILE%CNAME)//'.lfi',' IRESP=',IRESP
 ENDIF
 !
 ! 1er enregistrement TYPE
diff --git a/src/MNH/write_hgrid.f90 b/src/MNH/write_hgrid.f90
index 1ff97d59dfaea8f34b7d9bd41bd5c6652e51a8ea..203fb136e36c0b01508bc4b2ef97c02fce136ef8 100644
--- a/src/MNH/write_hgrid.f90
+++ b/src/MNH/write_hgrid.f90
@@ -59,17 +59,18 @@ END MODULE MODI_WRITE_HGRID
 !
 !*       0.    DECLARATIONS
 !
-USE MODD_LUNIT
 USE MODD_CONF
 USE MODD_CONF_n
 USE MODD_GRID
 USE MODD_IO_ll, ONLY: TFILEDATA
-USE MODD_PGDGRID
 USE MODD_PGDDIM
+USE MODD_PGDGRID
 !
-USE MODI_WRITE_HGRIDn
-USE MODE_IO_ll
 USE MODE_FMWRIT
+USE MODE_IO_ll
+USE MODE_MSG
+!
+USE MODI_WRITE_HGRIDn
 !
 IMPLICIT NONE
 !
@@ -88,12 +89,7 @@ INTEGER               :: IRESP
 !*       1.     TEST ON MODEL INDEX
 !	        -------------------
 ! KMI may be 0
-IF (KMI<0 .OR. KMI>JPMODELMAX) THEN
-   !callabortstop
-  CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
-  CALL ABORT
-  STOP
-ENDIF
+IF (KMI<0 .OR. KMI>JPMODELMAX) CALL PRINT_MSG(NVERB_FATAL,'GEN','WRITE_HGRID_n','KMI<0 .OR. KMI>JPMODELMAX')
 IF (KMI/=0) THEN
   CALL WRITE_HGRID_n(TPFILE)
   RETURN
diff --git a/src/MNH/write_lbn.f90 b/src/MNH/write_lbn.f90
index 959be81109b4ca88350a71dd444a8c5b59122e04..f5d838517b10a7f3347bc8be5f7d8a80d80f5002 100644
--- a/src/MNH/write_lbn.f90
+++ b/src/MNH/write_lbn.f90
@@ -99,6 +99,7 @@ USE MODD_PARAM_n
 USE MODE_FMWRIT
 USE MODE_ll
 USE MODE_IO_ll, ONLY: UPCASE, CLOSE_ll
+USE MODE_MSG
 USE MODE_MODELN_HANDLER
 !
 USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
@@ -148,13 +149,14 @@ INTEGER            :: JK
 INTEGER            :: JMOM, IMOMENTS, JMODE, ISV_NAME_IDX
 INTEGER            :: IMI    ! Current model index
 CHARACTER(LEN=2)   :: INDICE ! to index CCN and IFN fields of LIMA scheme
+CHARACTER(LEN=100) :: YMSG
 TYPE(TFIELDDATA)   :: TZFIELD
 !-------------------------------------------------------------------------------
 !
 !*       1.    SOME INITIALIZATIONS
 !              --------------------
 !
-CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)
+ILUOUT = TLUOUT%NLU
 !
 IMI = GET_CURRENT_MODEL_INDEX()
 !
@@ -591,12 +593,8 @@ IF (NSV >=1) THEN
       IMOMENTS = INT(NSV_DSTEND - NSV_DSTBEG + 1)/NMODE_DST
       !Should equal 3 at this point
       IF (IMOMENTS >  3) THEN
-        WRITE(ILUOUT,*) 'Error in write_lbn: number of moments DST must be 3'
-        WRITE(ILUOUT,*) NSV_DSTBEG, NSV_DSTEND,NMODE_DST,IMOMENTS
- !callabortstop
-        CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-        CALL ABORT
-        STOP
+        WRITE(YMSG,*) 'number of DST moments must be 3',NSV_DSTBEG, NSV_DSTEND,NMODE_DST,IMOMENTS
+        CALL PRINT_MSG(NVERB_FATAL,'GEN','WRITE_LB_n',YMSG)
       END IF ! Test IMOMENTS
       !
       TZFIELD%CSTDNAME   = ''
@@ -741,12 +739,8 @@ IF (NSV >=1) THEN
       IMOMENTS = INT(NSV_SLTEND - NSV_SLTBEG + 1)/NMODE_SLT
       !Should equal 3 at this point
       IF (IMOMENTS >  3) THEN
-        WRITE(ILUOUT,*) 'Error in write_lbn: number of moments must be 3'
-        WRITE(ILUOUT,*) NSV_SLTBEG, NSV_SLTEND,NMODE_SLT,IMOMENTS
- !callabortstop
-        CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-        CALL ABORT
-        STOP
+        WRITE(YMSG,*) 'number of SLT moments must be 3',NSV_SLTBEG, NSV_SLTEND,NMODE_SLT,IMOMENTS
+        CALL PRINT_MSG(NVERB_FATAL,'GEN','WRITE_LB_n',YMSG)
       END IF ! Test IMOMENTS
       !
       TZFIELD%CSTDNAME   = ''
diff --git a/src/MNH/write_lfifm1_for_diag.f90 b/src/MNH/write_lfifm1_for_diag.f90
index 70db528d88c07dfc9675d208b599437c4638e26d..d9c6cdc08ec87e2069e64e638ec184134ac30231 100644
--- a/src/MNH/write_lfifm1_for_diag.f90
+++ b/src/MNH/write_lfifm1_for_diag.f90
@@ -164,7 +164,7 @@ USE MODD_PARAM_n
 USE MODD_CURVCOR_n
 USE MODD_REF
 USE MODD_REF_n
-USE MODD_LUNIT, ONLY : CLUOUT0
+USE MODD_LUNIT, ONLY : TLUOUT0
 USE MODD_LUNIT_n
 USE MODD_TURB_n
 USE MODD_RADIATIONS_n
@@ -316,6 +316,7 @@ REAL, DIMENSION(SIZE(XZZ,1),SIZE(XZZ,2),SIZE(XZZ,3)) :: ZDELTAZ ! interval (m) b
 INTEGER :: ILUOUT0 ! Logical unit number for output-listing
 !
 CHARACTER(LEN=2)  :: INDICE
+CHARACTER(LEN=100) :: YMSG
 INTEGER           :: I,IID
 TYPE(TFIELDDATA)              :: TZFIELD
 TYPE(TFIELDDATA),DIMENSION(2) :: TZFIELD2
@@ -334,7 +335,7 @@ IKB=1+JPVEXT
 IKE=IKU-JPVEXT
 
 IMI = GET_CURRENT_MODEL_INDEX()
-CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
+ILUOUT0 = TLUOUT0%NLU
 !-------------------------------------------------------------------------------
 !
 !*       1.     WRITES IN THE LFI FILE
@@ -3256,10 +3257,8 @@ IF(LRADAR .AND. LUSERR) THEN
     NBRAD=COUNT(XLAT_RAD(:) /= XUNDEF)
     NMAX=INT(NBSTEPMAX*XSTEP_RAD/XGRID)
     IF(NBSTEPMAX*XSTEP_RAD/XGRID/=NMAX .AND. (LCART_RAD)) THEN
-      WRITE(ILUOUT0,*) 'NBSTEPMAX*XSTEP_RAD/XGRID is not an integer; please choose another combination'
-      CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','WRITE_LFIFM1_FOR_DIAG', &
+                    'NBSTEPMAX*XSTEP_RAD/XGRID is not an integer; please choose another combination')
     ENDIF
     DO JI=1,NBRAD
        NBELEV(JI)=COUNT(XELEV(JI,:) /= XUNDEF)
@@ -3280,11 +3279,7 @@ IF(LRADAR .AND. LUSERR) THEN
     IF(NBRAD/=COUNT(XLON_RAD(:) /= XUNDEF).OR.NBRAD/=COUNT(XALT_RAD(:) /= XUNDEF).OR. &
        NBRAD/=COUNT(XLAM_RAD(:) /= XUNDEF).OR.NBRAD/=COUNT(XDT_RAD(:) /= XUNDEF).OR. &
        NBRAD/=COUNT(CNAME_RAD(:) /= "UNDEF")) THEN
-      WRITE(ILUOUT0,*) "Error: inconsistency in DIAG1.nam."
- !callabortstop
-      CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','WRITE_LFIFM1_FOR_DIAG','inconsistency in DIAG1.nam')
     END IF
     IF(NCURV_INTERPOL==0.AND.(LREFR.OR.LDNDZ)) THEN
       LREFR=.FALSE.
@@ -3304,10 +3299,8 @@ IF(LRADAR .AND. LUSERR) THEN
       WRITE(ILUOUT0,*) "Warning: LWREFL cannot be set to .TRUE. if LWBSCS is also set to .TRUE.. Setting LWREFL to .FALSE.."
     END IF
     IF(CCLOUD=="LIMA" .AND. NDIFF/=7) THEN
-      WRITE(ILUOUT0,*) " ERROR : NDIFF=",NDIFF," not available with CCLOUD=LIMA"
-      CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
-      CALL ABORT
-      STOP
+      WRITE(YMSG,*) 'NDIFF=',NDIFF,' not available with CCLOUD=LIMA'
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','WRITE_LFIFM1_FOR_DIAG',YMSG)
     END IF
     INBOUT=28 !28: Temperature + RHR, RHS, RHG, ZDA, ZDS, ZDG, KDR, KDS, KDG      
     IF (CCLOUD=='LIMA') INBOUT=INBOUT+1 ! rain concentration CRT
diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90
index 5382a90461bb2c94aaa5ff2aede9463d4ab8e46c..24ad092b5241af9c56494fbf4bad73c4fe134eb4 100644
--- a/src/MNH/write_lfin.f90
+++ b/src/MNH/write_lfin.f90
@@ -316,7 +316,7 @@ TYPE(TFIELDDATA)  :: TZFIELD
 !
 IMI = GET_CURRENT_MODEL_INDEX()
 !
-CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP)
+ILUOUT=TLUOUT%NLU
 !
 ALLOCATE(ZWORK2D(SIZE(XTHT,1),SIZE(XTHT,2)))
 ALLOCATE(ZWORK3D(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)))
@@ -1124,7 +1124,7 @@ IF (NSV >=1) THEN
         WRITE(ILUOUT,*) 'Error in write_lfin: number of moments must equal or inferior to 3'
         WRITE(ILUOUT,*) NSV_DSTBEG, NSV_DSTEND,NMODE_DST,IMOMENTS
  !callabortstop
-        CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
+        CALL IO_FILE_CLOSE_ll(TLUOUT)
         CALL ABORT
         STOP
       END IF ! Test IMOMENTS
@@ -1227,7 +1227,7 @@ IF (NSV >=1) THEN
         WRITE(ILUOUT,*) 'Error in write_lfin: number of moments must be 3'
         WRITE(ILUOUT,*) NSV_SLTBEG, NSV_SLTEND,NMODE_SLT,IMOMENTS
  !callabortstop
-        CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP)
+        CALL IO_FILE_CLOSE_ll(TLUOUT)
         CALL ABORT
         STOP
       END IF
diff --git a/src/MNH/zoom_pgd.f90 b/src/MNH/zoom_pgd.f90
index b784803b7aa04d301a5163c0038e4e5bef309f16..12de6215a242a5d7607d0cc1587cddfec1f25737 100644
--- a/src/MNH/zoom_pgd.f90
+++ b/src/MNH/zoom_pgd.f90
@@ -52,8 +52,8 @@
 !
 USE MODD_CONF,   ONLY : CPROGRAM, NMASDEV, NBUGFIX, CBIBUSER, &
                         L1D, L2D, LPACK
-USE MODD_IO_ll,  ONLY:  LIOCDF4,LLFIOUT,TFILEDATA
-USE MODD_LUNIT,  ONLY : CLUOUT0, COUTFMFILE, CPGDFILE
+USE MODD_IO_ll,  ONLY:  LIOCDF4,LLFIOUT,TFILE_OUTPUTLISTING,TFILEDATA
+USE MODD_LUNIT,  ONLY : CLUOUT0, COUTFMFILE, CPGDFILE, TLUOUT0
 USE MODD_PARAMETERS, ONLY : XUNDEF, NUNDEF, JPVEXT, JPHEXT, JPMODELMAX
 USE MODD_PARAM_n,     ONLY : CSURF
 USE MODD_DIM_n,       ONLY : NIMAX, NJMAX
@@ -127,9 +127,10 @@ CALL INI_CST
 CALL INITIO_ll()
 !
 CLUOUT0='OUTPUT_LISTING0'                    ! name of the output-listing
-!
-CALL OPEN_ll(UNIT=ILUOUT0,FILE=CLUOUT0,IOSTAT=IRESP,    &
-             FORM='FORMATTED',ACTION='WRITE',MODE='GLOBAL')
+CALL IO_FILE_ADD2LIST(TLUOUT0,'OUTPUT_LISTING0','OUTPUTLISTING','WRITE')
+CALL IO_FILE_OPEN_ll(TLUOUT0)
+TFILE_OUTPUTLISTING => TLUOUT0
+ILUOUT0=TLUOUT0%NLU
 !
 YNAMELIST = 'PRE_ZOOM1.nam'                  ! name of the namelist file
  
@@ -265,7 +266,7 @@ WRITE(ILUOUT0,*) '***************************'
 WRITE(ILUOUT0,*) '* ZOOM_PGD ends correctly *'
 WRITE(ILUOUT0,*) '***************************'
 !
-CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP)
+CALL IO_FILE_CLOSE_ll(TLUOUT0)
 !
 CALL END_PARA_ll(IINFO_ll)