diff --git a/src/MNH/rain_ice_fast_rg.f90 b/src/MNH/rain_ice_fast_rg.f90
index f512efac6bca85ae162c72ee01f741ce6d8fe619..7087c38bd619b0c861a7902254a8319143d563b0 100644
--- a/src/MNH/rain_ice_fast_rg.f90
+++ b/src/MNH/rain_ice_fast_rg.f90
@@ -59,7 +59,7 @@ USE MODI_BITREP
 #endif
 #ifdef MNH_BITREP_OMP
 !$mnh_undef(LOOP)
-!$mnh_undef(OPENACC)
+! mnh_undef(OPENACC)
 #endif
 
 IMPLICIT NONE
@@ -199,10 +199,12 @@ CALL MNH_MEM_GET( ZZW1,  SIZE(PRHODREF), 7 )
 !
 !*       6.1    rain contact freezing
 !
-!$acc kernels
+!$acc kernels present_cr(ZZW1,GWORK)
   ZZW1(:,:) = 0.0
   GWORK(:) = PRIT(:)>XRTMIN(4) .AND. PRRT(:)>XRTMIN(3) .AND. PRIS(:)>0.0 .AND. PRRS(:)>0.0
+!$acc end kernels
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
+!$acc parallel present_cr(ZZW1,GWORK)
   !$acc loop independent
   DO CONCURRENT ( JL=1:JLU )
     IF ( GWORK(JL) ) THEN
@@ -218,7 +220,9 @@ CALL MNH_MEM_GET( ZZW1,  SIZE(PRHODREF), 7 )
       PTHS(JL) = PTHS(JL) + ZZW1(JL,4)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*RRCFRIG)
     END IF
  END DO ! CONCURRENT
+!$acc end parallel
 #else
+!$acc parallel present_cr(ZZW1,GWORK)
   !$acc loop independent
   DO CONCURRENT ( JL=1:JLU )
     IF ( GWORK(JL) ) THEN
@@ -234,8 +238,9 @@ CALL MNH_MEM_GET( ZZW1,  SIZE(PRHODREF), 7 )
        PTHS(JL) = PTHS(JL) + ZZW1(JL,4)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*RRCFRIG)
     END IF
  END DO ! CONCURRENT
+!$acc end parallel
 #endif 
-!$acc end kernels
+
 
 IF (MPPDB_INITIALIZED) THEN
    CALL MPPDB_CHECK(PRRS,"RAIN_ICE_FAST_RG 6.1:PRRS")
@@ -269,10 +274,12 @@ END IF
 !
 !*       6.2    compute the Dry growth case
 !
-!$acc kernels
+!$acc kernels present_cr(GWORK)
   ZZW1(:,:) = 0.0
-  GWORK(:) = PRGT(:)>XRTMIN(6) .AND. PRCT(:)>XRTMIN(2) .AND. PRCS(:)>0.0
+!$acc end kernels
+!$acc parallel present_cr(GWORK)
   !$mnh_expand_where(JL=1:JLU)
+  GWORK(:) = PRGT(:)>XRTMIN(6) .AND. PRCT(:)>XRTMIN(2) .AND. PRCS(:)>0.0
   WHERE( GWORK(:) )
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
     ZZW(:) = PLBDAG(:)**(XCXG-XDG-2.0) * PRHODREF(:)**(-XCEXVT)
@@ -282,8 +289,10 @@ END IF
     ZZW1(:,1) = MIN( PRCS(:),XFCDRYG * PRCT(:) * ZZW(:) )             ! RCDRYG
   END WHERE
   !$mnh_end_expand_where()
-  GWORK(:) = PRGT(:)>XRTMIN(6) .AND. PRIT(:)>XRTMIN(4) .AND. PRIS(:)>0.0
+!$acc end parallel
+!$acc parallel present_cr(GWORK)
   !$mnh_expand_where(JL=1:JLU)
+  GWORK(:) = PRGT(:)>XRTMIN(6) .AND. PRIT(:)>XRTMIN(4) .AND. PRIS(:)>0.0
   WHERE( GWORK(:) )
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
     ZZW(:) = PLBDAG(:)**(XCXG-XDG-2.0) * PRHODREF(:)**(-XCEXVT)
@@ -296,14 +305,14 @@ END IF
 #endif
   END WHERE
   !$mnh_end_expand_where()
-!$acc end kernels
+!$acc end parallel
 IF (MPPDB_INITIALIZED) THEN
    CALL MPPDB_CHECK(ZZW1,"RAIN_ICE_FAST_RG 6.2:ZZW1")
 END IF   
 !
 !*       6.2.1  accretion of aggregates on the graupeln
 !
-!$acc kernels
+!$acc kernels present_cr(GWORK)
   GWORK(:) = PRST(:)>XRTMIN(5) .AND. PRGT(:)>XRTMIN(6) .AND. PRSS(:)>0.0
 !$acc end kernels
 #ifndef MNH_OPENACC
@@ -341,8 +350,8 @@ END IF
 !
 !*       6.2.3  select the (PLBDAG,PLBDAS) couplet
 !
-!$acc kernels
-   !$mnh_expand_where(JL=1:IGDRY)
+!$acc parallel present_cr(ZVECLBDAG,ZVECLBDAS)
+ !$mnh_expand_where(JL=1:IGDRY)
     ZVECLBDAG(1:IGDRY) = PLBDAG(I1(1:IGDRY))
     ZVECLBDAS(1:IGDRY) = PLBDAS(I1(1:IGDRY))
 !
@@ -368,6 +377,8 @@ END IF
     IVEC2(1:IGDRY) = INT( ZVEC2(1:IGDRY) )
     ZVEC2(1:IGDRY) = ZVEC2(1:IGDRY) - REAL( IVEC2(1:IGDRY) )
   !$mnh_end_expand_where()
+!$acc end parallel
+!$acc kernels ! present_cr(ZVECLBDAG,ZVECLBDAS)
     !
 !*       6.2.5  perform the bilinear interpolation of the normalized
 !               SDRYG-kernel
@@ -425,7 +436,7 @@ END IF
 !
 !*       6.2.6  accretion of raindrops on the graupeln
 !
-!$acc kernels
+!$acc kernels present_cr(GWORK)
   GWORK(:) = PRRT(:)>XRTMIN(3) .AND. PRGT(:)>XRTMIN(6) .AND. PRSS(:)>0.0
 !$acc end kernels
 #ifndef MNH_OPENACC
@@ -463,7 +474,7 @@ END IF
 !
 !*       6.2.8  select the (PLBDAG,PLBDAR) couplet
 !
-!$acc kernels
+!$acc parallel present_cr(ZVECLBDAG,ZVECLBDAR)
  !$mnh_expand_where(JL=1:IGDRY)    
     ZVECLBDAG(1:IGDRY) = PLBDAG(I1(1:IGDRY))
     ZVECLBDAR(1:IGDRY) = PLBDAR(I1(1:IGDRY))
@@ -490,10 +501,12 @@ END IF
     IVEC2(1:IGDRY) = INT( ZVEC2(1:IGDRY) )
     ZVEC2(1:IGDRY) = ZVEC2(1:IGDRY) - REAL( IVEC2(1:IGDRY) )
   !$mnh_end_expand_where()
+!$acc end parallel 
 !
 !*       6.2.10 perform the bilinear interpolation of the normalized
 !               RDRYG-kernel
 !
+!$acc kernels ! present_cr(ZVECLBDAG,ZVECLBDAR,ZZW1)    
     !$acc loop independent
     DO CONCURRENT (JJ = 1:IGDRY )
       ZVEC3(JJ) =  (  XKER_RDRYG(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
@@ -503,7 +516,6 @@ END IF
                     - XKER_RDRYG(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
                                                          * (ZVEC1(JJ) - 1.0)
     END DO ! CONCURRENT
-!
     !$acc loop independent , private (JL)
     DO CONCURRENT (JJ=1:IGDRY)
       JL = I1(JJ)
@@ -543,15 +555,17 @@ END IF
 #endif
   END IF
 !
-!$acc kernels
+!$acc kernels present_cr(GWORK)
   PRDRYG(:) = ZZW1(:,1) + ZZW1(:,2) + ZZW1(:,3) + ZZW1(:,4)
 !
 !*       6.3    compute the Wet growth case
 !
   PRWETG(:) = 0.0
   GWORK(:) = PRGT(:)>XRTMIN(6)
+!$acc end kernels  
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
-!$acc loop independent
+!$acc parallel present_cr(GWORK)
+  !$acc loop independent
   DO CONCURRENT ( JL=1:JLU )
     IF ( GWORK(JL) ) THEN
        ZZW1(JL,5) = MIN( PRIS(JL),                                    &
@@ -574,7 +588,9 @@ END IF
             ( PRHODREF(JL)*(XLMTT-XCL*(XTT-PZT(JL))) )   )
     END IF
   END DO ! CONCURRENT
+  !$acc end parallel
 #else
+!$acc parallel present_cr(GWORK)
 !$acc loop independent
   DO CONCURRENT ( JL=1:JLU )
     IF ( GWORK(JL) ) THEN
@@ -598,10 +614,12 @@ END IF
             ( PRHODREF(JL)*(XLMTT-XCL*(XTT-PZT(JL))) )   )
     END IF
   END DO ! CONCURRENT
+  !$acc end parallel
 #endif 
 !
 !*       6.4    Select Wet or Dry case
 !
+!$acc kernels present_cr(GWORK)
   IF     ( KRR == 7 ) THEN
 !$acc loop independent 
 DO CONCURRENT (JL=1:JLU)     
@@ -634,7 +652,8 @@ DO CONCURRENT (JL=1:JLU)
    ENDIF
 ENDDO
 ELSE IF( KRR == 6 ) THEN
-    GWORK(:) = PRGT(:)>XRTMIN(6) .AND. PZT(:)<XTT .AND. PRDRYG(:)>=PRWETG(:) .AND. PRWETG(:)>0.0 ! Wet case
+ !$mnh_expand_where(JL=1:JLU)
+   GWORK(:) = PRGT(:)>XRTMIN(6) .AND. PZT(:)<XTT .AND. PRDRYG(:)>=PRWETG(:) .AND. PRWETG(:)>0.0 ! Wet case
     WHERE( GWORK(:) )
     PRCS(:) = PRCS(:) - ZZW1(:,1)
     PRIS(:) = PRIS(:) - ZZW1(:,5)
@@ -645,7 +664,8 @@ ELSE IF( KRR == 6 ) THEN
     PTHS(:) = PTHS(:) + (PRWETG(:)-ZZW1(:,5)-ZZW1(:,6))*(PLSFACT(:)-PLVFACT(:))
                                                  ! f(L_f*(RCWETG+RRWETG))
    END WHERE
-  END IF
+  !$mnh_end_expand_where()
+END IF
 !$acc end kernels
 
 IF (MPPDB_INITIALIZED) THEN
@@ -682,8 +702,10 @@ END IF
   if ( lbudget_rg ) call Budget_store_init( tbudgets(NBUDGET_RG), 'DRYG', Unpack ( prgs(:) * prhodj(:), &
                                            mask = omicro(:,:,:), field = 0. ) )
 
-!$acc kernels
+!$acc kernels present_cr(GWORK)
+!$mnh_expand_where(JL=1:JLU)  
   GWORK(:) = PRGT(:)>XRTMIN(6) .AND. PZT(:)<XTT .AND. PRDRYG(:)<PRWETG(:) .AND. PRDRYG(:)>0.0 ! Dry case
+
   WHERE( GWORK(:) )
     PRCS(:) = PRCS(:) - ZZW1(:,1)
     PRIS(:) = PRIS(:) - ZZW1(:,2)
@@ -693,6 +715,7 @@ END IF
     PTHS(:) = PTHS(:) + (ZZW1(:,1)+ZZW1(:,4))*(PLSFACT(:)-PLVFACT(:)) !
                       ! f(L_f*(RCDRYG+RRDRYG))
   END WHERE
+  !$mnh_end_expand_where()
 !$acc end kernels
 
 IF (MPPDB_INITIALIZED) THEN
@@ -719,9 +742,11 @@ END IF
 !
 !*       6.5    Melting of the graupeln
 !
-!$acc kernels
+!$acc kernels present_cr(GWORK)
   GWORK(:) = PRGT(:)>XRTMIN(6) .AND. PRGS(:)>0.0 .AND. PZT(:)>XTT
+!$acc end kernels
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
+!$acc parallel present_cr(GWORK)
   !$acc loop independent
   DO CONCURRENT ( JL=1:JLU )
     IF ( GWORK(JL) ) THEN
@@ -743,7 +768,9 @@ END IF
       PTHS(JL) = PTHS(JL) - ZZW(JL)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(-RGMLTR))
     END IF
   END DO ! CONCURRENT
+!$acc end parallel
 #else
+!$acc parallel present_cr(GWORK)
   !$acc loop independent
   DO CONCURRENT ( JL=1:JLU )
     IF ( GWORK(JL) ) THEN
@@ -765,8 +792,8 @@ END IF
        PTHS(JL) = PTHS(JL) - ZZW(JL)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(-RGMLTR))
     END IF
   END DO ! CONCURRENT
+!$acc end parallel
 #endif 
-!$acc end kernels
 
 IF (MPPDB_INITIALIZED) THEN
    CALL MPPDB_CHECK(PRRS,"RAIN_ICE_FAST_RG 6.5:PRRS")
diff --git a/src/MNH/rain_ice_fast_rs.f90 b/src/MNH/rain_ice_fast_rs.f90
index 88462be8600be46516244dc0e1d0020729bd1668..24c30713af7d7ba6280938b1fc7fbf69e0052061 100644
--- a/src/MNH/rain_ice_fast_rs.f90
+++ b/src/MNH/rain_ice_fast_rs.f90
@@ -177,7 +177,7 @@ JJU = size(PRHODREF)
 !
 !*       5.1    cloud droplet riming of the aggregates
 !
-!$acc kernels
+!$acc kernels present_cr(GWORK)
 GWORK(:) = PRCT(:)>XRTMIN(2) .AND. PRST(:)>XRTMIN(5) .AND. PRCS(:)>0.0 .AND. PZT(:)<XTT
 !$acc end kernels
 #ifndef MNH_OPENACC
@@ -366,7 +366,7 @@ END IF
 !
 !*       5.2    rain accretion onto the aggregates
 !
-!$acc kernels
+!$acc kernels present_cr(GWORK)
   GWORK(:) = PRRT(:)>XRTMIN(3) .AND. PRST(:)>XRTMIN(5) .AND. PRRS(:)>0.0 .AND. PZT(:)<XTT
 !$acc end kernels
 #ifndef MNH_OPENACC
@@ -586,9 +586,11 @@ END IF
 !
 !*       5.3    Conversion-Melting of the aggregates
 !
-!$acc kernels
+!$acc kernels present_cr(GWORK,zzw)
   zzw(:) = 0.
   GWORK(:) = PRST(:)>XRTMIN(5) .AND. PRSS(:)>0.0 .AND. PZT(:)>XTT
+!$acc end kernels
+!$acc parallel present_cr(GWORK,zzw)  
   !$acc loop independent
   DO CONCURRENT (JJ=1:JJU)
    IF ( GWORK(JJ) ) THEN
@@ -618,7 +620,7 @@ END IF
     PRGS(JJ) = PRGS(JJ) + ZZW(JJ)
   END IF
  END DO ! CONCURRENT
-!$acc end kernels
+!$acc end parallel
 
   if ( lbudget_rs ) call Budget_store_add( tbudgets(NBUDGET_RS), 'CMEL', &
                                            Unpack ( -zzw(:) * prhodj(:), mask = omicro(:,:,:), field = 0. ) )