diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h
index eede39cb4307f248d5e1546fd3f8495236503f78..7ddc155f2de2dbf32efd8909ec8509d1a19bc049 100644
--- a/source/Lib/CommonLib/TypeDef.h
+++ b/source/Lib/CommonLib/TypeDef.h
@@ -58,6 +58,9 @@
 
 #define JVET_L0104_NO_4x4BI_INTER_CU                      1 // Prohibit 4x4 bi-prediction for inter CU
 #define JVET_L0266_HMVP                                   1 //History-based MVP
+#if JVET_L0266_HMVP
+#define JVET_L0158_L0106_RESET_BUFFER                     1 //reset the history buffer on HMVP
+#endif
 
 #define JVET_L0553_FIX_INITQP                             1
 #define JVET_L0053_L0272_DM                               1 // use center position of luma block to derive DM
diff --git a/source/Lib/DecoderLib/DecSlice.cpp b/source/Lib/DecoderLib/DecSlice.cpp
index 3ad162dd6c0d53af6c3f6ef882f28afc768c69fc..523619d8c998652859ff32e054e65b86fddf9ac9 100644
--- a/source/Lib/DecoderLib/DecSlice.cpp
+++ b/source/Lib/DecoderLib/DecSlice.cpp
@@ -230,6 +230,13 @@ void DecSlice::decompressSlice( Slice* slice, InputBitstream* bitstream )
     }
 #endif
 
+#if JVET_L0158_L0106_RESET_BUFFER
+    if (cs.slice->getSliceType() != I_SLICE && ctuXPosInCtus == 0)
+    {
+      cs.slice->resetMotionLUTs();
+    }
+#endif
+
     isLastCtuOfSliceSegment = cabacReader.coding_tree_unit( cs, ctuArea, pic->m_prevQP, ctuRsAddr );
 
     m_pcCuDecoder->decompressCtu( cs, ctuArea );
diff --git a/source/Lib/EncoderLib/EncSlice.cpp b/source/Lib/EncoderLib/EncSlice.cpp
index 84994c21fa1caedb22671714471d3e72aae63503..108a61c76286efee9fd2fc79597643b6917c36fc 100644
--- a/source/Lib/EncoderLib/EncSlice.cpp
+++ b/source/Lib/EncoderLib/EncSlice.cpp
@@ -1538,6 +1538,13 @@ void EncSlice::encodeCtus( Picture* pcPic, const bool bCompressEntireSlice, cons
     const UnitArea ctuArea( cs.area.chromaFormat, Area( pos.x, pos.y, pcv.maxCUWidth, pcv.maxCUHeight ) );
     DTRACE_UPDATE( g_trace_ctx, std::make_pair( "ctu", ctuRsAddr ) );
 
+#if JVET_L0158_L0106_RESET_BUFFER
+    if ( pcSlice->getSliceType() != I_SLICE && ctuXPosInCtus == 0)
+    {
+      pcSlice->resetMotionLUTs();
+    }
+#endif
+
 #if ENABLE_WPP_PARALLELISM
     pcPic->scheduler.wait( ctuXPosInCtus, ctuYPosInCtus );
 #endif