diff --git a/src/LIB/SURCOUCHE/src/mode_scatter.f90 b/src/LIB/SURCOUCHE/src/mode_scatter.f90
index cc933744a2052426508949c9405c1be67f898089..dc97e3b51598a8164bc4b2e48e8c85ea3da1b602 100644
--- a/src/LIB/SURCOUCHE/src/mode_scatter.f90
+++ b/src/LIB/SURCOUCHE/src/mode_scatter.f90
@@ -23,7 +23,8 @@ MODULE MODE_SCATTER_ll
 !
 !   J.Escobar 10/02/2012 : Bug , in MPI_RECV replace MPI_STATUSES_IGNORE
 !                          with MPI_STATUS_IGNORE
-!
+!   J.Escobar 21/07/2020 : For reduction of MPI_BUFFER_SIZE , in SCATTERXY_X3 replace MPI_BSEND -> MPI_ISEND
+!  
 
 USE MODD_MPIF
 
@@ -469,6 +470,7 @@ END SUBROUTINE  SCATTERXY_X2
 
 SUBROUTINE SCATTERXY_X3(PSEND,PRECV,KROOT,KCOMM)
 USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_VAR_ll, ONLY : MNH_STATUSES_IGNORE
 
 REAL,DIMENSION(:,:,:),TARGET,INTENT(IN) :: PSEND
 REAL,DIMENSION(:,:,:),       INTENT(INOUT):: PRECV
@@ -478,26 +480,46 @@ INTEGER,                     INTENT(IN) :: KCOMM
 !INCLUDE 'mpif.h'
 
 INTEGER :: IERR
-INTEGER :: JI
+INTEGER :: JI,JKU
 INTEGER :: IXO,IXE,IYO,IYE
 REAL,DIMENSION(:,:,:), POINTER :: TX3DP
 !INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS
+
+INTEGER,ALLOCATABLE,DIMENSION(:)    :: REQ_TAB
+INTEGER                             :: NB_REQ
+TYPE TX_3DP
+   REAL,DIMENSION(:,:,:), POINTER    :: X
+END TYPE TX_3DP
+TYPE(TX_3DP),ALLOCATABLE,DIMENSION(:) :: T_TX3DP
+
+JKU = SIZE(PSEND,3)
   
 IF (ISP == KROOT) THEN
-  DO JI = 1,ISNPROC
-    CALL GET_DOMREAD_ll(JI,IXO,IXE,IYO,IYE)
-    TX3DP=>PSEND(IXO:IXE,IYO:IYE,:)
-    
-    IF (ISP /= JI) THEN 
-      CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM&
-           & ,IERR)
-    ELSE 
-      PRECV(:,:,:) = TX3DP(:,:,:)
-    END IF
-  END DO
+   NB_REQ=0
+   ALLOCATE(REQ_TAB(ISNPROC-1))
+   ALLOCATE(T_TX3DP(ISNPROC-1))   
+   DO JI = 1,ISNPROC
+      CALL GET_DOMREAD_ll(JI,IXO,IXE,IYO,IYE)
+      TX3DP=>PSEND(IXO:IXE,IYO:IYE,:)
+      IF (ISP /= JI) THEN
+         NB_REQ = NB_REQ + 1
+         ALLOCATE(T_TX3DP(NB_REQ)%X(IXO:IXE,IYO:IYE,JKU))
+         T_TX3DP(NB_REQ)%X=TX3DP
+         CALL MPI_ISEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM&
+               & ,REQ_TAB(NB_REQ),IERR)
+         !CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM&
+         !     & ,IERR)        
+      ELSE 
+         PRECV(:,:,:) = TX3DP(:,:,:)
+      END IF
+   END DO
+   IF (NB_REQ .GT.0 ) THEN
+      CALL MPI_WAITALL(NB_REQ,REQ_TAB,MNH_STATUSES_IGNORE,IERR)
+      DO JI=1,NB_REQ ;  DEALLOCATE(T_TX3DP(JI)%X) ; ENDDO
+   END IF
 ELSE
-  CALL MPI_RECV(PRECV,SIZE(PRECV),MPI_FLOAT,KROOT-1,199+KROOT,KCOMM&
-       & ,MPI_STATUS_IGNORE,IERR)
+   CALL MPI_RECV(PRECV,SIZE(PRECV),MPI_FLOAT,KROOT-1,199+KROOT,KCOMM&
+        & ,MPI_STATUS_IGNORE,IERR)
 END IF
 
 END SUBROUTINE  SCATTERXY_X3