diff --git a/docs/Interfaces b/docs/Interfaces
index 52762422500f377f3ca809e617f8b91b642f53a3..a233c0e9d195229feaf8887c232326d1b096a995 100644
--- a/docs/Interfaces
+++ b/docs/Interfaces
@@ -18,5 +18,8 @@ Dependencies:
 - budget
 - mode_msg, modd_io
 - modd_precision
+- modd_cst
+- yomhook, parkind1
+
 
 
diff --git a/docs/TODO b/docs/TODO
index aaa81626da190c008c80017a801b134c4ba00b5d..eb46ff8bb1c42921906761f37106db3184de1c94 100644
--- a/docs/TODO
+++ b/docs/TODO
@@ -9,3 +9,8 @@ Dependencies:
   - créer des codes pour le driver
   - liste dans document Interfaces
   - pour AROME placés, en attendant, dans phyex/externals
+
+Clé de compilation REPRO48 ajoutée pour permettre de reproduire le cycle 48, elle:
+- contourne des corrections de bug
+- modifie l'organisation de calculs
+Cette clé devra être supprimée
diff --git a/src/arome/turb/compute_updraft.F90 b/src/arome/turb/compute_updraft.F90
index 3480e0d50915cbd66658b2db79520cca366f670b..8ba4d1c567308de0dde16fbc00d96e017c4c4a4a 100644
--- a/src/arome/turb/compute_updraft.F90
+++ b/src/arome/turb/compute_updraft.F90
@@ -49,6 +49,7 @@
 !!     S. Riette Jan 2012: support for both order of vertical levels
 !!     V.Masson, C.Lac : 02/2011 : SV_UP initialized by a non-zero value
 !!     S. Riette Apr 2013: improvement of continuity at the condensation level
+!!     Q.Rodier  01/2019 : support RM17 mixing length
 !! --------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
@@ -56,6 +57,7 @@
 !
 USE MODD_CST
 USE MODD_CMFSHALL
+USE MODD_TURB_n, ONLY : CTURBLEN
 
 USE MODI_COMPUTE_ENTR_DETR
 USE MODI_TH_R_FROM_THL_RT_1D
@@ -170,6 +172,7 @@ REAL, DIMENSION(SIZE(PTHM,1)) :: ZRC_UP, ZRI_UP, ZRV_UP,&
 REAL  :: ZDEPTH_MAX1, ZDEPTH_MAX2 ! control auto-extinction process
 
 REAL  :: ZTMAX,ZRMAX  ! control value
+REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2)) :: ZSHEAR,ZDUDZ,ZDVDZ ! vertical wind shear
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('COMPUTE_UPDRAFT',0,ZHOOK_HANDLE)
 
@@ -291,8 +294,19 @@ IF (OENTR_DETR) THEN
   ! compute L_up
   GLMIX=.TRUE.
   ZTKEM_F(:,KKB)=0.
-
-  CALL COMPUTE_BL89_ML(KKA,KKB,KKE,KKU,KKL,PDZZ,ZTKEM_F(:,KKB),ZG_O_THVREF(:,KKB),ZTHVM,KKB,GLMIX,.TRUE.,ZLUP)
+  !
+  IF(CTURBLEN=='RM17') THEN
+    ZDUDZ = MZF_MF(KKA,KKU,KKL,GZ_M_W_MF(KKA,KKU,KKL,PUM,PDZZ))
+    ZDVDZ = MZF_MF(KKA,KKU,KKL,GZ_M_W_MF(KKA,KKU,KKL,PVM,PDZZ))
+    ZSHEAR = SQRT(ZDUDZ*ZDUDZ + ZDVDZ*ZDVDZ)
+    PRINT*, 'phasage bete sans controle'
+    CALL ABORT
+    STOP
+  ELSE
+    ZSHEAR = 0. !no shear in bl89 mixing length
+  END IF
+ !
+  CALL COMPUTE_BL89_ML(KKA,KKB,KKE,KKU,KKL,PDZZ,ZTKEM_F(:,KKB),ZG_O_THVREF(:,KKB),ZTHVM,KKB,GLMIX,.TRUE.,ZSHEAR,ZLUP)
   ZLUP(:)=MAX(ZLUP(:),1.E-10)
 
   ! Compute Buoyancy flux at the ground
diff --git a/src/arome/turb/compute_updraft_rhcj10.F90 b/src/arome/turb/compute_updraft_rhcj10.F90
index e28b53ad9a2fa9b4083fed7da802a1315c729962..14f0b6ae68f2f53203e9096e4cdb74f6bae6fc48 100644
--- a/src/arome/turb/compute_updraft_rhcj10.F90
+++ b/src/arome/turb/compute_updraft_rhcj10.F90
@@ -44,6 +44,7 @@
 !!     Y. Bouteloup (2012)
 !!     R. Honert Janv 2013 ==> corection of some coding bugs
 !!     R. El Khatib 15-Oct-2014 Optimization
+!!     Q.Rodier  01/2019 : support RM17 mixing length
 !! --------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
@@ -51,7 +52,7 @@
 !
 USE MODD_CST
 USE MODD_CMFSHALL
-
+USE MODD_TURB_n, ONLY : CTURBLEN
 USE MODI_TH_R_FROM_THL_RT_1D
 USE MODI_SHUMAN_MF
 
@@ -177,6 +178,7 @@ REAL  :: ZDEPTH_MAX1, ZDEPTH_MAX2 ! control auto-extinction process
 
 REAL  :: ZTMAX,ZRMAX, ZEPS  ! control value
 
+REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2)) :: ZSHEAR,ZDUDZ,ZDVDZ ! vertical wind shear
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('COMPUTE_UPDRAFT_RHCJ10',0,ZHOOK_HANDLE)
 
@@ -322,9 +324,20 @@ ENDDO
 ! compute L_up
 GLMIX=.TRUE.
 ZTKEM_F(:,KKB)=0.
-
-
-CALL COMPUTE_BL89_ML(KKA,KKB,KKE,KKU,KKL,PDZZ,ZTKEM_F(:,KKB),ZG_O_THVREF(:,KKB),ZTHVM_F,KKB,GLMIX,.FALSE.,ZLUP)
+!
+IF(CTURBLEN=='RM17') THEN
+  ZDUDZ = MZF_MF(KKA,KKU,KKL,GZ_M_W_MF(KKA,KKU,KKL,PUM,PDZZ))
+  ZDVDZ = MZF_MF(KKA,KKU,KKL,GZ_M_W_MF(KKA,KKU,KKL,PVM,PDZZ))
+  ZSHEAR = SQRT(ZDUDZ*ZDUDZ + ZDVDZ*ZDVDZ)
+  PRINT*, 'phasage bete sans controle'
+  CALL ABORT
+  STOP
+ELSE
+  ZSHEAR = 0. !no shear in bl89 mixing length
+END IF
+!
+CALL COMPUTE_BL89_ML(KKA,KKB,KKE,KKU,KKL,PDZZ,ZTKEM_F(:,KKB),ZG_O_THVREF(:,KKB), &
+                       ZTHVM_F,KKB,GLMIX,.FALSE.,ZSHEAR,ZLUP)
 ZLUP(:)=MAX(ZLUP(:),1.E-10)
 
 DO JI=1,IIJU
diff --git a/src/arome/turb/modd_turbn.F90 b/src/arome/turb/modd_turbn.F90
new file mode 100644
index 0000000000000000000000000000000000000000..3d11a7b591941538033c61d4e9fa3e1f71b1d8d1
--- /dev/null
+++ b/src/arome/turb/modd_turbn.F90
@@ -0,0 +1,3 @@
+MODULE MODD_TURB_n
+ CHARACTER (LEN=4), SAVE  :: CTURBLEN='BL89'
+ENDMODULE MODD_TURB_n
diff --git a/src/arome/turb/modi_bl89.F90 b/src/arome/turb/modi_bl89.F90
index cc334a48540f6cb76f9d2c35a3c9b203dbc87fd6..e451772994675a8640f6cce983666f77da09a8aa 100644
--- a/src/arome/turb/modi_bl89.F90
+++ b/src/arome/turb/modi_bl89.F90
@@ -2,7 +2,7 @@
       MODULE MODI_BL89
 !     ################
 INTERFACE
-      SUBROUTINE BL89(KKA,KKU,KKL,PZZ,PDZZ,PTHVREF,PTHLM,KRR,PRM,PTKEM,PLM)
+      SUBROUTINE BL89(KKA,KKU,KKL,PZZ,PDZZ,PTHVREF,PTHLM,KRR,PRM,PTKEM,PSHEAR,PLM)
 !
 INTEGER,                  INTENT(IN)  :: KKA 
 INTEGER,                  INTENT(IN)  :: KKU 
@@ -14,6 +14,7 @@ REAL, DIMENSION(:,:,:),   INTENT(IN)  :: PTHLM
 INTEGER,                  INTENT(IN)  :: KRR
 REAL, DIMENSION(:,:,:,:), INTENT(IN)  :: PRM
 REAL, DIMENSION(:,:,:),   INTENT(IN)  :: PTKEM
+REAL, DIMENSION(:,:,:),   INTENT(IN)  :: PSHEAR
 REAL, DIMENSION(:,:,:),   INTENT(OUT) :: PLM
 
 END SUBROUTINE BL89
diff --git a/src/arome/turb/modi_compute_bl89_ml.F90 b/src/arome/turb/modi_compute_bl89_ml.F90
index 7d9c50e82b2076526ba33a1e2677c4e83d5d57d8..c42759094d59acf316dad60bd0f7ae0b13fa7a31 100644
--- a/src/arome/turb/modi_compute_bl89_ml.F90
+++ b/src/arome/turb/modi_compute_bl89_ml.F90
@@ -6,7 +6,7 @@ INTERFACE
 
 !     ###################################################################
       SUBROUTINE COMPUTE_BL89_ML(KKA,KKB,KKE,KKU,KKL,PDZZ2D, &
-             PTKEM_DEP,PG_O_THVREF,PVPT,KK,OUPORDN,OFLUX,PLWORK)
+             PTKEM_DEP,PG_O_THVREF,PVPT,KK,OUPORDN,OFLUX,PSHEAR,PLWORK)
 !     ###################################################################
 
 !*               1.1  Declaration of Arguments
@@ -16,14 +16,16 @@ INTEGER,                INTENT(IN)   :: KKB          ! near ground physical inde
 INTEGER,                INTENT(IN)   :: KKE          ! uppest atmosphere physical index
 INTEGER,                INTENT(IN)   :: KKU          ! uppest atmosphere array index
 INTEGER,                INTENT(IN)   :: KKL          ! +1 if grid goes from ground to atmosphere top, -1 otherwise
-REAL, DIMENSION(:,:),   INTENT(IN)  :: PDZZ2D
-REAL, DIMENSION(:),     INTENT(IN)  :: PTKEM_DEP
-REAL, DIMENSION(:),     INTENT(IN)  :: PG_O_THVREF
-REAL, DIMENSION(:,:),   INTENT(IN)  :: PVPT
-INTEGER,                INTENT(IN)  :: KK
-LOGICAL,                INTENT(IN)  :: OUPORDN
+REAL, DIMENSION(:,:),   INTENT(IN)  :: PDZZ2D        ! height difference between two mass levels
+REAL, DIMENSION(:),     INTENT(IN)  :: PTKEM_DEP     ! TKE to consume
+REAL, DIMENSION(:),     INTENT(IN)  :: PG_O_THVREF   ! g/ThetaVRef at the departure point
+REAL, DIMENSION(:,:),   INTENT(IN)  :: PVPT          ! ThetaV on mass levels
+INTEGER,                INTENT(IN)  :: KK            ! index of departure level
+LOGICAL,                INTENT(IN)  :: OUPORDN       ! switch to compute upward (true) or
+                                                     !   downward (false) mixing length
 LOGICAL,                INTENT(IN)  :: OFLUX         ! Computation must be done from flux level
-REAL, DIMENSION(:),     INTENT(OUT) :: PLWORK
+REAL, DIMENSION(:),     INTENT(OUT) :: PLWORK        ! Resulting mixing length
+REAL, DIMENSION(:,:),   INTENT(IN)  :: PSHEAR        ! vertical wind shear for RM17 mixing length
 
 END SUBROUTINE COMPUTE_BL89_ML
 
diff --git a/src/arome/turb/turb.F90 b/src/arome/turb/turb.F90
index 3e52f07833d187f8b94318ebd68269f9b2c15d2a..6b219e33fd20d346984e1538fedd9f8f3df925d5 100644
--- a/src/arome/turb/turb.F90
+++ b/src/arome/turb/turb.F90
@@ -446,6 +446,7 @@ REAL                :: ZALPHA       ! proportionnality constant between Dz/2 and
 !                                   ! BL89 mixing length near the surface
 !
 REAL :: ZTIME1, ZTIME2
+REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3))::  ZSHEAR, ZDUDZ, ZDVDZ
 !
 !*      1.PRELIMINARIES
 !         -------------
@@ -607,7 +608,8 @@ SELECT CASE (HTURBLEN)
 !           ------------------
 
   CASE ('BL89')
-    CALL BL89(KKA,KKU,KKL,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKEM,ZLM)
+    ZSHEAR=0.
+    CALL BL89(KKA,KKU,KKL,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKEM,ZSHEAR,ZLM)
 !
 !*      3.2 Delta mixing length
 !           -------------------
@@ -1516,7 +1518,8 @@ ELSE
 !*         3.1 BL89 mixing length
 !           ------------------
   CASE ('BL89')
-    CALL BL89(KKA,KKU,KKL,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKEM,ZLM_CLOUD)
+    ZSHEAR=0.
+    CALL BL89(KKA,KKU,KKL,PZZ,PDZZ,PTHVREF,ZTHLM,KRR,ZRM,PTKEM,ZSHEAR,ZLM_CLOUD)
 !
 !*         3.2 Delta mixing length
 !           -------------------
diff --git a/src/common/turb/bl89.f90 b/src/common/turb/bl89.F90
similarity index 96%
rename from src/common/turb/bl89.f90
rename to src/common/turb/bl89.F90
index 303d92d262407a571fbe894e1da0274d1626abf3..57056e4815f6fb65ae1ff202472d58ed1f7810c6 100644
--- a/src/common/turb/bl89.f90
+++ b/src/common/turb/bl89.F90
@@ -136,6 +136,7 @@ IF (CPROGRAM=='AROME ') THEN
     ZZZ    (:,JK)   = PZZ    (:,1,JK)
     ZDZZ   (:,JK)   = PDZZ   (:,1,JK)
     ZTHM   (:,JK)   = PTHLM  (:,1,JK)
+    ZSHEAR (:,JK)   = PSHEAR (:,1,JK)
     ZTKEM  (:,JK)   = PTKEM  (:,1,JK)
     ZG_O_THVREF(:,JK)   = XG/PTHVREF(:,1,JK)
   END DO
@@ -236,7 +237,11 @@ DO JK=IKTB,IKTE
           + sqrt(abs( (XRM17*ZSHEAR(J1D,JKK)*ZSQRT_TKE(J1D,JK) &
           + ( -ZG_O_THVREF(J1D,JK) * (ZVPT(J1D,JKK) - ZVPT(J1D,JK)) ))**2.0 + &
           2. * ZINTE(J1D) * &
+#ifdef REPRO48
+          ZG_O_THVREF(J1D,JK) * ZDELTVPT(J1D,JKK)/ ZDZZ(J1D,JKK)))) / &
+#else
           (ZG_O_THVREF(J1D,JK) * ZDELTVPT(J1D,JKK)/ ZDZZ(J1D,JKK))))) / &
+#endif
           (ZG_O_THVREF(J1D,JK) * ZDELTVPT(J1D,JKK) / ZDZZ(J1D,JKK))
         ZLWORK(J1D)=ZLWORK(J1D)+ZTEST0*(ZTEST*ZLWORK1+(1-ZTEST)*ZLWORK2)
         ZINTE(J1D) = ZINTE(J1D) - ZPOTE
@@ -263,6 +268,7 @@ DO JK=IKTB,IKTE
     IF(ZTESTM > 0.) THEN
       ZTESTM=0.
       DO J1D=1,IIU*IJU
+        ZTEST0=0.5+SIGN(0.5,ZINTE(J1D))
         !--------- SHEAR + STABILITY -----------
         ZPOTE = ZTEST0* &
                 (ZG_O_THVREF(J1D,JK)*(ZHLVPT(J1D,JKK)-ZVPT(J1D,JK)) &
@@ -278,7 +284,11 @@ DO JK=IKTB,IKTE
           (XRM17*ZSHEAR(J1D,JKK)*ZSQRT_TKE(J1D,JK)   &
             + ( ZG_O_THVREF(J1D,JK) * (ZVPT(J1D,JKK-KKL) - ZVPT(J1D,JK))) )**2    &
             + 2. * ZINTE(J1D) * &
-            ( ZG_O_THVREF(J1D,JK)* ZDELTVPT(J1D,JKK)/ZDZZ(J1D,JKK))))) / &
+#ifdef REPRO48
+             ZG_O_THVREF(J1D,JK)* ZDELTVPT(J1D,JKK)/ZDZZ(J1D,JKK)))) / &
+#else
+            (ZG_O_THVREF(J1D,JK)* ZDELTVPT(J1D,JKK)/ZDZZ(J1D,JKK))))) / &
+#endif
             (ZG_O_THVREF(J1D,JK) * ZDELTVPT(J1D,JKK) / ZDZZ(J1D,JKK))
         ZLWORK(J1D)=ZLWORK(J1D)+ZTEST0*(ZTEST*ZLWORK1+(1-ZTEST)*ZLWORK2)
         ZINTE(J1D) = ZINTE(J1D) - ZPOTE
@@ -294,8 +304,13 @@ DO JK=IKTB,IKTE
     ZLWORK1=MAX(ZLMDN(J1D,JK),1.E-10_MNHREAL)
     ZLWORK2=MAX(ZLWORK(J1D),1.E-10_MNHREAL)
     ZPOTE = ZLWORK1 / ZLWORK2
+#ifdef REPRO48
+    ZLWORK2=1.d0 + ZPOTE**(2./3.)
+    ZLM(J1D,JK) = Z2SQRT2*ZLWORK1/(ZLWORK2*SQRT(ZLWORK2))
+#else
     ZLWORK2=1.d0 + ZPOTE**ZBL89EXP
     ZLM(J1D,JK) = ZLWORK1*(2./ZLWORK2)**ZUSRBL89
+#endif
   END DO
 
 ZLM(:,JK)=MAX(ZLM(:,JK),XLINI)
diff --git a/src/common/turb/compute_bl89_ml.f90 b/src/common/turb/compute_bl89_ml.F90
similarity index 97%
rename from src/common/turb/compute_bl89_ml.f90
rename to src/common/turb/compute_bl89_ml.F90
index 5a75011c8ed80ee7d7a3b364136a9ecff36168ea..897bfc12fab3710b1e672d573cc197fa7d24007e 100644
--- a/src/common/turb/compute_bl89_ml.f90
+++ b/src/common/turb/compute_bl89_ml.F90
@@ -127,9 +127,9 @@ IF (OUPORDN.EQV..TRUE.) THEN
      ! Lenght travelled by parcel to nullify energy
      ZLWORK2(J1D)=        ( - PG_O_THVREF(J1D) *                     &
             (  ZHLVPT(J1D,KK) - ZVPT_DEP(J1D) )                              &
-            - XRM17*PSHEAR(J1D,JKK)*SQRT(ABS(PTKEM_DEP(J1D))) &
+            - XRM17*PSHEAR(J1D,KK)*SQRT(ABS(PTKEM_DEP(J1D))) &
           + SQRT (ABS(                                                       &
-            (XRM17*PSHEAR(J1D,JKK)*SQRT(ABS(PTKEM_DEP(J1D))) +  &
+            (XRM17*PSHEAR(J1D,KK)*SQRT(ABS(PTKEM_DEP(J1D))) +  &
              PG_O_THVREF(J1D) * (ZHLVPT(J1D,KK) - ZVPT_DEP(J1D)) )**2  &
             + 2. * ZINTE(J1D) * PG_O_THVREF(J1D)                        &
                  * ZDELTVPT(J1D,KK) / PDZZ2D(J1D,KK) ))    ) /             &
@@ -194,7 +194,7 @@ IF (OUPORDN.EQV..FALSE.) THEN
         ZTEST =0.5+SIGN(0.5,ZINTE(J1D)-ZPOTE(J1D))
         ZTESTM=ZTESTM+ZTEST0
         ZLWORK1(J1D)=PDZZ2D(J1D,JKK)
-      ZLWORK2(J1D)=        ( + PG_O_THVREF(J1D) *                     &
+        ZLWORK2(J1D)=        ( + PG_O_THVREF(J1D) *                     &
             (  PVPT(J1D,JKK) - PVPT(J1D,KK) )                              &
              -XRM17*PSHEAR(J1D,JKK)*sqrt(abs(PTKEM_DEP(J1D))) &
           + SQRT (ABS(                                                       &
diff --git a/src/common/turb/sbl_depth.f90 b/src/common/turb/sbl_depth.F90
similarity index 100%
rename from src/common/turb/sbl_depth.f90
rename to src/common/turb/sbl_depth.F90