diff --git a/src/MNH/ini_posprofilern.f90 b/src/MNH/ini_posprofilern.f90
index 966c343cf93cf3cc28790b6ac2926a90754a1434..674dab0d8b87fa1096fce764af6ff069161da646 100644
--- a/src/MNH/ini_posprofilern.f90
+++ b/src/MNH/ini_posprofilern.f90
@@ -62,13 +62,9 @@ USE MODD_ALLPROFILER_n
 USE MODD_CONF,           ONLY: LCARTESIAN
 USE MODD_DYN,            ONLY: XSEGLEN
 USE MODD_DYN_n,          ONLY: DYN_MODEL, XTSTEP
-USE MODD_GRID_n,         ONLY: XXHAT, XXHATM, XYHAT, XYHATM
-USE MODD_PARAMETERS,     ONLY: JPHEXT, JPVEXT
 USE MODD_PROFILER_n,     ONLY: LPROFILER, NUMBPROFILER_LOC, TPROFILERS, TPROFILERS_TIME
 USE MODD_TYPE_STATPROF,  ONLY: TPROFILERDATA
 
-USE MODE_ALLOCBUFFER_ll,  ONLY: ALLOCBUFFER_ll
-USE MODE_GATHER_ll,       ONLY: GATHERALL_FIELD_ll
 USE MODE_MSG
 USE MODE_STATPROF_READER, ONLY: STATPROF_CSV_READ
 USE MODE_STATPROF_TOOLS,  ONLY: PROFILER_ADD, PROFILER_ALLOCATE, STATPROF_INI_INTERP, STATPROF_POSITION
@@ -84,19 +80,11 @@ IMPLICIT NONE
 !
 !       0.2  declaration of local variables
 !
-INTEGER :: IERR
-INTEGER :: IIU
-INTEGER :: IJU
 INTEGER :: INUMBPROF                        ! Total number of profilers (inside physical domain of model)
 INTEGER :: ISTORE                           ! number of storage instants
 INTEGER :: JI
-LOGICAL :: GALLOCX, GALLOCY
 LOGICAL :: GINSIDE                          ! True if profiler is inside physical domain of model
 LOGICAL :: GPRESENT                         ! True if profiler is present on the current process
-REAL    :: ZXHATM_PHYS_MIN, ZYHATM_PHYS_MIN ! Minimum X coordinate of mass points in the physical domain
-REAL    :: ZXHATM_PHYS_MAX, ZYHATM_PHYS_MAX ! Minimum X coordinate of mass points in the physical domain
-REAL, DIMENSION(:), POINTER  :: ZXHAT_GLOB
-REAL, DIMENSION(:), POINTER  :: ZYHAT_GLOB
 TYPE(TPROFILERDATA)          :: TZPROFILER
 !
 !----------------------------------------------------------------------------
@@ -112,24 +100,6 @@ ISTORE = NINT ( ( XSEGLEN - DYN_MODEL(1)%XTSTEP ) / TPROFILERS_TIME%XTSTEP ) + 1
 
 allocate( tprofilers_time%tpdates(istore) )
 !
-! Prepare positioning data
-!
-IF ( CFILE_PROF /= "NO_INPUT_CSV" .OR. NNUMB_PROF > 0 ) THEN
-  IIU = SIZE( XXHAT )
-  IJU = SIZE( XYHAT )
-
-  ! Get global XHAT and YHAT (needed by PROFILER_POSITION)
-  CALL ALLOCBUFFER_ll( ZXHAT_GLOB, XXHAT, 'XX', GALLOCX )
-  CALL ALLOCBUFFER_ll( ZYHAT_GLOB, XYHAT, 'YY', GALLOCY )
-  CALL GATHERALL_FIELD_ll( 'XX', XXHAT, ZXHAT_GLOB, IERR )
-  CALL GATHERALL_FIELD_ll( 'YY', XYHAT, ZYHAT_GLOB, IERR )
-
-  ZXHATM_PHYS_MIN = 0.5 * ( ZXHAT_GLOB(1+JPHEXT) + ZXHAT_GLOB(2+JPHEXT) )
-  ZXHATM_PHYS_MAX = 0.5 * ( ZXHAT_GLOB(UBOUND(ZXHAT_GLOB,1)-JPHEXT) + ZXHAT_GLOB(UBOUND(ZXHAT_GLOB,1)-JPHEXT+1) )
-  ZYHATM_PHYS_MIN = 0.5 * ( ZYHAT_GLOB(1+JPHEXT) + ZYHAT_GLOB(2+JPHEXT) )
-  ZYHATM_PHYS_MAX = 0.5 * ( ZYHAT_GLOB(UBOUND(ZYHAT_GLOB,1)-JPHEXT) + ZYHAT_GLOB(UBOUND(ZYHAT_GLOB,1)-JPHEXT+1) )
-END IF
-!
 ! Profilers initialization
 !
 NUMBPROFILER_LOC = 0
@@ -150,9 +120,7 @@ IF (CFILE_PROF=="NO_INPUT_CSV") THEN
       TZPROFILER%XZ    = XZ_PROF(JI)
       TZPROFILER%CNAME = CNAME_PROF(JI)
 
-      CALL STATPROF_POSITION( TZPROFILER, ZXHAT_GLOB, ZYHAT_GLOB, XXHATM, XYHATM,                 &
-                              ZXHATM_PHYS_MIN, ZXHATM_PHYS_MAX, ZYHATM_PHYS_MIN, ZYHATM_PHYS_MAX, &
-                              GINSIDE, GPRESENT                                                   )
+      CALL STATPROF_POSITION( TZPROFILER, GINSIDE, GPRESENT )
 
       IF ( GINSIDE ) THEN
         INUMBPROF = INUMBPROF + 1
@@ -164,9 +132,7 @@ IF (CFILE_PROF=="NO_INPUT_CSV") THEN
   END IF
 ELSE
   !Treat CSV datafile
-  CALL STATPROF_CSV_READ( TZPROFILER, CFILE_PROF, ZXHAT_GLOB, ZYHAT_GLOB, XXHATM, XYHATM,    &
-                          ZXHATM_PHYS_MIN, ZXHATM_PHYS_MAX,ZYHATM_PHYS_MIN, ZYHATM_PHYS_MAX, &
-                          INUMBPROF                                                          )
+  CALL STATPROF_CSV_READ( TZPROFILER, CFILE_PROF, INUMBPROF )
 END IF
 
 LPROFILER = ( INUMBPROF > 0 )
@@ -174,13 +140,6 @@ LPROFILER = ( INUMBPROF > 0 )
 DO JI = 1, NUMBPROFILER_LOC
   CALL PROFILER_ALLOCATE( TPROFILERS(JI), ISTORE )
 END DO
-!
-! Clean positioning data
-!
-IF ( CFILE_PROF /= "NO_INPUT_CSV" .OR. NNUMB_PROF > 0 ) THEN
-  IF ( GALLOCX ) DEALLOCATE( ZXHAT_GLOB )
-  IF ( GALLOCY ) DEALLOCATE( ZYHAT_GLOB )
-END IF
 !----------------------------------------------------------------------------
 !
 END SUBROUTINE INI_POSPROFILER_n
diff --git a/src/MNH/ini_surfstationn.f90 b/src/MNH/ini_surfstationn.f90
index 94332d77c09dcd643ea5da119bf0e1bf37ff1943..c312cf819c8b45e50ab9d98bc5f955d4ab07c064 100644
--- a/src/MNH/ini_surfstationn.f90
+++ b/src/MNH/ini_surfstationn.f90
@@ -63,13 +63,9 @@ USE MODD_ALLSTATION_n
 USE MODD_CONF,           ONLY: LCARTESIAN
 USE MODD_DYN,            ONLY: XSEGLEN
 USE MODD_DYN_n,          ONLY: DYN_MODEL, XTSTEP
-USE MODD_GRID_n,         ONLY: XXHAT, XXHATM, XYHAT, XYHATM
-USE MODD_PARAMETERS,     ONLY: JPHEXT, JPVEXT
 USE MODD_STATION_n
 USE MODD_TYPE_STATPROF
 !
-USE MODE_ALLOCBUFFER_ll,  ONLY: ALLOCBUFFER_ll
-USE MODE_GATHER_ll,       ONLY: GATHERALL_FIELD_ll
 USE MODE_MSG
 USE MODE_STATPROF_READER, ONLY: STATPROF_CSV_READ
 USE MODE_STATPROF_TOOLS,  ONLY: STATION_ADD, STATION_ALLOCATE, STATPROF_INI_INTERP, STATPROF_POSITION
@@ -85,19 +81,11 @@ IMPLICIT NONE
 !
 !       0.2  declaration of local variables
 !
-INTEGER :: IERR
-INTEGER :: IIU
-INTEGER :: IJU
 INTEGER :: INUMBSTAT                        ! Total number of stations (inside physical domain of model)
 INTEGER :: ISTORE                           ! number of storage instants
 INTEGER :: JI
-LOGICAL :: GALLOCX, GALLOCY
 LOGICAL :: GINSIDE                          ! True if station is inside physical domain of model
 LOGICAL :: GPRESENT                         ! True if station is present on the current process
-REAL    :: ZXHATM_PHYS_MIN, ZYHATM_PHYS_MIN ! Minimum X coordinate of mass points in the physical domain
-REAL    :: ZXHATM_PHYS_MAX, ZYHATM_PHYS_MAX ! Minimum X coordinate of mass points in the physical domain
-REAL, DIMENSION(:), POINTER  :: ZXHAT_GLOB
-REAL, DIMENSION(:), POINTER  :: ZYHAT_GLOB
 TYPE(TSTATIONDATA)           :: TZSTATION
 !
 !----------------------------------------------------------------------------
@@ -113,24 +101,6 @@ ISTORE = NINT ( ( XSEGLEN - DYN_MODEL(1)%XTSTEP ) / TSTATIONS_TIME%XTSTEP ) + 1
 
 allocate( tstations_time%tpdates(istore) )
 !
-! Prepare positioning data
-!
-IF ( CFILE_STAT /= "NO_INPUT_CSV" .OR. NNUMB_STAT > 0 ) THEN
-  IIU = SIZE( XXHAT )
-  IJU = SIZE( XYHAT )
-
-  ! Get global XHAT and YHAT (needed by STATPROF_POSITION)
-  CALL ALLOCBUFFER_ll( ZXHAT_GLOB, XXHAT, 'XX', GALLOCX )
-  CALL ALLOCBUFFER_ll( ZYHAT_GLOB, XYHAT, 'YY', GALLOCY )
-  CALL GATHERALL_FIELD_ll( 'XX', XXHAT, ZXHAT_GLOB, IERR )
-  CALL GATHERALL_FIELD_ll( 'YY', XYHAT, ZYHAT_GLOB, IERR )
-
-  ZXHATM_PHYS_MIN = 0.5 * ( ZXHAT_GLOB(1+JPHEXT) + ZXHAT_GLOB(2+JPHEXT) )
-  ZXHATM_PHYS_MAX = 0.5 * ( ZXHAT_GLOB(UBOUND(ZXHAT_GLOB,1)-JPHEXT) + ZXHAT_GLOB(UBOUND(ZXHAT_GLOB,1)-JPHEXT+1) )
-  ZYHATM_PHYS_MIN = 0.5 * ( ZYHAT_GLOB(1+JPHEXT) + ZYHAT_GLOB(2+JPHEXT) )
-  ZYHATM_PHYS_MAX = 0.5 * ( ZYHAT_GLOB(UBOUND(ZYHAT_GLOB,1)-JPHEXT) + ZYHAT_GLOB(UBOUND(ZYHAT_GLOB,1)-JPHEXT+1) )
-END IF
-!
 ! Stations initialization
 !
 NUMBSTAT_LOC = 0
@@ -151,9 +121,7 @@ IF (CFILE_STAT=="NO_INPUT_CSV") THEN
       TZSTATION%XZ    = XZ_STAT(JI)
       TZSTATION%CNAME = CNAME_STAT(JI)
 
-      CALL STATPROF_POSITION( TZSTATION, ZXHAT_GLOB, ZYHAT_GLOB, XXHATM, XYHATM,                 &
-                             ZXHATM_PHYS_MIN, ZXHATM_PHYS_MAX, ZYHATM_PHYS_MIN, ZYHATM_PHYS_MAX, &
-                             GINSIDE, GPRESENT                                                   )
+      CALL STATPROF_POSITION( TZSTATION, GINSIDE, GPRESENT )
 
       IF ( GINSIDE ) THEN
         INUMBSTAT = INUMBSTAT + 1
@@ -165,9 +133,7 @@ IF (CFILE_STAT=="NO_INPUT_CSV") THEN
   END IF
 ELSE
   !Treat CSV datafile
-  CALL STATPROF_CSV_READ( TZSTATION, CFILE_STAT, ZXHAT_GLOB, ZYHAT_GLOB, XXHATM, XYHATM,     &
-                          ZXHATM_PHYS_MIN, ZXHATM_PHYS_MAX,ZYHATM_PHYS_MIN, ZYHATM_PHYS_MAX, &
-                          INUMBSTAT                                                          )
+  CALL STATPROF_CSV_READ( TZSTATION, CFILE_STAT, INUMBSTAT )
 END IF
 
 LSTATION = ( INUMBSTAT > 0 )
@@ -175,13 +141,6 @@ LSTATION = ( INUMBSTAT > 0 )
 DO JI = 1, NUMBSTAT_LOC
   CALL STATION_ALLOCATE( TSTATIONS(JI), ISTORE )
 END DO
-!
-! Clean positioning data
-!
-IF ( CFILE_STAT /= "NO_INPUT_CSV" .OR. NNUMB_STAT > 0 ) THEN
-  IF ( GALLOCX ) DEALLOCATE( ZXHAT_GLOB )
-  IF ( GALLOCY ) DEALLOCATE( ZYHAT_GLOB )
-END IF
 
 !----------------------------------------------------------------------------
 
diff --git a/src/MNH/statprof_reader.f90 b/src/MNH/statprof_reader.f90
index 92eb1917fd9dda25ed11b923c2fa7b878660e0bb..be9c3d2e269800071670b5c4795e56745290e133 100644
--- a/src/MNH/statprof_reader.f90
+++ b/src/MNH/statprof_reader.f90
@@ -34,11 +34,9 @@ CONTAINS
 !  P. Wautelet    04/2022: restructure stations/profilers for better performance, reduce memory usage and correct some problems/bugs
 !---------------------------------------------------------------
 !
-!#################################################################################################
-SUBROUTINE STATPROF_CSV_READ( TPSTATPROF, HFILE, PXHAT_GLOB, PYHAT_GLOB, PXHATM, PYHATM,         &
-                              PXHATM_PHYS_MIN, PXHATM_PHYS_MAX,PYHATM_PHYS_MIN, PYHATM_PHYS_MAX, &
-                              KNUMBSTATPROF                                                      )
-!#################################################################################################
+!###############################################################
+SUBROUTINE STATPROF_CSV_READ( TPSTATPROF, HFILE, KNUMBSTATPROF )
+!###############################################################
 
 USE MODD_CONF,          ONLY: LCARTESIAN
 USE MODD_TYPE_STATPROF, ONLY: TPROFILERDATA, TSTATIONDATA, TSTATPROFDATA
@@ -48,18 +46,11 @@ USE MODE_STATPROF_TOOLS, ONLY: PROFILER_ADD, STATION_ADD, STATPROF_INI_INTERP, S
 
 CLASS(TSTATPROFDATA), INTENT(IN)  :: TPSTATPROF ! Used only to identify datatype
 CHARACTER(LEN=*),     INTENT(IN)  :: HFILE ! file to read
-REAL, DIMENSION(:),   INTENT(IN)  :: PXHAT_GLOB
-REAL, DIMENSION(:),   INTENT(IN)  :: PYHAT_GLOB
-REAL, DIMENSION(:),   INTENT(IN)  :: PXHATM ! mass point coordinates
-REAL, DIMENSION(:),   INTENT(IN)  :: PYHATM ! mass point coordinates
-REAL,                 INTENT(IN)  :: PXHATM_PHYS_MIN, PYHATM_PHYS_MIN  ! Minimum X coordinate of mass points in the physical domain
-REAL,                 INTENT(IN)  :: PXHATM_PHYS_MAX, PYHATM_PHYS_MAX  ! Minimum X coordinate of mass points in the physical domain
 INTEGER,              INTENT(OUT) :: KNUMBSTATPROF ! Total number of stations/profilers (inside physical domain of model)
 !
 CHARACTER(LEN=NMAXLINELGT) :: YSTRING
 INTEGER             :: ILU      ! logical unit of the file
 INTEGER             :: INBLINE  ! Nb of lines in csv file
-INTEGER             :: JI
 LOGICAL             :: GINSIDE  ! True if station/profiler is inside physical domain of model
 LOGICAL             :: GPRESENT ! True if station/profiler is present on the current process
 TYPE(TSTATIONDATA),  TARGET :: TZSTATION
@@ -100,9 +91,7 @@ DO
   END IF
 
   IF ( .NOT. LCARTESIAN ) CALL STATPROF_INI_INTERP( TZSTATPROF )
-  CALL STATPROF_POSITION( TZSTATPROF, PXHAT_GLOB, PYHAT_GLOB, PXHATM, PYHATM,                 &
-                         PXHATM_PHYS_MIN, PXHATM_PHYS_MAX, PYHATM_PHYS_MIN, PYHATM_PHYS_MAX, &
-                         GINSIDE, GPRESENT                                                   )
+  CALL STATPROF_POSITION( TZSTATPROF, GINSIDE, GPRESENT )
 
   IF ( GINSIDE ) THEN
     KNUMBSTATPROF = KNUMBSTATPROF + 1
diff --git a/src/MNH/statprof_tools.f90 b/src/MNH/statprof_tools.f90
index e48358ed258207f91fc160e345ea3c6887e1f324..4a0ac4239da1e3e4b218781251bcb24ecaeae442 100644
--- a/src/MNH/statprof_tools.f90
+++ b/src/MNH/statprof_tools.f90
@@ -271,16 +271,15 @@ SUBROUTINE STATPROF_INI_INTERP( TPSTATPROF )
 
 END SUBROUTINE STATPROF_INI_INTERP
 
-! ###############################################################################################
-SUBROUTINE STATPROF_POSITION( TPSTATPROF, PXHAT_GLOB, PYHAT_GLOB, PXHATM, PYHATM,               &
-                             PXHATM_PHYS_MIN, PXHATM_PHYS_MAX,PYHATM_PHYS_MIN, PYHATM_PHYS_MAX, &
-                             OINSIDE, OPRESENT                                                  )
-! ###############################################################################################
+! ###########################################################
+SUBROUTINE STATPROF_POSITION( TPSTATPROF, OINSIDE, OPRESENT )
+! ###########################################################
 ! Subroutine to determine the position of a station/profiler on the model grid
 ! and set the useful coefficients for data interpolation
 
   USE MODD_CONF,           ONLY: L1D
-  USE MODD_GRID_n,         ONLY: XXHAT, XYHAT, XZZ
+  USE MODD_GRID_n,         ONLY: NPHYS_XMIN, NPHYS_XMAX, NPHYS_YMIN, NPHYS_YMAX, XHAT_BOUND, XHATM_BOUND, &
+                                 XXHAT, XYHAT, XXHATM, XYHATM, XZZ
   USE MODD_PARAMETERS,     ONLY: JPHEXT, JPVEXT
 
   USE MODE_MSG
@@ -290,14 +289,6 @@ SUBROUTINE STATPROF_POSITION( TPSTATPROF, PXHAT_GLOB, PYHAT_GLOB, PXHATM, PYHATM
   IMPLICIT NONE
 
   CLASS(TSTATPROFDATA), INTENT(INOUT) :: TPSTATPROF
-  REAL, DIMENSION(:),   INTENT(IN)    :: PXHAT_GLOB
-  REAL, DIMENSION(:),   INTENT(IN)    :: PYHAT_GLOB
-  REAL, DIMENSION(:),   INTENT(IN)    :: PXHATM ! mass point coordinates
-  REAL, DIMENSION(:),   INTENT(IN)    :: PYHATM ! mass point coordinates
-  REAL,                 INTENT(IN)    :: PXHATM_PHYS_MIN  ! Minimum X coordinate of mass points in the physical domain
-  REAL,                 INTENT(IN)    :: PYHATM_PHYS_MIN  ! Minimum Y coordinate of mass points in the physical domain
-  REAL,                 INTENT(IN)    :: PXHATM_PHYS_MAX  ! Maximum X coordinate of mass points in the physical domain
-  REAL,                 INTENT(IN)    :: PYHATM_PHYS_MAX  ! Minimum Y coordinate of mass points in the physical domain
   LOGICAL,              INTENT(OUT)   :: OINSIDE  ! True if station/profiler is inside physical domain of model
   LOGICAL,              INTENT(OUT)   :: OPRESENT ! True if station/profiler is present on the current process
 
@@ -314,8 +305,8 @@ SUBROUTINE STATPROF_POSITION( TPSTATPROF, PXHAT_GLOB, PYHAT_GLOB, PXHATM, PYHATM
 
   CALL GET_INDICE_ll( IIB, IJB, IIE, IJE )
 
-  IF (       TPSTATPROF%XX >= PXHAT_GLOB(JPHEXT+1) .AND. TPSTATPROF%XX <= PXHAT_GLOB(UBOUND(PXHAT_GLOB,1)-JPHEXT+1) &
-       .AND. TPSTATPROF%XY >= PYHAT_GLOB(JPHEXT+1) .AND. TPSTATPROF%XY <= PYHAT_GLOB(UBOUND(PYHAT_GLOB,1)-JPHEXT+1) ) THEN
+  IF (       TPSTATPROF%XX >= XHAT_BOUND(NPHYS_XMIN) .AND. TPSTATPROF%XX <= XHAT_BOUND(NPHYS_XMAX) &
+       .AND. TPSTATPROF%XY >= XHAT_BOUND(NPHYS_YMIN) .AND. TPSTATPROF%XY <= XHAT_BOUND(NPHYS_YMAX) ) THEN
     OINSIDE = .TRUE.
   ELSE
     CALL GET_MODEL_NUMBER_ll(IMI)
@@ -325,11 +316,11 @@ SUBROUTINE STATPROF_POSITION( TPSTATPROF, PXHAT_GLOB, PYHAT_GLOB, PXHATM, PYHATM
 
   ! X position
   TPSTATPROF%NI_U = COUNT( XXHAT (:) <= TPSTATPROF%XX )
-  TPSTATPROF%NI_M = COUNT( PXHATM(:) <= TPSTATPROF%XX )
+  TPSTATPROF%NI_M = COUNT( XXHATM(:) <= TPSTATPROF%XX )
 
   ! Y position
   TPSTATPROF%NJ_V = COUNT( XYHAT (:) <= TPSTATPROF%XY )
-  TPSTATPROF%NJ_M = COUNT( PYHATM(:) <= TPSTATPROF%XY )
+  TPSTATPROF%NJ_M = COUNT( XYHATM(:) <= TPSTATPROF%XY )
 
   ! Position of station/profiler according to process
   IF (       TPSTATPROF%NI_U >= IIB .AND. TPSTATPROF%NI_U <= IIE &
@@ -338,8 +329,8 @@ SUBROUTINE STATPROF_POSITION( TPSTATPROF, PXHAT_GLOB, PYHAT_GLOB, PXHATM, PYHATM
 
   ! Check if station/profiler is too near of physical domain border (outside of physical domain for mass points)
   IF ( OINSIDE .AND. .NOT. L1D ) THEN
-    IF (      TPSTATPROF%XX < PXHATM_PHYS_MIN .OR. TPSTATPROF%XX > PXHATM_PHYS_MAX &
-         .OR. TPSTATPROF%XY < PYHATM_PHYS_MIN .OR. TPSTATPROF%XY > PYHATM_PHYS_MAX ) THEN
+    IF (      TPSTATPROF%XX < XHATM_BOUND(NPHYS_XMIN) .OR. TPSTATPROF%XX > XHATM_BOUND(NPHYS_XMAX) &
+         .OR. TPSTATPROF%XY < XHATM_BOUND(NPHYS_YMIN) .OR. TPSTATPROF%XY > XHATM_BOUND(NPHYS_YMAX) ) THEN
       CALL GET_MODEL_NUMBER_ll(IMI)
       WRITE( CMNHMSG(1), "( 'station or profiler ', A, ' is outside of mass-points physical domain of model', I3 )" ) &
              TRIM(TPSTATPROF%CNAME), IMI
@@ -355,9 +346,9 @@ SUBROUTINE STATPROF_POSITION( TPSTATPROF, PXHAT_GLOB, PYHAT_GLOB, PXHATM, PYHATM
   ! Computations only on correct process
   IF ( OPRESENT .AND. .NOT. L1D ) THEN
     ! Interpolation coefficient for X (mass-point)
-    TPSTATPROF%XXMCOEF = ( TPSTATPROF%XX - PXHATM(TPSTATPROF%NI_M) ) / ( PXHATM(TPSTATPROF%NI_M+1) - PXHATM(TPSTATPROF%NI_M) )
+    TPSTATPROF%XXMCOEF = ( TPSTATPROF%XX - XXHATM(TPSTATPROF%NI_M) ) / ( XXHATM(TPSTATPROF%NI_M+1) - XXHATM(TPSTATPROF%NI_M) )
     ! Interpolation coefficient for Y (mass-point)
-    TPSTATPROF%XYMCOEF = ( TPSTATPROF%XY - PYHATM(TPSTATPROF%NJ_M) ) / ( PYHATM(TPSTATPROF%NJ_M+1) - PYHATM(TPSTATPROF%NJ_M) )
+    TPSTATPROF%XYMCOEF = ( TPSTATPROF%XY - XYHATM(TPSTATPROF%NJ_M) ) / ( XYHATM(TPSTATPROF%NJ_M+1) - XYHATM(TPSTATPROF%NJ_M) )
     ! Interpolation coefficient for X (U-point)
     TPSTATPROF%XXUCOEF = ( TPSTATPROF%XX - XXHAT(TPSTATPROF%NI_U) )  / ( XXHAT(TPSTATPROF%NI_U+1)  - XXHAT(TPSTATPROF%NI_U) )
     ! Interpolation coefficient for Y (V-point)
diff --git a/src/MNH/write_lfifm1_for_diag.f90 b/src/MNH/write_lfifm1_for_diag.f90
index d452fecafad20d6692b2651ff661dc2f9ccafe52..a8330810911dddcf15aa8e877304b7394e7bb532 100644
--- a/src/MNH/write_lfifm1_for_diag.f90
+++ b/src/MNH/write_lfifm1_for_diag.f90
@@ -178,7 +178,8 @@ use modd_field,             only: tfieldmetadata, tfieldlist, TYPEINT, TYPEREAL
 USE MODD_FIELD_n,           ONLY: XCIT, XCLDFR, XPABSM, XPABST, XRT, XSIGS, XSRCT, XSVT, XTHT, XTKET, XUT, XVT, XWT, XZWS
 USE MODD_FRC,               ONLY: NFRC, XGXTHFRC, XGYTHFRC, XPGROUNDFRC, XRVFRC, XTENDRVFRC, XTENDTHFRC, XTHFRC, XUFRC, XVFRC, XWFRC
 USE MODD_GRID,              ONLY: XBETA, XLAT0, XLATORI, XLON0, XLONORI, XRPK
-USE MODD_GRID_n,            only: LSLEVE, XLAT, XLEN1, XLEN2, XLON, XZS, XXHAT, XXHATM, XYHAT, XYHATM, XZHAT, XZSMT, XZTOP, XZZ
+USE MODD_GRID_n,            only: LSLEVE, NEXTE_XMIN, NEXTE_YMIN, XHATM_BOUND, &
+                                  XLAT, XLEN1, XLEN2, XLON, XZS, XXHAT, XXHATM, XYHAT, XYHATM, XZHAT, XZSMT, XZTOP, XZZ
 USE MODD_IO,                ONLY: TFILEDATA
 USE MODD_LSFIELD_n,         ONLY: XLSRVM, XLSTHM, XLSUM, XLSVM, XLSWM
 USE MODD_LUNIT,             ONLY: TLUOUT0
@@ -211,7 +212,6 @@ USE MODE_AERO_PSD,          ONLY: PPP2AERO
 USE MODE_BLOWSNOW_PSD,      ONLY: PPP2SNOW
 USE MODE_DUST_PSD,          ONLY: PPP2DUST
 use mode_field,             only: Find_field_id_from_mnhname
-use MODE_GATHER_ll,         only: GATHERALL_FIELD_ll
 USE MODE_GRIDPROJ,          ONLY: SM_LATLON
 USE MODE_IO_FIELD_WRITE,    only: IO_Field_write
 USE MODE_IO_FILE,           only: IO_File_close, IO_File_open
@@ -263,11 +263,6 @@ REAL :: ZRV_OV_RD !  XRV / XRD
 REAL :: ZGAMREF   ! Standard atmosphere lapse rate (K/m)
 REAL :: ZX0D      ! work real scalar  
 REAL :: ZLATOR, ZLONOR ! geographical coordinates of 1st mass point
-REAL :: ZXHATM, ZYHATM ! conformal    coordinates of 1st mass point
-REAL, DIMENSION(:), ALLOCATABLE   :: ZXHAT_ll    !  Position x in the conformal
-                                                 ! plane (array on the complete domain)
-REAL, DIMENSION(:), ALLOCATABLE   :: ZYHAT_ll    !   Position y in the conformal
-                                                 ! plane (array on the complete domain)
 !
 REAL,DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))  :: ZPOVO
 REAL,DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))  :: ZTEMP
@@ -398,13 +393,7 @@ IF (.NOT.LCARTESIAN) THEN
 ! 
 !* diagnostic of 1st mass point
 !
-  ALLOCATE(ZXHAT_ll(NIMAX_ll+ 2 * JPHEXT),ZYHAT_ll(NJMAX_ll+2 * JPHEXT))
-  CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,IRESP) !//
-  CALL GATHERALL_FIELD_ll('YY',XYHAT,ZYHAT_ll,IRESP) !//
-  ZXHATM = 0.5 * (ZXHAT_ll(1)+ZXHAT_ll(2))
-  ZYHATM = 0.5 * (ZYHAT_ll(1)+ZYHAT_ll(2))
-  CALL SM_LATLON(XLATORI,XLONORI,ZXHATM,ZYHATM,ZLATOR,ZLONOR)
-  DEALLOCATE(ZXHAT_ll,ZYHAT_ll)
+  CALL SM_LATLON( XLATORI, XLONORI, XHATM_BOUND(NEXTE_XMIN), XYHATM(NEXTE_XMIN), ZLATOR, ZLONOR )
 !
   CALL IO_Field_write(TPFILE,'LONOR',ZLONOR)
   CALL IO_Field_write(TPFILE,'LATOR',ZLATOR)
diff --git a/src/MNH/write_lfifmn_fordiachron.f90 b/src/MNH/write_lfifmn_fordiachron.f90
index d6c6ba317f2e39677d1aa0befe5efbebf1116e54..83b6d0a9b6b46fe23d4880593916822acbd11a18 100644
--- a/src/MNH/write_lfifmn_fordiachron.f90
+++ b/src/MNH/write_lfifmn_fordiachron.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2022 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -109,7 +109,6 @@ USE MODD_TYPE_DATE
 USE MODD_NESTING
 USE MODD_IO, ONLY: TFILEDATA
 !
-USE MODE_GATHER_ll
 USE MODE_GRIDPROJ
 USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_ll
@@ -127,11 +126,6 @@ INTEGER                           :: IRESP          ! return-code!
 LOGICAL                           :: GPACK
 !
 REAL                              :: ZLATOR, ZLONOR ! geographical coordinates of 1st mass point
-REAL                              :: ZXHATM, ZYHATM ! conformal    coordinates of 1st mass point
-REAL, DIMENSION(:), ALLOCATABLE   :: ZXHAT_ll       !  Position x in the conformal
-                                                    ! plane (array on the complete domain)
-REAL, DIMENSION(:), ALLOCATABLE   :: ZYHAT_ll       !   Position y in the conformal
-                                                    ! plane (array on the complete domain)
 !
 !-------------------------------------------------------------------------------
 !
@@ -163,13 +157,7 @@ IF (.NOT.LCARTESIAN) THEN
   !
   !* diagnostic of 1st mass point
   !
-  ALLOCATE(ZXHAT_ll(NIMAX_ll+ 2 * JPHEXT),ZYHAT_ll(NJMAX_ll+2 * JPHEXT))
-  CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,IRESP) !//
-  CALL GATHERALL_FIELD_ll('YY',XYHAT,ZYHAT_ll,IRESP) !//
-  ZXHATM = 0.5 * (ZXHAT_ll(1)+ZXHAT_ll(2))
-  ZYHATM = 0.5 * (ZYHAT_ll(1)+ZYHAT_ll(2))
-  CALL SM_LATLON(XLATORI,XLONORI,ZXHATM,ZYHATM,ZLATOR,ZLONOR)
-  DEALLOCATE(ZXHAT_ll,ZYHAT_ll)
+  CALL SM_LATLON( XLATORI, XLONORI, XHATM_BOUND(NEXTE_XMIN), XYHATM(NEXTE_XMIN), ZLATOR, ZLONOR )
 !
   CALL IO_Field_write(TPFILE,'LONOR',ZLONOR)
   CALL IO_Field_write(TPFILE,'LATOR',ZLATOR)
diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90
index c1fdfcd2c59835c512bff72284523dff8bb05a92..8818506c3ca31342dc9deca93164fa27166c14bb 100644
--- a/src/MNH/write_lfin.f90
+++ b/src/MNH/write_lfin.f90
@@ -259,7 +259,6 @@ USE MODD_TURB_n
 
 USE MODE_EXTRAPOL
 use mode_field, only: Find_field_id_from_mnhname
-USE MODE_GATHER_ll
 USE MODE_GRIDPROJ
 USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_IO_FILE,        only: IO_File_close
@@ -299,11 +298,6 @@ REAL,DIMENSION(:,:), ALLOCATABLE  :: ZWORK2D     ! Working array
 REAL,DIMENSION(:,:,:), ALLOCATABLE  :: ZWORK3D     ! Working array
 !
 REAL                              :: ZLATOR, ZLONOR ! geographical coordinates of 1st mass point
-REAL                              :: ZXHATM, ZYHATM ! conformal    coordinates of 1st mass point
-REAL, DIMENSION(:), ALLOCATABLE   :: ZXHAT_ll    !  Position x in the conformal
-                                                 ! plane (array on the complete domain)
-REAL, DIMENSION(:), ALLOCATABLE   :: ZYHAT_ll    !   Position y in the conformal
-                                                 ! plane (array on the complete domain)
 INTEGER :: IMI ! Current model index
 !
 INTEGER           :: INFO_ll
@@ -366,13 +360,7 @@ IF (.NOT.LCARTESIAN) THEN
 ! 
 !* diagnostic of 1st mass point
 !
-  ALLOCATE(ZXHAT_ll(NIMAX_ll+ 2 * JPHEXT),ZYHAT_ll(NJMAX_ll+2 * JPHEXT))
-  CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,IRESP) !//
-  CALL GATHERALL_FIELD_ll('YY',XYHAT,ZYHAT_ll,IRESP) !//
-  ZXHATM = 0.5 * (ZXHAT_ll(1)+ZXHAT_ll(2))
-  ZYHATM = 0.5 * (ZYHAT_ll(1)+ZYHAT_ll(2))
-  CALL SM_LATLON(XLATORI,XLONORI,ZXHATM,ZYHATM,ZLATOR,ZLONOR)
-  DEALLOCATE(ZXHAT_ll,ZYHAT_ll)
+  CALL SM_LATLON( XLATORI, XLONORI, XHATM_BOUND(NEXTE_XMIN), XYHATM(NEXTE_XMIN), ZLATOR, ZLONOR )
 !
   CALL IO_Field_write(TPFILE,'LONOR',ZLONOR)
   CALL IO_Field_write(TPFILE,'LATOR',ZLATOR)