diff --git a/MNH/advec_ppm_algo.f90 b/MNH/advec_ppm_algo.f90
index e64f8349e76c7135dcada2b9a229c3b94ad558a0..59d6e1a366ef91ea54c3055ab6e6f86d72b95d3f 100644
--- a/MNH/advec_ppm_algo.f90
+++ b/MNH/advec_ppm_algo.f90
@@ -134,19 +134,19 @@ CASE('PPM_00')
 !*       1.     ADVECTION IN X DIRECTION
 !               ------------------------
 !
-      PSRC = PPM_S0_X(HLBCX, KGRID, PSRC, PCRU, PRHODJ, PTSTEP)
+      CALL PPM_S0_X(HLBCX, KGRID, PSRC, PCRU, PRHODJ, PTSTEP, PSRC )
       PSRC = PSRC / PRHOX1
 !
 !*       2.     ADVECTION IN Y DIRECTION
 !               ------------------------
 !
-      PSRC = PPM_S0_Y(HLBCY, KGRID, PSRC, PCRV, PRHOX1, PTSTEP)
+      CALL PPM_S0_Y(HLBCY, KGRID, PSRC, PCRV, PRHOX1, PTSTEP, PSRC)
       PSRC = PSRC / PRHOY1
 !
 !*       3.     ADVECTION IN Z DIRECTION
 !               ------------------------
 !
-      PSRC = PPM_S0_Z(KGRID, PSRC, PCRW, PRHOY1, PTSTEP)
+      CALL PPM_S0_Z(KGRID, PSRC, PCRW, PRHOY1, PTSTEP, PSRC)
       PSRC = PSRC / PRHOZ1
 !
    ELSE
@@ -155,19 +155,19 @@ CASE('PPM_00')
 !*       1.     ADVECTION IN Z DIRECTION
 !               ------------------------
 !
-      PSRC = PPM_S0_Z(KGRID, PSRC, PCRW, PRHODJ, PTSTEP)
+      CALL PPM_S0_Z(KGRID, PSRC, PCRW, PRHODJ, PTSTEP, PSRC)
       PSRC = PSRC / PRHOZ2
 !
 !*       2.     ADVECTION IN Y DIRECTION
 !               ------------------------
 !
-      PSRC = PPM_S0_Y(HLBCY, KGRID, PSRC, PCRV, PRHOZ2, PTSTEP)
+      CALL PPM_S0_Y(HLBCY, KGRID, PSRC, PCRV, PRHOZ2, PTSTEP, PSRC)
       PSRC = PSRC / PRHOY2
 !
 !*       3.     ADVECTION IN X DIRECTION
 !               ------------------------
 !
-      PSRC = PPM_S0_X(HLBCX, KGRID, PSRC, PCRU, PRHOY2, PTSTEP)
+      CALL PPM_S0_X(HLBCX, KGRID, PSRC, PCRU, PRHOY2, PTSTEP, PSRC)
       PSRC = PSRC / PRHOX2
 !
    END IF
diff --git a/MNH/mode_mnh_zwork.f90 b/MNH/mode_mnh_zwork.f90
index dbfa083c984661a42c41de6008d1dd43539c5fc1..3c16414a6313e9bced3d62f07e02256e85ec0af8 100644
--- a/MNH/mode_mnh_zwork.f90
+++ b/MNH/mode_mnh_zwork.f90
@@ -1,7 +1,8 @@
 MODULE MODE_MNH_ZWORK
 
-INTEGER, SAVE :: IIB,IJB    ! Begining useful area in x,y,z directions
-INTEGER, SAVE :: IIE,IJE    ! End useful area in x,y,z directions
+INTEGER, SAVE :: IIB,IJB,IKB  ! Begining useful area in x,y,z directions
+INTEGER, SAVE :: IIE,IJE,IKE  ! End useful area in x,y,z directions
+
 !
 INTEGER,SAVE                    :: IJS,IJN, IIW,IIA
 !
@@ -46,6 +47,8 @@ SUBROUTINE MNH_ALLOC_ZWORK(IMODEL)
      IJN=IJE
      IIW=IIB
      IIA=IIE
+     IKB = 1     + JPVEXT
+     IKE = NKMAX + JPVEXT
 
      CALL GET_DIM_EXT_ll('B',IIU,IJU)     
      IKU=NKMAX + 2* JPVEXT
diff --git a/MNH/ppm.f90 b/MNH/ppm.f90
index 6a722c428b5e5d899a961b86b11cda0e0f30f1ee..a2fd85ae748010e0eb46960d9f5c29917204028b 100644
--- a/MNH/ppm.f90
+++ b/MNH/ppm.f90
@@ -66,8 +66,11 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PR
 !
 END SUBROUTINE PPM_01_Z
 !
-FUNCTION PPM_S0_X(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP) &
-               RESULT(PR)
+!!$FUNCTION PPM_S0_X(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP) &
+!!$               RESULT(PR)
+SUBROUTINE PPM_S0_X(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP &
+                   , PR)
+
 CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX  ! X direction LBC type
 !
 INTEGER,                INTENT(IN)  :: KGRID   ! C grid localisation
@@ -81,10 +84,12 @@ REAL,                   INTENT(IN)  :: PTSTEP  ! Time step
 ! output source term
 REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR
 !
-END FUNCTION PPM_S0_X
+END SUBROUTINE PPM_S0_X
 !
-FUNCTION PPM_S0_Y(HLBCY, KGRID, PSRC, PCR, PRHO, PTSTEP) &
-               RESULT(PR)
+!!$FUNCTION PPM_S0_Y(HLBCY, KGRID, PSRC, PCR, PRHO, PTSTEP) &
+!!$               RESULT(PR)
+SUBROUTINE PPM_S0_Y(HLBCY, KGRID, PSRC, PCR, PRHO, PTSTEP &
+                   , PR)
 !
 CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! Y direction LBC type
 !
@@ -99,10 +104,12 @@ REAL,                   INTENT(IN)  :: PTSTEP  ! Time step
 ! output source term
 REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR
 !
-END FUNCTION PPM_S0_Y
+END SUBROUTINE PPM_S0_Y
 !
-FUNCTION PPM_S0_Z(KGRID, PSRC, PCR, PRHO, PTSTEP) &
-               RESULT(PR)
+!!$FUNCTION PPM_S0_Z(KGRID, PSRC, PCR, PRHO, PTSTEP) &
+!!$               RESULT(PR)
+SUBROUTINE PPM_S0_Z(KGRID, PSRC, PCR, PRHO, PTSTEP &
+                   , PR)
 !
 INTEGER,                INTENT(IN)  :: KGRID   ! C grid localisation
 !
@@ -115,7 +122,7 @@ REAL,                   INTENT(IN)  :: PTSTEP  ! Time step
 ! output source term
 REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR
 !
-END FUNCTION PPM_S0_Z
+END SUBROUTINE PPM_S0_Z
 !
 FUNCTION PPM_S1_X(HLBCX, KGRID, PSRC, PCR, PRHO, PRHOT, &
                         PTSTEP) RESULT(PR)
@@ -1477,8 +1484,11 @@ END SUBROUTINE PPM_01_Z
 !-------------------------------------------------------------------------------
 !
 !     ########################################################################
-      FUNCTION PPM_S0_X(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP) &
-               RESULT(PR)
+!!$      FUNCTION PPM_S0_X(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP) &
+!!$               RESULT(PR)
+      SUBROUTINE PPM_S0_X(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP &
+                       , PR)
+
 !     ########################################################################
 !!
 !!****  PPM_S0_X - PPM  advection scheme in X direction in Skamarock 2006 
@@ -1505,7 +1515,7 @@ USE MODD_PARAMETERS, ONLY : JPHEXT
 USE MODE_MPPDB
 !
 USE MODE_MNH_ZWORK, ONLY : &
-& IIB,IIE, IJB,IJE, IIU,IJU,IKU , IJS,IJN, &
+& IIB,IIE, IIU,IJU,IKU , IJS,IJN, &
 & GWEST,GEAST, &
 & ZPHAT=>ZW3D1,ZPHAT=>ZW3D2,ZFPOS=>ZW3D3,ZFNEG=>ZW3D4, &
 & ZRHO_MXM=>ZW3D5,ZCR_MXM=>ZW3D6,ZCR_DXF=>ZW3D7, &
@@ -1785,14 +1795,16 @@ CALL MPPDB_CHECK3DM("PPM::PPM_S0_X OPEN ::PR",PRECISION,PR)
 !-------------------------------------------------------------------------------
 CALL  DEL_HALO2_ll(TZ_PSRC_HALO2_ll)
 !
-END FUNCTION PPM_S0_X
+END SUBROUTINE PPM_S0_X
 !
 !-------------------------------------------------------------------------------
 !-------------------------------------------------------------------------------
 !
 !     ########################################################################
-      FUNCTION PPM_S0_Y(HLBCY, KGRID, PSRC, PCR, PRHO, PTSTEP) &
-               RESULT(PR)
+!!$      FUNCTION PPM_S0_Y(HLBCY, KGRID, PSRC, PCR, PRHO, PTSTEP) &
+!!$               RESULT(PR)
+      SUBROUTINE PPM_S0_Y(HLBCY, KGRID, PSRC, PCR, PRHO, PTSTEP &
+                         , PR)
 !     ########################################################################
 !!
 !!****  PPM_S0_Y - PPM  advection scheme in Y direction in Skamarock 2006 
@@ -1817,7 +1829,7 @@ USE MODD_PARAMETERS, ONLY : JPHEXT
 USE MODE_MPPDB
 !
 USE MODE_MNH_ZWORK, ONLY : &
-& IIB,IIE, IJB,IJE, IIU,IJU,IKU ,  IIW,IIA, &
+& IJB,IJE, IIU,IJU,IKU ,  IIW,IIA, &
 & GSOUTH , GNORTH, &
 & ZPHAT=>ZW3D1,ZFPOS=>ZW3D2,ZFNEG=>ZW3D3,ZRHO_MYM=>ZW3D4, &
 & ZCR_MYM=>ZW3D5,ZCR_DYF=>ZW3D6, &
@@ -2082,15 +2094,17 @@ ENDIF
 !
 CALL  DEL_HALO2_ll(TZ_PSRC_HALO2_ll)
 !
-END FUNCTION PPM_S0_Y
+END SUBROUTINE PPM_S0_Y
 !
 !
 !-------------------------------------------------------------------------------
 !-------------------------------------------------------------------------------
 !
 !     ########################################################################
-      FUNCTION PPM_S0_Z(KGRID, PSRC, PCR, PRHO, PTSTEP) &
-               RESULT(PR)
+!!$      FUNCTION PPM_S0_Z(KGRID, PSRC, PCR, PRHO, PTSTEP) &
+!!$               RESULT(PR)
+      SUBROUTINE PPM_S0_Z(KGRID, PSRC, PCR, PRHO, PTSTEP &
+                         , PR)
 !     ########################################################################
 !!
 !!****  PPM_S0_Z - PPM  advection scheme in Z direction in Skamarock 2006 
@@ -2111,6 +2125,11 @@ USE MODD_CONF
 USE MODD_PARAMETERS
 USE MODE_MPPDB
 !
+USE MODE_MNH_ZWORK, ONLY : &
+& IKB,IKE, IKU, &
+& ZPHAT=>ZW3D1,ZPHAT=>ZW3D2,ZFPOS=>ZW3D3,ZFNEG=>ZW3D4, &
+& ZRHO_MZM=>ZW3D5,ZCR_MZM=>ZW3D6,ZCR_DZF=>ZW3D7
+!
 IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
@@ -2124,30 +2143,30 @@ REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHO  ! density
 REAL,                   INTENT(IN)  :: PTSTEP  ! Time step 
 !
 ! output source term
-REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR &
+REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR 
 !
 !*       0.2   Declarations of local variables :
 !
 ! advection fluxes
-                                                   , ZFPOS, ZFNEG &
+!!$                                                   , ZFPOS, ZFNEG &
 !
 ! interpolated variable at cell edges
-                                                      , ZPHAT &
-                                                      , ZRHO_MZM ,ZCR_MZM,ZCR_DZF
+!!$                                                      , ZPHAT &
+!!$                                                      , ZRHO_MZM ,ZCR_MZM,ZCR_DZF
 !
-INTEGER:: IKB    ! Begining useful area in x,y,z directions
-INTEGER:: IKE    ! End useful area in x,y,z directions
-INTEGER:: IKU
+!!$INTEGER:: IKB    ! Begining useful area in x,y,z directions
+!!$INTEGER:: IKE    ! End useful area in x,y,z directions
+!!$INTEGER:: IKU
 !
 !-------------------------------------------------------------------------------
 !
 !*       0.3.     COMPUTES THE DOMAIN DIMENSIONS
 !                 ------------------------------
 !
-IKB = 1 + JPVEXT
-IKE = SIZE(PSRC,3) - JPVEXT
-!
-IKU=size(psrc,3)
+!!$IKB = 1 + JPVEXT
+!!$IKE = SIZE(PSRC,3) - JPVEXT
+!!$!
+!!$IKU=size(psrc,3)
 !
 !-------------------------------------------------------------------------------
 !
@@ -2157,8 +2176,8 @@ CALL GET_HALO(PSRC)
 !
 #define JUAN_ACC_S0_Z
 #ifdef JUAN_ACC_S0_Z
-!$acc data region local(ZPHAT,ZFPOS,ZFNEG,ZRHO_MZM,ZCR_MZM,ZCR_DZF) copyin (psrc,pcr,prho)  copyout(pr) 
-!$acc region
+!$acc data copyin (psrc,pcr,prho)  copyout(pr) 
+!$acc kernels
 #endif
 !
 ZPHAT(:,:,IKB+1:IKE) = (7.0 * &
@@ -2221,14 +2240,14 @@ ZFNEG(:,:,IKE+1) = (ZPHAT(:,:,IKE+1) - PSRC(:,:,IKE+1))*PCR(:,:,IKE+1) + &
       PR(:,:,IKE+1) = PR(:,:,IKE)
 !
 #ifdef JUAN_ACC_S0_Z
-!$acc end region 
-!$acc end data region 
+!$acc end kernels 
+!$acc end data 
 #endif
 !
    CALL GET_HALO(PR) ! JUAN
    CALL MPPDB_CHECK3DM("PPM::PPM_S0_Z ::PR",PRECISION,PR)
 !
-END FUNCTION PPM_S0_Z
+ END SUBROUTINE PPM_S0_Z
 !
 !-------------------------------------------------------------------------------
 !-------------------------------------------------------------------------------
diff --git a/MNH/ppm_met.f90 b/MNH/ppm_met.f90
new file mode 100644
index 0000000000000000000000000000000000000000..a80d156d4d43758307df3dda1e36b61443277a77
--- /dev/null
+++ b/MNH/ppm_met.f90
@@ -0,0 +1,209 @@
+!
+!     #####################
+      MODULE MODI_PPM_MET  
+!     #####################
+!
+INTERFACE
+!
+      SUBROUTINE PPM_MET (HLBCX,HLBCY, KRR, KTCOUNT,              &
+                          PCRU, PCRV, PCRW, PTSTEP, PRHODJ,       &
+                          PTHT, PTKET, PRT,                       &
+                          PRTHS, PRTKES, PRRS, HMET_ADV_SCHEME    )
+!
+USE MODD_ARGSLIST_ll, ONLY : HALO2LIST_ll
+!
+CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX ! X direction LBC type
+CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! Y direction LBC type
+CHARACTER (LEN=6),               INTENT(IN) :: HMET_ADV_SCHEME
+!
+INTEGER,                  INTENT(IN)    :: KRR    ! Number of moist variables
+INTEGER,                  INTENT(IN)    :: KTCOUNT! iteration count
+!
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCRU  ! Courant
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCRV  ! numbers
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCRW  ! 
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ ! density
+!
+REAL,                     INTENT(IN)    :: PTSTEP ! Single Time step 
+!
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT, PTKET        ! Vars at t
+REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT 
+!
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRTHS, PRTKES! Source terms
+REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRRS 
+!
+END SUBROUTINE PPM_MET   
+!
+END INTERFACE
+!
+END MODULE MODI_PPM_MET
+!
+!     ######################################################################
+      SUBROUTINE PPM_MET (HLBCX,HLBCY, KRR, KTCOUNT,              &
+                          PCRU, PCRV, PCRW, PTSTEP, PRHODJ,       &
+                          PTHT, PTKET, PRT,                       &
+                          PRTHS, PRTKES, PRRS, HMET_ADV_SCHEME    )
+!     ######################################################################
+!
+!!****  *PPM_MET * 
+!!
+!!    PURPOSE
+!!    -------
+!!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    MODULE MODD_ARGSLIST
+!!         HALO2LIST_ll : type for a list of "HALO2_lls"
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!    AUTHOR
+!!    ------
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original 11.05.2006. T.Maric
+!!
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+!USE MODE_ll
+!
+USE MODD_PARAMETERS
+USE MODD_CONF
+USE MODD_BUDGET
+USE MODD_ARGSLIST_ll, ONLY : HALO2LIST_ll
+!
+USE MODI_SHUMAN
+USE MODI_BUDGET
+USE MODI_PPM
+USE MODI_ADVEC_PPM_ALGO
+!
+! incorporate ADVEC_4TH_ORDER_ALG, MZF4 and MZM4
+!USE MODI_ADVEC_4TH_ORDER_AUX
+!
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of dummy arguments :
+!
+CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX ! X direction LBC type
+CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! Y direction LBC type
+CHARACTER (LEN=6),               INTENT(IN) :: HMET_ADV_SCHEME
+!
+INTEGER,                  INTENT(IN)    :: KRR    ! Number of moist variables
+INTEGER,                  INTENT(IN)    :: KTCOUNT! iteration count
+!
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCRU  ! contravariant
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCRV  !  components
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCRW  ! of momentum
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ ! density
+!
+REAL,                     INTENT(IN)    :: PTSTEP ! Time step 
+!
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT, PTKET ! Vars at t
+REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT 
+!
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRTHS, PRTKES! Source terms
+REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRRS 
+!
+!*       0.2   Declarations of local variables :
+!
+INTEGER :: JRR           ! Loop index for  moist variables
+!
+LOGICAL :: GTKEALLOC     ! true if TKE arrays are not zero-sized
+!
+INTEGER :: IGRID ! localisation on the model grid
+!
+!*        Variables specific to ppm scheme
+!
+! Advection source term calulated in the PPM algorithm
+REAL, DIMENSION(SIZE(PCRU,1),SIZE(PCRU,2),SIZE(PCRU,3)) :: ZSRC
+!
+! Temporary advected rhodj
+REAL, DIMENSION(SIZE(PCRU,1),SIZE(PCRU,2),SIZE(PCRU,3)) :: ZRHOX1,ZRHOX2
+REAL, DIMENSION(SIZE(PCRU,1),SIZE(PCRU,2),SIZE(PCRU,3)) :: ZRHOY1,ZRHOY2
+REAL, DIMENSION(SIZE(PCRU,1),SIZE(PCRU,2),SIZE(PCRU,3)) :: ZRHOZ1,ZRHOZ2
+REAL, DIMENSION(SIZE(PCRU,1),SIZE(PCRU,2),SIZE(PCRU,3)) :: ZUNIT
+!
+!-------------------------------------------------------------------------------
+!
+!*       1.     COMPUTES THE DOMAIN DIMENSIONS
+!               ------------------------------
+!
+GTKEALLOC = SIZE(PTKET,1) /= 0
+!
+!-------------------------------------------------------------------------------
+!
+!*       2.     CALL THE ADVEC_PPM_ALGO ROUTINE FOR EACH FIELD
+!               -----------------------------------------------
+!
+IGRID = 1
+!
+! Calculate the advection of the density RHODJ to pass to the algorithm
+!
+ZUNIT = 1.0
+CALL PPM_S0_X(HLBCX, IGRID, ZUNIT, PCRU, PRHODJ, PTSTEP, ZRHOX1)
+CALL PPM_S0_Y(HLBCY, IGRID, ZUNIT, PCRV, ZRHOX1, PTSTEP, ZRHOY1)
+CALL PPM_S0_Z(IGRID, ZUNIT, PCRW, ZRHOY1, PTSTEP, ZRHOZ1)
+CALL PPM_S0_Z(IGRID, ZUNIT, PCRW, PRHODJ, PTSTEP, ZRHOZ2)
+CALL PPM_S0_Y(HLBCY, IGRID, ZUNIT, PCRV, ZRHOZ2, PTSTEP, ZRHOY2)
+CALL PPM_S0_X(HLBCX, IGRID, ZUNIT, PCRU, ZRHOY2, PTSTEP, ZRHOX2)
+!
+!
+! Potential temperature
+!
+CALL ADVEC_PPM_ALGO(HMET_ADV_SCHEME, HLBCX, HLBCY, IGRID, PTHT, PRHODJ, PTSTEP, &
+                    ZRHOX1, ZRHOX2, ZRHOY1, ZRHOY2, ZRHOZ1, ZRHOZ2, &
+                    ZSRC, KTCOUNT, PCRU, PCRV, PCRW)
+! add the advection to the sources
+PRTHS = PRTHS +  ZSRC 
+!
+IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'ADV_BU_RTH')
+!
+! Turbulence variables
+!
+IF (GTKEALLOC) THEN
+   CALL ADVEC_PPM_ALGO(HMET_ADV_SCHEME, HLBCX, HLBCY, IGRID, PTKET,PRHODJ,PTSTEP, &
+                       ZRHOX1, ZRHOX2, ZRHOY1, ZRHOY2, ZRHOZ1, ZRHOZ2, &
+                       ZSRC, KTCOUNT, PCRU, PCRV, PCRW)
+  PRTKES = PRTKES + ZSRC
+!
+  IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'ADV_BU_RTKE')
+!
+END IF
+!
+!
+!
+! Case with KRR moist variables
+!
+DO JRR=1,KRR
+!
+   CALL ADVEC_PPM_ALGO(HMET_ADV_SCHEME, HLBCX, HLBCY, IGRID, PRT(:,:,:,JRR), &
+                       PRHODJ, PTSTEP, &
+                       ZRHOX1, ZRHOX2, ZRHOY1, ZRHOY2, ZRHOZ1, ZRHOZ2, &
+                       ZSRC, KTCOUNT, PCRU, PCRV, PCRW)
+   PRRS(:,:,:,JRR) = PRRS(:,:,:,JRR) + ZSRC(:,:,:)
+!
+   IF (JRR==1.AND.LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6,'ADV_BU_RRV') 
+   IF (JRR==2.AND.LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7,'ADV_BU_RRC') 
+   IF (JRR==3.AND.LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),8,'ADV_BU_RRR') 
+   IF (JRR==4.AND.LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9,'ADV_BU_RRI') 
+   IF (JRR==5.AND.LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),10,'ADV_BU_RRS') 
+   IF (JRR==6.AND.LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),11,'ADV_BU_RRG') 
+   IF (JRR==7.AND.LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),12,'ADV_BU_RRH') 
+!
+END DO
+!
+!
+END SUBROUTINE PPM_MET
diff --git a/MNH/ppm_scalar.f90 b/MNH/ppm_scalar.f90
new file mode 100644
index 0000000000000000000000000000000000000000..d9038795b484aa58d2e2972aa1a4b5992326bd0b
--- /dev/null
+++ b/MNH/ppm_scalar.f90
@@ -0,0 +1,164 @@
+!
+!
+!     #####################
+      MODULE MODI_PPM_SCALAR
+!     #####################
+!
+INTERFACE
+!
+      SUBROUTINE PPM_SCALAR (HLBCX,HLBCY, KSV, KTCOUNT,   &
+                     PCRU, PCRV, PCRW, PTSTEP, PRHODJ,    &
+                     PSVT, PRSVS, HSV_ADV_SCHEME  ) 
+!
+USE MODD_ARGSLIST_ll, ONLY : HALO2LIST_ll
+!
+CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX ! X direction LBC type
+CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! Y direction LBC type
+CHARACTER (LEN=6),               INTENT(IN) :: HSV_ADV_SCHEME
+!
+INTEGER,                  INTENT(IN)    :: KSV    ! Number of Scalar Variables
+INTEGER,                  INTENT(IN)    :: KTCOUNT! iteration count
+!
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCRU  ! Courant
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCRV  ! numbers
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCRW  ! 
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ ! density
+!
+REAL,                     INTENT(IN)    :: PTSTEP ! Time step 
+!
+REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PSVT         ! Vars at t
+!
+REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRSVS ! Source terms
+!
+!
+END SUBROUTINE PPM_SCALAR
+!
+END INTERFACE
+!
+END MODULE MODI_PPM_SCALAR
+!
+!     ######################################################################
+      SUBROUTINE PPM_SCALAR (HLBCX,HLBCY, KSV, KTCOUNT,  &
+                     PCRU, PCRV, PCRW, PTSTEP, PRHODJ,   &
+                     PSVT, PRSVS, HSV_ADV_SCHEME  ) 
+!     ######################################################################
+!
+!!****  *PPM_SCALAR * 
+!!
+!!    PURPOSE
+!!    -------
+!!
+!!**  METHOD
+!!    ------
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    MODULE MODD_ARGSLIST
+!!         HALO2LIST_ll : type for a list of "HALO2_lls"
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!    AUTHOR
+!!    ------
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original 11.05.2006. T.Maric
+!!
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+!USE MODE_ll
+!
+USE MODD_PARAMETERS
+USE MODD_CONF
+USE MODD_BUDGET
+USE MODD_ARGSLIST_ll, ONLY : HALO2LIST_ll
+!
+USE MODI_SHUMAN
+USE MODI_BUDGET
+USE MODI_PPM
+USE MODI_ADVEC_PPM_ALGO
+!
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of dummy arguments :
+!
+CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX ! X direction LBC type
+CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! Y direction LBC type
+CHARACTER (LEN=6),               INTENT(IN) :: HSV_ADV_SCHEME
+!
+INTEGER,                  INTENT(IN)    :: KSV    ! Number of Scalar Variables
+INTEGER,                  INTENT(IN)    :: KTCOUNT! iteration count
+!
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCRU  ! contravariant
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCRV  !  components
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCRW  ! of momentum
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ ! density
+!
+REAL,                     INTENT(IN)    :: PTSTEP ! Time step 
+!
+REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PSVT             
+!
+REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRSVS         ! Source terms
+!
+!
+!*       0.2   Declarations of local variables :
+!
+INTEGER :: JSV           ! Loop index for Scalar Variables
+!
+INTEGER :: IGRID ! localisation on the model grid
+!
+!*        Variables specific to ppm scheme
+!
+! Advection source term calulated in the PPM algorithm
+REAL, DIMENSION(SIZE(PCRU,1),SIZE(PCRU,2),SIZE(PCRU,3)) :: ZSRC
+!
+! Temporary advected rhodj
+REAL, DIMENSION(SIZE(PCRU,1),SIZE(PCRU,2),SIZE(PCRU,3)) :: ZRHOX1,ZRHOX2
+REAL, DIMENSION(SIZE(PCRU,1),SIZE(PCRU,2),SIZE(PCRU,3)) :: ZRHOY1,ZRHOY2
+REAL, DIMENSION(SIZE(PCRU,1),SIZE(PCRU,2),SIZE(PCRU,3)) :: ZRHOZ1,ZRHOZ2
+REAL, DIMENSION(SIZE(PCRU,1),SIZE(PCRU,2),SIZE(PCRU,3)) :: ZUNIT
+!
+!-------------------------------------------------------------------------------
+!
+!*       1.     CALL THE ADVEC_PPM_ALGO ROUTINE FOR EACH FIELD
+!               -----------------------------------------------
+!
+IGRID = 1
+!
+! Calculate the advection of the density RHODJ to pass to the algorithm
+!
+ZUNIT = 1.0
+CALL PPM_S0_X(HLBCX, IGRID, ZUNIT, PCRU, PRHODJ, PTSTEP, ZRHOX1)
+CALL PPM_S0_Y(HLBCY, IGRID, ZUNIT, PCRV, ZRHOX1, PTSTEP, ZRHOY1)
+CALL PPM_S0_Z(IGRID, ZUNIT, PCRW, ZRHOY1, PTSTEP, ZRHOZ1)
+CALL PPM_S0_Z(IGRID, ZUNIT, PCRW, PRHODJ, PTSTEP, ZRHOZ2)
+CALL PPM_S0_Y(HLBCY, IGRID, ZUNIT, PCRV, ZRHOZ2, PTSTEP, ZRHOY2)
+CALL PPM_S0_X(HLBCX, IGRID, ZUNIT, PCRU, ZRHOY2, PTSTEP, ZRHOX2)
+!
+! Case with KSV tracers
+!
+DO JSV=1,KSV
+!
+   CALL ADVEC_PPM_ALGO(HSV_ADV_SCHEME, HLBCX, HLBCY, IGRID, PSVT(:,:,:,JSV), & 
+                       PRHODJ, PTSTEP, & 
+                       ZRHOX1, ZRHOX2, ZRHOY1, ZRHOY2, ZRHOZ1, ZRHOZ2, &
+                       ZSRC, KTCOUNT, PCRU, PCRV, PCRW)
+! add the advection to the sources
+   PRSVS(:,:,:,JSV) =  PRSVS(:,:,:,JSV) + ZSRC(:,:,:)   
+!
+   IF (LBUDGET_SV) CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'ADV_BU_RSV')
+!
+END DO
+!
+!
+END SUBROUTINE PPM_SCALAR