diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h
index 0add5d415e883f0c4d060bc295d90dacd78da681..c65687241633f297c1bb7f108074f814d76642cd 100644
--- a/source/Lib/CommonLib/TypeDef.h
+++ b/source/Lib/CommonLib/TypeDef.h
@@ -50,6 +50,8 @@
 #include <assert.h>
 #include <cassert>
 
+#define JVET_M0228_REMOVE_CPMV_COMPARE                    1 // Remove CPMV comparisons for construnted affine merge candidates from JVET-M0228, M0166, M0477
+
 #define JVET_M0145_AFFINE_MV_CLIP                         1 // Missing clipping for MV storage in affine
 
 #define JVET_M0381_ONE_CTX_FOR_SUBBLOCK_MRG_IDX           1 // CE2.2.2 a: one context for subblock Merge index
diff --git a/source/Lib/CommonLib/UnitTools.cpp b/source/Lib/CommonLib/UnitTools.cpp
index 0559434c4c32ce673f4b8957d3582c84bd2098c7..4b435d2ced5c87f2845de90836032a8e81d41560 100644
--- a/source/Lib/CommonLib/UnitTools.cpp
+++ b/source/Lib/CommonLib/UnitTools.cpp
@@ -2544,7 +2544,11 @@ void PU::getAffineControlPointCand( const PredictionUnit &pu, MotionInfo mi[4],
       if ( mi[idx0].refIdx[l] >= 0 && mi[idx1].refIdx[l] >= 0 )
       {
         // check same refidx and different mv
+#if JVET_M0228_REMOVE_CPMV_COMPARE
+        if ( mi[idx0].refIdx[l] == mi[idx1].refIdx[l])
+#else
         if ( mi[idx0].refIdx[l] == mi[idx1].refIdx[l] && mi[idx0].mv[l] != mi[idx1].mv[l] )
+#endif
         {
           dir |= (l + 1);
           refIdx[l] = mi[idx0].refIdx[l];
@@ -2565,7 +2569,11 @@ void PU::getAffineControlPointCand( const PredictionUnit &pu, MotionInfo mi[4],
       if ( mi[idx0].refIdx[l] >= 0 && mi[idx1].refIdx[l] >= 0 && mi[idx2].refIdx[l] >= 0 )
       {
         // check same refidx and different mv
+#if JVET_M0228_REMOVE_CPMV_COMPARE
+        if ( mi[idx0].refIdx[l] == mi[idx1].refIdx[l] && mi[idx0].refIdx[l] == mi[idx2].refIdx[l])
+#else
         if ( mi[idx0].refIdx[l] == mi[idx1].refIdx[l] && mi[idx0].refIdx[l] == mi[idx2].refIdx[l] && (mi[idx0].mv[l] != mi[idx1].mv[l] || mi[idx0].mv[l] != mi[idx2].mv[l]) )
+#endif
         {
           dir |= (l + 1);
           refIdx[l] = mi[idx0].refIdx[l];