diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h
index b5fc0c048c827e594f712a1ca0b0ab498a809133..2c5a8993f5a098250eb1ef2a866454b1c10afdd3 100644
--- a/source/Lib/CommonLib/TypeDef.h
+++ b/source/Lib/CommonLib/TypeDef.h
@@ -53,6 +53,9 @@
 // clang-format off
 
 //########### place macros to be removed in next cycle below this line ###############
+
+#define JVET_X0128_V2_WPP                                 1 // JVET-X0128 method 2, VVC v2 WPP
+
 #define JVET_X0079_MODIFIED_BITRATE                       1 // JVET-X0079v3 (changes to JVET-W2005)
 
 #define JVET_X0106_INTRA_CONSTRAINT                       1 // JVET-X0106 Constraint on non I=frames in Intra profiles
diff --git a/source/Lib/DecoderLib/DecSlice.cpp b/source/Lib/DecoderLib/DecSlice.cpp
index df27bae1ce4b014468107f9a82983fdd40e95c98..81bca9782dd50076e1ff85d51eed64aece92b17d 100644
--- a/source/Lib/DecoderLib/DecSlice.cpp
+++ b/source/Lib/DecoderLib/DecSlice.cpp
@@ -203,6 +203,9 @@ void DecSlice::decompressSlice( Slice* slice, InputBitstream* bitstream, int deb
       {
         // Top is available, so use it.
         cabacReader.getCtx() = m_entropyCodingSyncContextState;
+#if JVET_X0128_V2_WPP
+        cabacReader.getCtx().riceStatReset(slice->getSPS()->getBitDepth(CHANNEL_TYPE_LUMA), slice->getSPS()->getSpsRangeExtension().getPersistentRiceAdaptationEnabledFlag());
+#endif
         cs.setPrevPLT(m_palettePredictorSyncState);
       }
       pic->m_prevQP[0] = pic->m_prevQP[1] = slice->getSliceQp();
diff --git a/source/Lib/EncoderLib/EncSlice.cpp b/source/Lib/EncoderLib/EncSlice.cpp
index f640dd112481e745f1c15daf604085c77555cf2e..8c0560d0723d97d8be8fdeb7fdb8a5cc42fa6984 100644
--- a/source/Lib/EncoderLib/EncSlice.cpp
+++ b/source/Lib/EncoderLib/EncSlice.cpp
@@ -1774,6 +1774,11 @@ void EncSlice::encodeCtus( Picture* pcPic, const bool bCompressEntireSlice, cons
       {
         // Top is available, we use it.
         pCABACWriter->getCtx() = pEncLib->m_entropyCodingSyncContextState;
+#if JVET_X0128_V2_WPP
+        pCABACWriter->getCtx().riceStatReset(
+          pcSlice->getSPS()->getBitDepth(CHANNEL_TYPE_LUMA),
+          pcSlice->getSPS()->getSpsRangeExtension().getPersistentRiceAdaptationEnabledFlag());
+#endif
         cs.setPrevPLT(pEncLib->m_palettePredictorSyncState);
       }
       prevQP[0] = prevQP[1] = pcSlice->getSliceQp();
@@ -2054,6 +2059,11 @@ void EncSlice::encodeSlice   ( Picture* pcPic, OutputBitstream* pcSubstreams, ui
       {
         // Top is available, so use it.
         m_CABACWriter->getCtx() = m_entropyCodingSyncContextState;
+#if JVET_X0128_V2_WPP
+        m_CABACWriter->getCtx().riceStatReset(
+          pcSlice->getSPS()->getBitDepth(CHANNEL_TYPE_LUMA),
+          pcSlice->getSPS()->getSpsRangeExtension().getPersistentRiceAdaptationEnabledFlag());
+#endif
         cs.setPrevPLT(m_palettePredictorSyncState);
       }
     }