diff --git a/src/LIB/SURCOUCHE/src/fmreadwrit.f90 b/src/LIB/SURCOUCHE/src/fmreadwrit.f90
index 4f9c202ba983730f0dc8ad601e347a35c09ec40b..a235ff73dc2705b772c8ca6b33f33bd490035dc3 100644
--- a/src/LIB/SURCOUCHE/src/fmreadwrit.f90
+++ b/src/LIB/SURCOUCHE/src/fmreadwrit.f90
@@ -271,6 +271,19 @@ IMPLICIT NONE
 !
 PRIVATE
 !
+INTERFACE IO_READ_FIELD_LFI
+   MODULE PROCEDURE IO_READ_FIELD_LFI_N0
+!                     IO_READ_FIELD_LFI_X0,IO_READ_FIELD_LFI_X1, &
+!                     IO_READ_FIELD_LFI_X2,IO_READ_FIELD_LFI_X3, &
+!                     IO_READ_FIELD_LFI_X4,IO_READ_FIELD_LFI_X5, &
+!                     IO_READ_FIELD_LFI_X6,                       &
+!                     IO_READ_FIELD_LFI_N1, &
+!                     IO_READ_FIELD_LFI_N2,IO_READ_FIELD_LFI_N3, &
+!                     IO_READ_FIELD_LFI_L0,IO_READ_FIELD_LFI_L1, &
+!                     IO_READ_FIELD_LFI_C0,                       &
+!                     IO_READ_FIELD_LFI_T0
+END INTERFACE IO_READ_FIELD_LFI
+!
 INTERFACE IO_WRITE_FIELD_LFI
    MODULE PROCEDURE IO_WRITE_FIELD_LFI_X0,IO_WRITE_FIELD_LFI_X1, &
                     IO_WRITE_FIELD_LFI_X2,IO_WRITE_FIELD_LFI_X3, &
@@ -283,10 +296,127 @@ INTERFACE IO_WRITE_FIELD_LFI
                     IO_WRITE_FIELD_LFI_T0
 END INTERFACE IO_WRITE_FIELD_LFI
 !
-PUBLIC IO_WRITE_FIELD_LFI
+PUBLIC IO_READ_FIELD_LFI,IO_WRITE_FIELD_LFI
 !
 CONTAINS
 !
+SUBROUTINE IO_READ_FIELD_LFI_N0(TPFILE,TPFIELD,KFIELD,TPFMH,KRESP)
+USE MODD_FM
+USE MODD_CONFZ, ONLY : NZ_VERB
+USE MODE_MSG
+!
+IMPLICIT NONE
+!
+!*      0.1   Declarations of arguments
+!
+TYPE(TFILEDATA), INTENT(IN)  :: TPFILE
+TYPE(TFIELDDATA),INTENT(IN)  :: TPFIELD
+INTEGER,         INTENT(OUT) :: KFIELD  ! array containing the data field
+TYPE(FMHEADER),  INTENT(OUT) :: TPFMH   ! FM-File Header
+INTEGER,         INTENT(OUT) :: KRESP   ! return-code if problems occured
+!
+!*      0.2   Declarations of local variables
+!
+INTEGER(KIND=LFI_INT)                    :: IRESP,ITOTAL
+INTEGER                                  :: ILENG
+INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
+!
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_N0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+!
+ILENG = 1
+!
+CALL IO_READ_AND_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,TPFMH,IRESP)
+!
+IF (IRESP==0) KFIELD = IWORK(TPFMH%COMLEN+3)
+!
+KRESP=IRESP
+!
+IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
+!
+END SUBROUTINE IO_READ_FIELD_LFI_N0
+!
+!
+SUBROUTINE IO_READ_AND_CHECK_FIELD_LFI(TPFILE,TPFIELD,KLENG,KWORK,KTOTAL,TPFMH,KRESP)
+!
+TYPE(TFILEDATA),                         INTENT(IN)    :: TPFILE
+TYPE(TFIELDDATA),                        INTENT(IN)    :: TPFIELD
+INTEGER,                                 INTENT(IN)    :: KLENG
+INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE,INTENT(OUT)   :: KWORK
+INTEGER(KIND=LFI_INT),                   INTENT(OUT)   :: KTOTAL
+TYPE(FMHEADER),                          INTENT(OUT)   :: TPFMH   ! FM-File Header
+INTEGER(KIND=LFI_INT),                   INTENT(OUT)   :: KRESP
+!
+INTEGER                   :: IROW,J
+INTEGER,DIMENSION(JPXKRK) :: ICOMMENT
+INTEGER(KIND=LFI_INT)     :: INUMBR,IPOSEX
+CHARACTER(LEN=12)         :: YRECLENGTH_FILE, YRECLENGTH_MEM
+!
+!*      2.a   LET'S GET SOME INFORMATION ON THE DESIRED ARTICLE
+!
+INUMBR = TPFILE%NLFIFLU
+CALL LFINFO(KRESP,INUMBR,TRIM(TPFIELD%CMNHNAME),KTOTAL,IPOSEX)
+!
+IF (KRESP.NE.0) THEN
+  RETURN
+ELSEIF (KTOTAL.EQ.0) THEN
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_AND_CHECK_FIELD_LFI',TRIM(TPFILE%CNAME)//': record length is zero for ' &
+                                                                  //TRIM(TPFIELD%CMNHNAME))
+  KRESP=-47
+  RETURN
+ELSEIF (KTOTAL.GT.JPXFIE) THEN
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_AND_CHECK_FIELD_LFI',TRIM(TPFILE%CNAME)// &
+                               ': record length exceeds the maximum value in FM for '//TRIM(TPFIELD%CMNHNAME))
+  KRESP=-48
+  RETURN
+ENDIF
+!
+!*      2.b   UNFORMATTED DIRECT ACCESS READ OPERATION
+!
+ALLOCATE(KWORK(KTOTAL))
+!
+CALL LFILEC(KRESP,INUMBR,TRIM(TPFIELD%CMNHNAME),KWORK,KTOTAL)
+IF (KRESP.NE.0) RETURN
+!
+!*      2.c   THE GRID INDICATOR AND THE COMMENT STRING
+!*            ARE SEPARATED FROM THE DATA
+!
+TPFMH%GRID   = KWORK(1)
+TPFMH%COMLEN = KWORK(2)
+!
+IROW=KLENG+TPFMH%COMLEN+2
+IF (KTOTAL.NE.IROW) THEN
+  WRITE(YRECLENGTH_FILE,'(I12)') KTOTAL-2-TPFMH%COMLEN
+  WRITE(YRECLENGTH_MEM, '(I12)') KLENG
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_AND_CHECK_FIELD_LFI','wrong field size for '//TRIM(TPFIELD%CMNHNAME) &
+                                     //' (expected: '//TRIM(ADJUSTL(YRECLENGTH_MEM))//                            &
+                                     ', in file: '   //TRIM(ADJUSTL(YRECLENGTH_FILE))//')')
+  KRESP=-63
+  RETURN
+ENDIF
+!
+SELECT CASE (TPFMH%COMLEN)
+CASE(:-1)
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_AND_CHECK_FIELD_LFI',TRIM(TPFILE%CNAME)//': comment length is negative for ' &
+                                                                  //TRIM(TPFIELD%CMNHNAME))
+  KRESP=-58
+  RETURN
+CASE(0)
+  KRESP = 0
+CASE(1:JPXKRK)
+  ICOMMENT(1:TPFMH%COMLEN)=KWORK(3:TPFMH%COMLEN+2)
+  DO J=1,TPFMH%COMLEN
+    TPFMH%COMMENT(J:J)=CHAR(ICOMMENT(J))
+  ENDDO
+CASE(JPXKRK+1:)
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_AND_CHECK_FIELD_LFI',TRIM(TPFILE%CNAME)//': comment is too long in file for ' &
+                                                                  //TRIM(TPFIELD%CMNHNAME))
+  KRESP=-56
+  RETURN
+END SELECT
+!
+END SUBROUTINE IO_READ_AND_CHECK_FIELD_LFI
+!
+!
 SUBROUTINE IO_WRITE_FIELD_LFI_X0(TPFIELD,KFLU,PFIELD,KRESP)
 !
 IMPLICIT NONE
@@ -973,8 +1103,6 @@ ALLOCATE(KWORK(KTOTAL))
 KWORK(1)=TPFIELD%NGRID
 !
 SELECT CASE (ICOMLEN)
-CASE(:-1)
-  KRESP=-55
 CASE(0)
   KWORK(2)=ICOMLEN
 CASE(1:JPXKRK)
@@ -985,7 +1113,7 @@ CASE(1:JPXKRK)
   KWORK(3:ICOMLEN+2)=ICOMMENT(1:ICOMLEN)
 CASE(JPXKRK+1:)
   CALL PRINT_MSG(NVERB_WARNING,'IO','WRITE_PREPARE','comment is too long')
-  KRESP = -9999
+  KRESP = -57
 END SELECT
 !
 END SUBROUTINE WRITE_PREPARE
diff --git a/src/MNH/ini_segn.f90 b/src/MNH/ini_segn.f90
index 7e50f17f8e2d6aa5f89ceb0751b4b075c05b7d00..bc4e1418d26b6988b18eecf7fef77559e1b677d1 100644
--- a/src/MNH/ini_segn.f90
+++ b/src/MNH/ini_segn.f90
@@ -173,7 +173,7 @@ USE MODD_CONF
 USE MODD_CONF_n, ONLY : CSTORAGE_TYPE
 USE MODN_CONFZ
 USE MODD_DYN
-USE MODD_IO_ll,   ONLY : LIOCDF4,LLFIREAD,NVERB_FATAL,NVERB_WARNING,TFILEDATA
+USE MODD_IO_ll,   ONLY : ISP,LIOCDF4,LLFIREAD,NVERB_FATAL,NVERB_WARNING,TFILEDATA
 USE MODD_LUNIT
 USE MODD_LUNIT_n, ONLY : CINIFILE_n=> CINIFILE,CINIFILEPGD_n=> CINIFILEPGD
 USE MODD_PARAM_n, ONLY : CSURF
@@ -401,11 +401,11 @@ TZFD=>GETFD(TRIM(ADJUSTL(TZFILE%CNAME))//'.lfi')
 IF (.NOT.ASSOCIATED(TZFD)) CALL PRINT_MSG(NVERB_FATAL,'IO','INI_SEG_n','file '//TRIM(TZFILE%CNAME)//' not found')
 IF (LIOCDF4 .AND. .NOT.LLFIREAD) THEN
   TZFILE%CFORMAT = 'NETCDF4'
-  TZFILE%NNCID = TZFD%CDF%NCID
+  IF (ISP == TZFD%OWNER) TZFILE%NNCID = TZFD%CDF%NCID
 ELSE
   TZFILE%CFORMAT   = 'LFI'
   TZFILE%NLFINPRAR = 0
-  TZFILE%NLFIFLU = TZFD%FLU
+  IF (ISP == TZFD%OWNER) TZFILE%NLFIFLU = TZFD%FLU
 ENDIF
 TZFILE%CMODE    = 'READ'
 TZFILE%NLFITYPE = 2