diff --git a/src/MNH/advection_metsv.f90 b/src/MNH/advection_metsv.f90
index 4cc80a34cd2d6c40143573aa9be371a170c7194f..b846cefbaf48e614406154b4dc6a8720d08d7972 100644
--- a/src/MNH/advection_metsv.f90
+++ b/src/MNH/advection_metsv.f90
@@ -630,7 +630,6 @@ ZTSTEP_PPM = PTSTEP / REAL(KSPLIT)
 !
 !*      2.4 normalized contravariant components for splitted PPM time-step
 !
-!$acc update device(PRHODJ,PRTHS,PRTKES,PRRS,PRSVS)
 !$acc kernels
 ZRUCPPM = ZRUCPPM*ZTSTEP_PPM
 ZRVCPPM = ZRVCPPM*ZTSTEP_PPM
@@ -735,7 +734,6 @@ IF(LBLOWSNOW) THEN
 ENDIF
 !
 !* time splitting loop
-!$acc update device(PTHVREF) if(LNEUTRAL)
 DO JSPL=1,KSPLIT
 !
    !ZRTHS_PPM(:,:,:)   = 0.
@@ -788,7 +786,9 @@ DO JSPL=1,KSPLIT
    END DO
    END IF
 !$acc end kernels
-!$acc update self(PRTHS,PRRS,PRSVS)
+
+!PW: bug PGI 18.10: not necessary for PRRS,PRSVS but error with decriptor not present
+!$acc update self(PRRS,PRSVS)
 !
 ! Top and bottom Boundaries and LBC for the guesses
 !
@@ -864,7 +864,6 @@ IF (GTKE) THEN
    PRTKES(:,:,:)  = PRTKES(:,:,:) + PRTKES_ADV(:,:,:)
    PRTKES(:,:,:) = MAX (PRTKES(:,:,:) , XTKEMIN * PRHODJ(:,:,:) / PTSTEP )
 !$acc end kernels
-!$acc update host(PRTKES,PRTKES_ADV)
 END IF
 !
 !
@@ -891,18 +890,48 @@ END IF
 !*       5.     BUDGETS                                                 
 !	        -------
 !
-IF (LBUDGET_TH)  CALL BUDGET (PRTHS,4,'ADV_BU_RTH')
-IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'ADV_BU_RTKE')
-IF (KRR>=1.AND.LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6,'ADV_BU_RRV') 
-IF (KRR>=2.AND.LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7,'ADV_BU_RRC') 
-IF (KRR>=3.AND.LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),8,'ADV_BU_RRR') 
-IF (KRR>=4.AND.LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9,'ADV_BU_RRI') 
-IF (KRR>=5.AND.LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),10,'ADV_BU_RRS') 
-IF (KRR>=6.AND.LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),11,'ADV_BU_RRG') 
-IF (KRR>=7.AND.LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),12,'ADV_BU_RRH')
-DO JSV=1,KSV
-  IF (LBUDGET_SV) CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'ADV_BU_RSV')
-END DO
+IF (LBUDGET_TH)  THEN
+!$acc update self(PRTHS)
+  CALL BUDGET (PRTHS,4,'ADV_BU_RTH')
+END IF
+IF (LBUDGET_TKE) THEN
+!$acc update self(PRTKES)
+  CALL BUDGET (PRTKES,5,'ADV_BU_RTKE')
+END IF
+IF (KRR>=1.AND.LBUDGET_RV) THEN
+!$acc update self(PRRS(:,:,:,1))
+  CALL BUDGET (PRRS(:,:,:,1),6,'ADV_BU_RRV')
+END IF
+IF (KRR>=2.AND.LBUDGET_RC) THEN
+!$acc update self(PRRS(:,:,:,2))
+  CALL BUDGET (PRRS(:,:,:,2),7,'ADV_BU_RRC')
+END IF
+IF (KRR>=3.AND.LBUDGET_RR) THEN
+!$acc update self(PRRS(:,:,:,3))
+  CALL BUDGET (PRRS(:,:,:,3),8,'ADV_BU_RRR')
+END IF
+IF (KRR>=4.AND.LBUDGET_RI) THEN
+!$acc update self(PRRS(:,:,:,4))
+  CALL BUDGET (PRRS(:,:,:,4),9,'ADV_BU_RRI')
+END IF
+IF (KRR>=5.AND.LBUDGET_RS) THEN
+!$acc update self(PRRS(:,:,:,5))
+  CALL BUDGET (PRRS(:,:,:,5),10,'ADV_BU_RRS')
+END IF
+IF (KRR>=6.AND.LBUDGET_RG) THEN
+!$acc update self(PRRS(:,:,:,6))
+  CALL BUDGET (PRRS(:,:,:,6),11,'ADV_BU_RRG')
+END IF
+IF (KRR>=7.AND.LBUDGET_RH) THEN
+!$acc update self(PRRS(:,:,:,7))
+  CALL BUDGET (PRRS(:,:,:,7),12,'ADV_BU_RRH')
+END IF
+IF (LBUDGET_SV) THEN
+!$acc update self(PRSVS)
+  DO JSV=1,KSV
+    CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'ADV_BU_RSV')
+  END DO
+END IF
 !
 IF ((HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2')) THEN
 #ifdef _OPENACC
diff --git a/src/MNH/advection_uvw.f90 b/src/MNH/advection_uvw.f90
index aeb69ecb23039ce00fd566d5f4c7e34d764f9db6..9bc529b5f638daab2f2e5a0e2bd0544c2a10c57a 100644
--- a/src/MNH/advection_uvw.f90
+++ b/src/MNH/advection_uvw.f90
@@ -367,7 +367,6 @@ NULLIFY(TZFIELDS_ll)
 !*       2.     COMPUTES THE TENDENCIES SINCE THE BEGINNING OF THE TIME STEP
 !	        ------------------------------------------------------------
 !
-!$acc update device(PRUS,PRVS,PRWS)
 !$acc kernels
 ZRUS_OTHER(:,:,:) = PRUS(:,:,:) - ZRUT(:,:,:) / PTSTEP + PRUS_PRES(:,:,:)
 ZRVS_OTHER(:,:,:) = PRVS(:,:,:) - ZRVT(:,:,:) / PTSTEP + PRVS_PRES(:,:,:)
@@ -463,7 +462,6 @@ DO JSPL=1,ISPLIT
               (ZRWS_OTHER(:,:,:) + ZRWS_ADV(:,:,:))
  END IF
 !$acc end kernels
-!$acc update self(PRUS,PRVS,PRWS)
 !
 ! Top and bottom Boundaries 
 !
@@ -490,9 +488,18 @@ END DO
 !*       4.     BUDGETS              
 !	        -------
 !
-IF (LBUDGET_U)  CALL BUDGET (PRUS,1,'ADV_BU_RU')
-IF (LBUDGET_V)  CALL BUDGET (PRVS,2,'ADV_BU_RV')
-IF (LBUDGET_W)  CALL BUDGET (PRWS,3,'ADV_BU_RW')
+IF (LBUDGET_U) THEN
+!$acc update self(PRUS)
+  CALL BUDGET (PRUS,1,'ADV_BU_RU')
+END IF
+IF (LBUDGET_V) THEN
+!$acc update self(PRVS)
+  CALL BUDGET (PRVS,2,'ADV_BU_RV')
+END IF
+IF (LBUDGET_W)  THEN
+!$acc update self(PRWS)
+  CALL BUDGET (PRWS,3,'ADV_BU_RW')
+END IF
 !-------------------------------------------------------------------------------
 !
 #ifdef _OPENACC
diff --git a/src/MNH/advection_uvw_cen.f90 b/src/MNH/advection_uvw_cen.f90
index c444cdcfd2a6134db35815c1e386ac2e877094b3..888ef5cc75cf4b356429b1056e5bc39b92e5baf8 100644
--- a/src/MNH/advection_uvw_cen.f90
+++ b/src/MNH/advection_uvw_cen.f90
@@ -134,6 +134,7 @@ REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PUM, PVM, PWM
 !$acc declare present(PUM,PVM,PWM)
                                                   ! Variables at t-dt
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PDUM, PDVM, PDWM
+!$acc declare present(PDUM, PDVM, PDWM)
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PUT , PVT  , PWT, PRHODJ
 !$acc declare present(PUT,PVT,PWT,PRHODJ)
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDXX,PDYY,PDZZ,PDZX,PDZY
@@ -141,6 +142,7 @@ REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDXX,PDYY,PDZZ,PDZX,PDZY
                                                   !  metric coefficients
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRUS , PRVS  , PRWS
                                                   ! Sources terms 
+!$acc declare present(PRUS, PRVS, PRWS)
 !
 ! halo lists for 4th order advection
 TYPE(HALO2LIST_ll), POINTER :: TPHALO2MLIST ! momentum variables
@@ -300,9 +302,7 @@ ELSEIF (HUVW_ADV_SCHEME=='CEN4TH') THEN
 !
 END IF
 !
-!$acc kernels present(ZRUS,ZRVS,ZRWS) present(ZUS,ZVS,ZWS) present(PUM,PVM,PWM) &
-!$acc & present(ZMXM_RHODJ,ZMYM_RHODJ,ZMZM_RHODJ) pcopy(PDUM,PDVM,PDWM,PRUS,PRVS,PRWS)
-!default added in OpenACC 2.5 !!$acc & default(none)
+!$acc kernels
 ZUS(:,:,:) = ZRUS(:,:,:)/ZMXM_RHODJ(:,:,:)*2.*PTSTEP
 ZVS(:,:,:) = ZRVS(:,:,:)/ZMYM_RHODJ(:,:,:)*2.*PTSTEP
 ZWS(:,:,:) = ZRWS(:,:,:)/ZMZM_RHODJ(:,:,:)*2.*PTSTEP
diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90
index ffc6a80e7463ebdcebe9f0647525743a6fed8988..2ad2d2e71f9be81df0d1561fe30f6b0e4b99eb1a 100644
--- a/src/MNH/modeln.f90
+++ b/src/MNH/modeln.f90
@@ -1484,19 +1484,14 @@ ZTIME1 = ZTIME2
 XTIME_BU_PROCESS = 0.
 XTIME_LES_BU_PROCESS = 0.
 !
+!$acc data create (XUT, XVT, XWT)                                         &
+!$acc &    copyin (XTHT, XPABST, XRT, XSVT, XRTHS_CLD, XRRS_CLD, XTHVREF) &
+!$acc &    copy   (XRTHS, XRRS, XRUS, XRVS, XRWS)                         &
+!$acc &    present(XDXX, XDYY, XDZZ, XDZX, XDZY, XRHODJ)
+!
+!$acc update device(XUT, XVT, XWT, XRHODJ)
 !
 !
-!$acc data    copyin (XUT, XVT, XWT)                  &
-!$acc &       copyin (XTHT, XTKET)                    &
-!$acc &       present(XRHODJ)                         &
-!$acc &       copyin (XPABST)                         &
-!$acc &       copyin (XRT, XSVT)                      &
-!$acc &       create (XTHVREF)                        &
-!$acc &       present(XDXX, XDYY, XDZZ, XDZX, XDZY)   &
-!$acc &       create (XRTHS, XRTKES)                  &
-!$acc &       create (XRRS, XRSVS)                    &
-!$acc &       copyin (XRTHS_CLD, XRRS_CLD, XRSVS_CLD) &
-!$acc &       create (XRTKEMS)
 CALL ADVECTION_METSV ( TZBAKFILE, GCLOSE_OUT,CUVW_ADV_SCHEME,          &
                  CMET_ADV_SCHEME, CSV_ADV_SCHEME, CCLOUD, NSPLIT,      &
                  LSPLIT_CFL, XSPLIT_CFL, LCFL_WRIT,                    &
@@ -1516,21 +1511,23 @@ ZTIME1 = ZTIME2
 XTIME_BU_PROCESS = 0.
 XTIME_LES_BU_PROCESS = 0.
 !
-ZRWS = XRWS
+!$acc kernels
+ZRWS(:,:,:) = XRWS(:,:,:)
+!$acc end kernels
 !
-!$acc data copyin (XTHT, XRT, XTHVREF, XRTHS, XRRS, XRTHS_CLD, XRRS_CLD) &
-!$acc &    present(XRHODJ)                                               &
-!$acc &    copy   (XRWS)
 CALL GRAVITY_IMPL ( CLBCX, CLBCY, NRR, NRRL, NRRI,XTSTEP,            &
                  XTHT, XRT, XTHVREF, XRHODJ, XRWS, XRTHS, XRRS,      &
                  XRTHS_CLD, XRRS_CLD                                 )
-!$acc end data
 !
 ! At the initial instant the difference with the ref state creates a 
 ! vertical velocity production that must not be advected as it is 
 ! compensated by the pressure gradient
 !
-IF (KTCOUNT == 1 .AND. CCONF=='START') XRWS_PRES = - (XRWS - ZRWS) 
+IF (KTCOUNT == 1 .AND. CCONF=='START') THEN
+!$acc kernels
+  XRWS_PRES(:,:,:) = ZRWS(:,:,:) - XRWS(:,:,:)
+!$acc end kernels
+END IF
 !
 CALL SECOND_MNH2(ZTIME2)
 !
@@ -1550,12 +1547,10 @@ IF ((CUVW_ADV_SCHEME(1:3)=='CEN') .AND. (CTEMP_SCHEME == 'LEFR')) THEN
       CALL INIT_HALO2_ll(TZHALO2C_ll,3,IIU,IJU,IKU)
       CALL UPDATE_HALO_ll(TZFIELDC_ll,IINFO_ll)
       CALL UPDATE_HALO2_ll(TZFIELDC_ll, TZHALO2C_ll, IINFO_ll)
+!$acc update device(XUT, XVT, XWT)
   END IF
-!$acc data                                  &
-!$acc & copyin (XUM, XVM, XWM)              &
-!$acc & copyin (XUT, XVT, XWT)              &
-!$acc & present(XRHODJ)                     &
-!$acc & present(XDXX, XDYY, XDZZ, XDZX, XDZY)
+!$acc data copyin(XUM, XVM, XWM)    &
+!$acc &    copy  (XDUM, XDVM, XDWM)
  CALL ADVECTION_UVW_CEN(CUVW_ADV_SCHEME,                           &
                            CLBCX, CLBCY,                           &
                            XTSTEP, KTCOUNT,                        &
@@ -1573,12 +1568,7 @@ IF ((CUVW_ADV_SCHEME(1:3)=='CEN') .AND. (CTEMP_SCHEME == 'LEFR')) THEN
   END IF
 ELSE
 
-!$acc data                                      &
-!$acc & copyin(XUT,XVT,XWT)              &
-!$acc &    present(XRHODJ) &
-!$acc & present(XDXX,XDYY,XDZZ,XDZX,XDZY)       &
-!$acc & create(XRUS,XRVS,XRWS)                  &
-!$acc & copyin(XRUS_PRES, XRVS_PRES, XRWS_PRES)
+!$acc data copyin(XRUS_PRES, XRVS_PRES, XRWS_PRES)
   CALL ADVECTION_UVW(CUVW_ADV_SCHEME, CTEMP_SCHEME,                  &
                  NWENO_ORDER, LSPLIT_WENO,                           &
                  CLBCX, CLBCY, XTSTEP,                               &
@@ -1589,6 +1579,7 @@ ELSE
 !$acc end data
 END IF
 !
+!$acc end data
 !
 CALL SECOND_MNH2(ZTIME2)
 !