diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90
index 8848e9d414206d23bd8ee760e5054c9515f71672..b4b37943f00df398246553713cdaef47df454b95 100644
--- a/src/MNH/modeln.f90
+++ b/src/MNH/modeln.f90
@@ -261,7 +261,8 @@ END MODULE MODI_MODEL_n
 !  P. Wautelet 19/04/2019: removed unused dummy arguments and variables
 !  P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function
 !  P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine
-!!-------------------------------------------------------------------------------
+!  P. Wautelet 23/07/2019: OpenACC: move data creations from resolved_cloud to modeln and optimize updates
+!-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
 !               ------------
@@ -510,6 +511,7 @@ LOGICAL :: KSEDI
 LOGICAL :: KHHONI
 !
 REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZRUS,ZRVS,ZRWS
+!$acc declare create(ZRWS)
 REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZPABST !To give pressure at t 
                                                      ! (and not t+1) to resolved_cloud
 REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZJ
@@ -1487,6 +1489,7 @@ 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 &    copy   (XRWS_PRES)                                             & !XRWS_PRES copy and not copyout (hidden in UPDATE_HALO)
 !$acc &    present(XDXX, XDYY, XDZZ, XDZX, XDZY, XRHODJ)
 !
 !$acc update device(XUT, XVT, XWT, XRHODJ)
@@ -1571,7 +1574,7 @@ IF ((CUVW_ADV_SCHEME(1:3)=='CEN') .AND. (CTEMP_SCHEME == 'LEFR')) THEN
   END IF
 ELSE
 
-!$acc data copyin(XRUS_PRES, XRVS_PRES, XRWS_PRES)
+!$acc data copyin(XRUS_PRES, XRVS_PRES)
   CALL ADVECTION_UVW(CUVW_ADV_SCHEME, CTEMP_SCHEME,                  &
                  NWENO_ORDER, LSPLIT_WENO,                           &
                  CLBCX, CLBCY, XTSTEP,                               &
@@ -1754,12 +1757,22 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN
   XRTHS_CLD  = XRTHS
   XRRS_CLD   = XRRS
   XRSVS_CLD  = XRSVS
+!$acc data present(XRHODJ)                                                                       &
+!$acc &    copyin (NRR, LSEDIC, CSUBG_AUCV, XTSTEP, KWARM,                                       &
+!$acc &            XZZ, XRHODREF, XEXNREF, ZPABST, XTHT, XSIGS, VSIGQSAT, XMFCONV, XTHM, XPABSM, &
+!$acc &            XRCM, ZWT_ACT_NUC, XDTHRAD, XCF_MF, XRC_MF, XRI_MF,                           &
+!$acc &            XSOLORG, XMI)                                                                 &
+!$acc &    copy   (XSUPSAT, XNACT, XNPRO, XSSPRO,                                                &
+!$acc &            XRTHS, XRT, XRRS, XSVT, XRSVS, XCLDFR, XCIT, XINPRR3D, XEVAP3D,               &
+!$acc &            XINPRC, XINPRR, XINPRS, XINPRG, XINPRH, XINDEP)                               &
+!$acc &    copyout(XSRCT, XRAINFR)
   IF (CSURF=='EXTE') THEN
     ALLOCATE (ZSEA(SIZE(XRHODJ,1),SIZE(XRHODJ,2)))
     ALLOCATE (ZTOWN(SIZE(XRHODJ,1),SIZE(XRHODJ,2)))
     ZSEA(:,:) = 0.
     ZTOWN(:,:)= 0.
     CALL MNHGET_SURF_PARAM_n (PSEA=ZSEA(:,:),PTOWN=ZTOWN(:,:))
+!$acc data copyin(ZSEA, ZTOWN )
     CALL RESOLVED_CLOUD ( CCLOUD, CACTCCN, CSCONV, CMF_CLOUD, NRR, NSPLITR,    &
                           NSPLITG, IMI, KTCOUNT,                               &
                           CLBCX,CLBCY,TZBAKFILE, CRAD, CTURBDIM,               &
@@ -1779,6 +1792,7 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN
                           XSOLORG, XMI, &
                           XINDEP, XSUPSAT, XNACT, XNPRO,XSSPRO, XRAINFR,       &
                           ZSEA, ZTOWN                                          )
+!$acc end data
     DEALLOCATE(ZTOWN)
   ELSE
     CALL RESOLVED_CLOUD ( CCLOUD, CACTCCN, CSCONV, CMF_CLOUD, NRR, NSPLITR,    &
@@ -1800,6 +1814,7 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN
                           XSOLORG, XMI, &
                           XINDEP, XSUPSAT, XNACT, XNPRO,XSSPRO, XRAINFR        )
   END IF
+!$acc end data
   XRTHS_CLD  = XRTHS - XRTHS_CLD
   XRRS_CLD   = XRRS  - XRRS_CLD
   XRSVS_CLD  = XRSVS - XRSVS_CLD
diff --git a/src/MNH/resolved_cloud.f90 b/src/MNH/resolved_cloud.f90
index e0e88cf895429fc3f1a8f4bf5abcd947db3658c8..ec7847af70335ce2d5bec5bc212a682b6164be48 100644
--- a/src/MNH/resolved_cloud.f90
+++ b/src/MNH/resolved_cloud.f90
@@ -268,9 +268,10 @@ END MODULE MODI_RESOLVED_CLOUD
 !!                    10/2016 (C.Lac) Add droplet deposition
 !!      S.Riette  : 11/2016 : ice_adjust before and after rain_ice
 !!                            ICE3/ICE4 modified, old version under LRED=F   
-!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!      P. Wautelet: 01/02/2019: ZRSMIN is now allocatable (instead of size of XRTMIN which was sometimes not allocated)
-!!                   02/2019 C.Lac add rain fraction as an output field
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 01/02/2019: ZRSMIN is now allocatable (instead of size of XRTMIN which was sometimes not allocated)
+!  C. Lac         02/2019: add rain fraction as an output field
+!  P. Wautelet 23/07/2019: OpenACC: move data creations from resolved_cloud to modeln and optimize updates
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -298,6 +299,7 @@ USE MODE_MPPDB
 #ifdef _OPENACC
 USE MODE_MSG
 #endif
+use mode_sum_ll,         only: MIN_ll, SUM3D_ll
 !
 #ifdef MNH_BITREP
 USE MODI_BITREP
@@ -438,25 +440,23 @@ REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PRAINFR  ! Rain fraction
 REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PSEA  ! Land Sea mask
 REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PTOWN ! Town fraction
 !
-!PW: TODO: copyin variables only if used (depending on HCLOUD)
-!
 ! IN variables
 !
-!$acc declare copyin(KRR,OSEDIC,HSUBG_AUCV,PTSTEP,OWARM)
-!$acc declare present(PRHODJ) &
-!$acc &       copyin(PZZ,PRHODREF,PEXNREF,PPABST,PTHT,PSIGS,PSIGQSAT,PMFCONV,PTHM,PPABSM,PRCM,PW_ACT,PDTHRAD,&
-!$acc &              PCF_MF,PRC_MF,PRI_MF)
-!In acc data: PSOLORG,PMI,PSEA,PTOWN
+!$acc declare present(KRR, OSEDIC, HSUBG_AUCV, PTSTEP, OWARM,                           &
+!$acc &               PRHODJ, PZZ, PRHODREF, PEXNREF, PPABST, PTHT, PSIGS, PSIGQSAT,    &
+!$acc &               PMFCONV, PTHM, PPABSM, PRCM, PW_ACT, PDTHRAD,                     &
+!$acc &               PCF_MF, PRC_MF, PRI_MF,                                           &
+!$acc &               PSOLORG, PMI, PSEA, PTOWN,                                        &
 !
 ! INOUT variables
 !
-!$acc declare create(PTHS,PRT,PRS,PSVT,PSVS,PCLDFR,PCIT,&
-!$acc &              PINPRC,PINPRR,PINPRR3D,PEVAP3D,PINPRS,PINPRG,PINPRH,PINDEP,&
-!$acc &              PSUPSAT,PNACT,PNPRO,PSSPRO)
+!$acc &              PTHS, PRT, PRS, PSVT, PSVS, PCLDFR, PCIT,                          &
+!$acc &              PINPRC, PINPRR, PINPRR3D, PEVAP3D, PINPRS, PINPRG, PINPRH, PINDEP, &
+!$acc &              PSUPSAT, PNACT, PNPRO, PSSPRO,                                     &
 !
 ! OUT variables
 !
-!$acc declare create(PSRCS, PRAINFR)
+!$acc &              PSRCS, PRAINFR )
 !
 ! Variables from modules
 !$acc declare copyin(CSEDIM)
@@ -478,11 +478,11 @@ INTEGER :: JI,JJ,JK,JL
 !$acc declare create(IKA,IKU,IKL)
 !
 !
-REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZDZZ
-REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZT,ZEXN,ZLV,ZLS,ZCPH
-REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZCOR
+REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZDZZ
+REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZT,ZEXN,ZLV,ZLS,ZCPH
+REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZCOR
                                     ! for the correction of negative rv
-REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZZZ
+REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZZZ
                                     ! model layer height
 REAL  :: ZMASSTOT                   ! total mass  for one water category
                                     ! including the negative values
@@ -501,23 +501,14 @@ LOGICAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: LLMICRO ! mask to limi
 INTEGER                               :: JMOD, JMOD_IFN
 LOGICAL                               :: GWEST,GEAST,GNORTH,GSOUTH
 ! BVIE work array waiting for PINPRI
-REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2)):: ZINPRI
-! REAL,DIMENSION(:,:,:),  ALLOCATABLE :: ZTHSSTEP
-! REAL,DIMENSION(:,:,:,:),ALLOCATABLE :: ZRSSTEP
-REAL,DIMENSION(SIZE(PTHS,1),SIZE(PTHS,2),SIZE(PTHS,3))          :: ZTHSSTEP
-REAL,DIMENSION(SIZE(PRS,1),SIZE(PRS,2),SIZE(PRS,3),SIZE(PRS,4)) :: ZRSSTEP
+REAL, DIMENSION(:,:), ALLOCATABLE :: ZINPRI
+REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZTHSSTEP
+REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZRSSTEP
 !
 !$acc declare create(ZDZZ,ZEXN,ZLV,ZLS,ZCPH,ZZZ,ZSVT,ZSVS) create(ZT) create(ZCOR,ZRSMIN) &
 !$acc &       create(ZTHSSTEP,ZRSSTEP,LLMICRO) &
 !$acc &       copyin(XRTMIN)
 !
-!
-! INOUT variables
-!
-!$acc update device(PTHS,PRT,PRS,PSVT,PSVS,PCLDFR,PCIT,&
-!$acc &             PINPRC,PINPRR,PINPRR3D,PEVAP3D,PINPRS,PINPRG,PINPRH,PINDEP,&
-!$acc &             PSUPSAT,PNACT,PNPRO,PSSPRO)
-!
 !------------------------------------------------------------------------------
 !
 !*       1.     PRELIMINARY COMPUTATIONS
@@ -587,6 +578,18 @@ IF (MPPDB_INITIALIZED) THEN
   CALL MPPDB_CHECK(PSSPRO,"RESOLVED_CLOUD beg:PSSPRO")
 END IF
 !
+allocate ( ZDZZ     ( SIZE(PZZ,1),  SIZE(PZZ,2),  SIZE(PZZ,3)  ) )
+allocate ( ZT       ( SIZE(PZZ,1),  SIZE(PZZ,2),  SIZE(PZZ,3)  ) )
+allocate ( ZEXN     ( SIZE(PZZ,1),  SIZE(PZZ,2),  SIZE(PZZ,3)  ) )
+allocate ( ZLV      ( SIZE(PZZ,1),  SIZE(PZZ,2),  SIZE(PZZ,3)  ) )
+allocate ( ZLS      ( SIZE(PZZ,1),  SIZE(PZZ,2),  SIZE(PZZ,3)  ) )
+allocate ( ZCPH     ( SIZE(PZZ,1),  SIZE(PZZ,2),  SIZE(PZZ,3)  ) )
+allocate ( ZCOR     ( SIZE(PZZ,1),  SIZE(PZZ,2),  SIZE(PZZ,3)  ) )
+allocate ( ZZZ      ( SIZE(PZZ,1),  SIZE(PZZ,2),  SIZE(PZZ,3)  ) )
+allocate ( ZINPRI   ( SIZE(PZZ,1),  SIZE(PZZ,2) ) )
+allocate ( ZTHSSTEP ( SIZE(PTHS,1), SIZE(PTHS,2), SIZE(PTHS,3) ) )
+allocate ( ZRSSTEP  ( SIZE(PRS,1),  SIZE(PRS,2),  SIZE(PRS,3), SIZE(PRS,4) ) )
+
 CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
 !$acc kernels
 IKA=1
@@ -636,7 +639,6 @@ END IF
 !*       2.     TRANSFORMATION INTO PHYSICAL TENDENCIES
 !               ---------------------------------------
 !
-!$acc update device(PTHS,PRT,PRS,PRHODJ)
 !$acc kernels present(PTHS,PRS,PRHODJ,PPABST,ZEXN,ZLV,ZLS,ZCPH,ZSVS)
 PTHS(:,:,:) = PTHS(:,:,:) / PRHODJ(:,:,:)
 DO JRR = 1,KRR
@@ -719,10 +721,6 @@ ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZT(:,:,:)-XTT)
 ZLS(:,:,:)=XLSTT +(XCPV-XCI) *(ZT(:,:,:)-XTT)
 ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1)
 !$acc end kernels
-!$acc update self(PTHS,PRT,PRS,ZEXN,ZLV,ZLS,ZCPH)
-IF (HCLOUD=='C2R2' .OR. HCLOUD=='C3R5' .OR. HCLOUD=='KHKO' .OR. HCLOUD=='LIMA') THEN
-!$acc update self(ZSVS,ZSVT)
-ENDIF
 !
 !
 !*       3.     REMOVE NEGATIVE VALUES
@@ -737,30 +735,44 @@ IF (HCLOUD == 'KESS' .OR. HCLOUD == 'ICE3'                                &
   DO JRR = 3,KRR
     SELECT CASE (JRR)
       CASE(3,5,6,7) ! rain, snow, graupel and hail
-
-        IF ( MIN_ll( PRS(:,:,:,JRR), IINFO_ll) < 0.0 ) THEN
+#ifndef _OPENACC
+        IF ( MIN_ll( PRS(:,:,:,JRR), IINFO_ll ) < 0.0 ) THEN
+#else
+        IF ( MIN_ll( PRS(:,:,:,JRR), IINFO_ll, oondevice=.true. ) < 0.0 ) THEN
+#endif
 !
 ! compute the total water mass computation
 !
+#ifndef _OPENACC
           ZMASSTOT = MAX( 0. , SUM3D_ll( PRS(:,:,:,JRR), IINFO_ll ) )
+#else
+          ZMASSTOT = MAX( 0. , SUM3D_ll( PRS(:,:,:,JRR), IINFO_ll, oondevice=.true. ) )
+#endif
 !
 ! remove the negative values
 !
+!$acc kernels
           PRS(:,:,:,JRR) = MAX( 0., PRS(:,:,:,JRR) )
+!$acc end kernels
 !
 ! compute the new total mass
 !
+#ifndef _OPENACC
           ZMASSPOS = MAX(XMNH_TINY,SUM3D_ll( PRS(:,:,:,JRR), IINFO_ll ) )
+#else
+          ZMASSPOS = MAX(XMNH_TINY,SUM3D_ll( PRS(:,:,:,JRR), IINFO_ll, oondevice=.true. ) )
+#endif
 !
 ! correct again in such a way to conserve the total mass
 !
           ZRATIO = ZMASSTOT / ZMASSPOS
+!$acc kernels
           PRS(:,:,:,JRR) = PRS(:,:,:,JRR) * ZRATIO
+!$acc end kernels
 !
         END IF
     END SELECT
   END DO
-!$acc update device(PRS)
 END IF
 !
 !*       3.2    Adjustement for liquid and solid cloud
@@ -996,33 +1008,67 @@ END SELECT
 !*       3.3  STORE THE BUDGET TERMS
 !            ----------------------
 !
-!OPENACC: PW: TODO: update self of PTHS and PRS for budgets
 IF ((HCLOUD /= 'KHKO') .AND. (HCLOUD /= 'C2R2') ) THEN
- IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)  * PRHODJ(:,:,:), 4,'NEGA_BU_RTH')
- IF (LBUDGET_RV) CALL BUDGET (PRS(:,:,:,1) * PRHODJ(:,:,:), 6,'NEGA_BU_RRV')
- IF (LBUDGET_RC) CALL BUDGET (PRS(:,:,:,2) * PRHODJ(:,:,:), 7,'NEGA_BU_RRC')
+  IF (LBUDGET_TH) THEN
+!$acc update self(PTHS)
+    CALL BUDGET (PTHS(:,:,:)  * PRHODJ(:,:,:), 4,'NEGA_BU_RTH')
+  END IF
+  IF (LBUDGET_RV) THEN
+!$acc update self(PRS(:,:,:,1))
+    CALL BUDGET (PRS(:,:,:,1) * PRHODJ(:,:,:), 6,'NEGA_BU_RRV')
+  END IF
+  IF (LBUDGET_RC) THEN
+!$acc update self(PRS(:,:,:,2))
+    CALL BUDGET (PRS(:,:,:,2) * PRHODJ(:,:,:), 7,'NEGA_BU_RRC')
+  END IF
+END IF
+IF (LBUDGET_RR) THEN
+!$acc update self(PRS(:,:,:,3))
+  CALL BUDGET (PRS(:,:,:,3) * PRHODJ(:,:,:), 8,'NEGA_BU_RRR')
+END IF
+IF (LBUDGET_RI) THEN
+!$acc update self(PRS(:,:,:,4))
+  CALL BUDGET (PRS(:,:,:,4) * PRHODJ(:,:,:) ,9,'NEGA_BU_RRI')
+END IF
+IF (LBUDGET_RS) THEN
+!$acc update self(PRS(:,:,:,5))
+  CALL BUDGET (PRS(:,:,:,5) * PRHODJ(:,:,:),10,'NEGA_BU_RRS')
+END IF
+IF (LBUDGET_RG) THEN
+!$acc update self(PRS(:,:,:,6))
+  CALL BUDGET (PRS(:,:,:,6) * PRHODJ(:,:,:),11,'NEGA_BU_RRG')
+END IF
+IF (LBUDGET_RH) THEN
+!$acc update self(PRS(:,:,:,7))
+  CALL BUDGET (PRS(:,:,:,7) * PRHODJ(:,:,:),12,'NEGA_BU_RRH')
 END IF
-IF (LBUDGET_RR) CALL BUDGET (PRS(:,:,:,3) * PRHODJ(:,:,:), 8,'NEGA_BU_RRR')
-IF (LBUDGET_RI) CALL BUDGET (PRS(:,:,:,4) * PRHODJ(:,:,:) ,9,'NEGA_BU_RRI')
-IF (LBUDGET_RS) CALL BUDGET (PRS(:,:,:,5) * PRHODJ(:,:,:),10,'NEGA_BU_RRS')
-IF (LBUDGET_RG) CALL BUDGET (PRS(:,:,:,6) * PRHODJ(:,:,:),11,'NEGA_BU_RRG')
-IF (LBUDGET_RH) CALL BUDGET (PRS(:,:,:,7) * PRHODJ(:,:,:),12,'NEGA_BU_RRH')
 IF (LBUDGET_SV .AND. (HCLOUD == 'LIMA')) THEN
-   IF (OWARM) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NC) * PRHODJ(:,:,:),12+NSV_LIMA_NC,'NEGA_BU_RSV')
-   IF (OWARM.AND.ORAIN) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NR) * PRHODJ(:,:,:),12+NSV_LIMA_NR,'NEGA_BU_RSV')
-   IF (LCOLD) CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NI) * PRHODJ(:,:,:),12+NSV_LIMA_NI,'NEGA_BU_RSV')
-   IF (NMOD_CCN.GE.1) THEN
-      DO JL=1, NMOD_CCN
-         CALL BUDGET ( ZSVS(:,:,:,NSV_LIMA_CCN_FREE+JL-1)* &
+  IF ( OWARM ) THEN
+!$acc update self(ZSVS(:,:,:,NSV_LIMA_NC))
+    CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NC) * PRHODJ(:,:,:),12+NSV_LIMA_NC,'NEGA_BU_RSV')
+  END IF
+  IF ( OWARM .AND. ORAIN ) THEN
+!$acc update self(ZSVS(:,:,:,NSV_LIMA_NR))
+    CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NR) * PRHODJ(:,:,:),12+NSV_LIMA_NR,'NEGA_BU_RSV')
+  END IF
+  IF ( LCOLD ) THEN
+!$acc update self(ZSVS(:,:,:,NSV_LIMA_NI))
+    CALL BUDGET (ZSVS(:,:,:,NSV_LIMA_NI) * PRHODJ(:,:,:),12+NSV_LIMA_NI,'NEGA_BU_RSV')
+  END IF
+  IF ( NMOD_CCN >= 1 ) THEN
+!$acc update self(ZSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1))
+    DO JL=1, NMOD_CCN
+      CALL BUDGET ( ZSVS(:,:,:,NSV_LIMA_CCN_FREE+JL-1)* &
               PRHODJ(:,:,:),12+NSV_LIMA_CCN_FREE+JL-1,'NEGA_BU_RSV') 
-      END DO
-   END IF
-   IF (NMOD_IFN.GE.1) THEN
-      DO JL=1, NMOD_IFN
-         CALL BUDGET ( ZSVS(:,:,:,NSV_LIMA_IFN_FREE+JL-1)* &
+    END DO
+  END IF
+  IF ( NMOD_IFN >= 1 ) THEN
+!$acc update self(ZSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1))
+    DO JL=1, NMOD_IFN
+      CALL BUDGET ( ZSVS(:,:,:,NSV_LIMA_IFN_FREE+JL-1)* &
               PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'NEGA_BU_RSV') 
-      END DO
-   END IF
+    END DO
+  END IF
 END IF
 !
 
@@ -1099,7 +1145,6 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','C2R2//KHKO not yet implemente
 !*       7.1    Compute the explicit microphysical sources
 !
 !
-!$acc data copyin(PSOLORG,PMI)
     CALL RAIN_C2R2_KHKO ( HCLOUD, OACTIT, OSEDC, ORAIN, KSPLITR, PTSTEP, KMI,     &
                      TPFILE, OCLOSE_OUT, PZZ, PRHODJ, PRHODREF, PEXNREF,          &
                      PPABST, PTHT, PRT(:,:,:,1), PRT(:,:,:,2),  PRT(:,:,:,3),     &
@@ -1110,7 +1155,6 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','C2R2//KHKO not yet implemente
                      PINPRC, PINPRR, PINPRR3D, PEVAP3D ,                          &
                      PSVT(:,:,:,:), PSOLORG, PMI, HACTCCN,                        &
                      PINDEP, PSUPSAT, PNACT                                       )
-!$acc end data
 !
 !
 !*       7.2    Perform the saturation adjustment
@@ -1162,7 +1206,6 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','C2R2//KHKO not yet implemente
     CALL MZF_DEVICE(1,IKU,1,PZZ,ZZZ)
 #endif
     IF(LRED .AND. LADJ_BEFORE) THEN
-!$acc data present(ZRSSTEP,ZTHSSTEP)
       CALL ICE_ADJUST (1,IKU,1, KRR, CFRAC_ICE_ADJUST, 'ADJU',              &
                       OSUBG_COND, OSIGMAS, PTSTEP,PSIGQSAT,                 &
                       PRHODJ, PEXNREF,  PSIGS, PMFCONV, PPABST, ZZZ,        &
@@ -1174,7 +1217,6 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','C2R2//KHKO not yet implemente
                       PRI=ZRSSTEP(:,:,:,4), PRIS=PRS(:,:,:,4),              &
                       PRS=ZRSSTEP(:,:,:,5),                                 &
                       PRG=ZRSSTEP(:,:,:,6)                                  )
-!$acc end data
     ENDIF
     IF (LRED) THEN
 !$acc kernels present(LLMICRO,PRT,XRTMIN,ZRSMIN)
@@ -1191,11 +1233,6 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','C2R2//KHKO not yet implemente
                    PRS(:,:,:,6)>ZRSMIN(6)
 !$acc end kernels
 
-!To remove once RAIN_ICE_RED is on GPU
-!$acc update self(LLMICRO)
-
-!$acc update device(PCIT)
-!$acc data copyin(PSEA,PTOWN)
       CALL RAIN_ICE_RED ( OSEDIC,CSEDIM, HSUBG_AUCV, OWARM,IKA,IKU,IKL,  &
                     PTSTEP, KRR, LLMICRO, ZEXN,            &
                     ZDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT,PCLDFR,&
@@ -1207,12 +1244,7 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','C2R2//KHKO not yet implemente
                     PINPRC,PINPRR, PEVAP3D,                              &
 !                     PINPRS, PINPRG, PSIGS, PINDEP, PRAINFR,, PSEA,PTOWN, PFPR=ZFPR)
                     PINPRS, PINPRG, PSIGS, PINDEP, PRAINFR, PSEA=PSEA,PTOWN=PTOWN)
-!$acc end data
-!$acc update self(PRAINFR)
     ELSE 
-!$acc update device(PCIT,PCLDFR,                                       &
-!$acc &             PINPRC,PINPRR,PINPRR3D,PEVAP3D,PINPRS,PINPRG,PINDEP)
-!$acc data copyin(PSEA,PTOWN) present(PEXNREF)
       CALL RAIN_ICE ( OSEDIC,CSEDIM, HSUBG_AUCV, OWARM,1,IKU,1,          &
                     KSPLITR, PTSTEP, KRR,                                &
                     ZDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT,PCLDFR,&
@@ -1225,15 +1257,12 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','C2R2//KHKO not yet implemente
                     PINPRS, PINPRG, PSIGS, PINDEP, PRAINFR,              &
 !                     PSEA, PTOWN, PFPR=ZFPR                               )
                     PSEA, PTOWN                               )
-!$acc end data
-!$acc update self(PINPRC,PINPRR,PINPRR3D,PEVAP3D,PINPRS,PINPRG,PINDEP,PCIT,PRAINFR)
     END IF
 !
 !*       9.2    Perform the saturation adjustment over cloud ice and cloud water
 !
 !
     IF (.NOT. LRED .OR. (LRED .AND. LADJ_AFTER) ) THEN
-!$acc data present(PRS)
       CALL ICE_ADJUST (1,IKU,1, KRR, CFRAC_ICE_ADJUST, 'DEPI',            &
                     OSUBG_COND, OSIGMAS, PTSTEP,PSIGQSAT,                 &
                     PRHODJ, PEXNREF,  PSIGS, PMFCONV, PPABST, ZZZ,        &
@@ -1245,8 +1274,6 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','C2R2//KHKO not yet implemente
                     PRI=ZRSSTEP(:,:,:,4), PRIS=PRS(:,:,:,4),              &
                     PRS=ZRSSTEP(:,:,:,5),                                 &
                     PRG=ZRSSTEP(:,:,:,6)                                  )
-!$acc end data
-!$acc update self(PCLDFR,PSRCS)
     END IF
     !
 !     DEALLOCATE(ZRSSTEP)
@@ -1269,7 +1296,6 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','ICE4 not yet implemented')
       ZDZZ(:,:,JK)=PZZ(:,:,JK+1)-PZZ(:,:,JK)    
     ENDDO
 !$acc end kernels
-!$acc update self(ZDZZ)
     ZZZ = MZF(1,IKU,1, PZZ )
     IF(LRED .AND. LADJ_BEFORE) THEN
             CALL ICE_ADJUST (1,IKU,1, KRR, CFRAC_ICE_ADJUST, 'ADJU',                 &
@@ -1311,10 +1337,7 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','ICE4 not yet implemented')
                     PINPRS, PINPRG, PSIGS, PINDEP, PRAINFR, PSEA, PTOWN,    &
 !                     PRT(:,:,:,7), PRS(:,:,:,7), PINPRH, PFPR=ZFPR         )
                     PRT(:,:,:,7), PRS(:,:,:,7), PINPRH        )
-!$acc update self(PRAINFR)
     ELSE
-!$acc update device(PCIT,PCLDFR)
-!$acc data copyin(PSEA,PTOWN)
       CALL RAIN_ICE ( OSEDIC,CSEDIM, HSUBG_AUCV, OWARM,1,IKU,1,           &
                     KSPLITR, PTSTEP, KRR,                                 &
                     ZDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,&
@@ -1328,8 +1351,6 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','ICE4 not yet implemented')
                     PSEA, PTOWN,                                          &
 !                     PRT(:,:,:,7),  PRS(:,:,:,7), PINPRH,PFPR=ZFPR )
                     PRT(:,:,:,7),  PRS(:,:,:,7), PINPRH)
-!$acc end data
-!$acc update self(PCIT,PRAINFR)
      END IF
 
 
@@ -1471,7 +1492,6 @@ DO JRR = 1,KRR
   PRS(:,:,:,JRR)  = PRS(:,:,:,JRR) * PRHODJ(:,:,:)
 END DO
 !$acc end kernels
-!$acc update self(PTHS,PRS)
 !
 IF (HCLOUD=='C2R2' .OR. HCLOUD=='C3R5' .OR. HCLOUD=='KHKO' .OR. HCLOUD=='LIMA') THEN
   DO JSV = 1,SIZE(ZSVS,4)
@@ -1484,16 +1504,6 @@ IF (HCLOUD=='C2R2' .OR. HCLOUD=='C3R5' .OR. HCLOUD=='KHKO' .OR. HCLOUD=='LIMA')
   DEALLOCATE(ZSVT)
 ENDIF
 !
-! INOUT variables
-!
-!$acc update self(PTHS,PRT,PRS,PSVT,PSVS,PCLDFR,PCIT,&
-!$acc &           PINPRC,PINPRR,PINPRR3D,PEVAP3D,PINPRS,PINPRG,PINPRH,PINDEP,&
-!$acc &           PSUPSAT,PNACT,PNPRO,PSSPRO)
-!
-! OUT variables
-!
-!$acc update self(PSRCS)
-!
 IF (MPPDB_INITIALIZED) THEN
   !Check all INOUT arrays
   CALL MPPDB_CHECK(PRT(:,:,:,1),"RESOLVED_CLOUD end:PRT(:,:,:,1)")