diff --git a/src/OCE/LBC/lib_mpp.F90 b/src/OCE/LBC/lib_mpp.F90
index eeec13051a35c3131a0ef17f8caa1201a488fc1f..35d87d400327691fd366e0bc5e0932d8e9f73754 100644
--- a/src/OCE/LBC/lib_mpp.F90
+++ b/src/OCE/LBC/lib_mpp.F90
@@ -253,22 +253,13 @@ CONTAINS
          IF( ierr /= MPI_SUCCESS ) CALL ctl_stop( 'STOP', ' lib_mpp: Error in routine mpi_init' )
       ENDIF
 
-      IF( PRESENT(localComm) ) THEN
-         IF( Agrif_Root() ) THEN
-            mpi_comm_oce = localComm
-         ENDIF
-      ELSE
-# if defined key_agrif
-          IF( Agrif_Root() ) THEN
-# endif
-              CALL mpi_comm_dup( mpi_comm_world, mpi_comm_oce, ierr)
-              IF( ierr /= MPI_SUCCESS ) CALL ctl_stop( 'STOP', ' lib_mpp: Error in routine mpi_comm_dup' )
 # if defined key_agrif
-          ELSE
-              mpi_comm_oce = Agrif_MPI_get_grid_comm()
-          ENDIF
+      IF( Agrif_Root() )   CALL Agrif_MPI_Init(localComm)
+      mpi_comm_oce = Agrif_MPI_get_grid_comm()   ! works for parent and children
+# else
+      mpi_comm_oce = mpi_comm_world   ! default
+      IF( PRESENT(localComm) )   mpi_comm_oce = localComm
 # endif
-      ENDIF
 
       CALL mpi_comm_rank( mpi_comm_oce, mpprank, ierr )
       CALL mpi_comm_size( mpi_comm_oce, mppsize, ierr )