diff --git a/src/LIB/SURCOUCHE/src/fmreadwrit.f90 b/src/LIB/SURCOUCHE/src/fmreadwrit.f90
index 3e2336426bb046115fa5a15b864e8928b90f0996..d811f475f88d6bfe3d0a22511f1763a44df1f35d 100644
--- a/src/LIB/SURCOUCHE/src/fmreadwrit.f90
+++ b/src/LIB/SURCOUCHE/src/fmreadwrit.f90
@@ -256,7 +256,9 @@ END SUBROUTINE TRANSFW
 MODULE MODE_READWRITE_LFI
 !
 USE MODD_FM
+USE MODD_IO_ll
 USE MODE_FIELD, ONLY : TFIELDDATA
+USE MODE_MSG
 !
 IMPLICIT NONE
 !
@@ -290,6 +292,8 @@ INTEGER                                  :: ILENG
 INTEGER(KIND=LFI_INT)                    :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 !
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_X0','writing '//TRIM(TPFIELD%CMNHNAME))
+!
 ILENG = 1
 !
 CALL WRITE_PREPARE(TPFIELD,ILENG,IWORK,ITOTAL,IRESP)
@@ -322,6 +326,8 @@ INTEGER                                  :: ILENG
 INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 !
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_X1','writing '//TRIM(TPFIELD%CMNHNAME))
+!
 ILENG = SIZE(PFIELD)
 !
 CALL WRITE_PREPARE(TPFIELD,ILENG,IWORK,ITOTAL,IRESP)
@@ -365,6 +371,8 @@ ELSE
   YVARNAME = TRIM(TPFIELD%CMNHNAME)
 ENDIF
 !
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_X2','writing '//TRIM(YVARNAME))
+!
 CALL WRITE_PREPARE(TPFIELD,ILENG,IWORK,ITOTAL,IRESP)
 !
 IF (IRESP==0) THEN
@@ -395,6 +403,8 @@ INTEGER                                  :: ILENG
 INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 !
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_X3','writing '//TRIM(TPFIELD%CMNHNAME))
+!
 ILENG = SIZE(PFIELD)
 !
 CALL WRITE_PREPARE(TPFIELD,ILENG,IWORK,ITOTAL,IRESP)
@@ -427,6 +437,8 @@ INTEGER                                  :: ILENG
 INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 !
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_N0','writing '//TRIM(TPFIELD%CMNHNAME))
+!
 ILENG = 1
 !
 CALL WRITE_PREPARE(TPFIELD,ILENG,IWORK,ITOTAL,IRESP)
@@ -459,6 +471,8 @@ INTEGER                                  :: ILENG, JLOOP
 INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 !
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_C0','writing '//TRIM(TPFIELD%CMNHNAME))
+!
 ILENG=LEN_TRIM(HFIELD)
 IF (ILENG==0) ILENG=1
 !
@@ -524,7 +538,7 @@ CASE(1:JPXKRK)
   KWORK(2)=ICOMLEN
   KWORK(3:ICOMLEN+2)=ICOMMENT(1:ICOMLEN)
 CASE(JPXKRK+1:)
-  PRINT *,'ERROR: WRITE_PREPARE: comment is too long'
+  CALL PRINT_MSG(NVERB_WARNING,'IO','WRITE_PREPARE','comment is too long')
   KRESP = -9999
 END SELECT
 !
diff --git a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90
index 65ca9d642d2814e5470bdb502816d2d4d420042d..a34f402a91a202552c0b5686d167ec9f54fcc1c6 100644
--- a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90
+++ b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90
@@ -350,6 +350,8 @@ CONTAINS
     !
     INTEGER :: ID ! Index of the field
     !
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_X0','writing '//TRIM(HNAME))
+    !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,KRESP)
     !
     IF(KRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),HFIPRI,KRESP,PFIELD)
@@ -391,6 +393,7 @@ CONTAINS
     YRECFM   = TPFIELD%CMNHNAME
     YDIR     = TPFIELD%CDIR
     !
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X0','writing '//TRIM(YRECFM))
     !
     !*      1.1   THE NAME OF LFIFM
     !
@@ -538,6 +541,8 @@ CONTAINS
     !
     INTEGER :: ID ! Index of the field
     !
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_X1','writing '//TRIM(HNAME))
+    !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,KRESP)
     !
     IF(KRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),HFIPRI,KRESP,PFIELD)
@@ -583,6 +588,8 @@ CONTAINS
     YRECFM   = TPFIELD%CMNHNAME
     YDIR     = TPFIELD%CDIR
     !
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X1','writing '//TRIM(YRECFM))
+    !
     !*      1.1   THE NAME OF LFIFM
     !
     IRESP = 0
@@ -815,6 +822,8 @@ CONTAINS
     !
     INTEGER :: ID ! Index of the field
     !
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_X2','writing '//TRIM(HNAME))
+    !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,KRESP)
     !
     IF(KRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),HFIPRI,KRESP,PFIELD)
@@ -872,6 +881,7 @@ CONTAINS
     YRECFM   = TPFIELD%CMNHNAME
     YDIR     = TPFIELD%CDIR
     !
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X2','writing '//TRIM(YRECFM))
     !
     !*      1.1   THE NAME OF LFIFM
     !
@@ -1367,6 +1377,8 @@ CONTAINS
     !
     INTEGER :: ID ! Index of the field
     !
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_X3','writing '//TRIM(HNAME))
+    !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,KRESP)
     !
     IF(KRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),HFIPRI,KRESP,PFIELD)
@@ -1442,6 +1454,8 @@ CONTAINS
     YRECFM   = TPFIELD%CMNHNAME
     YDIR     = TPFIELD%CDIR
     !
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X3','writing '//TRIM(YRECFM))
+    !
     !*      1.1   THE NAME OF LFIFM
     !
     CALL SECOND_MNH2(T11)
@@ -2102,6 +2116,8 @@ CONTAINS
     !
     INTEGER :: ID ! Index of the field
     !
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_N0','writing '//TRIM(HNAME))
+    !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,KRESP)
     !
     IF(KRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),HFIPRI,KRESP,KFIELD)
@@ -2138,6 +2154,8 @@ CONTAINS
     TYPE(TFILEDATA),POINTER                  :: TZFILE
     INTEGER,DIMENSION(1) :: IDIMS
     !
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_N0','writing '//TRIM(TPFIELD%CMNHNAME))
+    !
     IDIMS(1) = 0
     !
     !
@@ -2464,6 +2482,8 @@ CONTAINS
     !
     INTEGER :: ID ! Index of the field
     !
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_L0','writing '//TRIM(HNAME))
+    !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,KRESP)
     !
     IF(KRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),HFIPRI,KRESP,OFIELD)
@@ -2487,6 +2507,8 @@ CONTAINS
     !*      0.2   Declarations of local variables
     !
     INTEGER :: IFIELD
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_L0','writing '//TRIM(TPFIELD%CMNHNAME))
+    !
     !
     IF (OFIELD) THEN
       IFIELD = 1
@@ -2670,6 +2692,8 @@ CONTAINS
     !
     INTEGER :: ID ! Index of the field
     !
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_C0','writing '//TRIM(HNAME))
+    !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,KRESP)
     !
     IF(KRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),HFIPRI,KRESP,HFIELD)
@@ -2699,6 +2723,8 @@ CONTAINS
     INTEGER                      :: IRESP
     INTEGER,DIMENSION(1) :: IDIMS
     !
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_C0','writing '//TRIM(TPFIELD%CMNHNAME))
+    !
     IRESP = 0
     !
     !------------------------------------------------------------------
diff --git a/src/LIB/SURCOUCHE/src/mode_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90
index b63043c960dfc3a69ab50cf57af325948fa85ebf..5a3dfb321f43f1f1fefa281720015208b7709ead 100644
--- a/src/LIB/SURCOUCHE/src/mode_field.f90
+++ b/src/LIB/SURCOUCHE/src/mode_field.f90
@@ -5,7 +5,9 @@
 MODULE MODE_FIELD
 !
 USE MODD_CONF, ONLY : CPROGRAM
+USE MODD_IO_ll, ONLY : NVERB_DEBUG,NVERB_INFO,NVERB_WARNING,NVERB_ERROR,NVERB_FATAL
 USE MODD_PARAMETERS
+USE MODE_MSG
 !
 IMPLICIT NONE
 !
@@ -59,16 +61,17 @@ USE MODD_CONF, ONLY: LCARTESIAN,NMODEL
 INTEGER,INTENT(IN),OPTIONAL :: KMODEL
 !
 INTEGER :: IDX, IMODEL
+CHARACTER(LEN=40) :: YMSG
 !
 !F90/95: TFIELDLIST(1) = TFIELDDATA('UT','x_wind','m s-1','XY','X_Y_Z_U component of wind (m/s)',2)
 !F2003:
 !TFIELDLIST(1) = TFIELDDATA(CMNHNAME='UT',CSTDNAME='x_wind',CUNITS='m s-1',CDIR='XY',&
 !                           CCOMMENT='X_Y_Z_U component of wind (m/s)',NGRID=2)
 !
-PRINT *,'PW: INI_FIELD_LIST called'
+CALL PRINT_MSG(NVERB_DEBUG,'GEN','INI_FIELD_LIST','called')
 print *,'PW: nmodel=',nmodel
 IF (LFIELDLIST_ISINIT) THEN
-  PRINT *,'ERROR: INI_FIELD_LIST already called'
+  CALL PRINT_MSG(NVERB_ERROR,'GEN','INI_FIELD_LIST','already called')
   RETURN
 END IF
 LFIELDLIST_ISINIT = .TRUE.
@@ -655,7 +658,8 @@ TFIELDLIST(IDX)%NDIMS      = 2
 ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL))
 IDX = IDX+1
 !
-PRINT *,'INFO: INI_FIELD_LIST: number of used fields=',IDX-1,' out of ',MAXFIELDS
+WRITE(YMSG,'("number of used fields=",I4," out of ",I4)') IDX-1,MAXFIELDS
+CALL PRINT_MSG(NVERB_INFO,'GEN','INI_FIELD_LIST',TRIM(YMSG))
 !
 #if 0
 !
@@ -675,8 +679,8 @@ IDX = IDX+1
 !
 CONTAINS
 SUBROUTINE ERR_INI_FIELD_LIST()
-  PRINT *,'FATAL: INI_FIELD_LIST: IDX>MAXFIELDS (',MAXFIELDS,')'
-  STOP
+  WRITE(YMSG,'( "IDX>MAXFIELDS (",I5,")" )') MAXFIELDS
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_FIELD_LIST',TRIM(YMSG))
 END SUBROUTINE ERR_INI_FIELD_LIST
 !
 END SUBROUTINE INI_FIELD_LIST
@@ -690,14 +694,14 @@ INTEGER,                     INTENT(OUT):: KRESP    !Return-code
 INTEGER :: IDX,JI
 INTEGER :: ICOUNT
 INTEGER,SAVE :: IFIRSTGUESS=1 !Store first field to test
+CHARACTER(LEN=64) :: YMSG
 !
 !PW: TODO: possible optimizations:
 ! * Classement alphanumerique + index vers 1er champ commencant par caractere
 ! * Classement dans l'ordre des ecritures + stockage dernier hit + reboucler depuis le debut => DONE
 !
 IF (.NOT.LFIELDLIST_ISINIT) THEN
-  PRINT *,'FATAL: FIND_FIELD_ID_FROM_MNHNAME: TFIELDLIST not yet initialized'
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','FIND_FIELD_ID_FROM_MNHNAME','TFIELDLIST not yet initialized')
 END IF
 !
 KID = 0
@@ -722,10 +726,12 @@ END DO
 IF (KID==0) THEN
   !Field not found
   KRESP = -1
-  PRINT *,'WARNING: FIND_FIELD_ID_FROM_MNHNAME: field ',TRIM(HMNHNAME),' not known'
+  CALL PRINT_MSG(NVERB_WARNING,'GEN','FIND_FIELD_ID_FROM_MNHNAME','field '//TRIM(HMNHNAME)//' not known')
 ELSE
   IFIRSTGUESS = IDX+1
   IF (IFIRSTGUESS>MAXFIELDS) IFIRSTGUESS = 1
+  WRITE(YMSG,'( "field ",A16," found after ",I4," attempt(s)" )') TRIM(HMNHNAME),ICOUNT
+  CALL PRINT_MSG(NVERB_DEBUG,'GEN','FIND_FIELD_ID_FROM_MNHNAME',TRIM(YMSG))
 END IF
 !
 END SUBROUTINE FIND_FIELD_ID_FROM_MNHNAME
@@ -742,8 +748,10 @@ INTEGER, INTENT(IN) :: KFROM, KTO
 !
 !LOGICAL,SAVE :: GFIRST_CALL=.TRUE.
 INTEGER :: IID,IRESP
+CHARACTER(LEN=64) :: YMSG
 !
-PRINT *,'PW: FIELDLIST_GOTO_MODEL: ',KFROM,'->',KTO
+WRITE(YMSG,'( I4,"->",I4 )') KFROM,KTO
+CALL PRINT_MSG(NVERB_DEBUG,'GEN','FIELDLIST_GOTO_MODEL',TRIM(YMSG))
 !
 ! IF (GFIRST_CALL) THEN
 !   !This is necessary because the first time this subroutine is called
@@ -755,7 +763,7 @@ PRINT *,'PW: FIELDLIST_GOTO_MODEL: ',KFROM,'->',KTO
 ! END IF
 !
 IF (.NOT.LFIELDLIST_ISINIT) THEN
-  PRINT *,'WARNING: FIELDLIST_GOTO_MODEL: TFIELDLIST not yet initialized'
+  CALL PRINT_MSG(NVERB_WARNING,'GEN','FIELDLIST_GOTO_MODEL','TFIELDLIST not yet initialized')
   RETURN
 END IF
 !
@@ -763,21 +771,19 @@ END IF
 !
 IF (KFROM == KTO) THEN
   IF (.NOT.ALLOCATED(XRHODREFZ)) THEN
-    PRINT *,'FATAL: INI_FIELD_LIST: XRHODREFZ not yet allocated'
-    STOP
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','FIELDLIST_GOTO_MODEL','XRHODREFZ not yet allocated')
   END IF
   CALL FIND_FIELD_ID_FROM_MNHNAME('RHOREFZ',IID,IRESP)
   TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA=>XRHODREFZ
   !
   IF (.NOT.ALLOCATED(XTHVREFZ)) THEN
-    PRINT *,'FATAL: INI_FIELD_LIST: XTHVREFZ not yet allocated'
-    STOP
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','FIELDLIST_GOTO_MODEL','XTHVREFZ not yet allocated')
   END IF
   CALL FIND_FIELD_ID_FROM_MNHNAME('THVREFZ',IID,IRESP)
   TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA=>XTHVREFZ
   !
   IF (.NOT.ASSOCIATED(LSLEVE)) THEN
-    PRINT *,'FATAL: INI_FIELD_LIST: LSLEVE not yet associated'
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','FIELDLIST_GOTO_MODEL',' LSLEVE not yet associated')
     STOP
   END IF
   CALL FIND_FIELD_ID_FROM_MNHNAME('SLEVE',IID,IRESP)
diff --git a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90
index 01e960ef53d2685cc8b8ca1dafefdfd6c53f2223..0b4418bfd25de9486e066ce2e9f21ecdf3c5c23d 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90
@@ -11,7 +11,10 @@
 !
 MODULE MODE_IO_MANAGE_STRUCT
 !
-  IMPLICIT NONE
+USE MODD_IO_ll
+USE MODE_MSG
+!
+IMPLICIT NONE
 !
 CONTAINS
 !
@@ -24,7 +27,6 @@ USE MODD_CONF_n
 USE MODD_DYN,        ONLY : XSEGLEN
 USE MODD_DYN_n,      ONLY : DYN_MODEL
 USE MODD_FMOUT
-USE MODD_IO_ll
 USE MODD_IO_SURF_MNH,ONLY : IO_SURF_MNH_MODEL
 USE MODD_NESTING,    ONLY : CDAD_NAME,NDAD
 USE MODD_NSV,        ONLY: NSV
@@ -50,6 +52,8 @@ INTEGER, DIMENSION(:), ALLOCATABLE :: IBAK_STEP, IOUT_STEP
 CHARACTER (LEN=4) :: YDADNUMBER       ! Character string for the DAD model file number
 !
 !
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_PREPARE_BAKOUT_STRUCT','called')
+!
 DO IMI = 1, NMODEL
   IBAK_NUMB = 0
   IOUT_NUMB = 0
@@ -170,10 +174,7 @@ DO IMI = 1, NMODEL
   !* Find dad output number
   !
   !Security check (if it happens, this part of the code should be exported outside of the IMI loop)
-  IF (NDAD(IMI)>IMI) THEN
-    print *,'ERROR in SET_GRID'
-    STOP
-  END IF
+  IF (NDAD(IMI)>IMI) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_PREPARE_BAKOUT_STRUCT','NDAD(IMI)>IMI')
   IF (NDAD(IMI) == IMI .OR.  IMI == 1) THEN
     OUT_MODEL(IMI)%TBACKUPN(:)%NOUTDAD = 0
     DO IPOS = 1,OUT_MODEL(IMI)%NBAK_NUMB
@@ -229,9 +230,7 @@ DO IMI = 1, NMODEL
     DO IPOS = 1,JPOUTVARMAX
       IF (COUT_VAR(IMI,IPOS)/='') IVAR = IVAR + 1
     END DO
-    IF (IVAR==0) THEN
-      PRINT *,'ERROR: no fields chosen for output'
-    END IF
+    IF (IVAR==0) CALL PRINT_MSG(NVERB_ERROR,'IO','IO_PREPARE_BAKOUT_STRUCT','no fields chosen for output')
     ALLOCATE(OUT_MODEL(IMI)%TOUTPUTN(1)%NFIELDLIST(IVAR))
     !Determine the list of the outputs to do (by field number)
     IVAR = 1
@@ -242,9 +241,8 @@ DO IMI = 1, NMODEL
         CALL FIND_FIELD_ID_FROM_MNHNAME(COUT_VAR(IMI,IPOS),IFIELD,IRESP)
         OUT_MODEL(IMI)%TOUTPUTN(1)%NFIELDLIST(IVAR) = IFIELD
         IF (IRESP/=0) THEN
-          PRINT *,'FATAL: unknown field for output: ',TRIM(COUT_VAR(IMI,IPOS))
+          CALL PRINT_MSG(NVERB_FATAL,'IO','IO_PREPARE_BAKOUT_STRUCT','unknown field for output: '//TRIM(COUT_VAR(IMI,IPOS)))
           !MNH is killed to prevent problems with wrong values in NFIELDLIST
-          STOP
         END IF
         !
         IVAR=IVAR+1
@@ -389,11 +387,7 @@ SUBROUTINE FIND_NEXT_AVAIL_SLOT_FLOAT(PTIMES,kIDX)
   !Find next (starting from KIDX) non 'allocated' element
   DO WHILE ( PTIMES(KIDX) >= 0. )
     KIDX = KIDX + 1
-    IF (KIDX > JPOUTMAX) THEN
-      PRINT *,'Error in SET_GRID when treating backup/output list (JPOUTMAX too small)'
-      CALL ABORT
-      STOP
-    END IF
+    IF (KIDX > JPOUTMAX) CALL PRINT_MSG(NVERB_FATAL,'IO','FIND_NEXT_AVAIL_SLOT_FLOAT','JPOUTMAX too small')
   END DO
 END SUBROUTINE FIND_NEXT_AVAIL_SLOT_FLOAT
 !
@@ -407,11 +401,7 @@ SUBROUTINE FIND_NEXT_AVAIL_SLOT_INT(KSTEPS,KIDX)
   !Find next (starting from KIDX) non 'allocated' element
   DO WHILE ( KSTEPS(IDX) >= 0 )
     KIDX = KIDX + 1
-    IF (KIDX > JPOUTMAX) THEN
-      PRINT *,'Error in SET_GRID when treating backup/output list (JPOUTMAX too small)'
-      CALL ABORT
-      STOP
-    END IF
+    IF (KIDX > JPOUTMAX) CALL PRINT_MSG(NVERB_FATAL,'IO','FIND_NEXT_AVAIL_SLOT_INT','JPOUTMAX too small')
   END DO
 END SUBROUTINE FIND_NEXT_AVAIL_SLOT_INT
 !
@@ -427,7 +417,7 @@ SUBROUTINE FIND_REMOVE_DUPLICATES(KNUMB,KSTEPS)
   DO JOUT = 1,KNUMB
     DO JKLOOP = JOUT+1,KNUMB
       IF ( KSTEPS(JKLOOP) == KSTEPS(JOUT) .AND. KSTEPS(JKLOOP) > 0 ) THEN
-        print *,'WARNING: found duplicated backup/output step (removed extra one)'
+        CALL PRINT_MSG(NVERB_INFO,'IO','FIND_REMOVE_DUPLICATES','found duplicated backup/output step (removed extra one)')
         KSTEPS(JKLOOP) = NNEGUNDEF
       END IF
     END DO
@@ -483,8 +473,7 @@ SUBROUTINE POPULATE_STRUCT(TPFILE_FIRST,TPFILE_LAST,KSTEPS,HFILETYPE,TPBAKOUTN)
         TPBAKOUTN(IPOS)%NSTEP = KSTEPS(JOUT)
         TPBAKOUTN(IPOS)%XTIME = (KSTEPS(JOUT)-1)*DYN_MODEL(IMI)%XTSTEP
         IF (IPOS>999) THEN
-          print *,'ERROR in SET_GRID: more than 999 backups/outputs'
-          STOP
+          CALL PRINT_MSG(NVERB_FATAL,'IO','POPULATE_STRUCT','more than 999 backups/outputs')
         END IF
         IF (.NOT.ASSOCIATED(TPFILE_FIRST)) THEN
           ALLOCATE(TPFILE_FIRST)
@@ -506,15 +495,15 @@ SUBROUTINE POPULATE_STRUCT(TPFILE_FIRST,TPFILE_LAST,KSTEPS,HFILETYPE,TPBAKOUTN)
           !Set compression if asked
           TPBAKOUTN(IPOS)%TFILE%LNCCOMPRESS = LOUT_COMPRESS(IMI)
           IF ( NOUT_COMPRESS_LEVEL(IMI)<0 .OR. NOUT_COMPRESS_LEVEL(IMI)>9 ) THEN
-            PRINT *,'ERROR: NOUT_COMPRESS_LEVEL must be in the [0..9] range. Value forced to 4'
+            CALL PRINT_MSG(NVERB_WARNING,'IO','POPULATE_STRUCT',&
+                           'NOUT_COMPRESS_LEVEL must be in the [0..9] range. Value forced to 4')
             NOUT_COMPRESS_LEVEL(IMI) = 4
           END IF
           TPBAKOUTN(IPOS)%TFILE%NNCCOMPRESS_LEVEL = NOUT_COMPRESS_LEVEL(IMI)
         ELSE IF (HFILETYPE=='BACKUP') THEN
           TPBAKOUTN(IPOS)%TFILE%CNAME=ADJUSTL(ADJUSTR(IO_SURF_MNH_MODEL(IMI)%COUTFILE)//'.'//YNUMBER)
         ELSE
-          PRINT *,'Error: unknown filetype (',TRIM(HFILETYPE),')'
-          CALL ABORT
+          CALL PRINT_MSG(NVERB_FATAL,'IO','POPULATE_STRUCT','unknown filetype ('//TRIM(HFILETYPE)//')')
         ENDIF
         TPBAKOUTN(IPOS)%TFILE%NLFITYPE=1 !1: to be transfered
 !PW: TODO: set NLFIVERB only when useful (only if LFI file...)
@@ -530,16 +519,14 @@ SUBROUTINE POPULATE_STRUCT(TPFILE_FIRST,TPFILE_LAST,KSTEPS,HFILETYPE,TPBAKOUTN)
           TPBAKOUTN(IPOS)%TFILE%CFORMAT='LFI'
           IF (HFILETYPE=='BACKUP') TPBAKOUTN(IPOS)%TFILE%NLFINPRAR= 22+2*(4+NRR+NSV)
         ELSE
-          PRINT *,'Error: unknown backup/output fileformat'
-          CALL ABORT
+          CALL PRINT_MSG(NVERB_FATAL,'IO','POPULATE_STRUCT','unknown backup/output fileformat')
         ENDIF
         !
         !Create file structures if Z-splitted files
         IF (NB_PROCIO_W>1) THEN
           ALLOCATE(TPBAKOUTN(IPOS)%TFILE_IOZ(NB_PROCIO_W))
           IF (NB_PROCIO_W>999) THEN
-            print *,'ERROR in SET_GRID: more than 999 z-levels'
-            STOP
+            CALL PRINT_MSG(NVERB_FATAL,'IO','POPULATE_STRUCT','more than 999 z-levels')
           END IF
           DO JI = 1,NB_PROCIO_W
             ALLOCATE(TPFILE_LAST%TFILE_NEXT)
@@ -574,8 +561,7 @@ SUBROUTINE POPULATE_STRUCT(TPFILE_FIRST,TPFILE_LAST,KSTEPS,HFILETYPE,TPBAKOUTN)
               TPBAKOUTN(IPOS)%TFILE_IOZ(JI)%TFILE%CFORMAT='LFI'
               !TPBAKOUTN(IPOS)%TFILE_IOZ(JI)%TFILE%NLFINPRAR= 0
             ELSE
-              PRINT *,'Error: unknown backup/output fileformat'
-              CALL ABORT
+              CALL PRINT_MSG(NVERB_FATAL,'IO','POPULATE_STRUCT','unknown backup/output fileformat')
             ENDIF
           END DO
         END IF
@@ -588,14 +574,14 @@ END SUBROUTINE IO_PREPARE_BAKOUT_STRUCT
 !
 SUBROUTINE IO_FILE_FIND_BYNAME(HNAME,TPFILE,KRESP)
 !
-USE MODD_IO_ll, ONLY: TFILE_FIRST,TFILEDATA
-!
 CHARACTER(LEN=*),       INTENT(IN)  :: HNAME  ! Name of the file to find
 TYPE(TFILEDATA),POINTER,INTENT(OUT) :: TPFILE ! File structure to return
 INTEGER,                INTENT(OUT) :: KRESP  ! Return value
 !
 TYPE(TFILEDATA),POINTER :: TZFILE ! File structure
 !
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_FIND_BYNAME','looking for: '//TRIM(HNAME))
+!
 NULLIFY(TPFILE)
 KRESP = 0
 !
@@ -611,8 +597,10 @@ DO
 END DO
 !
 IF (.NOT.ASSOCIATED(TPFILE)) THEN
-  PRINT *,'ERROR: IO_FILE_FIND_BYNAME: file ',TRIM(HNAME),' not found in list'
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_FIND_BYNAME','file '//TRIM(HNAME)//' not found in list')
   KRESP = -1 !File not found
+ELSE
+  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_FIND_BYNAME',TRIM(HNAME)//' was found')
 END IF  
 !
 END SUBROUTINE IO_FILE_FIND_BYNAME
diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
index ef8ecc012fe78e69a89392fee328e1c867c5f9ea..d39cc750e9566f912c4d8e5c864114855e468c1a 100644
--- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90
+++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
@@ -11,8 +11,9 @@
 MODULE MODE_NETCDF
 USE MODD_NETCDF
 USE NETCDF
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO_ll
 USE MODE_FIELD, ONLY : TFIELDDATA
+USE MODE_MSG
 
 IMPLICIT NONE 
 
@@ -159,6 +160,8 @@ TYPE(FD_ll), POINTER         :: TZFD
 !
 IF (TRIM(TPFILE%CFORMAT)/='NETCDF4' .AND. TRIM(TPFILE%CFORMAT)/='LFICDF4') RETURN
 !
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_HEADER_NC4','called')
+!
 TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi')
 !
 IF (ISP == TZFD%OWNER)  THEN
@@ -206,14 +209,16 @@ INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KVARID
 !
 INTEGER(KIND=IDCDF_KIND) :: STATUS
 !
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_ATTR_NC4','called')
+!
 IF(LEN_TRIM(TPFIELD%CSTDNAME)==0 .AND. LEN_TRIM(TPFIELD%CLONGNAME)==0) THEN
-  PRINT *,'ERROR: IO_WRITE_ATTR_NC4: at least long_name or standard_name must be provided &
-  &to respect CF-convention for variable ',TRIM(TPFIELD%CMNHNAME)
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_ATTR_NC4','at least long_name or standard_name must be provided &
+  &to respect CF-convention for variable '//TRIM(TPFIELD%CMNHNAME))
 ENDIF
 !
 ! GRID attribute definition
 IF(TPFIELD%NGRID<0) THEN
-!  PRINT *,'WARNING: IO_WRITE_ATTR_NC4: TPFIELD%NGRID not set for variable ',TRIM(TPFIELD%CMNHNAME)
+  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_ATTR_NC4','TPFIELD%NGRID not set for variable '//TRIM(TPFIELD%CMNHNAME))
 ELSE
   STATUS = NF90_PUT_ATT(KNCID, KVARID, 'GRID', TPFIELD%NGRID)
   IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_ATTR_NC4 [NF90_PUT_ATT]')
@@ -221,7 +226,7 @@ ENDIF
 !
 ! COMMENT attribute definition
 IF(LEN_TRIM(TPFIELD%CCOMMENT)==0) THEN
-!  PRINT *,'WARNING: IO_WRITE_ATTR_NC4: TPFIELD%CCOMMENT not set for variable ',TRIM(TPFIELD%CMNHNAME)
+  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_ATTR_NC4','TPFIELD%CCOMMENT not set for variable '//TRIM(TPFIELD%CMNHNAME))
 ELSE
   STATUS = NF90_PUT_ATT(KNCID, KVARID,'COMMENT', TRIM(TPFIELD%CCOMMENT))
   IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_ATTR_NC4 [NF90_PUT_ATT]')
@@ -229,7 +234,7 @@ ENDIF
 !
 ! Standard_name attribute definition (CF convention)
 IF(LEN_TRIM(TPFIELD%CSTDNAME)==0) THEN
-!  PRINT *,'WARNING: IO_WRITE_ATTR_NC4: TPFIELD%CSTDNAME not set for variable ',TRIM(TPFIELD%CMNHNAME)
+  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_ATTR_NC4','TPFIELD%CSTDNAME not set for variable '//TRIM(TPFIELD%CMNHNAME))
 ELSE
   STATUS = NF90_PUT_ATT(KNCID, KVARID,'standard_name', TRIM(TPFIELD%CSTDNAME))
   IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_ATTR_NC4 [NF90_PUT_ATT]')
@@ -237,7 +242,7 @@ ENDIF
 !
 ! Long_name attribute definition (CF convention)
 IF(LEN_TRIM(TPFIELD%CLONGNAME)==0) THEN
-!  PRINT *,'WARNING: IO_WRITE_ATTR_NC4: TPFIELD%CLONGNAME not set for variable ',TRIM(TPFIELD%CMNHNAME)
+  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_ATTR_NC4','TPFIELD%CLONGNAME not set for variable '//TRIM(TPFIELD%CMNHNAME))
 ELSE
   STATUS = NF90_PUT_ATT(KNCID, KVARID,'long_name', TRIM(TPFIELD%CLONGNAME))
   IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_ATTR_NC4 [NF90_PUT_ATT]')
@@ -245,7 +250,7 @@ ENDIF
 !
 ! Canonical units attribute definition (CF convention)
 IF(LEN_TRIM(TPFIELD%CUNITS)==0) THEN
-!  PRINT *,'WARNING: IO_WRITE_ATTR_NC4: TPFIELD%CUNITS not set for variable ',TRIM(TPFIELD%CMNHNAME)
+  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_ATTR_NC4','TPFIELD%CUNITS not set for variable '//TRIM(TPFIELD%CMNHNAME))
 ELSE
   STATUS = NF90_PUT_ATT(KNCID, KVARID,'units', TRIM(TPFIELD%CUNITS))
   IF (STATUS /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_ATTR_NC4 [NF90_PUT_ATT]')
@@ -469,6 +474,8 @@ CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME
 INTEGER(KIND=IDCDF_KIND) :: IVARID
 INTEGER                  :: IRESP
 !
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_X0','writing '//TRIM(TPFIELD%CMNHNAME))
+!
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
@@ -485,7 +492,7 @@ IF (STATUS /= NF90_NOERR) THEN
    IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X0[NF90_DEF_VAR]')
    CALL IO_WRITE_FIELD_ATTR_NC4(TPFIELD,INCID,IVARID)
 ELSE
-   PRINT *,'IO_WRITE_FIELD_NC4_X0: ', TRIM(YVARNAME), ' already defined !'
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X0',TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write the data
@@ -558,6 +565,8 @@ INTEGER(KIND=IDCDF_KIND) :: IVARID
 INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
 INTEGER                  :: IRESP
 !
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_X1','writing '//TRIM(TPFIELD%CMNHNAME))
+!
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
@@ -570,7 +579,7 @@ YVARNAME = str_replace(YVARNAME, '.', '--')
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (SIZE(PFIELD)==0) THEN
-     PRINT *,'WARNING: IO_WRITE_FIELD_NC4_X1: ignoring variable with a zero size (',TRIM(YVARNAME),')'
+     CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_NC4_X1','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
      RETURN
    END IF
 
@@ -591,7 +600,7 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
    CALL IO_WRITE_FIELD_ATTR_NC4(TPFIELD,INCID,IVARID)
 ELSE
-   PRINT *,'IO_WRITE_FIELD_NC4_X1: ', TRIM(YVARNAME), ' already defined !'
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X1',TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write the data
@@ -674,24 +683,27 @@ IRESP = 0
 IF (PRESENT(KVERTLEVEL)) THEN
   WRITE(YSUFFIX,'(I4.4)') KVERTLEVEL
   IF (.NOT.PRESENT(KZFILE)) THEN
-    PRINT *,'FATAL: IO_WRITE_FIELD_NC4_X2: KZFILE argument not provided'
-    STOP
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_NC4_X2','KZFILE argument not provided')
+    RETURN
   END IF
   WRITE(YNUMBER,'(I3.3)') KZFILE
   YVARNAME = TRIM(TPFIELD%CMNHNAME)//YSUFFIX
 !PW: TODO: try to not do a find (for better perf)
   CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME)//'.Z'//YNUMBER,TZFILE,IRESP)
   IF (IRESP/=0) THEN
-    PRINT *,'FATAL: IO_WRITE_FIELD_NC4_X2: file ',TRIM(TRIM(TPFILE%CNAME)//'.Z'//YNUMBER),' not found in list'
-    STOP
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_NC4_X2','file '//TRIM(TRIM(TPFILE%CNAME)//'.Z'//YNUMBER)//' not found in list')
+    RETURN
   END IF
 ELSE
   YVARNAME = TRIM(TPFIELD%CMNHNAME)
   TZFILE => TPFILE
 ENDIF
-
+!
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_X2','writing '//TRIM(YVARNAME))
+!
 ! Get the Netcdf file ID
 INCID = TZFILE%NNCID
+print *,'PW:IO_WRITE_FIELD_NC4_X2: INCID=',INCID, trim(TZFILE%CNAME)
 ! NetCDF var names can't contain '%' nor '.' 
 YVARNAME = str_replace(YVARNAME, '%', '__')
 YVARNAME = str_replace(YVARNAME, '.', '--')
@@ -700,7 +712,7 @@ YVARNAME = str_replace(YVARNAME, '.', '--')
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (SIZE(PFIELD)==0) THEN
-     PRINT *,'WARNING: IO_WRITE_FIELD_NC4_X2: ignoring variable with a zero size (',TRIM(YVARNAME),')'
+     CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_NC4_X2','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
      RETURN
    END IF
 
@@ -721,7 +733,7 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
    CALL IO_WRITE_FIELD_ATTR_NC4(TPFIELD,INCID,IVARID)
 ELSE
-   PRINT *,'IO_WRITE_FIELD_NC4_X2: ', TRIM(YVARNAME), ' already defined !'
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X2',TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write the data
@@ -793,6 +805,9 @@ INTEGER(KIND=IDCDF_KIND) :: IVARID
 INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
 INTEGER                  :: IRESP
 !
+!
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_X3','writing '//TRIM(TPFIELD%CMNHNAME))
+!
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
@@ -805,7 +820,7 @@ YVARNAME = str_replace(YVARNAME, '.', '--')
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (SIZE(PFIELD)==0) THEN
-     PRINT *,'WARNING: IO_WRITE_FIELD_NC4_X3: ignoring variable with a zero size (',TRIM(YVARNAME),')'
+     CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_NC4_X3','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
      RETURN
    END IF
 
@@ -826,7 +841,7 @@ IF (STATUS /= NF90_NOERR) THEN
    IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X3[NF90_DEF_VAR]')
    CALL IO_WRITE_FIELD_ATTR_NC4(TPFIELD,INCID,IVARID)
 ELSE
-   PRINT *,'IO_WRITE_FIELD_NC4_X3: ', TRIM(YVARNAME), ' already defined !'
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X3',TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write the data
@@ -1054,6 +1069,8 @@ CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME
 INTEGER(KIND=IDCDF_KIND) :: IVARID
 INTEGER                  :: IRESP
 !
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_N0','writing '//TRIM(TPFIELD%CMNHNAME))
+!
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
@@ -1074,7 +1091,7 @@ IF (STATUS /= NF90_NOERR) THEN
    IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_N0[NF90_DEF_VAR]')
    CALL IO_WRITE_FIELD_ATTR_NC4(TPFIELD,INCID,IVARID)
 ELSE
-   PRINT *,'IO_WRITE_FIELD_NC4_N0: ', TRIM(YVARNAME), ' already defined !'
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_N0',TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write the data
@@ -1268,12 +1285,13 @@ INTEGER(KIND=IDCDF_KIND), DIMENSION(1) :: IVDIMS
 INTEGER                                :: IRESP, ILEN
 CHARACTER(LEN=:),ALLOCATABLE           :: YFIELD
 !
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_C0','writing '//TRIM(TPFIELD%CMNHNAME))
+!
 IRESP = 0
 
 !Store the character string in a string of a size multiple of IMULT
 !This is done to limit the number of dimensions in the netCDF file
 ILEN = ((LEN_TRIM(HFIELD)+IMULT-1)/IMULT)*IMULT
-IF (MOD(ILEN,IMULT)/=0) PRINT *,'ERROR: IO_WRITE_FIELD_NC4_C0: ILEN is not a multiple of IMULT'
 !If the string is empty, create it anyway with a non-zero size (to prevent problems later)
 IF (ILEN==0) ILEN = IMULT
 
@@ -1294,7 +1312,7 @@ IF (STATUS /= NF90_NOERR) THEN
    IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_C0[NF90_DEF_VAR]')
    CALL IO_WRITE_FIELD_ATTR_NC4(TPFIELD,INCID,IVARID)
 ELSE
-   PRINT *,'IO_WRITE_FIELD_NC4_C0: ', TRIM(YVARNAME), ' already defined !'
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_C0',TRIM(YVARNAME)//' already defined')
 END IF
 
 ALLOCATE(CHARACTER(LEN=ILEN)::YFIELD)
diff --git a/src/MNH/goto_model_wrapper.f90 b/src/MNH/goto_model_wrapper.f90
index 0199b28e5d4f837712c951f278bbec8f9556bac0..1d861c630265f76711e56ec16accf36377b5797e 100644
--- a/src/MNH/goto_model_wrapper.f90
+++ b/src/MNH/goto_model_wrapper.f90
@@ -118,6 +118,11 @@ USE MODE_FIELD
 IMPLICIT NONE 
 INTEGER,INTENT(IN) :: KFROM, KTO
 !
+CHARACTER(LEN=64) :: YMSG
+!
+WRITE(YMSG,'( I4,"->",I4 )') KFROM,KTO
+CALL PRINT_MSG(NVERB_DEBUG,'GEN','GOTO_MODEL_WRAPPER',TRIM(YMSG))
+!
 ! All calls to specific modd_*n goto_model routines
 !
 CALL ADV_GOTO_MODEL(KFROM, KTO)
diff --git a/src/MNH/modd_conf.f90 b/src/MNH/modd_conf.f90
index 24c36a3c17fd89bd25768de92c28e65aa850c77a..a7a69e6b7df6c0e1672e4dab15f7a4484032d9eb 100644
--- a/src/MNH/modd_conf.f90
+++ b/src/MNH/modd_conf.f90
@@ -105,7 +105,7 @@ CHARACTER(LEN=10),SAVE :: CBIBUSER! CBIBUSER is the name of the user binary libr
 !
 CHARACTER(LEN=6),SAVE :: CPROGRAM ! CPROGRAM is the program currently running:
 !                                 ! 'PGD   ','ADVPGD','NESPGD','REAL  ','IDEAL '
-!                                 ! 'MESONH','SPAWN ','DIAG  '
+!                                 ! 'MESONH','SPAWN ','DIAG  ','SPEC  '
 !
 INTEGER,SAVE      :: NHALO        ! Size of the halo for parallel distribution
 !
diff --git a/src/MNH/prep_nest_pgd.f90 b/src/MNH/prep_nest_pgd.f90
index 878dc061cc3c48cd0ef1a337ab67ecd9aa6683f6..b82bc4d0b52898b6d6b354e3f398674f65d87333 100644
--- a/src/MNH/prep_nest_pgd.f90
+++ b/src/MNH/prep_nest_pgd.f90
@@ -186,7 +186,7 @@ CALL INI_CST
 !
 !-------------------------------------------------------------------------------
 !
-!*       2.    OPENNING OF THE FILES
+!*       2.    OPENING OF THE FILES
 !              ---------------------
 !
 NVERB=1