diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
index 5cb549b922e80c48ed4739ed0a946c7085df3bb6..86805e939275378dfe80a3b2e550bcd45d6455c8 100644
--- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90
+++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
@@ -70,7 +70,7 @@ INTEGER              :: IRESP
 
 ALLOCATE(TZIOCDF, STAT=IRESP)
 IF (IRESP > 0) THEN 
-  PRINT *, 'NEWIOCDF : memory allocation error...'
+  CALL PRINT_MSG(NVERB_FATAL,'IO','NEWIOCDF','memory allocation error')
   STOP
 END IF
 
@@ -90,10 +90,12 @@ TYPE(IOCDF),  POINTER :: PIOCDF
 
 INTEGER(KIND=IDCDF_KIND) :: IRESP
 
+CALL PRINT_MSG(NVERB_DEBUG,'IO','CLEANIOCDF','called')
+
 ! Close Netcdf File
 IRESP = NF90_CLOSE(PIOCDF%NCID)
 IF (IRESP /= NF90_NOERR) THEN
-   PRINT *, 'CLEANIOCDF, NF90_CLOSE error : ', NF90_STRERROR(IRESP)
+  CALL PRINT_MSG(NVERB_WARNING,'IO','CLEANIOCDF','NF90_CLOSE error: '//TRIM(NF90_STRERROR(IRESP)))
 END IF
 
 ! Clean DIMLIST and DIMSTR
@@ -102,8 +104,6 @@ CALL CLEANLIST(PIOCDF%DIMSTR)
 ! Then free iocdf
 DEALLOCATE(PIOCDF)
 
-PRINT *, 'CLEANIOCDF done.'
-
 CONTAINS
 
 SUBROUTINE CLEANLIST(PLIST)
@@ -120,27 +120,31 @@ END SUBROUTINE CLEANLIST
   
 END SUBROUTINE CLEANIOCDF
 
-SUBROUTINE HANDLE_ERR(status,line,text,kresp)
-INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: status
-INTEGER, INTENT(IN) :: line
-CHARACTER(LEN=*), INTENT(IN) :: text
-INTEGER, OPTIONAL, INTENT(OUT) :: kresp
-
-! Don't stop the code when kresp is present
-! and ensure kresp is a negative integer
-IF (status /= NF90_NOERR) THEN
-   PRINT *, 'NETCDF ERROR in '//TRIM(text), line, NF90_STRERROR(status)
-   IF (PRESENT(kresp)) THEN
-      IF (status < 0) THEN
-         kresp = status
-      ELSE IF (status == 0) THEN
-         kresp = -1
-      ELSE
-         kresp = -status
-      END IF
-   ELSE
-      STOP
-   END IF
+SUBROUTINE HANDLE_ERR(STATUS,LINE,TEXT,KRESP)
+INTEGER(KIND=IDCDF_KIND),INTENT(IN)  :: STATUS
+INTEGER,                 INTENT(IN)  :: LINE
+CHARACTER(LEN=*),        INTENT(IN)  :: TEXT
+INTEGER, OPTIONAL,       INTENT(OUT) :: KRESP
+
+CHARACTER(LEN=6) :: YLINE
+
+WRITE(YLINE,*) LINE
+
+! Don't stop (by default) the code when KRESP is present
+! and ensure KRESP is a negative integer
+IF (STATUS /= NF90_NOERR) THEN
+  IF (PRESENT(KRESP)) THEN
+    IF (STATUS < 0) THEN
+      KRESP = STATUS
+    ELSE IF (STATUS == 0) THEN
+      KRESP = -1
+    ELSE
+      KRESP = -STATUS
+    END IF
+    CALL PRINT_MSG(NVERB_WARNING,'IO',TRIM(TEXT),'NetCDF error at line '//TRIM(YLINE)//': '//TRIM(NF90_STRERROR(STATUS)))
+  ELSE
+    CALL PRINT_MSG(NVERB_FATAL,'IO',TRIM(TEXT),'NetCDF error at line '//TRIM(YLINE)//': '//TRIM(NF90_STRERROR(STATUS)))
+  END IF
 END IF
 END SUBROUTINE HANDLE_ERR
 
@@ -268,11 +272,12 @@ TYPE(DIMCDF), POINTER :: TMP
 INTEGER               :: COUNT
 CHARACTER(LEN=7)      :: YSUFFIX
 CHARACTER(LEN=8)      :: YDIMNAME
+CHARACTER(LEN=20)     :: YLEN
 INTEGER(KIND=IDCDF_KIND) :: STATUS
 
 IF (KLEN < 1) THEN
-   PRINT *, 'GETDIMCDF Error, KLEN=', KLEN
-   STOP
+  WRITE(YLEN,*) KLEN
+  CALL PRINT_MSG(NVERB_FATAL,'IO','GETDIMCDF','KLEN='//TRIM(YLEN))
 END IF
 
 IF (PRESENT(HDIMNAME)) THEN
@@ -315,11 +320,12 @@ INTEGER(KIND=IDCDF_KIND)            :: GETSTRDIMID
 TYPE(DIMCDF), POINTER :: TMP
 CHARACTER(LEN=7)      :: YSUFFIX
 CHARACTER(LEN=8)      :: YDIMNAME
+CHARACTER(LEN=20)     :: YLEN
 INTEGER(KIND=IDCDF_KIND) :: STATUS
 
 IF (KLEN < 1) THEN
-   PRINT *, 'GETSTRDIMID Error, KLEN=', KLEN
-   STOP
+  WRITE(YLEN,*) KLEN
+  CALL PRINT_MSG(NVERB_FATAL,'IO','GETSTRDIMID','KLEN='//TRIM(YLEN))
 END IF
 
 ! Search string dimension with KLEN length
@@ -356,10 +362,7 @@ INTEGER(KIND=IDCDF_KIND),DIMENSION(:), INTENT(OUT) :: KVDIMS
 INTEGER :: II
 TYPE(DIMCDF), POINTER :: PTDIM
 
-IF (SIZE(KSHAPE) < 1) THEN
-   PRINT *, 'FILLVDIMS Error, KSHAPE empty'
-   STOP
-END IF
+IF (SIZE(KSHAPE) < 1) CALL PRINT_MSG(NVERB_FATAL,'IO','FILLVDIMS','empty KSHAPE')
 
 DO II=1, SIZE(KSHAPE)