diff --git a/source/App/EncoderApp/EncAppCfg.cpp b/source/App/EncoderApp/EncAppCfg.cpp
index 23fce78dc386bcf8d9336f5468fc7818e2c5cc7c..3d154cd966c22f3b21e40f8784d80bc80cec3985 100644
--- a/source/App/EncoderApp/EncAppCfg.cpp
+++ b/source/App/EncoderApp/EncAppCfg.cpp
@@ -877,7 +877,7 @@ bool EncAppCfg::parseCfg( int argc, char* argv[] )
   ("AffineAmvrEncOpt",                                m_AffineAmvrEncOpt,                               false, "Enable encoder optimization of affine AMVR")
 #endif
 #if JVET_M0147_DMVR
-  ("DMVR",                                            m_DMVR,        
+  ("DMVR",                                            m_DMVR,                                           false, "Decoder-side Motion Vector Refinement")
 #endif
   ( "IBC",                                            m_IBCMode,                                           0u, "IBCMode (0x1:enabled, 0x0:disabled)  [default: disabled]")
   ( "IBCLocalSearchRangeX",                           m_IBCLocalSearchRangeX,                            128u, "Search range of IBC local search in x direction")
diff --git a/source/Lib/CommonLib/Buffer.cpp b/source/Lib/CommonLib/Buffer.cpp
index ad437016a5712f2c411c35c5281ec191b84889da..f245bff72d8aa2a3ebe80d1569707cdaf63a5b7d 100644
--- a/source/Lib/CommonLib/Buffer.cpp
+++ b/source/Lib/CommonLib/Buffer.cpp
@@ -327,15 +327,15 @@ void copyBufferCore(Pel *src, int srcStride, Pel *dst, int dstStride, int width,
   }
 }
 
-void paddingCore(Pel *ptr, int iStride, int iWidth, int iHeight, int padSize)
+void paddingCore(Pel *ptr, int stride, int width, int height, int padSize)
 {
   /*left and right padding*/
   Pel *ptrTemp1 = ptr;
-  Pel *ptrTemp2 = ptr + (iWidth - 1);
+  Pel *ptrTemp2 = ptr + (width - 1);
   int offset = 0;
-  for (int i = 0; i < iHeight; i++)
+  for (int i = 0; i < height; i++)
   {
-    offset = iStride * i;
+    offset = stride * i;
     for (int j = 1; j <= padSize; j++)
     {
       *(ptrTemp1 - j + offset) = *(ptrTemp1 + offset);
@@ -343,13 +343,13 @@ void paddingCore(Pel *ptr, int iStride, int iWidth, int iHeight, int padSize)
     }
   }
   /*Top and Bottom padding*/
-  int numBytes = (iWidth + padSize + padSize) * sizeof(Pel);
+  int numBytes = (width + padSize + padSize) * sizeof(Pel);
   ptrTemp1 = (ptr - padSize);
-  ptrTemp2 = (ptr + (iStride * (iHeight - 1)) - padSize);
+  ptrTemp2 = (ptr + (stride * (height - 1)) - padSize);
   for (int i = 1; i <= padSize; i++)
   {
-    memcpy(ptrTemp1 - (i * iStride), (ptrTemp1), numBytes);
-    memcpy(ptrTemp2 + (i * iStride), (ptrTemp2), numBytes);
+    memcpy(ptrTemp1 - (i * stride), (ptrTemp1), numBytes);
+    memcpy(ptrTemp2 + (i * stride), (ptrTemp2), numBytes);
   }
 }
 #endif
diff --git a/source/Lib/CommonLib/Buffer.h b/source/Lib/CommonLib/Buffer.h
index 50b6571771024191c73e4516247caa25b9b6448f..3d9c703aba7db39907bbee5f61012bd6bfbefda7 100644
--- a/source/Lib/CommonLib/Buffer.h
+++ b/source/Lib/CommonLib/Buffer.h
@@ -96,7 +96,7 @@ extern PelBufferOps g_pelBufOP;
 
 
 #if JVET_M0147_DMVR
-void paddingCore(Pel *ptr, int iStride, int iWidth, int iHeight, int padSize);
+void paddingCore(Pel *ptr, int stride, int width, int height, int padSize);
 void copyBufferCore(Pel *src, int srcStride, Pel *Dst, int dstStride, int width, int height);
 #endif
 
diff --git a/source/Lib/CommonLib/CommonDef.h b/source/Lib/CommonLib/CommonDef.h
index bc2d375cb4704db3fc0cf74e161ceb2750fc336e..b2b7a9135047231cd348114148e5ac13b116ea1a 100644
--- a/source/Lib/CommonLib/CommonDef.h
+++ b/source/Lib/CommonLib/CommonDef.h
@@ -117,7 +117,7 @@ static const double AFFINE_ME_LIST_MVP_TH =                        1.0;
 // ====================================================================================================================
 // Common constants
 // ====================================================================================================================
-
+static const uint64_t   MAX_UINT64 =                  0xFFFFFFFFFFFFFFFFU;
 static const uint32_t   MAX_UINT =                            0xFFFFFFFFU; ///< max. value of unsigned 32-bit integer
 static const int    MAX_INT =                              2147483647; ///< max. value of signed 32-bit integer
 static const uint8_t  MAX_UCHAR =                                   255;
diff --git a/source/Lib/CommonLib/InterPrediction.cpp b/source/Lib/CommonLib/InterPrediction.cpp
index 9108117e1ea4deefcd042e06a73e6edcfdcdfb9e..0b426e3c004a72e2e0b2734d2d110bed8aed9d27 100644
--- a/source/Lib/CommonLib/InterPrediction.cpp
+++ b/source/Lib/CommonLib/InterPrediction.cpp
@@ -170,8 +170,8 @@ void InterPrediction::init( RdCost* pcRdCost, ChromaFormat chromaFormatIDC )
       int extWidth = MAX_CU_SIZE + (2 * BIO_EXTEND_SIZE + 2) + 16;
       int extHeight = MAX_CU_SIZE + (2 * BIO_EXTEND_SIZE + 2) + 1;
 #if JVET_M0147_DMVR
-      extWidth = extWidth > (MAX_CU_SIZE + (DMVR_NUM_ITERATION << 1) + 16) ? extWidth : MAX_CU_SIZE + (DMVR_NUM_ITERATION << 1) + 16;
-      extHeight = extHeight > (MAX_CU_SIZE + (DMVR_NUM_ITERATION << 1) + 1) ? extHeight : MAX_CU_SIZE + (DMVR_NUM_ITERATION << 1) + 1;
+      extWidth = extWidth > (MAX_CU_SIZE + (2 * DMVR_NUM_ITERATION) + 16) ? extWidth : MAX_CU_SIZE + (2 * DMVR_NUM_ITERATION) + 16;
+      extHeight = extHeight > (MAX_CU_SIZE + (2 * DMVR_NUM_ITERATION) + 1) ? extHeight : MAX_CU_SIZE + (2 * DMVR_NUM_ITERATION) + 1;
 #endif
       for( uint32_t i = 0; i < LUMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS_SIGNAL; i++ )
       {
@@ -201,12 +201,12 @@ void InterPrediction::init( RdCost* pcRdCost, ChromaFormat chromaFormatIDC )
   }
 
 #if JVET_M0147_DMVR
-  m_cYuvPredTempDMVRL0 = (Pel*)xMalloc(Pel, (MAX_CU_SIZE + (DMVR_NUM_ITERATION << 1)) * (MAX_CU_SIZE + (DMVR_NUM_ITERATION << 1)));
-  m_cYuvPredTempDMVRL1 = (Pel*)xMalloc(Pel, (MAX_CU_SIZE + (DMVR_NUM_ITERATION << 1)) * (MAX_CU_SIZE + (DMVR_NUM_ITERATION << 1)));
+  m_cYuvPredTempDMVRL0 = (Pel*)xMalloc(Pel, (MAX_CU_SIZE + (2 * DMVR_NUM_ITERATION)) * (MAX_CU_SIZE + (2 * DMVR_NUM_ITERATION)));
+  m_cYuvPredTempDMVRL1 = (Pel*)xMalloc(Pel, (MAX_CU_SIZE + (2 * DMVR_NUM_ITERATION)) * (MAX_CU_SIZE + (2 * DMVR_NUM_ITERATION)));
   for (uint32_t ch = 0; ch < MAX_NUM_COMPONENT; ch++)
   {    
-    m_cRefSamplesDMVRL0[ch] = (Pel*)xMalloc(Pel, (MAX_CU_SIZE + (DMVR_NUM_ITERATION << 1) + NTAPS_LUMA) * (MAX_CU_SIZE + (DMVR_NUM_ITERATION << 1) + NTAPS_LUMA));
-    m_cRefSamplesDMVRL1[ch] = (Pel*)xMalloc(Pel, (MAX_CU_SIZE + (DMVR_NUM_ITERATION << 1) + NTAPS_LUMA) * (MAX_CU_SIZE + (DMVR_NUM_ITERATION << 1) + NTAPS_LUMA));
+    m_cRefSamplesDMVRL0[ch] = (Pel*)xMalloc(Pel, (MAX_CU_SIZE + (2 * DMVR_NUM_ITERATION) + NTAPS_LUMA) * (MAX_CU_SIZE + (2 * DMVR_NUM_ITERATION) + NTAPS_LUMA));
+    m_cRefSamplesDMVRL1[ch] = (Pel*)xMalloc(Pel, (MAX_CU_SIZE + (2 * DMVR_NUM_ITERATION) + NTAPS_LUMA) * (MAX_CU_SIZE + (2 * DMVR_NUM_ITERATION) + NTAPS_LUMA));
   }
 #endif
 #if !JVET_J0090_MEMORY_BANDWITH_MEASURE
@@ -507,8 +507,8 @@ void InterPrediction::xPredInterBi(PredictionUnit& pu, PelUnitBuf &pcYuvPred)
   }
 #endif
 #if JVET_M0147_DMVR
-  bool bDMVRApplied = false;
-  bDMVRApplied = (pu.mvRefine) && PU::checkDMVRCondition(pu);
+  bool dmvrApplied = false;
+  dmvrApplied = (pu.mvRefine) && PU::checkDMVRCondition(pu);
 #endif
   for (uint32_t refList = 0; refList < NUM_REF_PIC_LIST_01; refList++)
   {
@@ -529,7 +529,7 @@ void InterPrediction::xPredInterBi(PredictionUnit& pu, PelUnitBuf &pcYuvPred)
     if (pu.refIdx[0] >= 0 && pu.refIdx[1] >= 0)
     {
 #if JVET_M0147_DMVR
-      if (bDMVRApplied)
+      if (dmvrApplied)
         continue; // mc will happen in processDMVR
 #endif
       xPredInterUni ( pu, eRefPicList, pcMbBuf, true
@@ -556,7 +556,7 @@ void InterPrediction::xPredInterBi(PredictionUnit& pu, PelUnitBuf &pcYuvPred)
     }
   }
 #if JVET_M0147_DMVR
-  if (bDMVRApplied)
+  if (dmvrApplied)
   {
     xProcessDMVR(pu, pcYuvPred, slice.clpRngs(), bioApplied);
   }
@@ -580,7 +580,7 @@ void InterPrediction::xPredInterBi(PredictionUnit& pu, PelUnitBuf &pcYuvPred)
   else
   {
 #if JVET_M0147_DMVR
-    if (bDMVRApplied == false)
+    if (dmvrApplied == false)
     {
 #endif
     xWeightedAverage( pu, srcPred0, srcPred1, pcYuvPred, slice.getSPS()->getBitDepths(), slice.clpRngs(), bioApplied );
@@ -1583,24 +1583,23 @@ void InterPrediction::xWeightedTriangleBlk( const PredictionUnit &pu, const uint
 }
 
 #if JVET_M0147_DMVR
-const uint64_t   MAX_UINT64 = 0xFFFFFFFFFFFFFFFFU;
 void InterPrediction::xPrefetchPad(PredictionUnit& pu, PelUnitBuf &pcPad, RefPicList refId)
 {
   int offset, width, height;
   int padsize;
   Mv cMv;
   const Picture* refPic = pu.cu->slice->getRefPic(refId, pu.refIdx[refId]);
-  int mvshift = (MV_FRACTIONAL_BITS_INTERNAL);
+  int mvShift = (MV_FRACTIONAL_BITS_INTERNAL);
   for (int compID = 0; compID < MAX_NUM_COMPONENT; compID++)
   {
     cMv = Mv(pu.mv[refId].getHor(), pu.mv[refId].getVer());
-    pcPad.bufs[compID].stride = (MAX_CU_SIZE + (DMVR_NUM_ITERATION << 1) + NTAPS_LUMA);
+    pcPad.bufs[compID].stride = (MAX_CU_SIZE + (2 * DMVR_NUM_ITERATION) + NTAPS_LUMA);
     int filtersize = (compID == (COMPONENT_Y)) ? NTAPS_LUMA : NTAPS_CHROMA;
     width = pcPad.bufs[compID].width;
     height = pcPad.bufs[compID].height;
     offset = (DMVR_NUM_ITERATION) * (pcPad.bufs[compID].stride + 1);
     padsize = (DMVR_NUM_ITERATION) >> getComponentScaleX((ComponentID)compID, pu.chromaFormat);
-    int mvshiftTemp = mvshift + getComponentScaleX((ComponentID)compID, pu.chromaFormat);
+    int mvshiftTemp = mvShift + getComponentScaleX((ComponentID)compID, pu.chromaFormat);
     width += (filtersize - 1);
     height += (filtersize - 1);
     cMv += Mv(-(((filtersize >> 1) - 1) << mvshiftTemp),
@@ -1657,19 +1656,19 @@ inline int32_t div_for_maxq7(int64_t N, int64_t D)
 
 void xSubPelErrorSrfc(uint64_t *sadBuffer, int32_t *deltaMv)
 {
-  int64_t iNum, iDenom;
-  int32_t iMvDeltaSubPel;
-  int32_t MvSubPelLvl = 4;/*1: half pel, 2: Qpel, 3:1/8, 4: 1/16*/
+  int64_t numerator, denominator;
+  int32_t mvDeltaSubPel;
+  int32_t mvSubPelLvl = 4;/*1: half pel, 2: Qpel, 3:1/8, 4: 1/16*/
                                                         /*horizontal*/
-    iNum = (int64_t)((sadBuffer[1] - sadBuffer[3]) << MvSubPelLvl);
-    iDenom = (int64_t)((sadBuffer[1] + sadBuffer[3] - (sadBuffer[0] << 1)));
+    numerator = (int64_t)((sadBuffer[1] - sadBuffer[3]) << mvSubPelLvl);
+    denominator = (int64_t)((sadBuffer[1] + sadBuffer[3] - (sadBuffer[0] << 1)));
 
-    if (0 != iDenom)
+    if (0 != denominator)
     {
       if ((sadBuffer[1] != sadBuffer[0]) && (sadBuffer[3] != sadBuffer[0]))
       {
-        iMvDeltaSubPel = div_for_maxq7(iNum, iDenom);
-        deltaMv[0] = (iMvDeltaSubPel);
+        mvDeltaSubPel = div_for_maxq7(numerator, denominator);
+        deltaMv[0] = (mvDeltaSubPel);
       }
       else
       {
@@ -1685,14 +1684,14 @@ void xSubPelErrorSrfc(uint64_t *sadBuffer, int32_t *deltaMv)
     }
 
     /*vertical*/
-    iNum = (int64_t)((sadBuffer[2] - sadBuffer[4]) << MvSubPelLvl);
-    iDenom = (int64_t)((sadBuffer[2] + sadBuffer[4] - (sadBuffer[0] << 1)));
-    if (0 != iDenom)
+    numerator = (int64_t)((sadBuffer[2] - sadBuffer[4]) << mvSubPelLvl);
+    denominator = (int64_t)((sadBuffer[2] + sadBuffer[4] - (sadBuffer[0] << 1)));
+    if (0 != denominator)
     {
       if ((sadBuffer[2] != sadBuffer[0]) && (sadBuffer[4] != sadBuffer[0]))
       {
-        iMvDeltaSubPel = div_for_maxq7(iNum, iDenom);
-        deltaMv[1] = (iMvDeltaSubPel);
+        mvDeltaSubPel = div_for_maxq7(numerator, denominator);
+        deltaMv[1] = (mvDeltaSubPel);
       }
       else
       {
@@ -1709,7 +1708,7 @@ void xSubPelErrorSrfc(uint64_t *sadBuffer, int32_t *deltaMv)
   return;
 }
 
-void InterPrediction::xBIPMVRefine(int bd, Pel *pRefL0, Pel *pRefL1, uint64_t& minCost, int16_t *delta_mv, uint64_t *pSADsArray, int width, int height)
+void InterPrediction::xBIPMVRefine(int bd, Pel *pRefL0, Pel *pRefL1, uint64_t& minCost, int16_t *deltaMV, uint64_t *pSADsArray, int width, int height)
 {
   const int32_t refStrideL0 = m_biLinearBufStride;
   const int32_t refStrideL1 = m_biLinearBufStride;
@@ -1717,18 +1716,18 @@ void InterPrediction::xBIPMVRefine(int bd, Pel *pRefL0, Pel *pRefL1, uint64_t& m
   Pel *pRefL1Orig = pRefL1;
   for (int nIdx = SAD_BOTTOM; nIdx <= SAD_TOP_LEFT; ++nIdx)
   {
-    int32_t SadOffset = ((m_pSearchOffset[nIdx].getVer() * ((DMVR_NUM_ITERATION << 1) + 1)) + m_pSearchOffset[nIdx].getHor());
+    int32_t sadOffset = ((m_pSearchOffset[nIdx].getVer() * ((2 * DMVR_NUM_ITERATION) + 1)) + m_pSearchOffset[nIdx].getHor());
     pRefL0 = pRefL0Orig + m_pSearchOffset[nIdx].hor + (m_pSearchOffset[nIdx].ver * refStrideL0);
     pRefL1 = pRefL1Orig - m_pSearchOffset[nIdx].hor - (m_pSearchOffset[nIdx].ver * refStrideL1);
-    if (*(pSADsArray + SadOffset) == MAX_UINT64)
+    if (*(pSADsArray + sadOffset) == MAX_UINT64)
     {
       const uint64_t cost = xDMVRCost(bd, pRefL0, refStrideL0, pRefL1, refStrideL1, width, height);
-      *(pSADsArray + SadOffset) = cost;
+      *(pSADsArray + sadOffset) = cost;
     }
     if (nIdx == SAD_LEFT)
     {
       int32_t down = -1, right = -1;
-      if (pSADsArray[(((DMVR_NUM_ITERATION << 1) + 1))] < pSADsArray[-(((DMVR_NUM_ITERATION << 1) + 1))])
+      if (pSADsArray[(((2 * DMVR_NUM_ITERATION) + 1))] < pSADsArray[-(((2 * DMVR_NUM_ITERATION) + 1))])
       {
         down = 1;
       }
@@ -1738,16 +1737,16 @@ void InterPrediction::xBIPMVRefine(int bd, Pel *pRefL0, Pel *pRefL1, uint64_t& m
       }
       m_pSearchOffset[SAD_TOP_LEFT].set(right, down);
     }
-    if (*(pSADsArray + SadOffset) < minCost)
+    if (*(pSADsArray + sadOffset) < minCost)
     {
-      minCost = *(pSADsArray + SadOffset);
-      delta_mv[0] = m_pSearchOffset[nIdx].getHor();
-      delta_mv[1] = m_pSearchOffset[nIdx].getVer();
+      minCost = *(pSADsArray + sadOffset);
+      deltaMV[0] = m_pSearchOffset[nIdx].getHor();
+      deltaMV[1] = m_pSearchOffset[nIdx].getVer();
     }
   }
 }
 
-void InterPrediction::xFinalPaddedMCForDMVR(PredictionUnit& pu, PelUnitBuf &pcYuvSrc0, PelUnitBuf &pcYuvSrc1, PelUnitBuf &pcPad0, PelUnitBuf &pcPad1, const bool bBIOApplied
+void InterPrediction::xFinalPaddedMCForDMVR(PredictionUnit& pu, PelUnitBuf &pcYuvSrc0, PelUnitBuf &pcYuvSrc1, PelUnitBuf &pcPad0, PelUnitBuf &pcPad1, const bool bioApplied
   , const Mv mergeMV[NUM_REF_PIC_LIST_01]
 )
 {
@@ -1756,7 +1755,7 @@ void InterPrediction::xFinalPaddedMCForDMVR(PredictionUnit& pu, PelUnitBuf &pcYu
   PelUnitBuf pcYUVTemp = pcYuvSrc0;
   PelUnitBuf pcPadTemp = pcPad0;
   /*always high precision MVs are used*/
-  int mvshift = 4;
+  int mvShift = MV_FRACTIONAL_BITS_INTERNAL;
 
   for (int k = 0; k < NUM_REF_PIC_LIST_01; k++)
   {
@@ -1771,7 +1770,7 @@ void InterPrediction::xFinalPaddedMCForDMVR(PredictionUnit& pu, PelUnitBuf &pcYu
 
     for (int compID = 0; compID < MAX_NUM_COMPONENT; compID++)
     {
-      int mvshiftTemp = mvshift + getComponentScaleX((ComponentID)compID, pu.chromaFormat);
+      int mvshiftTemp = mvShift + getComponentScaleX((ComponentID)compID, pu.chromaFormat);
       int leftPixelExtra;
       if (compID == COMPONENT_Y)
       {
@@ -1794,53 +1793,53 @@ void InterPrediction::xFinalPaddedMCForDMVR(PredictionUnit& pu, PelUnitBuf &pcYu
       offset += (deltaIntMvX);
       PelBuf &srcBuf = pcPadTemp.bufs[compID];
       xPredInterBlk((ComponentID)compID, pu, refPic, cMv, pcYUVTemp, true, pu.cs->slice->getClpRngs().comp[compID],
-        bBIOApplied, false, 0, 0, 0, (srcBuf.buf + offset), pcPadTemp.bufs[compID].stride);
+        bioApplied, false, 0, 0, 0, (srcBuf.buf + offset), pcPadTemp.bufs[compID].stride);
     }
     pcYUVTemp = pcYuvSrc1;
     pcPadTemp = pcPad1;
   }
 }
 
-uint64_t InterPrediction::xDMVRCost(int iBitDepth, Pel* pOrg, uint32_t uiRefStride, const Pel* pRef, uint32_t uiOrgStride, int iWidth, int iHeight)
+uint64_t InterPrediction::xDMVRCost(int bitDepth, Pel* pOrg, uint32_t refStride, const Pel* pRef, uint32_t orgStride, int width, int height)
 {
   DistParam cDistParam;
   cDistParam.applyWeight = false;
   cDistParam.useMR = false;
-  m_pcRdCost->setDistParam(cDistParam, pOrg, pRef, uiOrgStride, uiRefStride, iBitDepth, COMPONENT_Y, iWidth, iHeight , 1);
+  m_pcRdCost->setDistParam(cDistParam, pOrg, pRef, orgStride, refStride, bitDepth, COMPONENT_Y, width, height, 1);
   uint64_t uiCost = cDistParam.distFunc(cDistParam);
   return uiCost;
 }
 
-void xDMVRSubPixelErrorSurface(bool notZeroCost, int16_t *total_delta_mv, int16_t *delta_mv, uint64_t *pSADsArray)
+void xDMVRSubPixelErrorSurface(bool notZeroCost, int16_t *totalDeltaMV, int16_t *deltaMV, uint64_t *pSADsArray)
 {
 
-  int sadStride = (((DMVR_NUM_ITERATION << 1) + 1));
+  int sadStride = (((2 * DMVR_NUM_ITERATION) + 1));
   uint64_t sadbuffer[5];
-  int32_t deltaMv[2] = { 0,0 };
-  if (notZeroCost && delta_mv[0] == 0 && delta_mv[1] == 0)
+  if (notZeroCost && deltaMV[0] == 0 && deltaMV[1] == 0)
   {
+    int32_t tempDeltaMv[2] = { 0,0 };
     sadbuffer[0] = pSADsArray[0];
     sadbuffer[1] = pSADsArray[-1];
     sadbuffer[2] = pSADsArray[-sadStride];
     sadbuffer[3] = pSADsArray[1];
     sadbuffer[4] = pSADsArray[sadStride];
-    xSubPelErrorSrfc(sadbuffer, deltaMv);
-    total_delta_mv[0] += deltaMv[0];
-    total_delta_mv[1] += deltaMv[1];
+    xSubPelErrorSrfc(sadbuffer, tempDeltaMv);
+    totalDeltaMV[0] += tempDeltaMv[0];
+    totalDeltaMV[1] += tempDeltaMv[1];
   }
 }
 
 void InterPrediction::xinitMC(PredictionUnit& pu, const ClpRngs &clpRngs)
 {
-  const int iRefIdx0 = pu.refIdx[0];
-  const int iRefIdx1 = pu.refIdx[1];
+  const int refIdx0 = pu.refIdx[0];
+  const int refIdx1 = pu.refIdx[1];
   /*use merge MV as starting MV*/
-  Mv StartingMVL0(pu.mv[REF_PIC_LIST_0]);
-  Mv StartingMVL1(pu.mv[REF_PIC_LIST_1]);
+  Mv mergeMVL0(pu.mv[REF_PIC_LIST_0]);
+  Mv mergeMVL1(pu.mv[REF_PIC_LIST_1]);
 
   /*Clip the starting MVs*/
-  clipMv(StartingMVL0, pu.lumaPos(), pu.lumaSize(), *pu.cs->sps);
-  clipMv(StartingMVL1, pu.lumaPos(), pu.lumaSize(), *pu.cs->sps);
+  clipMv(mergeMVL0, pu.lumaPos(), pu.lumaSize(), *pu.cs->sps);
+  clipMv(mergeMVL1, pu.lumaPos(), pu.lumaSize(), *pu.cs->sps);
 
   /*L0 MC for refinement*/
   {
@@ -1851,10 +1850,10 @@ void InterPrediction::xinitMC(PredictionUnit& pu, const ClpRngs &clpRngs)
     offset += (-(int)DMVR_NUM_ITERATION);
     PelBuf srcBuf = m_cYuvRefBuffDMVRL0.bufs[COMPONENT_Y];
     PelUnitBuf yuvPredTempL0 = PelUnitBuf(pu.chromaFormat, PelBuf(m_cYuvPredTempDMVRL0,
-      (MAX_CU_SIZE + (DMVR_NUM_ITERATION << 1)), pu.lwidth() + (DMVR_NUM_ITERATION << 1), pu.lheight() + (DMVR_NUM_ITERATION << 1)));
+      (MAX_CU_SIZE + (2 * DMVR_NUM_ITERATION)), pu.lwidth() + (2 * DMVR_NUM_ITERATION), pu.lheight() + (2 * DMVR_NUM_ITERATION)));
 
-    xPredInterBlk(COMPONENT_Y, pu, pu.cu->slice->getRefPic(REF_PIC_LIST_0, iRefIdx0), StartingMVL0, yuvPredTempL0, true, clpRngs.comp[COMPONENT_Y],
-      false, false, pu.lwidth() + (DMVR_NUM_ITERATION << 1), pu.lheight() + (DMVR_NUM_ITERATION << 1), true, ((Pel *)srcBuf.buf) + offset, srcBuf.stride
+    xPredInterBlk(COMPONENT_Y, pu, pu.cu->slice->getRefPic(REF_PIC_LIST_0, refIdx0), mergeMVL0, yuvPredTempL0, true, clpRngs.comp[COMPONENT_Y],
+      false, false, pu.lwidth() + (2 * DMVR_NUM_ITERATION), pu.lheight() + (2 * DMVR_NUM_ITERATION), true, ((Pel *)srcBuf.buf) + offset, srcBuf.stride
     );
   }
 
@@ -1867,18 +1866,16 @@ void InterPrediction::xinitMC(PredictionUnit& pu, const ClpRngs &clpRngs)
     offset += (-(int)DMVR_NUM_ITERATION);
     PelBuf srcBuf = m_cYuvRefBuffDMVRL1.bufs[COMPONENT_Y];
     PelUnitBuf yuvPredTempL1 = PelUnitBuf(pu.chromaFormat, PelBuf(m_cYuvPredTempDMVRL1,
-      (MAX_CU_SIZE + (DMVR_NUM_ITERATION << 1)), pu.lwidth() + (DMVR_NUM_ITERATION << 1), pu.lheight() + (DMVR_NUM_ITERATION << 1)));
+      (MAX_CU_SIZE + (2 * DMVR_NUM_ITERATION)), pu.lwidth() + (2 * DMVR_NUM_ITERATION), pu.lheight() + (2 * DMVR_NUM_ITERATION)));
 
-    xPredInterBlk(COMPONENT_Y, pu, pu.cu->slice->getRefPic(REF_PIC_LIST_1, iRefIdx1), StartingMVL1, yuvPredTempL1, true, clpRngs.comp[COMPONENT_Y],
-      false, false, pu.lwidth() + (DMVR_NUM_ITERATION << 1), pu.lheight() + (DMVR_NUM_ITERATION << 1), true, ((Pel *)srcBuf.buf) + offset, srcBuf.stride
+    xPredInterBlk(COMPONENT_Y, pu, pu.cu->slice->getRefPic(REF_PIC_LIST_1, refIdx1), mergeMVL1, yuvPredTempL1, true, clpRngs.comp[COMPONENT_Y],
+      false, false, pu.lwidth() + (2 * DMVR_NUM_ITERATION), pu.lheight() + (2 * DMVR_NUM_ITERATION), true, ((Pel *)srcBuf.buf) + offset, srcBuf.stride
     );
   }
 }
 
-void InterPrediction::xProcessDMVR(PredictionUnit& pu, PelUnitBuf &pcYuvDst, const ClpRngs &clpRngs, const bool bBIOApplied)
+void InterPrediction::xProcessDMVR(PredictionUnit& pu, PelUnitBuf &pcYuvDst, const ClpRngs &clpRngs, const bool bioApplied)
 {  
-  bool bDMVRApplied = true;
-  
   int iterationCount = DMVR_NUM_ITERATION;
   /*Always High Precision*/
   int mvShift = MV_FRACTIONAL_BITS_INTERNAL;
@@ -1886,7 +1883,7 @@ void InterPrediction::xProcessDMVR(PredictionUnit& pu, PelUnitBuf &pcYuvDst, con
   /*use merge MV as starting MV*/
   Mv mergeMv[] = { pu.mv[REF_PIC_LIST_0] , pu.mv[REF_PIC_LIST_1] };
   
-  m_biLinearBufStride = (MAX_CU_SIZE + (DMVR_NUM_ITERATION << 1));  
+  m_biLinearBufStride = (MAX_CU_SIZE + (2 * DMVR_NUM_ITERATION));  
 
   int dy = std::min<int>(pu.lumaSize().height, DMVR_SUBCU_HEIGHT);
   int dx = std::min<int>(pu.lumaSize().width,  DMVR_SUBCU_WIDTH);
@@ -1915,7 +1912,7 @@ void InterPrediction::xProcessDMVR(PredictionUnit& pu, PelUnitBuf &pcYuvDst, con
   Position puPos = pu.lumaPos();
   
   int bd = pu.cs->slice->getClpRngs().comp[COMPONENT_Y].bd;
-  if (bDMVRApplied)
+  
   {
     int num = 0;
 
@@ -1929,11 +1926,11 @@ void InterPrediction::xProcessDMVR(PredictionUnit& pu, PelUnitBuf &pcYuvDst, con
         int16_t totalDeltaMV[2] = { 0,0 };
         int16_t deltaMV[2] = { 0, 0 };
         uint64_t  *pSADsArray;
-        for (int i = 0; i < (((DMVR_NUM_ITERATION << 1) + 1) * ((DMVR_NUM_ITERATION << 1) + 1)); i++)
+        for (int i = 0; i < (((2 * DMVR_NUM_ITERATION) + 1) * ((2 * DMVR_NUM_ITERATION) + 1)); i++)
         {
           m_SADsArray[i] = MAX_UINT64;
         }
-        pSADsArray = &m_SADsArray[(((DMVR_NUM_ITERATION << 1) + 1) * ((DMVR_NUM_ITERATION << 1) + 1)) >> 1];
+        pSADsArray = &m_SADsArray[(((2 * DMVR_NUM_ITERATION) + 1) * ((2 * DMVR_NUM_ITERATION) + 1)) >> 1];
 
         Pel *addrL0Centre = biLinearPredL0 + yStart * m_biLinearBufStride + xStart;
         Pel *addrL1Centre = biLinearPredL1 + yStart * m_biLinearBufStride + xStart;
@@ -1967,7 +1964,7 @@ void InterPrediction::xProcessDMVR(PredictionUnit& pu, PelUnitBuf &pcYuvDst, con
           }
           totalDeltaMV[0] += deltaMV[0];
           totalDeltaMV[1] += deltaMV[1];
-          pSADsArray += ((deltaMV[1] * (((DMVR_NUM_ITERATION << 1) + 1))) + deltaMV[0]);
+          pSADsArray += ((deltaMV[1] * (((2 * DMVR_NUM_ITERATION) + 1))) + deltaMV[0]);
         }
 
         totalDeltaMV[0] = (totalDeltaMV[0] << mvShift);
@@ -2012,12 +2009,12 @@ void InterPrediction::xProcessDMVR(PredictionUnit& pu, PelUnitBuf &pcYuvDst, con
         subPu.mv[1] = mergeMv[REF_PIC_LIST_1] - pu.mvdL0SubPu[num];
         m_cYuvRefBuffSubCuDMVRL0 = m_cYuvRefBuffDMVRL0.subBuf(UnitAreaRelative(pu, subPu));
         m_cYuvRefBuffSubCuDMVRL1 = m_cYuvRefBuffDMVRL1.subBuf(UnitAreaRelative(pu, subPu));
-        xFinalPaddedMCForDMVR(subPu, srcPred0, srcPred1, m_cYuvRefBuffSubCuDMVRL0, m_cYuvRefBuffSubCuDMVRL1, bBIOApplied, mergeMv);
+        xFinalPaddedMCForDMVR(subPu, srcPred0, srcPred1, m_cYuvRefBuffSubCuDMVRL0, m_cYuvRefBuffSubCuDMVRL1, bioApplied, mergeMv);
 
         subPredBuf.bufs[COMPONENT_Y].buf  = pcYuvDst.bufs[COMPONENT_Y].buf + xStart + yStart * dstStride[COMPONENT_Y];
         subPredBuf.bufs[COMPONENT_Cb].buf = pcYuvDst.bufs[COMPONENT_Cb].buf + (xStart >> 1) + ((yStart >> 1) * dstStride[COMPONENT_Cb]);
         subPredBuf.bufs[COMPONENT_Cr].buf = pcYuvDst.bufs[COMPONENT_Cr].buf + (xStart >> 1) + ((yStart >> 1) * dstStride[COMPONENT_Cr]);
-        xWeightedAverage(subPu, srcPred0, srcPred1, subPredBuf, subPu.cu->slice->getSPS()->getBitDepths(), subPu.cu->slice->clpRngs(), bBIOApplied);
+        xWeightedAverage(subPu, srcPred0, srcPred1, subPredBuf, subPu.cu->slice->getSPS()->getBitDepths(), subPu.cu->slice->clpRngs(), bioApplied);
         num++;
       }
     }
diff --git a/source/Lib/CommonLib/InterPrediction.h b/source/Lib/CommonLib/InterPrediction.h
index 44c11d9d919b1fd2fe00d8934ab40be93c8ce51f..d25ef21d7539cebb5b9dd4ecfeb02b4695868863 100644
--- a/source/Lib/CommonLib/InterPrediction.h
+++ b/source/Lib/CommonLib/InterPrediction.h
@@ -119,7 +119,7 @@ protected:
     SAD_COUNT
   };
   Mv m_pSearchOffset[5] = { Mv(0, 1), Mv(0, -1), Mv(1, 0), Mv(-1, 0), Mv(0, 0) };
-  uint64_t m_SADsArray[((DMVR_NUM_ITERATION << 1) + 1) * ((DMVR_NUM_ITERATION << 1) + 1)];
+  uint64_t m_SADsArray[((2 * DMVR_NUM_ITERATION) + 1) * ((2 * DMVR_NUM_ITERATION) + 1)];
 #endif
  
   Pel*                 m_gradX0;
@@ -210,13 +210,13 @@ public:
 #endif
 #if JVET_M0147_DMVR
   void xPrefetchPad(PredictionUnit& pu, PelUnitBuf &pcPad, RefPicList refId);
-  void xFinalPaddedMCForDMVR(PredictionUnit& pu, PelUnitBuf &pcYuvSrc0, PelUnitBuf &pcYuvSrc1, PelUnitBuf &pcPad0, PelUnitBuf &pcPad1, const bool bBIOApplied
+  void xFinalPaddedMCForDMVR(PredictionUnit& pu, PelUnitBuf &pcYuvSrc0, PelUnitBuf &pcYuvSrc1, PelUnitBuf &pcPad0, PelUnitBuf &pcPad1, const bool bioApplied
     , const Mv startMV[NUM_REF_PIC_LIST_01]
   );
-  void xBIPMVRefine(int bd, Pel *pRefL0, Pel *pRefL1, uint64_t& minCost, int16_t *delta_mv, uint64_t *pSADsArray, int width, int height);
-  uint64_t xDMVRCost(int iBitDepth, Pel* pRef, uint32_t uiRefStride, const Pel* pOrg, uint32_t uiOrgStride, int iWidth, int iHeight);
+  void xBIPMVRefine(int bd, Pel *pRefL0, Pel *pRefL1, uint64_t& minCost, int16_t *deltaMV, uint64_t *pSADsArray, int width, int height);
+  uint64_t xDMVRCost(int bitDepth, Pel* pRef, uint32_t refStride, const Pel* pOrg, uint32_t orgStride, int width, int height);
   void xinitMC(PredictionUnit& pu, const ClpRngs &clpRngs);
-  void xProcessDMVR(PredictionUnit& pu, PelUnitBuf &pcYuvDst, const ClpRngs &clpRngs, const bool bBIOApplied );
+  void xProcessDMVR(PredictionUnit& pu, PelUnitBuf &pcYuvDst, const ClpRngs &clpRngs, const bool bioApplied );
 #endif
 
 #if JVET_J0090_MEMORY_BANDWITH_MEASURE
diff --git a/source/Lib/CommonLib/InterpolationFilter.cpp b/source/Lib/CommonLib/InterpolationFilter.cpp
index b33cd496629a813b0a267018d04fc7ee7409796e..3c16052f66e480c48286f60c4eca9fade9f73fff 100644
--- a/source/Lib/CommonLib/InterpolationFilter.cpp
+++ b/source/Lib/CommonLib/InterpolationFilter.cpp
@@ -219,7 +219,7 @@ InterpolationFilter::InterpolationFilter()
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 template<bool isFirst, bool isLast>
 #if JVET_M0147_DMVR
-void InterpolationFilter::filterCopy( const ClpRng& clpRng, const Pel *src, int srcStride, Pel *dst, int dstStride, int width, int height, bool biMC10BitOut)
+void InterpolationFilter::filterCopy( const ClpRng& clpRng, const Pel *src, int srcStride, Pel *dst, int dstStride, int width, int height, bool biMCForDMVR)
 #else
 void InterpolationFilter::filterCopy( const ClpRng& clpRng, const Pel *src, int srcStride, Pel *dst, int dstStride, int width, int height )
 #endif
@@ -249,7 +249,7 @@ void InterpolationFilter::filterCopy( const ClpRng& clpRng, const Pel *src, int
     const int shift = std::max<int>(2, (IF_INTERNAL_PREC - clpRng.bd));
 
 #if JVET_M0147_DMVR
-    if (biMC10BitOut)
+    if (biMCForDMVR)
     {
       int shift10BitOut, offset;
       if ((clpRng.bd - IF_INTERNAL_PREC_BILINEAR) > 0)
@@ -300,7 +300,7 @@ void InterpolationFilter::filterCopy( const ClpRng& clpRng, const Pel *src, int
     const int shift = std::max<int>(2, (IF_INTERNAL_PREC - clpRng.bd));
 
 #if JVET_M0147_DMVR
-    if (biMC10BitOut)
+    if (biMCForDMVR)
     {   
       int shift10BitOut, offset;
       if ((clpRng.bd - IF_INTERNAL_PREC_BILINEAR) > 0)
@@ -376,7 +376,7 @@ void InterpolationFilter::filterCopy( const ClpRng& clpRng, const Pel *src, int
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 template<int N, bool isVertical, bool isFirst, bool isLast>
 #if JVET_M0147_DMVR
-void InterpolationFilter::filter(const ClpRng& clpRng, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, TFilterCoeff const *coeff, bool biMC10BitOut)
+void InterpolationFilter::filter(const ClpRng& clpRng, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, TFilterCoeff const *coeff, bool biMCForDMVR)
 #else
 void InterpolationFilter::filter(const ClpRng& clpRng, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, TFilterCoeff const *coeff)
 #endif
@@ -425,7 +425,7 @@ void InterpolationFilter::filter(const ClpRng& clpRng, Pel const *src, int srcSt
   }
 
 #if JVET_M0147_DMVR
-  if (biMC10BitOut)
+  if (biMCForDMVR)
   {
     shift = IF_FILTER_PREC_BILINEAR - (IF_INTERNAL_PREC_BILINEAR - clpRng.bd);
     offset = 1 << (shift - 1);
@@ -492,7 +492,7 @@ void InterpolationFilter::filter(const ClpRng& clpRng, Pel const *src, int srcSt
  */
 template<int N>
 #if JVET_M0147_DMVR
-void InterpolationFilter::filterHor(const ClpRng& clpRng, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, bool isLast, TFilterCoeff const *coeff, bool biMC10BitOut)
+void InterpolationFilter::filterHor(const ClpRng& clpRng, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, bool isLast, TFilterCoeff const *coeff, bool biMCForDMVR)
 #else
 void InterpolationFilter::filterHor(const ClpRng& clpRng, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, bool isLast, TFilterCoeff const *coeff)
 #endif
@@ -501,7 +501,7 @@ void InterpolationFilter::filterHor(const ClpRng& clpRng, Pel const *src, int sr
   if( N == 8 )
   {
 #if JVET_M0147_DMVR
-    m_filterHor[0][1][isLast](clpRng, src, srcStride, dst, dstStride, width, height, coeff, biMC10BitOut);
+    m_filterHor[0][1][isLast](clpRng, src, srcStride, dst, dstStride, width, height, coeff, biMCForDMVR);
 #else
     m_filterHor[0][1][isLast]( clpRng, src, srcStride, dst, dstStride, width, height, coeff );
 #endif
@@ -509,7 +509,7 @@ void InterpolationFilter::filterHor(const ClpRng& clpRng, Pel const *src, int sr
   else if( N == 4 )
   {
 #if JVET_M0147_DMVR
-    m_filterHor[1][1][isLast](clpRng, src, srcStride, dst, dstStride, width, height, coeff, biMC10BitOut);
+    m_filterHor[1][1][isLast](clpRng, src, srcStride, dst, dstStride, width, height, coeff, biMCForDMVR);
 #else
     m_filterHor[1][1][isLast]( clpRng, src, srcStride, dst, dstStride, width, height, coeff );
 #endif 
@@ -517,7 +517,7 @@ void InterpolationFilter::filterHor(const ClpRng& clpRng, Pel const *src, int sr
   else if( N == 2 )
   {
 #if JVET_M0147_DMVR
-    m_filterHor[2][1][isLast](clpRng, src, srcStride, dst, dstStride, width, height, coeff, biMC10BitOut);
+    m_filterHor[2][1][isLast](clpRng, src, srcStride, dst, dstStride, width, height, coeff, biMCForDMVR);
 #else
     m_filterHor[2][1][isLast]( clpRng, src, srcStride, dst, dstStride, width, height, coeff );
 #endif
@@ -545,7 +545,7 @@ void InterpolationFilter::filterHor(const ClpRng& clpRng, Pel const *src, int sr
  */
 template<int N>
 #if JVET_M0147_DMVR
-void InterpolationFilter::filterVer(const ClpRng& clpRng, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, bool isFirst, bool isLast, TFilterCoeff const *coeff, bool biMC10BitOut)
+void InterpolationFilter::filterVer(const ClpRng& clpRng, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, bool isFirst, bool isLast, TFilterCoeff const *coeff, bool biMCForDMVR)
 #else
 void InterpolationFilter::filterVer(const ClpRng& clpRng, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, bool isFirst, bool isLast, TFilterCoeff const *coeff)
 #endif
@@ -554,7 +554,7 @@ void InterpolationFilter::filterVer(const ClpRng& clpRng, Pel const *src, int sr
   if( N == 8 )
   {
 #if JVET_M0147_DMVR
-    m_filterVer[0][isFirst][isLast]( clpRng, src, srcStride, dst, dstStride, width, height, coeff, biMC10BitOut);
+    m_filterVer[0][isFirst][isLast]( clpRng, src, srcStride, dst, dstStride, width, height, coeff, biMCForDMVR);
 #else
     m_filterVer[0][isFirst][isLast]( clpRng, src, srcStride, dst, dstStride, width, height, coeff );
 #endif
@@ -562,7 +562,7 @@ void InterpolationFilter::filterVer(const ClpRng& clpRng, Pel const *src, int sr
   else if( N == 4 )
   {
 #if JVET_M0147_DMVR
-    m_filterVer[1][isFirst][isLast]( clpRng, src, srcStride, dst, dstStride, width, height, coeff, biMC10BitOut);
+    m_filterVer[1][isFirst][isLast]( clpRng, src, srcStride, dst, dstStride, width, height, coeff, biMCForDMVR);
 #else
     m_filterVer[1][isFirst][isLast]( clpRng, src, srcStride, dst, dstStride, width, height, coeff );
 #endif
@@ -570,7 +570,7 @@ void InterpolationFilter::filterVer(const ClpRng& clpRng, Pel const *src, int sr
   else if( N == 2 )
   {
 #if JVET_M0147_DMVR
-    m_filterVer[2][isFirst][isLast]( clpRng, src, srcStride, dst, dstStride, width, height, coeff, biMC10BitOut);
+    m_filterVer[2][isFirst][isLast]( clpRng, src, srcStride, dst, dstStride, width, height, coeff, biMCForDMVR);
 #else
     m_filterVer[2][isFirst][isLast]( clpRng, src, srcStride, dst, dstStride, width, height, coeff );
 #endif
@@ -600,7 +600,7 @@ void InterpolationFilter::filterVer(const ClpRng& clpRng, Pel const *src, int sr
  * \param  bitDepth   Bit depth
  */
 #if JVET_M0147_DMVR
-void InterpolationFilter::filterHor( const ComponentID compID, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, int frac, bool isLast, const ChromaFormat fmt, const ClpRng& clpRng, int nFilterIdx, bool biMC10BitOut)
+void InterpolationFilter::filterHor( const ComponentID compID, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, int frac, bool isLast, const ChromaFormat fmt, const ClpRng& clpRng, int nFilterIdx, bool biMCForDMVR)
 #else
 void InterpolationFilter::filterHor( const ComponentID compID, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, int frac, bool isLast, const ChromaFormat fmt, const ClpRng& clpRng, int nFilterIdx )
 #endif
@@ -608,7 +608,7 @@ void InterpolationFilter::filterHor( const ComponentID compID, Pel const *src, i
   if( frac == 0 )
   {
 #if JVET_M0147_DMVR
-    m_filterCopy[true][isLast](clpRng, src, srcStride, dst, dstStride, width, height, biMC10BitOut);
+    m_filterCopy[true][isLast](clpRng, src, srcStride, dst, dstStride, width, height, biMCForDMVR);
 #else
     m_filterCopy[true][isLast]( clpRng, src, srcStride, dst, dstStride, width, height );
 #endif
@@ -619,7 +619,7 @@ void InterpolationFilter::filterHor( const ComponentID compID, Pel const *src, i
     if( nFilterIdx == 1 )
     {
 #if JVET_M0147_DMVR
-      filterHor<NTAPS_BILINEAR>(clpRng, src, srcStride, dst, dstStride, width, height, isLast, m_bilinearFilterPrec4[frac], biMC10BitOut);
+      filterHor<NTAPS_BILINEAR>(clpRng, src, srcStride, dst, dstStride, width, height, isLast, m_bilinearFilterPrec4[frac], biMCForDMVR);
 #else
       filterHor<NTAPS_BILINEAR>(clpRng, src, srcStride, dst, dstStride, width, height, isLast, m_bilinearFilter[frac]);
 #endif
@@ -627,7 +627,7 @@ void InterpolationFilter::filterHor( const ComponentID compID, Pel const *src, i
     else
     {
 #if JVET_M0147_DMVR
-      filterHor<NTAPS_LUMA>( clpRng, src, srcStride, dst, dstStride, width, height, isLast, m_lumaFilter[frac], biMC10BitOut);
+      filterHor<NTAPS_LUMA>( clpRng, src, srcStride, dst, dstStride, width, height, isLast, m_lumaFilter[frac], biMCForDMVR);
 #else
       filterHor<NTAPS_LUMA>( clpRng, src, srcStride, dst, dstStride, width, height, isLast, m_lumaFilter[frac] );
 #endif
@@ -638,7 +638,7 @@ void InterpolationFilter::filterHor( const ComponentID compID, Pel const *src, i
     const uint32_t csx = getComponentScaleX( compID, fmt );
     CHECK( frac < 0 || csx >= 2 || ( frac << ( 1 - csx ) ) >= CHROMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS, "Invalid fraction" );
 #if JVET_M0147_DMVR
-    filterHor<NTAPS_CHROMA>( clpRng, src, srcStride, dst, dstStride, width, height, isLast, m_chromaFilter[frac << ( 1 - csx )], biMC10BitOut);
+    filterHor<NTAPS_CHROMA>( clpRng, src, srcStride, dst, dstStride, width, height, isLast, m_chromaFilter[frac << ( 1 - csx )], biMCForDMVR);
 #else
     filterHor<NTAPS_CHROMA>( clpRng, src, srcStride, dst, dstStride, width, height, isLast, m_chromaFilter[frac << ( 1 - csx )] );
 #endif
@@ -663,7 +663,7 @@ void InterpolationFilter::filterHor( const ComponentID compID, Pel const *src, i
  * \param  bitDepth   Bit depth
  */
 #if JVET_M0147_DMVR
-void InterpolationFilter::filterVer( const ComponentID compID, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, int frac, bool isFirst, bool isLast, const ChromaFormat fmt, const ClpRng& clpRng, int nFilterIdx, bool biMC10BitOut)
+void InterpolationFilter::filterVer( const ComponentID compID, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, int frac, bool isFirst, bool isLast, const ChromaFormat fmt, const ClpRng& clpRng, int nFilterIdx, bool biMCForDMVR)
 #else
 void InterpolationFilter::filterVer( const ComponentID compID, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, int frac, bool isFirst, bool isLast, const ChromaFormat fmt, const ClpRng& clpRng, int nFilterIdx)
 #endif
@@ -671,7 +671,7 @@ void InterpolationFilter::filterVer( const ComponentID compID, Pel const *src, i
   if( frac == 0 )
   {
 #if JVET_M0147_DMVR
-    m_filterCopy[isFirst][isLast](clpRng, src, srcStride, dst, dstStride, width, height, biMC10BitOut);
+    m_filterCopy[isFirst][isLast](clpRng, src, srcStride, dst, dstStride, width, height, biMCForDMVR);
 #else
     m_filterCopy[isFirst][isLast]( clpRng, src, srcStride, dst, dstStride, width, height );
 #endif
@@ -682,7 +682,7 @@ void InterpolationFilter::filterVer( const ComponentID compID, Pel const *src, i
     if (nFilterIdx == 1)
     {
 #if JVET_M0147_DMVR
-      filterVer<NTAPS_BILINEAR>(clpRng, src, srcStride, dst, dstStride, width, height, isFirst, isLast, m_bilinearFilterPrec4[frac], biMC10BitOut);        
+      filterVer<NTAPS_BILINEAR>(clpRng, src, srcStride, dst, dstStride, width, height, isFirst, isLast, m_bilinearFilterPrec4[frac], biMCForDMVR);        
 #else
       filterVer<NTAPS_BILINEAR>(clpRng, src, srcStride, dst, dstStride, width, height, isFirst, isLast, m_bilinearFilter[frac]);
 #endif
@@ -690,7 +690,7 @@ void InterpolationFilter::filterVer( const ComponentID compID, Pel const *src, i
     else
     {
 #if JVET_M0147_DMVR
-      filterVer<NTAPS_LUMA>( clpRng, src, srcStride, dst, dstStride, width, height, isFirst, isLast, m_lumaFilter[frac], biMC10BitOut);
+      filterVer<NTAPS_LUMA>( clpRng, src, srcStride, dst, dstStride, width, height, isFirst, isLast, m_lumaFilter[frac], biMCForDMVR);
 #else
       filterVer<NTAPS_LUMA>( clpRng, src, srcStride, dst, dstStride, width, height, isFirst, isLast, m_lumaFilter[frac] );
 #endif
@@ -701,7 +701,7 @@ void InterpolationFilter::filterVer( const ComponentID compID, Pel const *src, i
     const uint32_t csy = getComponentScaleY( compID, fmt );
     CHECK( frac < 0 || csy >= 2 || ( frac << ( 1 - csy ) ) >= CHROMA_INTERPOLATION_FILTER_SUB_SAMPLE_POSITIONS, "Invalid fraction" );
 #if JVET_M0147_DMVR
-    filterVer<NTAPS_CHROMA>(clpRng, src, srcStride, dst, dstStride, width, height, isFirst, isLast, m_chromaFilter[frac << (1 - csy)], biMC10BitOut);
+    filterVer<NTAPS_CHROMA>(clpRng, src, srcStride, dst, dstStride, width, height, isFirst, isLast, m_chromaFilter[frac << (1 - csy)], biMCForDMVR);
 #else
     filterVer<NTAPS_CHROMA>( clpRng, src, srcStride, dst, dstStride, width, height, isFirst, isLast, m_chromaFilter[frac << ( 1 - csy )] );
 #endif
diff --git a/source/Lib/CommonLib/InterpolationFilter.h b/source/Lib/CommonLib/InterpolationFilter.h
index f8c5a3de0275f8ac8554e470097c79679173d049..be366a5477bc1ad7a38ee3bcf092684a93f93407 100644
--- a/source/Lib/CommonLib/InterpolationFilter.h
+++ b/source/Lib/CommonLib/InterpolationFilter.h
@@ -66,27 +66,27 @@ class InterpolationFilter
 public:
   template<bool isFirst, bool isLast>
 #if JVET_M0147_DMVR
-  static void filterCopy( const ClpRng& clpRng, const Pel *src, int srcStride, Pel *dst, int dstStride, int width, int height, bool biMC10BitOut);
+  static void filterCopy( const ClpRng& clpRng, const Pel *src, int srcStride, Pel *dst, int dstStride, int width, int height, bool biMCForDMVR);
 #else
   static void filterCopy( const ClpRng& clpRng, const Pel *src, int srcStride, Pel *dst, int dstStride, int width, int height );
 #endif
 
   template<int N, bool isVertical, bool isFirst, bool isLast>
 #if JVET_M0147_DMVR
-  static void filter(const ClpRng& clpRng, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, TFilterCoeff const *coeff, bool biMC10BitOut);
+  static void filter(const ClpRng& clpRng, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, TFilterCoeff const *coeff, bool biMCForDMVR);
 #else
   static void filter(const ClpRng& clpRng, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, TFilterCoeff const *coeff);
 #endif
   template<int N>
 #if JVET_M0147_DMVR
-  void filterHor(const ClpRng& clpRng, Pel const* src, int srcStride, Pel *dst, int dstStride, int width, int height, bool isLast, TFilterCoeff const *coeff, bool biMC10BitOut);
+  void filterHor(const ClpRng& clpRng, Pel const* src, int srcStride, Pel *dst, int dstStride, int width, int height, bool isLast, TFilterCoeff const *coeff, bool biMCForDMVR);
 #else
   void filterHor(const ClpRng& clpRng, Pel const* src, int srcStride, Pel *dst, int dstStride, int width, int height,               bool isLast, TFilterCoeff const *coeff);
 #endif
 
   template<int N>
 #if JVET_M0147_DMVR
-  void filterVer(const ClpRng& clpRng, Pel const* src, int srcStride, Pel *dst, int dstStride, int width, int height, bool isFirst, bool isLast, TFilterCoeff const *coeff, bool biMC10BitOut);
+  void filterVer(const ClpRng& clpRng, Pel const* src, int srcStride, Pel *dst, int dstStride, int width, int height, bool isFirst, bool isLast, TFilterCoeff const *coeff, bool biMCForDMVR);
 #else
   void filterVer(const ClpRng& clpRng, Pel const* src, int srcStride, Pel *dst, int dstStride, int width, int height, bool isFirst, bool isLast, TFilterCoeff const *coeff);
 #endif
@@ -99,17 +99,17 @@ public:
   InterpolationFilter();
   ~InterpolationFilter() {}
 #if JVET_M0147_DMVR
-  void( *m_filterHor[3][2][2] )( const ClpRng& clpRng, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, TFilterCoeff const *coeff, bool biMC10BitOut);
+  void( *m_filterHor[3][2][2] )( const ClpRng& clpRng, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, TFilterCoeff const *coeff, bool biMCForDMVR);
 #else
   void( *m_filterHor[3][2][2] )( const ClpRng& clpRng, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, TFilterCoeff const *coeff );
 #endif
 #if JVET_M0147_DMVR
-  void( *m_filterVer[3][2][2] )( const ClpRng& clpRng, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, TFilterCoeff const *coeff, bool biMC10BitOut);
+  void( *m_filterVer[3][2][2] )( const ClpRng& clpRng, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, TFilterCoeff const *coeff, bool biMCForDMVR);
 #else
   void( *m_filterVer[3][2][2] )( const ClpRng& clpRng, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, TFilterCoeff const *coeff );
 #endif
 #if JVET_M0147_DMVR
-  void( *m_filterCopy[2][2] )  ( const ClpRng& clpRng, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, bool biMC10BitOut);
+  void( *m_filterCopy[2][2] )  ( const ClpRng& clpRng, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, bool biMCForDMVR);
 #else
   void( *m_filterCopy[2][2] )  ( const ClpRng& clpRng, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height );
 #endif
@@ -121,12 +121,12 @@ public:
   void _initInterpolationFilterX86();
 #endif
 #if JVET_M0147_DMVR
-  void filterHor(const ComponentID compID, Pel const* src, int srcStride, Pel *dst, int dstStride, int width, int height, int frac,               bool isLast, const ChromaFormat fmt, const ClpRng& clpRng, int nFilterIdx = 0, bool biMC10BitOut = false);
+  void filterHor(const ComponentID compID, Pel const* src, int srcStride, Pel *dst, int dstStride, int width, int height, int frac,               bool isLast, const ChromaFormat fmt, const ClpRng& clpRng, int nFilterIdx = 0, bool biMCForDMVR = false);
 #else
   void filterHor(const ComponentID compID, Pel const* src, int srcStride, Pel *dst, int dstStride, int width, int height, int frac,               bool isLast, const ChromaFormat fmt, const ClpRng& clpRng, int nFilterIdx = 0);
 #endif
 #if JVET_M0147_DMVR
-  void filterVer(const ComponentID compID, Pel const* src, int srcStride, Pel *dst, int dstStride, int width, int height, int frac, bool isFirst, bool isLast, const ChromaFormat fmt, const ClpRng& clpRng, int nFilterIdx = 0, bool biMC10BitOut = false);
+  void filterVer(const ComponentID compID, Pel const* src, int srcStride, Pel *dst, int dstStride, int width, int height, int frac, bool isFirst, bool isLast, const ChromaFormat fmt, const ClpRng& clpRng, int nFilterIdx = 0, bool biMCForDMVR = false);
 #else
   void filterVer(const ComponentID compID, Pel const* src, int srcStride, Pel *dst, int dstStride, int width, int height, int frac, bool isFirst, bool isLast, const ChromaFormat fmt, const ClpRng& clpRng, int nFilterIdx = 0);
 #endif
diff --git a/source/Lib/CommonLib/Slice.cpp b/source/Lib/CommonLib/Slice.cpp
index c371599d01a9cf0b45b000114bd543e797433287..bb5c1adbe70f4624765ad8946638b9cf21035741 100644
--- a/source/Lib/CommonLib/Slice.cpp
+++ b/source/Lib/CommonLib/Slice.cpp
@@ -1810,9 +1810,6 @@ SPSNext::SPSNext( SPS& sps )
   , m_MTTEnabled                ( false )
   , m_MHIntra                   ( false )
   , m_Triangle                  ( false )
-#if JVET_M0147_DMVR
-  , m_DMVR                      ( false )
-#endif
 #if ENABLE_WPP_PARALLELISM
   , m_NextDQP                   ( false )
 #endif
@@ -1855,6 +1852,9 @@ SPS::SPS()
 #if JVET_M0246_AFFINE_AMVR
 , m_affineAmvrEnabledFlag     ( false )
 #endif
+#if JVET_M0147_DMVR
+, m_DMVR                      ( false )
+#endif
 #if HEVC_VPS
 , m_VPSId                     (  0)
 #endif
diff --git a/source/Lib/CommonLib/Slice.h b/source/Lib/CommonLib/Slice.h
index 2b84f963887f8730714a9a9e63ccef6cedddbb30..b4ab4227da91904131bca169551c933b8428997e 100644
--- a/source/Lib/CommonLib/Slice.h
+++ b/source/Lib/CommonLib/Slice.h
@@ -855,9 +855,6 @@ private:
   bool              m_MTTEnabled;                 //
   bool              m_MHIntra;
   bool              m_Triangle;
-#if JVET_M0147_DMVR
-  bool              m_DMVR;
-#endif
 #if ENABLE_WPP_PARALLELISM
   bool              m_NextDQP;
 #endif
@@ -899,10 +896,6 @@ public:
   bool      getUseAffine          ()                                      const     { return m_Affine; }
   void      setUseAffineType      ( bool b )                                        { m_AffineType = b; }
   bool      getUseAffineType      ()                                      const     { return m_AffineType; }
-#if JVET_M0147_DMVR
-  void      setUseDMVR(bool b)                                                      { m_DMVR = b; }
-  bool      getUseDMVR()                                                   const    { return m_DMVR; }
-#endif
   void      setDisableMotCompress ( bool b )                                        { m_DisableMotionCompression = b; }
   bool      getDisableMotCompress ()                                      const     { return m_DisableMotionCompression; }
   bool      getMTTEnabled         ()                                      const     { return m_MTTEnabled; }
@@ -996,6 +989,9 @@ private:
 #if JVET_M0246_AFFINE_AMVR
   bool              m_affineAmvrEnabledFlag;
 #endif
+#if JVET_M0147_DMVR
+  bool              m_DMVR;
+#endif
 #if HEVC_VPS
   int               m_VPSId;
 #endif
@@ -1255,7 +1251,10 @@ public:
   bool                    getDisFracMmvdEnabledFlag() const                                               { return m_disFracMmvdEnabledFlag; }
   void                    setDisFracMmvdEnabledFlag( bool b )                                             { m_disFracMmvdEnabledFlag = b;    }
 #endif
-
+#if JVET_M0147_DMVR
+  bool                    getUseDMVR()const                                                               { return m_DMVR; }
+  void                    setUseDMVR(bool b)                                                              { m_DMVR = b;    }
+#endif
   uint32_t                getMaxTLayers() const                                                           { return m_uiMaxTLayers; }
   void                    setMaxTLayers( uint32_t uiMaxTLayers )                                          { CHECK( uiMaxTLayers > MAX_TLAYER, "Invalid number T-layers" ); m_uiMaxTLayers = uiMaxTLayers; }
 
diff --git a/source/Lib/CommonLib/UnitTools.cpp b/source/Lib/CommonLib/UnitTools.cpp
index 0f2c1f3220dc3992c76be87dd4e4ee5698c1dc05..91f2d3a4ec6a17ce2b3dcc2b1bc33a8fb6207cc8 100644
--- a/source/Lib/CommonLib/UnitTools.cpp
+++ b/source/Lib/CommonLib/UnitTools.cpp
@@ -1461,7 +1461,7 @@ void PU::getInterMergeCandidates( const PredictionUnit &pu, MergeCtx& mrgCtx,
 #if JVET_M0147_DMVR
 bool PU::checkDMVRCondition(const PredictionUnit& pu)
 {
-  if (pu.cs->sps->getSpsNext().getUseDMVR())
+  if (pu.cs->sps->getUseDMVR())
   {
     return pu.mergeFlag
       && pu.mergeType == MRG_TYPE_DEFAULT_N
@@ -3878,12 +3878,12 @@ bool PU::isBiPredFromDifferentDirEqDistPoc(const PredictionUnit& pu)
 {
   if (pu.refIdx[0] >= 0 && pu.refIdx[1] >= 0)
   {
-    const int iPOC0 = pu.cu->slice->getRefPOC(REF_PIC_LIST_0, pu.refIdx[0]);
-    const int iPOC1 = pu.cu->slice->getRefPOC(REF_PIC_LIST_1, pu.refIdx[1]);
-    const int iPOC = pu.cu->slice->getPOC();
-    if ((iPOC - iPOC0)*(iPOC - iPOC1) < 0)
+    const int poc0 = pu.cu->slice->getRefPOC(REF_PIC_LIST_0, pu.refIdx[0]);
+    const int poc1 = pu.cu->slice->getRefPOC(REF_PIC_LIST_1, pu.refIdx[1]);
+    const int poc = pu.cu->slice->getPOC();
+    if ((poc - poc0)*(poc - poc1) < 0)
     {
-      if (abs(iPOC - iPOC0) == abs(iPOC - iPOC1))
+      if (abs(poc - poc0) == abs(poc - poc1))
       {
         return true;
       }
diff --git a/source/Lib/CommonLib/x86/InterpolationFilterX86.h b/source/Lib/CommonLib/x86/InterpolationFilterX86.h
index 9218115c815f238c2fe4077bd0552a5ee4bbbbbb..e31a8b61b8c7e9d95d6d118e56eb25b44ca0d90b 100644
--- a/source/Lib/CommonLib/x86/InterpolationFilterX86.h
+++ b/source/Lib/CommonLib/x86/InterpolationFilterX86.h
@@ -194,7 +194,7 @@ static void fullPelCopyAVX2( const ClpRng& clpRng, const void*_src, int srcStrid
 
 template<X86_VEXT vext, bool isFirst, bool isLast>
 #if JVET_M0147_DMVR
-static void simdFilterCopy( const ClpRng& clpRng, const Pel* src, int srcStride, int16_t* dst, int dstStride, int width, int height, bool biMC10BitOut)
+static void simdFilterCopy( const ClpRng& clpRng, const Pel* src, int srcStride, int16_t* dst, int dstStride, int width, int height, bool biMCForDMVR)
 #else
 static void simdFilterCopy( const ClpRng& clpRng, const Pel* src, int srcStride, int16_t* dst, int dstStride, int width, int height )
 #endif
@@ -216,7 +216,7 @@ static void simdFilterCopy( const ClpRng& clpRng, const Pel* src, int srcStride,
 #endif
   { //Scalar
 #if JVET_M0147_DMVR
-    InterpolationFilter::filterCopy<isFirst, isLast>( clpRng, src, srcStride, dst, dstStride, width, height, biMC10BitOut);
+    InterpolationFilter::filterCopy<isFirst, isLast>( clpRng, src, srcStride, dst, dstStride, width, height, biMCForDMVR);
 #else
     InterpolationFilter::filterCopy<isFirst, isLast>( clpRng, src, srcStride, dst, dstStride, width, height );
 #endif
@@ -1031,17 +1031,6 @@ static inline __m128i simdInterpolateLuma10Bit2P4(int16_t const *src, int srcStr
   sumLo = _mm_srai_epi16(_mm_add_epi16(sumLo, mmOffset), shift);
   return sumLo;
 }
-// intermediate are not expected to cross 16 bit
-#if USE_AVX2
-static inline __m256i simdClip3_256(__m256i mmMin, __m256i mmMax, __m256i mmPix)
-{
-  __m256i mmMask = _mm256_cmpgt_epi16(mmPix, mmMin);
-  mmPix = _mm256_or_si256(_mm256_and_si256(mmMask, mmPix), _mm256_andnot_si256(mmMask, mmMin));
-  mmMask = _mm256_cmpgt_epi16(mmMax, mmPix);
-  mmPix = _mm256_or_si256(_mm256_and_si256(mmMask, mmPix), _mm256_andnot_si256(mmMask, mmMax));
-  return(mmPix);
-}
-#endif
 
 template<X86_VEXT vext, bool isLast>
 static void simdInterpolateN2_10BIT_M4(const int16_t* src, int srcStride, int16_t *dst, int dstStride, int cStride, int width, int height, int shift, int offset, const ClpRng& clpRng, int16_t const *c)
@@ -1049,16 +1038,14 @@ static void simdInterpolateN2_10BIT_M4(const int16_t* src, int srcStride, int16_
   int row, col;
   __m128i mmOffset = _mm_set1_epi16(offset);
   __m128i mmCoeff[2];
-  __m128i mmMin = _mm_set1_epi16(clpRng.min);
-  __m128i mmMax = _mm_set1_epi16(clpRng.max);
   for (int n = 0; n < 2; n++)
     mmCoeff[n] = _mm_set1_epi16(c[n]);
 
+  CHECK(isLast, "Not Supported");
+
 #if USE_AVX2
   __m256i mm256Offset = _mm256_set1_epi16(offset);
   __m256i mm256Coeff[2];
-  __m256i mm256Min = _mm256_set1_epi16(clpRng.min);
-  __m256i mm256Max = _mm256_set1_epi16(clpRng.max);
   for (int n = 0; n < 2; n++)
     mm256Coeff[n] = _mm256_set1_epi16(c[n]);
 #endif
@@ -1070,10 +1057,6 @@ static void simdInterpolateN2_10BIT_M4(const int16_t* src, int srcStride, int16_
     for (; col < ((width >> 4) << 4); col += 16)
     {
       __m256i mmFiltered = simdInterpolateLuma10Bit2P16(src + col, cStride, mm256Coeff, mm256Offset, shift);
-      if (isLast)
-      {
-        mmFiltered = simdClip3_256(mm256Min, mm256Max, mmFiltered);
-      }
       _mm256_storeu_si256((__m256i *)(dst + col), mmFiltered);
     }
 #endif
@@ -1081,19 +1064,11 @@ static void simdInterpolateN2_10BIT_M4(const int16_t* src, int srcStride, int16_
     for (; col < ((width >> 3) << 3); col += 8)
     {
       __m128i mmFiltered = simdInterpolateLuma10Bit2P8(src + col, cStride, mmCoeff, mmOffset, shift);
-      if (isLast)
-      {
-        mmFiltered = simdClip3(mmMin, mmMax, mmFiltered);
-      }
       _mm_storeu_si128((__m128i *)(dst + col), mmFiltered);
     }
 
     // last 4 samples
     __m128i mmFiltered = simdInterpolateLuma10Bit2P4(src + col, cStride, mmCoeff, mmOffset, shift);
-    if (isLast)
-    {
-      mmFiltered = simdClip3(mmMin, mmMax, mmFiltered);
-    }
     _mm_storel_epi64((__m128i *)(dst + col), mmFiltered);
     src += srcStride;
     dst += dstStride;
@@ -1103,7 +1078,7 @@ static void simdInterpolateN2_10BIT_M4(const int16_t* src, int srcStride, int16_
 
 template<X86_VEXT vext, int N, bool isVertical, bool isFirst, bool isLast>
 #if JVET_M0147_DMVR
-static void simdFilter( const ClpRng& clpRng, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, TFilterCoeff const *coeff, bool biMC10BitOut)
+static void simdFilter( const ClpRng& clpRng, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, TFilterCoeff const *coeff, bool biMCForDMVR)
 #else
 static void simdFilter( const ClpRng& clpRng, Pel const *src, int srcStride, Pel *dst, int dstStride, int width, int height, TFilterCoeff const *coeff )
 #endif
@@ -1153,7 +1128,7 @@ static void simdFilter( const ClpRng& clpRng, Pel const *src, int srcStride, Pel
   }
 
 #if JVET_M0147_DMVR
-  if (biMC10BitOut)
+  if (biMCForDMVR)
   {
     shift = IF_FILTER_PREC_BILINEAR - (IF_INTERNAL_PREC_BILINEAR - clpRng.bd);
     offset = 1 << (shift - 1);
@@ -1208,7 +1183,7 @@ static void simdFilter( const ClpRng& clpRng, Pel const *src, int srcStride, Pel
       return;
     }
 #if JVET_M0147_DMVR
-    else if (biMC10BitOut)
+    else if (biMCForDMVR)
     {
       if (N == 2 && !(width & 0x03))
       {
diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp
index 0ed70a77d2e5161f3ab4d2c332c31a3dcc338db9..da6544a9fea0c271e6a2a38d6f965f786db15417 100644
--- a/source/Lib/DecoderLib/VLCReader.cpp
+++ b/source/Lib/DecoderLib/VLCReader.cpp
@@ -829,9 +829,6 @@ void HLSyntaxReader::parseSPSNext( SPSNext& spsNext, const bool usePCM )
   READ_FLAG( symbol,  "mtt_enabled_flag" );                       spsNext.setMTTMode                ( symbol );
   READ_FLAG( symbol,  "mhintra_flag" );                           spsNext.setUseMHIntra             ( symbol != 0 );
   READ_FLAG( symbol,    "triangle_flag" );                          spsNext.setUseTriangle            ( symbol != 0 );
-#if JVET_M0147_DMVR
-  READ_FLAG(symbol, "dmvr_enable_flag");                          spsNext.setUseDMVR                  (symbol != 0);
-#endif
 #if ENABLE_WPP_PARALLELISM
   READ_FLAG( symbol,  "next_dqp_enabled_flag" );                  spsNext.setUseNextDQP             ( symbol != 0 );
 #else
@@ -1104,6 +1101,9 @@ void HLSyntaxReader::parseSPS(SPS* pcSPS)
 #if JVET_M0246_AFFINE_AMVR
   READ_FLAG( uiCode,  "sps_affine_amvr_enabled_flag" );             pcSPS->setAffineAmvrEnabledFlag ( uiCode != 0 );
 #endif
+#if JVET_M0147_DMVR
+  READ_FLAG(uiCode, "dmvr_enable_flag");                            pcSPS->setUseDMVR(uiCode != 0);
+#endif
 #if HEVC_USE_SCALING_LISTS
   READ_FLAG( uiCode, "scaling_list_enabled_flag" );                 pcSPS->setScalingListFlag ( uiCode );
   if(pcSPS->getScalingListFlag())
diff --git a/source/Lib/EncoderLib/EncLib.cpp b/source/Lib/EncoderLib/EncLib.cpp
index 0a8d44941516caa69e72c720008494fef59add51..e95ddacebf33ff27036d77646f1f08ec5ff5520f 100644
--- a/source/Lib/EncoderLib/EncLib.cpp
+++ b/source/Lib/EncoderLib/EncLib.cpp
@@ -932,7 +932,7 @@ void EncLib::xInitSPS(SPS &sps)
   sps.setAffineAmvrEnabledFlag              ( m_AffineAmvr );
 #endif
 #if JVET_M0147_DMVR
-  sps.getSpsNext().setUseDMVR               ( m_DMVR );
+  sps.setUseDMVR                            ( m_DMVR );
 #endif
   sps.getSpsNext().setIBCMode               ( m_IBCMode );
 
diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp
index 5c4dd6896b3196cec7d6469995f5989cabae4228..743c3b4e7ff6e27d1fb5457507ea6cba78311a32 100644
--- a/source/Lib/EncoderLib/VLCWriter.cpp
+++ b/source/Lib/EncoderLib/VLCWriter.cpp
@@ -570,9 +570,6 @@ void HLSWriter::codeSPSNext( const SPSNext& spsNext, const bool usePCM )
   WRITE_FLAG( spsNext.getMTTEnabled() ? 1 : 0,                                                  "mtt_enabled_flag" );
   WRITE_FLAG( spsNext.getUseMHIntra() ? 1 : 0,                                                  "mhintra_flag" );
   WRITE_FLAG( spsNext.getUseTriangle() ? 1: 0,                                                  "triangle_flag" );
-#if JVET_M0147_DMVR
-  WRITE_FLAG(spsNext.getUseDMVR() ? 1 : 0,                                                      "dmvr_enable_flag");
-#endif
 #if ENABLE_WPP_PARALLELISM
   WRITE_FLAG( spsNext.getUseNextDQP(),                                                          "next_dqp_enabled_flag" );
 #else
@@ -774,6 +771,9 @@ void HLSWriter::codeSPS( const SPS* pcSPS )
 #if JVET_M0246_AFFINE_AMVR
   WRITE_FLAG( pcSPS->getAffineAmvrEnabledFlag() ? 1 : 0,                             "sps_affine_amvr_enabled_flag" );
 #endif
+#if JVET_M0147_DMVR
+  WRITE_FLAG( pcSPS->getUseDMVR() ? 1 : 0,                                            "dmvr_enable_flag" );
+#endif
 #if HEVC_USE_SCALING_LISTS
   WRITE_FLAG( pcSPS->getScalingListFlag() ? 1 : 0,                                   "scaling_list_enabled_flag" );
   if(pcSPS->getScalingListFlag())