diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h
index 4e5bbc845034fe952a0b46316edaf5d8b996ebe1..66b4d26b60487e463601bf86096f50c755e9efe2 100644
--- a/source/Lib/CommonLib/TypeDef.h
+++ b/source/Lib/CommonLib/TypeDef.h
@@ -50,6 +50,8 @@
 #include <assert.h>
 #include <cassert>
 
+#define JVET_O0616_400_CHROMA_SUPPORT                     1 // JVET-O0616: Various chroma format support in VVC
+
 #define JVET_O1136_TS_BDPCM_SIGNALLING                    1 // JVET-O1136: Unified syntax for JVET-O0165/O0200/O0783 on TS and BDPCM signalling
 
 #define JVET_O0219_LFNST_TRANSFORM_SET_FOR_LMCMODE        1
diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp
index 1f7817faba04d938648ef2a3b1bfcc22b16dc1b5..dbfaff778578a45855f7f6aee357da9923c808a9 100644
--- a/source/Lib/DecoderLib/VLCReader.cpp
+++ b/source/Lib/DecoderLib/VLCReader.cpp
@@ -1808,7 +1808,18 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, ParameterSetManager *para
 		
 		
         pcSlice->setAlfAPSs(apsId);
-        alfChromaIdc = truncatedUnaryEqProb(3);        //alf_chroma_idc
+#if JVET_O0616_400_CHROMA_SUPPORT
+        if (bChroma)
+        {
+#endif
+          alfChromaIdc = truncatedUnaryEqProb(3);        //alf_chroma_idc
+#if JVET_O0616_400_CHROMA_SUPPORT
+        }
+        else
+        {
+          alfChromaIdc = 0;
+        }
+#endif
         if (alfChromaIdc)
         {
 #if JVET_O0288_UNIFY_ALF_SLICE_TYPE_REMOVAL
@@ -2180,10 +2191,14 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, ParameterSetManager *para
 #if !JVET_O1109_UNFIY_CRS
         if (!(sps->getUseDualITree() && pcSlice->isIntra()))
         {
+#endif
+#if JVET_O0616_400_CHROMA_SUPPORT
+        if (bChroma)
+        {
 #endif
           READ_FLAG(uiCode, "slice_chroma_residual_scale_flag");                
           pcSlice->setLmcsChromaResidualScaleFlag(uiCode == 1);
-#if !JVET_O1109_UNFIY_CRS
+#if !JVET_O1109_UNFIY_CRS || JVET_O0616_400_CHROMA_SUPPORT
         }
         else
         {
diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp
index 90f7a64f4bd26655c48861991b1521d5560b0877..090b22b84f6a144e8c39f3af8849a93fcb82007c 100644
--- a/source/Lib/EncoderLib/VLCWriter.cpp
+++ b/source/Lib/EncoderLib/VLCWriter.cpp
@@ -1249,7 +1249,14 @@ void HLSWriter::codeSliceHeader         ( Slice* pcSlice )
         }
 
         const int alfChromaIdc = pcSlice->getTileGroupAlfEnabledFlag(COMPONENT_Cb) + pcSlice->getTileGroupAlfEnabledFlag(COMPONENT_Cr) * 2 ;
-        truncatedUnaryEqProb(alfChromaIdc, 3);   // alf_chroma_idc
+#if JVET_O0616_400_CHROMA_SUPPORT
+        if (chromaEnabled)
+        {
+#endif
+          truncatedUnaryEqProb(alfChromaIdc, 3);   // alf_chroma_idc
+#if JVET_O0616_400_CHROMA_SUPPORT
+        }
+#endif
         if (alfChromaIdc)
         {
 #if JVET_O0288_UNIFY_ALF_SLICE_TYPE_REMOVAL
@@ -1491,7 +1498,14 @@ void HLSWriter::codeSliceHeader         ( Slice* pcSlice )
 #if !JVET_O1109_UNFIY_CRS
         if (!(pcSlice->getSPS()->getUseDualITree() && pcSlice->isIntra()))
 #endif
-          WRITE_FLAG(pcSlice->getLmcsChromaResidualScaleFlag(), "slice_chroma_residual_scale_flag");
+#if JVET_O0616_400_CHROMA_SUPPORT
+          if (chromaEnabled)
+          {
+#endif
+            WRITE_FLAG(pcSlice->getLmcsChromaResidualScaleFlag(), "slice_chroma_residual_scale_flag");
+#if JVET_O0616_400_CHROMA_SUPPORT
+          }
+#endif
       }
     }