diff --git a/src/LIB/SURCOUCHE/src/fmread_ll.f90 b/src/LIB/SURCOUCHE/src/fmread_ll.f90
index 72e606de5591208612e409904fe2cd84b0c1b48e..45426d1fbf2a81c46bff5da02f304f007e74f4bd 100644
--- a/src/LIB/SURCOUCHE/src/fmread_ll.f90
+++ b/src/LIB/SURCOUCHE/src/fmread_ll.f90
@@ -67,6 +67,10 @@ INTERFACE IO_READ_FIELD
 !                       IO_READ_FIELD_BYFIELD_C1, &
 END INTERFACE
 
+INTERFACE IO_READ_FIELD_LB
+   MODULE PROCEDURE IO_READ_FIELD_BYNAME_LB, IO_READ_FIELD_BYFIELD_LB
+END INTERFACE
+
 INTERFACE FMREAD
   MODULE PROCEDURE FMREADX0_ll,FMREADX1_ll,FMREADX2_ll,FMREADX3_ll,&
        & FMREADX4_ll,FMREADX5_ll,FMREADX6_ll,&
@@ -79,7 +83,7 @@ PUBLIC FMREAD_LB,FMREAD,FMREADX0_ll,FMREADX1_ll,FMREADX2_ll,FMREADX3_ll,&
        & FMREADX4_ll,FMREADX5_ll,FMREADX6_ll,&
        & FMREADN0_ll,FMREADN1_ll,FMREADN2_ll,&
        & FMREADL0_ll,FMREADL1_ll,FMREADC0_ll,FMREADT0_ll
-PUBLIC IO_READ_FIELD
+PUBLIC IO_READ_FIELD,IO_READ_FIELD_LB
 
 CONTAINS 
 SUBROUTINE FM_READ_ERR(HFUNC,HFILEM,HFIPRI,HRECFM,HDIR,KRESP)
@@ -1234,9 +1238,6 @@ END SUBROUTINE FMREADX3_ll
 
 SUBROUTINE IO_READ_FIELD_BYNAME_X3(TPFILE,HNAME,PFIELD,KRESP)
 !
-USE MODD_IO_ll,        ONLY : ISNPROC
-!
-!
 TYPE(TFILEDATA),      INTENT(IN)    :: TPFILE
 CHARACTER(LEN=*),     INTENT(IN)    :: HNAME    ! name of the field to write
 REAL,DIMENSION(:,:,:),INTENT(INOUT) :: PFIELD   ! array containing the data field
@@ -3151,4 +3152,230 @@ CALL SECOND_MNH2(T22)
 TIMEZ%T_READLB_ALL=TIMEZ%T_READLB_ALL + T22 - T11
 END SUBROUTINE FMREAD_LB
 
+SUBROUTINE IO_READ_FIELD_BYNAME_LB(TPFILE,HNAME,KL3D,KRIM,PLB,KRESP)
+!
+TYPE(TFILEDATA),               INTENT(IN)    :: TPFILE
+CHARACTER(LEN=*),              INTENT(IN)    :: HNAME   ! name of the field to write
+INTEGER,                       INTENT(IN)    :: KL3D    ! size of the LB array in FM
+INTEGER,                       INTENT(IN)    :: KRIM    ! size of the LB area
+REAL, DIMENSION(:,:,:),TARGET, INTENT(INOUT) :: PLB     ! array containing the LB field
+INTEGER,OPTIONAL,              INTENT(OUT)   :: KRESP   ! return-code
+
+INTEGER :: ID ! Index of the field
+INTEGER :: IRESP ! return_code
+!
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_LB',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+!
+CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
+!
+IF(IRESP==0) CALL IO_READ_FIELD_LB(TPFILE,TFIELDLIST(ID),KL3D,KRIM,PLB,IRESP)
+!
+IF (PRESENT(KRESP)) KRESP = IRESP
+!
+END SUBROUTINE IO_READ_FIELD_BYNAME_LB
+
+SUBROUTINE IO_READ_FIELD_BYFIELD_LB(TPFILE,TPFIELD,KL3D,KRIM,PLB,KRESP)
+!
+USE MODD_FM
+USE MODD_IO_ll,        ONLY : ISP,ISNPROC,GSMONOPROC,LPACK,L2D
+USE MODD_PARAMETERS_ll,ONLY : JPHEXT
+USE MODD_TIMEZ,        ONLY : TIMEZ
+USE MODD_VAR_ll,       ONLY : MNH_STATUSES_IGNORE
+!
+USE MODE_DISTRIB_LB
+USE MODE_FD_ll,        ONLY : GETFD,JPFINL,FD_LL
+USE MODE_MNH_TIMING,   ONLY : SECOND_MNH2
+USE MODE_TOOLS_ll,     ONLY : GET_GLOBALDIMS_ll
+!
+TYPE(TFILEDATA),               INTENT(IN)    :: TPFILE
+TYPE(TFIELDDATA),              INTENT(INOUT) :: TPFIELD
+INTEGER,                       INTENT(IN)    :: KL3D    ! size of the LB array in FM
+INTEGER,                       INTENT(IN)    :: KRIM    ! size of the LB area
+REAL, DIMENSION(:,:,:),TARGET, INTENT(INOUT) :: PLB     ! array containing the LB field
+INTEGER,OPTIONAL,              INTENT(OUT)   :: KRESP   ! return-code
+!
+!*      0.2   Declarations of local variables
+!
+TYPE TX_3DP
+  REAL,DIMENSION(:,:,:), POINTER    :: X
+END TYPE
+!
+CHARACTER(LEN=4)                         :: YLBTYPE  ! 'LBX','LBXU','LBY' or 'LBYV'
+INTEGER                                  :: IERR,IRESP
+INTEGER                                  :: IHEXTOT
+INTEGER                                  :: IIMAX_ll,IJMAX_ll
+INTEGER                                  :: IIB,IIE,IJB,IJE
+INTEGER                                  :: JI
+INTEGER                                  :: NB_REQ,IKU
+INTEGER, DIMENSION(MPI_STATUS_SIZE)      :: STATUS
+INTEGER, ALLOCATABLE,DIMENSION(:,:)      :: STATUSES
+INTEGER,ALLOCATABLE,DIMENSION(:)         :: REQ_TAB
+REAL,DIMENSION(:,:,:),ALLOCATABLE,TARGET :: Z3D
+REAL,DIMENSION(:,:,:), POINTER           :: TX3DP
+REAL(KIND=8),DIMENSION(2)                :: T0,T1,T2,T3
+REAL(KIND=8),DIMENSION(2)                :: T11,T22
+TYPE(FD_ll), POINTER                     :: TZFD
+TYPE(TX_3DP),ALLOCATABLE,DIMENSION(:)    :: T_TX3DP
+!
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_LB','reading '//TRIM(TPFIELD%CMNHNAME))
+!
+YLBTYPE  = TPFIELD%CLBTYPE
+!
+IF (YLBTYPE/='LBX' .AND. YLBTYPE/='LBXU' .AND. YLBTYPE/='LBY' .AND. YLBTYPE/='LBYV') THEN
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_BYFIELD_LB',TRIM(TPFILE%CNAME)//': invalid CLBTYPE (' &
+                 //TRIM(TPFIELD%CLBTYPE)//') for '//TRIM(TPFIELD%CMNHNAME))
+  RETURN
+END IF
+!
+!*      1.1   THE NAME OF LFIFM
+!
+CALL SECOND_MNH2(T11)
+IRESP = 0
+!------------------------------------------------------------------
+IHEXTOT = 2*JPHEXT+1
+TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi')
+IF (ASSOCIATED(TZFD)) THEN
+  IF (GSMONOPROC) THEN ! sequential execution
+    IF (YLBTYPE == 'LBX' .OR. YLBTYPE == 'LBXU') THEN
+      ALLOCATE(Z3D(KL3D,SIZE(PLB,2),SIZE(PLB,3)))
+      Z3D = 0.0
+      IF (LPACK .AND. L2D) THEN
+        TX3DP=>Z3D(:,JPHEXT+1:JPHEXT+1,:)
+      ELSE
+        TX3DP => Z3D(:,:,:)
+      END IF
+    ELSE !(YLBTYPE == 'LBY' .OR. YLBTYPE == 'LBYV')
+      ALLOCATE(Z3D(SIZE(PLB,1),KL3D,SIZE(PLB,3)))
+      Z3D = 0.0
+      TX3DP => Z3D(:,:,:)
+    END IF
+    IF (TPFILE%CFORMAT=='NETCDF4') THEN
+      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,TX3DP,IRESP)
+    ELSE IF (TPFILE%CFORMAT=='LFI') THEN
+      CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,TX3DP,IRESP)
+    ELSE
+      CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_LB',&
+                     TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')')
+    END IF
+    IF (YLBTYPE == 'LBX' .OR. YLBTYPE == 'LBXU') THEN
+      IF (LPACK .AND. L2D) Z3D(:,:,:) = SPREAD(Z3D(:,JPHEXT+1,:),DIM=2,NCOPIES=IHEXTOT)
+      PLB(1:KRIM+JPHEXT,:,:)          = Z3D(1:KRIM+JPHEXT,:,:)
+      PLB(KRIM+JPHEXT+1:2*(KRIM+JPHEXT),:,:) = Z3D(KL3D-KRIM-JPHEXT+1:KL3D,:,:)
+    ELSE !(YLBTYPE == 'LBY' .OR. YLBTYPE == 'LBYV')
+      PLB(:,1:KRIM+JPHEXT,:)                 = Z3D(:,1:KRIM+JPHEXT,:)
+      PLB(:,KRIM+JPHEXT+1:2*(KRIM+JPHEXT),:) = Z3D(:,KL3D-KRIM-JPHEXT+1:KL3D,:)
+    END IF
+  ELSE                 ! multiprocessor execution
+    IF (ISP == TZFD%OWNER)  THEN
+      CALL SECOND_MNH2(T0)
+      CALL GET_GLOBALDIMS_ll(IIMAX_ll,IJMAX_ll)
+      IF (YLBTYPE == 'LBX' .OR. YLBTYPE == 'LBXU') THEN
+        ALLOCATE(Z3D(KL3D,IJMAX_ll+2*JPHEXT,SIZE(PLB,3)))
+        Z3D = 0.0
+        IF (LPACK .AND. L2D) THEN
+          TX3DP=>Z3D(:,JPHEXT+1:JPHEXT+1,:)
+        ELSE
+          TX3DP => Z3D(:,:,:)
+        END IF
+      ELSE !(YLBTYPE == 'LBY' .OR. YLBTYPE == 'LBYV')
+        ALLOCATE(Z3D(IIMAX_ll+2*JPHEXT,KL3D,SIZE(PLB,3)))
+        Z3D = 0.0
+        TX3DP => Z3D(:,:,:)
+      END IF
+      IF (TPFILE%CFORMAT=='NETCDF4') THEN
+        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,TX3DP,IRESP)
+      ELSE IF (TPFILE%CFORMAT=='LFI') THEN
+        CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,TX3DP,IRESP)
+      ELSE
+        CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_LB',&
+                       TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')')
+      END IF
+      IF (YLBTYPE == 'LBX' .OR. YLBTYPE == 'LBXU') THEN
+        IF (LPACK .AND. L2D) Z3D(:,:,:) = SPREAD(Z3D(:,JPHEXT+1,:),DIM=2,NCOPIES=IHEXTOT)
+        ! erase gap in LB field
+        Z3D(KRIM+JPHEXT+1:2*(KRIM+JPHEXT),:,:) = Z3D(KL3D-KRIM-JPHEXT+1:KL3D,:,:)
+      ELSE !(YLBTYPE == 'LBY' .OR. YLBTYPE == 'LBYV')
+        ! erase gap in LB field
+        Z3D(:,KRIM+JPHEXT+1:2*(KRIM+JPHEXT),:) = Z3D(:,KL3D-KRIM-JPHEXT+1:KL3D,:)
+      END IF
+      CALL SECOND_MNH2(T1)
+      TIMEZ%T_READLB_READ=TIMEZ%T_READLB_READ + T1 - T0
+    END IF
+    !
+    CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR)
+    !
+    !Broadcast header only if IRESP==-111
+    !because metadata of field has been modified in IO_READ_FIELD_xxx
+    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TZFD,TPFIELD)
+    !
+    NB_REQ=0
+    ALLOCATE(REQ_TAB(ISNPROC-1))
+    !REQ_TAB=MPI_REQUEST_NULL
+    IF (ISP == TZFD%OWNER)  THEN
+       CALL SECOND_MNH2(T1)
+      !ALLOCATE(REQ_TAB(ISNPROC-1))
+      !REQ_TAB=MPI_REQUEST_NULL
+      ALLOCATE(T_TX3DP(ISNPROC-1))
+      IKU = SIZE(Z3D,3)
+      DO JI = 1,ISNPROC
+        CALL GET_DISTRIB_LB(YLBTYPE,JI,'FM','READ',KRIM,IIB,IIE,IJB,IJE)
+        IF (IIB /= 0) THEN
+          TX3DP=>Z3D(IIB:IIE,IJB:IJE,:)
+          IF (ISP /= JI) THEN
+            NB_REQ = NB_REQ + 1
+            ALLOCATE(T_TX3DP(NB_REQ)%X(IIB:IIE,IJB:IJE,IKU))
+            T_TX3DP(NB_REQ)%X=Z3D(IIB:IIE,IJB:IJE,:)
+            CALL MPI_ISEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MPI_FLOAT,JI-1,99,TZFD%COMM,REQ_TAB(NB_REQ),IERR)
+            !CALL MPI_BSEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MPI_FLOAT,JI-1,99,TZFD%COMM,IERR)
+          ELSE
+            CALL GET_DISTRIB_LB(YLBTYPE,JI,'LOC','READ',KRIM,IIB,IIE,IJB,IJE)
+            PLB(IIB:IIE,IJB:IJE,:) = TX3DP(:,:,:)
+          END IF
+        END IF
+      END DO
+      CALL SECOND_MNH2(T2)
+      TIMEZ%T_READLB_SEND=TIMEZ%T_READLB_SEND + T2 - T1
+      IF (NB_REQ .GT.0 ) THEN
+         !ALLOCATE(STATUSES(MPI_STATUS_SIZE,NB_REQ))
+         !CALL MPI_WAITALL(NB_REQ,REQ_TAB,STATUSES,IERR)
+         CALL MPI_WAITALL(NB_REQ,REQ_TAB,MNH_STATUSES_IGNORE,IERR)
+         !DEALLOCATE(STATUSES)
+         DO JI=1,NB_REQ ;  DEALLOCATE(T_TX3DP(JI)%X) ; ENDDO
+      END IF
+      DEALLOCATE(T_TX3DP)
+      !DEALLOCATE(REQ_TAB)
+      CALL SECOND_MNH2(T3)
+      TIMEZ%T_READLB_WAIT=TIMEZ%T_READLB_WAIT + T3 - T2
+    ELSE
+       CALL SECOND_MNH2(T0)
+      !ALLOCATE(REQ_TAB(1))
+      !REQ_TAB=MPI_REQUEST_NULL
+      CALL GET_DISTRIB_LB(YLBTYPE,ISP,'LOC','READ',KRIM,IIB,IIE,IJB,IJE)
+      IF (IIB /= 0) THEN
+        TX3DP=>PLB(IIB:IIE,IJB:IJE,:)
+        CALL MPI_RECV(TX3DP,SIZE(TX3DP),MPI_FLOAT,TZFD%OWNER-1,99,TZFD%COMM,STATUS,IERR)
+        !NB_REQ = NB_REQ + 1
+        !CALL MPI_IRECV(TX3DP,SIZE(TX3DP),MPI_FLOAT,TZFD%OWNER-1,99,TZFD%COMM,REQ_TAB(NB_REQ),IERR)
+        !IF (NB_REQ .GT.0 ) CALL MPI_WAITALL(NB_REQ,REQ_TAB,MNH_STATUSES_IGNORE,IERR)
+      END IF
+      CALL SECOND_MNH2(T1)
+      TIMEZ%T_READLB_RECV=TIMEZ%T_READLB_RECV + T1 - T0
+    END IF
+    DEALLOCATE(REQ_TAB)
+  END IF !(GSMONOPROC)
+ELSE
+  IRESP = -61
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_BYFIELD_LB','file '//TRIM(TPFILE%CNAME)//' not found')
+END IF
+!----------------------------------------------------------------
+!
+IF (ALLOCATED(Z3D)) DEALLOCATE (Z3D)
+!
+IF (PRESENT(KRESP)) KRESP = IRESP
+!
+CALL SECOND_MNH2(T22)
+TIMEZ%T_READLB_ALL=TIMEZ%T_READLB_ALL + T22 - T11
+!
+END SUBROUTINE IO_READ_FIELD_BYFIELD_LB
+
 END MODULE MODE_FMREAD
diff --git a/src/MNH/ini_lb.f90 b/src/MNH/ini_lb.f90
index 1145fbf802caf50fd7238d5b1e077fa852b9bc98..fe105644bc46b7f0dcaa6269da613cc4e9c5509b 100644
--- a/src/MNH/ini_lb.f90
+++ b/src/MNH/ini_lb.f90
@@ -147,7 +147,7 @@ USE MODD_CH_AEROSOL
 USE MODD_PARAM_LIMA
 USE MODD_PARAM_n
 !
-
+USE MODE_FIELD,           ONLY: TFIELDDATA,TYPELOG,TYPEREAL
 USE MODE_FM
 USE MODE_FMREAD
 USE MODE_IO_ll,           ONLY: CLOSE_ll
@@ -232,10 +232,10 @@ LOGICAL :: GHORELAX_R, GHORELAX_SV ! switch for the horizontal relaxation
                                    ! for moist and scalar variables
 CHARACTER (LEN= LEN(HGETRVM)), DIMENSION (7) :: YGETRXM ! Arrays with  the get indicators 
                                                         !  for the moist variables
-CHARACTER (LEN= 16), DIMENSION (7) :: YRECFMX,YRECFMY ! arrays with the name  of the LB fields
-                                                      ! in FM files for the moist variables
+CHARACTER (LEN=1), DIMENSION (7) :: YC    ! array with the prefix of the moist variables
 INTEGER :: IMASDEV                                                      
 CHARACTER(LEN=2)  :: INDICE ! to index CCN and IFN fields of LIMA scheme
+TYPE(TFIELDDATA)  :: TZFIELD
 !-------------------------------------------------------------------------------
 !
 !
@@ -290,59 +290,35 @@ ELSE
 ENDIF
 !
 IF (KSIZELBXU_ll/= 0) THEN
-  YRECFM = 'LBXUM'
-  YDIRLB='LBXU'
-  CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBXUM,IRIMXU,IL3DXU,IGRID,&
-       & ILENCH,YCOMMENT,IRESP)
-END IF
-
-IF ( KSIZELBY_ll /= 0) THEN
-  YRECFM = 'LBYUM'
-  YDIRLB='LBY'
-  CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBYUM,IRIMY,IL3DY,IGRID,&
-       & ILENCH,YCOMMENT,IRESP)
+  CALL IO_READ_FIELD_LB(TPINIFILE,'LBXUM',IL3DXU,IRIMXU,PLBXUM)
 END IF
 
 IF ( KSIZELBX_ll /= 0) THEN
-  YRECFM = 'LBXVM'
-  YDIRLB='LBX'
-  CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBXVM,IRIMX,IL3DX,IGRID,&
-       & ILENCH,YCOMMENT,IRESP)
+  CALL IO_READ_FIELD_LB(TPINIFILE,'LBXVM',IL3DX,IRIMX,PLBXVM)
 ENDIF
 
-IF ( KSIZELBYV_ll  /= 0) THEN
-  YRECFM = 'LBYVM'
-  YDIRLB='LBYV'
-  CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBYVM,IRIMYV,IL3DYV,IGRID,&
-       & ILENCH,YCOMMENT,IRESP)
+IF ( KSIZELBX_ll /= 0) THEN
+  CALL IO_READ_FIELD_LB(TPINIFILE,'LBXWM',IL3DX,IRIMX,PLBXWM)
 END IF
 
-IF ( KSIZELBX_ll /= 0) THEN
-  YRECFM = 'LBXWM'
-  YDIRLB='LBX'
-  CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBXWM,IRIMX,IL3DX,IGRID,&
-       & ILENCH,YCOMMENT,IRESP)
+IF ( KSIZELBY_ll /= 0) THEN
+  CALL IO_READ_FIELD_LB(TPINIFILE,'LBYUM',IL3DY,IRIMY,PLBYUM)
+END IF
+
+IF ( KSIZELBYV_ll  /= 0) THEN
+  CALL IO_READ_FIELD_LB(TPINIFILE,'LBYVM',IL3DYV,IRIMYV,PLBYVM)
 END IF
 
 IF (KSIZELBY_ll /= 0) THEN
-  YRECFM = 'LBYWM'
-  YDIRLB='LBY'
-  CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBYWM,IRIMY,IL3DY,IGRID,&
-       & ILENCH,YCOMMENT,IRESP)
+  CALL IO_READ_FIELD_LB(TPINIFILE,'LBYWM',IL3DY,IRIMY,PLBYWM)
 END IF
 
 IF (KSIZELBX_ll /= 0) THEN
-  YRECFM = 'LBXTHM'
-  YDIRLB='LBX'
-  CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBXTHM,IRIMX,IL3DX,IGRID,&
-       & ILENCH,YCOMMENT,IRESP)
+  CALL IO_READ_FIELD_LB(TPINIFILE,'LBXTHM',IL3DX,IRIMX,PLBXTHM)
 END IF
 
 IF ( KSIZELBY_ll /= 0) THEN
-  YRECFM = 'LBYTHM'
-  YDIRLB='LBY'
-  CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBYTHM,IRIMY,IL3DY,IGRID,&
-       & ILENCH,YCOMMENT,IRESP)    
+  CALL IO_READ_FIELD_LB(TPINIFILE,'LBYTHM',IL3DY,IRIMY,PLBYTHM)
 END IF
 !
 !*        2.3  LB-TKE
@@ -400,12 +376,21 @@ END SELECT
 !*        2.5 LB-Rx
 !
 IF(KSIZELBXR_ll  > 0 ) THEN
-  YRECFM = 'HORELAX_R'
-  YDIR='--' 
-  CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,GHORELAX_R,IGRID,ILENCH,YCOMMENT,IRESP)
+  TZFIELD%CMNHNAME   = 'HORELAX_R'
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CLONGNAME  = 'MesoNH: HORELAX_R'
+  TZFIELD%CUNITS     = ''
+  TZFIELD%CDIR       = '--'
+  TZFIELD%CCOMMENT   = 'Switch to activate the HOrizontal RELAXation'
+  TZFIELD%CLBTYPE    = 'NONE'
+  TZFIELD%NGRID      = 1
+  TZFIELD%NTYPE      = TYPELOG
+  TZFIELD%NDIMS      = 0
+  !
+  CALL IO_READ_FIELD(TPINIFILE,TZFIELD,GHORELAX_R)
+  !
   YGETRXM(:)=(/HGETRVM,HGETRCM,HGETRRM,HGETRIM,HGETRSM,HGETRGM,HGETRHM/)
-  YRECFMX(:)=(/"LBXRVM","LBXRCM","LBXRRM","LBXRIM","LBXRSM","LBXRGM","LBXRHM"/)
-  YRECFMY(:)=(/"LBYRVM","LBYRCM","LBYRRM","LBYRIM","LBYRSM","LBYRGM","LBYRHM"/)
+  YC(:)=(/"V","C","R","I","S","G","H"/)
   IF (GHORELAX_R) THEN 
     IRIMX=(KSIZELBXR_ll-2*JPHEXT)/2  
     IRIMY= (KSIZELBYR_ll-2*JPHEXT)/2  
@@ -417,21 +402,33 @@ IF(KSIZELBXR_ll  > 0 ) THEN
     IL3DX=2*JPHEXT ! 2
     IL3DY=2*JPHEXT ! 2
   END IF
-  !                               
+  !
+  TZFIELD%CSTDNAME   = ''
+  TZFIELD%CUNITS     = 'kg kg-1'
+  TZFIELD%CDIR       = 'XY'
+  TZFIELD%NGRID      = 1
+  TZFIELD%NTYPE      = TYPEREAL
+  TZFIELD%NDIMS      = 3
+  !
   IRR=0
+  JRR=1
   SELECT CASE(YGETRXM(1))                 
     CASE('READ') 
       IRR=IRR+1 
       IF ( KSIZELBXR_ll  /= 0 ) THEN
-        YDIRLB='LBX'
-        CALL FMREAD_LB(TPINIFILE%CNAME,YRECFMX(1),HLUOUT,YDIRLB,PLBXRM(:,:,:,IRR),IRIMX,IL3DX,&
-             & IGRID,ILENCH,YCOMMENT,IRESP)
+        TZFIELD%CMNHNAME   = 'LBXR'//YC(JRR)//'M'
+        TZFIELD%CLONGNAME  = 'MesoNH: LBXR'//YC(JRR)//'M'
+        TZFIELD%CLBTYPE    = 'LBX'
+        TZFIELD%CCOMMENT   = '2_Y_Z_LBXR'//YC(JRR)//'M'
+        CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXRM(:,:,:,IRR))
       END IF
       !
       IF ( KSIZELBYR_ll /= 0 ) THEN
-        YDIRLB='LBY'
-        CALL FMREAD_LB(TPINIFILE%CNAME,YRECFMY(1),HLUOUT,YDIRLB,PLBYRM(:,:,:,IRR),IRIMY,IL3DY,&
-           & IGRID,ILENCH,YCOMMENT,IRESP)
+        TZFIELD%CMNHNAME   = 'LBYR'//YC(JRR)//'M'
+        TZFIELD%CLONGNAME  = 'MesoNH: LBYR'//YC(JRR)//'M'
+        TZFIELD%CLBTYPE    = 'LBY'
+        TZFIELD%CCOMMENT   = '2_Y_Z_LBYR'//YC(JRR)//'M'
+        CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYRM(:,:,:,IRR))
       END IF
     CASE('INIT')
       IRR=IRR+1 
@@ -448,18 +445,20 @@ IF(KSIZELBXR_ll  > 0 ) THEN
         IF (.NOT. LCPL_AROME .AND. OLSOURCE) THEN
             IF (PRESENT(PLBXRMM)) THEN
               PLBXRM(:,:,:,IRR)=PLBXRMM(:,:,:,IRR)
-              WRITE(ILUOUT,*) 'PLBXRS  will be initialized to 0 FOR ', YRECFMX(JRR)
+              WRITE(ILUOUT,*) 'PLBXRS  will be initialized to 0 for LBXR'//YC(JRR)//'M'
             ELSE
-              WRITE(ILUOUT,*) 'Pb to initialze PLBXRM  For', YRECFMX(JRR)
+              WRITE(ILUOUT,*) 'Pb to initialize PLBXRM for LBXR'//YC(JRR)//'M'
               !callabortstop
               CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP)
               CALL ABORT
               STOP
             ENDIF
         ELSE
-          YDIRLB='LBX'
-          CALL FMREAD_LB(TPINIFILE%CNAME,YRECFMX(JRR),HLUOUT,YDIRLB,PLBXRM(:,:,:,IRR),IRIMX,IL3DX,&
-             & IGRID,ILENCH,YCOMMENT,IRESP)
+          TZFIELD%CMNHNAME   = 'LBXR'//YC(JRR)//'M'
+          TZFIELD%CLONGNAME  = 'MesoNH: LBXR'//YC(JRR)//'M'
+          TZFIELD%CLBTYPE    = 'LBX'
+          TZFIELD%CCOMMENT   = '2_Y_Z_LBXR'//YC(JRR)//'M'
+          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXRM(:,:,:,IRR))
         ENDIF
       END IF
       !
@@ -467,18 +466,20 @@ IF(KSIZELBXR_ll  > 0 ) THEN
         IF (.NOT. LCPL_AROME .AND. OLSOURCE) THEN
             IF (PRESENT(PLBYRMM)) THEN
               PLBYRM(:,:,:,IRR)=PLBYRMM(:,:,:,IRR)
-              WRITE(ILUOUT,*) 'PLBYRS  will be initialized to 0 For ', YRECFMY(JRR)
+              WRITE(ILUOUT,*) 'PLBYRS  will be initialized to 0 for LBYR'//YC(JRR)//'M'
             ELSE
-              WRITE(ILUOUT,*) 'Pb to initialze PLBYRM For ', YRECFMY(JRR)
+              WRITE(ILUOUT,*) 'Pb to initialize PLBYRM for LBYR'//YC(JRR)//'M'
               !callabortstop
               CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP)
               CALL ABORT
               STOP
             ENDIF
          ELSE
-           YDIRLB='LBY'
-           CALL FMREAD_LB(TPINIFILE%CNAME,YRECFMY(JRR),HLUOUT,YDIRLB,PLBYRM(:,:,:,IRR),IRIMY,IL3DY,&
-              & IGRID,ILENCH,YCOMMENT,IRESP)
+           TZFIELD%CMNHNAME   = 'LBYR'//YC(JRR)//'M'
+           TZFIELD%CLONGNAME  = 'MesoNH: LBYR'//YC(JRR)//'M'
+           TZFIELD%CLBTYPE    = 'LBY'
+           TZFIELD%CCOMMENT   = '2_Y_Z_LBYR'//YC(JRR)//'M'
+           CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYRM(:,:,:,IRR))
          ENDIF
        END IF
     CASE('INIT')