diff --git a/source/Lib/CommonLib/Slice.h b/source/Lib/CommonLib/Slice.h
index 1a40d38b4f965d156e72bf3c1ae6fc7f22167f01..cdb4ca999225ab9abdb972582581fe484fdee37e 100644
--- a/source/Lib/CommonLib/Slice.h
+++ b/source/Lib/CommonLib/Slice.h
@@ -2312,8 +2312,10 @@ public:
   int                         getNumAlfAps() const                                      { return m_numAlfAps;                                                                          }
   void                        setAlfApsIdChroma(int i)                                  { m_alfChromaApsId = i;                                                                        }
   int                         getAlfApsIdChroma() const                                 { return m_alfChromaApsId;                                                                     }
+#if !JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA
   void                        setAlfChromaIdc(int i)                                    { m_alfChromaIdc = i;                                                                          }
   int                         getAlfChromaIdc() const                                   { return m_alfChromaIdc;                                                                       }
+#endif
   void setCcAlfEnabledFlag(ComponentID compId, bool b) { m_ccalfEnabledFlag[compId] = b; }
   bool getCcAlfEnabledFlag(ComponentID compId) const { return m_ccalfEnabledFlag[compId]; }
 
diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h
index b03001080d23a5cef156e2262a87e1aa6441ba67..dac41d2c428f2767fa04a65c797c654d77ae6cda 100644
--- a/source/Lib/CommonLib/TypeDef.h
+++ b/source/Lib/CommonLib/TypeDef.h
@@ -51,6 +51,8 @@
 #include <cassert>
 
 //########### place macros to be removed in next cycle below this line ###############
+#define JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA              1 // Use two separate flags (one for Cb, one for Cr) to replace ph_alf_chroma_idc in PH and sh_alf_chroma_idc in SH
+
 #define JVET_R0330_CRS_CLIP_REM                           1 // JVET-R0330: Remove redundant clipping in chroma residual scaling factor derivation
 
 #define JVET_R0059_RPL_CLEANUP                            1 // JVET-R0059 aspect 2: Condition the signalling of ltrp_in_header_flag[ listIdx ][ rplsIdx ].
diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp
index 8193a66945070203cdc902f63a9d79f31f30a5fc..7abd714509f0e177f1f74a476e318cbfd923e28e 100644
--- a/source/Lib/DecoderLib/VLCReader.cpp
+++ b/source/Lib/DecoderLib/VLCReader.cpp
@@ -2328,7 +2328,12 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag
       READ_FLAG(uiCode, "ph_alf_enabled_flag");
       picHeader->setAlfEnabledFlag(COMPONENT_Y, uiCode);
 
+#if JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA
+      int alfCbEnabledFlag = 0;
+      int alfCrEnabledFlag = 0;
+#else
       int alfChromaIdc = 0;
+#endif
       if (uiCode)
       {
         READ_CODE(3, uiCode, "ph_num_alf_aps_ids_luma");
@@ -2345,15 +2350,29 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag
 
         if (sps->getChromaFormatIdc() != CHROMA_400)
         {
+#if JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA
+          READ_CODE(1, uiCode, "ph_alf_cb_enabled_flag");   alfCbEnabledFlag = uiCode;
+          READ_CODE(1, uiCode, "ph_alf_cr_enabled_flag");   alfCrEnabledFlag = uiCode;
+#else
           READ_CODE(2, uiCode, "ph_alf_chroma_idc");
           alfChromaIdc = uiCode;
+#endif
         }
         else
         {
+#if JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA
+          alfCbEnabledFlag = 0;
+          alfCrEnabledFlag = 0;
+#else
           alfChromaIdc = 0;
+#endif
         }
+#if JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA
+        if (alfCbEnabledFlag || alfCrEnabledFlag)
+#else
         picHeader->setAlfChromaIdc(alfChromaIdc);
         if (alfChromaIdc)
+#endif
         {
           READ_CODE(3, uiCode, "ph_alf_aps_id_chroma");
           picHeader->setAlfApsIdChroma(uiCode);
@@ -2385,8 +2404,13 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag
       {
         picHeader->setNumAlfAps(0);
       }
+#if JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA
+      picHeader->setAlfEnabledFlag(COMPONENT_Cb, alfCbEnabledFlag);
+      picHeader->setAlfEnabledFlag(COMPONENT_Cr, alfCrEnabledFlag);
+#else
       picHeader->setAlfEnabledFlag(COMPONENT_Cb, alfChromaIdc & 1);
       picHeader->setAlfEnabledFlag(COMPONENT_Cr, alfChromaIdc >> 1);
+#endif
     }
     else
     {
@@ -3070,7 +3094,11 @@ void  HLSyntaxReader::checkAlfNaluTidAndPicTid(Slice* pcSlice, PicHeader* picHea
       CHECK(aps->getTemporalId() > curPicTid, "The TemporalId of the APS NAL unit having aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to ph_alf_aps_id_luma[ i ] shall be less than or equal to the TemporalId of the picture associated with the PH.");
     }
     //chroma
+#if JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA
+    if (picHeader->getAlfEnabledFlag(COMPONENT_Cb) || picHeader->getAlfEnabledFlag(COMPONENT_Cr))
+#else
     if (picHeader->getAlfChromaIdc())
+#endif
     {
       int chromaAlfApsId = picHeader->getAlfApsIdChroma();
       aps = parameterSetManager->getAPS(chromaAlfApsId, ALF_APS);
@@ -3283,7 +3311,13 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par
   {
     READ_FLAG(uiCode, "slice_alf_enabled_flag");
     pcSlice->setTileGroupAlfEnabledFlag(COMPONENT_Y, uiCode);
+#if JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA
+    int alfCbEnabledFlag = 0;
+    int alfCrEnabledFlag = 0;
+#else
     int alfChromaIdc = 0;
+#endif
+
     if (uiCode)
     {
       READ_CODE(3, uiCode, "slice_num_alf_aps_ids_luma");
@@ -3303,13 +3337,27 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par
       pcSlice->setAlfAPSs(apsId);
       if (bChroma)
       {
+#if JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA
+        READ_CODE(1, uiCode, "slice_alf_cb_enabled_flag");   alfCbEnabledFlag = uiCode;
+        READ_CODE(1, uiCode, "slice_alf_cr_enabled_flag");   alfCrEnabledFlag = uiCode;
+#else
         READ_CODE(2, uiCode, "slice_alf_chroma_idc");   alfChromaIdc = uiCode;
+#endif
       }
       else
       {
+#if JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA
+        alfCbEnabledFlag = 0;
+        alfCrEnabledFlag = 0;
+#else
         alfChromaIdc = 0;
+#endif
       }
+#if JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA
+      if (alfCbEnabledFlag || alfCrEnabledFlag)
+#else
       if (alfChromaIdc)
+#endif
       {
         READ_CODE(3, uiCode, "slice_alf_aps_id_chroma");
         pcSlice->setTileGroupApsIdChroma(uiCode);
@@ -3322,8 +3370,13 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par
     {
       pcSlice->setTileGroupNumAps(0);
     }
+#if JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA
+    pcSlice->setTileGroupAlfEnabledFlag(COMPONENT_Cb, alfCbEnabledFlag);
+    pcSlice->setTileGroupAlfEnabledFlag(COMPONENT_Cr, alfCrEnabledFlag);
+#else
     pcSlice->setTileGroupAlfEnabledFlag(COMPONENT_Cb, alfChromaIdc & 1);
     pcSlice->setTileGroupAlfEnabledFlag(COMPONENT_Cr, alfChromaIdc >> 1);
+#endif
 
     CcAlfFilterParam &filterParam = pcSlice->m_ccAlfFilterParam;
     if (sps->getCCALFEnabledFlag() && pcSlice->getTileGroupAlfEnabledFlag(COMPONENT_Y))
diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp
index 6a6cb98491fe9e0a1ee126cb9ccf2d6d1953c86c..11b63da15829d5eeeaa3940cc012d86b45394d2d 100644
--- a/source/Lib/EncoderLib/VLCWriter.cpp
+++ b/source/Lib/EncoderLib/VLCWriter.cpp
@@ -1495,7 +1495,12 @@ void HLSWriter::codePictureHeader( PicHeader* picHeader, bool writeRbspTrailingB
         const int alfChromaIdc = picHeader->getAlfEnabledFlag(COMPONENT_Cb) + picHeader->getAlfEnabledFlag(COMPONENT_Cr) * 2 ;
         if (sps->getChromaFormatIdc() != CHROMA_400)
         {
+#if JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA
+          WRITE_CODE(picHeader->getAlfEnabledFlag(COMPONENT_Cb), 1, "ph_alf_cb_enabled_flag");
+          WRITE_CODE(picHeader->getAlfEnabledFlag(COMPONENT_Cr), 1, "ph_alf_cr_enabled_flag");
+#else
           WRITE_CODE(alfChromaIdc, 2, "ph_alf_chroma_idc");
+#endif
         }
         if (alfChromaIdc)
         {
@@ -2088,7 +2093,12 @@ void HLSWriter::codeSliceHeader         ( Slice* pcSlice )
       const int alfChromaIdc = pcSlice->getTileGroupAlfEnabledFlag(COMPONENT_Cb) + pcSlice->getTileGroupAlfEnabledFlag(COMPONENT_Cr) * 2;
       if (chromaEnabled)
       {
+#if JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA
+        WRITE_CODE(pcSlice->getTileGroupAlfEnabledFlag(COMPONENT_Cb), 1, "slice_alf_cb_enabled_flag");
+        WRITE_CODE(pcSlice->getTileGroupAlfEnabledFlag(COMPONENT_Cr), 1, "slice_alf_cr_enabled_flag");
+#else
         WRITE_CODE(alfChromaIdc, 2, "slice_alf_chroma_idc");
+#endif
       }
       if (alfChromaIdc)
       {