diff --git a/src/common/turb/modd_param_mfshalln.F90 b/src/common/turb/modd_param_mfshalln.F90
index 6c50a6fe6587be13a1ff4cb86289877e777c2e4e..a4724bcc176a2fc67855d781dc54eb89890da0d0 100644
--- a/src/common/turb/modd_param_mfshalln.F90
+++ b/src/common/turb/modd_param_mfshalln.F90
@@ -82,6 +82,7 @@ REAL          :: XGZ         !< Tuning of the surface initialisation for Grey Zo
 !
 LOGICAL       :: LTHETAS_MF      !< .TRUE. to use ThetaS1 instead of ThetaL
 REAL          :: XLAMBDA_MF      !< Thermodynamic parameter: Lambda to compute ThetaS1 from ThetaL
+LOGICAL       :: LVERLIMUP      !< .TRUE. to use correction on vertical limitation of updraft (issue #38 PHYEX)
 
 END TYPE PARAM_MFSHALL_t
 
@@ -119,13 +120,15 @@ REAL, POINTER          :: XR=>NULL()
 LOGICAL, POINTER       :: LTHETAS_MF=>NULL()
 REAL, POINTER          :: XLAMBDA_MF=>NULL() 
 LOGICAL, POINTER       :: LGZ=>NULL() 
-REAL, POINTER          :: XGZ=>NULL() 
+REAL, POINTER          :: XGZ=>NULL()
+LOGICAL, POINTER       :: LVERLIMUP=>NULL() 
 !
 NAMELIST/NAM_PARAM_MFSHALLn/XIMPL_MF,CMF_UPDRAFT,CMF_CLOUD,LMIXUV,LMF_FLX,&
                             XALP_PERT,XABUO,XBENTR,XBDETR,XCMF,XENTR_MF,&
                             XCRAD_MF,XENTR_DRY,XDETR_DRY,XDETR_LUP,XKCF_MF,&
                             XKRC_MF,XTAUSIGMF,XPRES_UV,XALPHA_MF,XSIGMA_MF,&
-                            XFRAC_UP_MAX,XA1,XB,XC,XBETA1,XR,LTHETAS_MF,LGZ,XGZ
+                            XFRAC_UP_MAX,XA1,XB,XC,XBETA1,XR,LTHETAS_MF,LGZ,XGZ,&
+                            LVERLIMUP
 !
 !-------------------------------------------------------------------------------
 !
@@ -176,6 +179,7 @@ LTHETAS_MF=>PARAM_MFSHALL_MODEL(KTO)%LTHETAS_MF
 XLAMBDA_MF=>PARAM_MFSHALL_MODEL(KTO)%XLAMBDA_MF
 LGZ=>PARAM_MFSHALL_MODEL(KTO)%LGZ
 XGZ=>PARAM_MFSHALL_MODEL(KTO)%XGZ
+LVERLIMUP=>PARAM_MFSHALL_MODEL(KTO)%LVERLIMUP
 !
 ENDIF
 !
@@ -285,6 +289,8 @@ IF(LLDEFAULTVAL) THEN
   XLAMBDA_MF=0.
   LGZ=.FALSE.
   XGZ=1.83 ! between 1.83 and 1.33
+  LVERLIMUP=.FALSE.
+  IF(HPROGRAM=='MESONH') LVERLIMUP=.TRUE.
 ENDIF
 !
 !*      2. NAMELIST
diff --git a/src/common/turb/mode_compute_updraft.F90 b/src/common/turb/mode_compute_updraft.F90
index 825ef4c6ece17b14f3bd805aae42f48629484c51..43e3362fb9250ad7846bc4940014009e4421168a 100644
--- a/src/common/turb/mode_compute_updraft.F90
+++ b/src/common/turb/mode_compute_updraft.F90
@@ -190,7 +190,7 @@ REAL  :: ZTMAX,ZRMAX  ! control value
 REAL, DIMENSION(D%NIJT) :: ZSURF
 REAL, DIMENSION(D%NIJT,D%NKT) :: ZSHEAR,ZDUDZ,ZDVDZ ! vertical wind shear
 !
-REAL, DIMENSION(D%NIJT,D%NKT) :: ZWK
+REAL, DIMENSION(D%NIJT,D%NKT) :: ZWK, KDEPTH
 REAL, DIMENSION(D%NIJT,16) :: ZBUF
 !
 REAL(KIND=JPHOOK) :: ZHOOK_HANDLE
@@ -672,14 +672,24 @@ IF(OENTR_DETR) THEN
   DO JIJ=IIJB,IIJE
      PDEPTH(JIJ) = MAX(0., PZZ(JIJ,KKCTL(JIJ)) -  PZZ(JIJ,KKLCL(JIJ)) )
   END DO
-
+  IF(PARAMMF%LVERLIMUP) THEN
+    DO JK=1,IKT
+      DO JIJ=IIJB,IIJE
+        KDEPTH(JIJ,JK) = MIN(MAX(0., PZZ(JIJ,JK) -  PZZ(JIJ,KKLCL(JIJ)) ), PDEPTH(JIJ))
+      END DO
+    END DO
+  END IF
   !$mnh_expand_array(JIJ=IIJB:IIJE)
   GWORK1(IIJB:IIJE)= (GTESTLCL(IIJB:IIJE) .AND. (PDEPTH(IIJB:IIJE) > ZDEPTH_MAX1) )
   !$mnh_end_expand_array(JIJ=IIJB:IIJE)
   DO JK=1,IKT
     !$mnh_expand_array(JIJ=IIJB:IIJE)
     GWORK2(IIJB:IIJE,JK) = GWORK1(IIJB:IIJE)
-    ZCOEF(IIJB:IIJE,JK) = (1.-(PDEPTH(IIJB:IIJE)-ZDEPTH_MAX1)/(ZDEPTH_MAX2-ZDEPTH_MAX1))
+    IF(PARAMMF%LVERLIMUP) THEN
+      ZCOEF(IIJB:IIJE,JK) = (1.-(KDEPTH(IIJB:IIJE,JK)-ZDEPTH_MAX1)/(ZDEPTH_MAX2-ZDEPTH_MAX1))
+    ELSE
+      ZCOEF(IIJB:IIJE,JK) = (1.-(PDEPTH(IIJB:IIJE)-ZDEPTH_MAX1)/(ZDEPTH_MAX2-ZDEPTH_MAX1))
+    END IF
     ZCOEF(IIJB:IIJE,JK)=MIN(MAX(ZCOEF(IIJB:IIJE,JK),0.),1.)
     !$mnh_end_expand_array(JIJ=IIJB:IIJE)
   ENDDO