diff --git a/src/LIB/SURCOUCHE/src/fmread_ll.f90 b/src/LIB/SURCOUCHE/src/fmread_ll.f90
index b568776033d9afe2136a47d2b88a1c9e3538d74d..5e00f6622164ffb80876f044a18198c0c7833d8c 100644
--- a/src/LIB/SURCOUCHE/src/fmread_ll.f90
+++ b/src/LIB/SURCOUCHE/src/fmread_ll.f90
@@ -629,6 +629,9 @@ IF (IRESP==0) THEN
       TZFIELD = TPFIELD
       WRITE(YSUFFIX,'(I4.4)') JKK
       TZFIELD%CMNHNAME = TRIM(TPFIELD%CMNHNAME)//TRIM(YSUFFIX)
+      IF (LEN_TRIM(TZFIELD%CSTDNAME)>0)  TZFIELD%CSTDNAME  = TRIM(TZFIELD%CSTDNAME)//'_at_level_'//YSUFFIX
+      IF (LEN_TRIM(TZFIELD%CLONGNAME)>0) TZFIELD%CLONGNAME = TRIM(TZFIELD%CLONGNAME)//' at level '//YSUFFIX
+      TZFIELD%NDIMS = 2
       !
       IK_RANK = TZFILE%NMASTER_RANK
       !
@@ -688,6 +691,9 @@ IF (IRESP==0) THEN
           TZFIELD = TPFIELD
           WRITE(YSUFFIX,'(I4.4)') JKK
           TZFIELD%CMNHNAME = TRIM(TPFIELD%CMNHNAME)//TRIM(YSUFFIX)
+          IF (LEN_TRIM(TZFIELD%CSTDNAME)>0)  TZFIELD%CSTDNAME  = TRIM(TZFIELD%CSTDNAME)//'_at_level_'//YSUFFIX
+          IF (LEN_TRIM(TZFIELD%CLONGNAME)>0) TZFIELD%CLONGNAME = TRIM(TZFIELD%CLONGNAME)//' at level '//YSUFFIX
+          TZFIELD%NDIMS = 2
         ELSE
           TZFILE => TPFILE
           TZFIELD = TPFIELD
diff --git a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90
index a83f493351c6e3cf6a49426323526efec5adc619..6f2588b1149edea6743ed12103d007a361ed7982 100644
--- a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90
+++ b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90
@@ -816,6 +816,9 @@ CONTAINS
     !
     TZFILE => NULL()
     !
+    ZSLICE    => NULL()
+    ZSLICE_ll => NULL()
+    !
     YFILEM   = TPFILE%CNAME
     YRECFM   = TPFIELD%CMNHNAME
     YDIR     = TPFIELD%CDIR
diff --git a/src/LIB/SURCOUCHE/src/mode_io.f90 b/src/LIB/SURCOUCHE/src/mode_io.f90
index 362b5c49cfe7fc5857dd8a05725eb81195cff742..d7d27962efd4d863cae4ad093c1fc14b2ee5f3cb 100644
--- a/src/LIB/SURCOUCHE/src/mode_io.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io.f90
@@ -631,7 +631,7 @@ CONTAINS
              WRITE(CFILE ,'(".Z",i3.3)') IFILE
              YFILE_IOZ           = TRIM(TPFILE%CNAME)//CFILE//".lfi"
 
-             CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME)//TRIM(CFILE),TZSPLITFILE,IRESP,OOLD=.FALSE.)
+             CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME)//TRIM(CFILE),TZSPLITFILE,IRESP)
 
              IF (IRESP/=0) THEN !File not yet in filelist => add it (nothing to do if already in list)
                CALL IO_FILE_ADD2LIST(TZSPLITFILE,TRIM(TPFILE%CNAME)//TRIM(CFILE),TPFILE%CTYPE,TPFILE%CMODE, &
diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
index 8ed0d895bd9589b3e0a890cf1f136f5fd3141e55..4e75349f05b74e0bf0fded0418b5696887bebc49 100644
--- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90
+++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90
@@ -880,18 +880,16 @@ GETSTRDIMID = TMP%ID
 
 END FUNCTION GETSTRDIMID
 
-SUBROUTINE FILLVDIMS(TPFILE, TPFIELD, KSHAPE, KVDIMS, OSPLIT)
+SUBROUTINE FILLVDIMS(TPFILE, TPFIELD, KSHAPE, KVDIMS)
 TYPE(TFILEDATA),                      INTENT(IN)  :: TPFILE
 TYPE(TFIELDDATA),                     INTENT(IN)  :: TPFIELD
 INTEGER(KIND=IDCDF_KIND),DIMENSION(:),INTENT(IN)  :: KSHAPE
 INTEGER(KIND=IDCDF_KIND),DIMENSION(:),INTENT(OUT) :: KVDIMS
-LOGICAL, OPTIONAL,                    INTENT(IN)  :: OSPLIT
 !
 INTEGER               :: IGRID
 INTEGER               :: JI
 CHARACTER(LEN=32)     :: YINT
 CHARACTER(LEN=2)      :: YDIR
-LOGICAL               :: GSPLIT
 TYPE(DIMCDF), POINTER :: PTDIM
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','FILLVDIMS','called for '//TRIM(TPFIELD%CMNHNAME))
@@ -901,21 +899,10 @@ IF (SIZE(KSHAPE) < 1) CALL PRINT_MSG(NVERB_FATAL,'IO','FILLVDIMS','empty KSHAPE'
 IGRID  =  TPFIELD%NGRID
 YDIR   =  TPFIELD%CDIR
 !
-GSPLIT = .FALSE.
-IF (PRESENT(OSPLIT)) GSPLIT = OSPLIT
-!
-IF (GSPLIT) THEN
-  IF(SIZE(KSHAPE)/=(TPFIELD%NDIMS-1)) THEN
-    WRITE(YINT,'( I0,"/",I0 )') SIZE(KSHAPE),TPFIELD%NDIMS-1
-    CALL PRINT_MSG(NVERB_FATAL,'IO','FILLVDIMS','SIZE(KSHAPE)/=TPFIELD%NDIMS-1 ('//TRIM(YINT)//') for field ' &
-                   //TRIM(TPFIELD%CMNHNAME))
-  END IF
-ELSE
-  IF(SIZE(KSHAPE)/=TPFIELD%NDIMS) THEN
-    WRITE(YINT,'( I0,"/",I0 )') SIZE(KSHAPE),TPFIELD%NDIMS
-    CALL PRINT_MSG(NVERB_FATAL,'IO','FILLVDIMS','SIZE(KSHAPE)/=TPFIELD%NDIMS ('//TRIM(YINT)//') for field ' &
-                   //TRIM(TPFIELD%CMNHNAME))
-  END IF
+IF(SIZE(KSHAPE)/=TPFIELD%NDIMS) THEN
+  WRITE(YINT,'( I0,"/",I0 )') SIZE(KSHAPE),TPFIELD%NDIMS
+  CALL PRINT_MSG(NVERB_FATAL,'IO','FILLVDIMS','SIZE(KSHAPE)/=TPFIELD%NDIMS ('//TRIM(YINT)//') for field ' &
+                 //TRIM(TPFIELD%CMNHNAME))
 END IF
 !
 IF(IGRID<0 .OR. IGRID>8) THEN
@@ -1078,16 +1065,15 @@ LOGICAL,OPTIONAL,      INTENT(IN) :: OISCOORD   ! Is a coordinate variable (->do
 INTEGER(KIND=IDCDF_KIND) :: STATUS
 INTEGER(KIND=IDCDF_KIND) :: INCID
 CHARACTER(LEN=4)         :: YSUFFIX
-CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)+4) :: YTMP,YVARNAME
+CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)+4) :: YVARNAME
 INTEGER(KIND=IDCDF_KIND) :: IVARID
 INTEGER(KIND=IDCDF_KIND), DIMENSION(SIZE(SHAPE(PFIELD))) :: IVDIMS
 INTEGER                  :: IRESP
-LOGICAL                  :: GSPLIT
+TYPE(TFIELDDATA)         :: TZFIELD
 TYPE(TFILEDATA),POINTER  :: TZFILE
 LOGICAL                  :: GEXISTED !True if variable was already defined
 !
 IRESP = 0
-GSPLIT = .FALSE.
 !
 IF (PRESENT(KVERTLEVEL)) THEN
   WRITE(YSUFFIX,'(I4.4)') KVERTLEVEL
@@ -1095,23 +1081,26 @@ IF (PRESENT(KVERTLEVEL)) THEN
     CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_NC4_X2','KZFILE argument not provided')
     RETURN
   END IF
-  YTMP = TRIM(TPFIELD%CMNHNAME)//YSUFFIX
   IF (KZFILE>TPFILE%NSUBFILES_IOZ) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_WRITE_FIELD_NC4_X2','KZFILE value too high')
   TZFILE => TPFILE%TFILES_IOZ(KZFILE)%TFILE
-  GSPLIT = .TRUE.
+  TZFIELD = TPFIELD
+  TZFIELD%CMNHNAME  = TRIM(TZFIELD%CMNHNAME)//YSUFFIX
+  IF (LEN_TRIM(TZFIELD%CSTDNAME)>0)  TZFIELD%CSTDNAME  = TRIM(TZFIELD%CSTDNAME)//'_at_level_'//YSUFFIX
+  IF (LEN_TRIM(TZFIELD%CLONGNAME)>0) TZFIELD%CLONGNAME = TRIM(TZFIELD%CLONGNAME)//' at level '//YSUFFIX
+  TZFIELD%NDIMS = 2
 ELSE
-  YTMP = TRIM(TPFIELD%CMNHNAME)
   TZFILE => TPFILE
+  TZFIELD = TPFIELD
 ENDIF
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_X2',TRIM(TPFILE%CNAME)//': writing '//TRIM(YTMP))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_X2',TRIM(TZFILE%CNAME)//': writing '//TRIM(TZFIELD%CMNHNAME))
 !
 ! Get the Netcdf file ID
 INCID = TZFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(YTMP,YVARNAME)
+CALL CLEANMNHNAME(TZFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
@@ -1123,7 +1112,7 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS, GSPLIT)
+   CALL FILLVDIMS(TZFILE, TZFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS)
 
    ! Define the variable 
    IF (TZFILE%LNCREDUCE_FLOAT_PRECISION) THEN
@@ -1139,14 +1128,14 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X2',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X2',TRIM(TZFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND),OISCOORD=OISCOORD)
+CALL IO_WRITE_FIELD_ATTR_NC4(TZFILE,TZFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND),OISCOORD=OISCOORD)
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD)
-IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X2[NF90_PUT_VAR] '//TRIM(TPFIELD%CMNHNAME),IRESP)
+IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__,'IO_WRITE_FIELD_NC4_X2[NF90_PUT_VAR] '//TRIM(TZFIELD%CMNHNAME),IRESP)
  
 KRESP = IRESP
 END SUBROUTINE IO_WRITE_FIELD_NC4_X2