diff --git a/cfg/scaling_list/sample_scaling_list.cfg b/cfg/scaling_list/sample_scaling_list.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..1f343d579d57cf91d471c90f60e74fef3235ca25
--- /dev/null
+++ b/cfg/scaling_list/sample_scaling_list.cfg
@@ -0,0 +1,3 @@
+#============ Scaling List ======================
+ScalingList                   : 2        # Scaling list: 0: no scaling list, 2: scaling lists specified in ScalingListFile
+ScalingListFile               : sample_scaling_list_file.txt
diff --git a/cfg/scaling_list/sample_scaling_list_file.txt b/cfg/scaling_list/sample_scaling_list_file.txt
new file mode 100644
index 0000000000000000000000000000000000000000..c0b827a63193163b952ba897b9e972b09d1bc8fb
--- /dev/null
+++ b/cfg/scaling_list/sample_scaling_list_file.txt
@@ -0,0 +1,304 @@
+# ScalingListFile
+# The matrices in this sample file are inherited from JCTVC-H1104.
+
+INTRA2X2_LUMA =
+  7,19
+ 19,41
+
+INTRA2X2_CHROMAU =
+  7,19
+ 19,41
+
+INTRA2X2_CHROMAV =
+  7,19
+ 19,41
+
+INTER2X2_LUMA =
+ 11,30
+ 30,50
+
+INTER2X2_CHROMAU =
+ 11,30
+ 30,50
+
+INTER2X2_CHROMAV =
+ 11,30
+ 30,50
+
+INTRA4X4_LUMA =
+ 7,12,19,26
+12,16,24,40
+19,24,41,50
+26,40,50,56
+
+INTRA4X4_CHROMAU =
+ 7,12,19,26
+12,16,24,40
+19,24,41,50
+26,40,50,56
+
+INTRA4X4_CHROMAV =
+ 7,12,19,26
+12,16,24,40
+19,24,41,50
+26,40,50,56
+
+INTER4X4_LUMA =
+11,18,30,43
+18,22,40,50
+30,40,50,52
+43,50,52,55
+
+INTER4X4_CHROMAU =
+11,18,30,43
+18,22,40,50
+30,40,50,52
+43,50,52,55
+
+INTER4X4_CHROMAV =
+11,18,30,43
+18,22,40,50
+30,40,50,52
+43,50,52,55
+
+INTRA8X8_LUMA =
+ 6, 9,13,18,25,35,36,37
+ 9,10,15,21,32,35,37,41
+13,15,18,23,35,55,58,59
+18,21,23,26,65,58,64,66
+25,32,35,65,66,66,67,70
+35,35,55,58,66,68,70,73
+36,37,58,64,67,70,76,80
+37,41,59,66,70,73,80,85
+
+INTRA8X8_CHROMAU =
+ 6, 9,13,18,25,35,36,37
+ 9,10,15,21,32,35,37,41
+13,15,18,23,35,55,58,59
+18,21,23,26,65,58,64,66
+25,32,35,65,66,66,67,70
+35,35,55,58,66,68,70,73
+36,37,58,64,67,70,76,80
+37,41,59,66,70,73,80,85
+
+INTRA8X8_CHROMAV =
+ 6, 9,13,18,25,35,36,37
+ 9,10,15,21,32,35,37,41
+13,15,18,23,35,55,58,59
+18,21,23,26,65,58,64,66
+25,32,35,65,66,66,67,70
+35,35,55,58,66,68,70,73
+36,37,58,64,67,70,76,80
+37,41,59,66,70,73,80,85
+
+INTER8X8_LUMA =
+ 9,15,20,29,36,38,42,43
+15,17,22,29,39,43,45,46
+20,22,32,34,47,48,49,50
+29,29,34,44,50,51,52,53
+36,39,47,50,51,52,55,55
+38,43,48,51,52,53,56,58
+42,45,49,52,55,56,55,60
+43,46,50,53,55,58,60,63
+
+INTER8X8_CHROMAU =
+ 9,15,20,29,36,38,42,43
+15,17,22,29,39,43,45,46
+20,22,32,34,47,48,49,50
+29,29,34,44,50,51,52,53
+36,39,47,50,51,52,55,55
+38,43,48,51,52,53,56,58
+42,45,49,52,55,56,55,60
+43,46,50,53,55,58,60,63
+
+INTER8X8_CHROMAV =
+ 9,15,20,29,36,38,42,43
+15,17,22,29,39,43,45,46
+20,22,32,34,47,48,49,50
+29,29,34,44,50,51,52,53
+36,39,47,50,51,52,55,55
+38,43,48,51,52,53,56,58
+42,45,49,52,55,56,55,60
+43,46,50,53,55,58,60,63
+
+INTRA16X16_LUMA =
+ 6, 9,13,18,25,35,36,37
+ 9,10,15,21,32,35,37,41
+13,15,18,23,35,55,58,59
+18,21,23,26,65,58,64,66
+25,32,35,65,66,66,67,70
+35,35,55,58,66,68,70,73
+36,37,58,64,67,70,76,80
+37,41,59,66,70,73,80,85
+
+INTRA16X16_LUMA_DC =
+6
+
+INTRA16X16_CHROMAU =
+ 7, 9,13,18,25,35,36,37
+ 9,10,15,21,32,35,37,41
+13,15,18,23,35,55,58,59
+18,21,23,26,65,58,64,66
+25,32,35,65,66,66,67,70
+35,35,55,58,66,68,70,73
+36,37,58,64,67,70,76,80
+37,41,59,66,70,73,80,85
+
+INTRA16X16_CHROMAU_DC =
+6
+
+INTRA16X16_CHROMAV =
+ 7, 9,13,18,25,35,36,37
+ 9,10,15,21,32,35,37,41
+13,15,18,23,35,55,58,59
+18,21,23,26,65,58,64,66
+25,32,35,65,66,66,67,70
+35,35,55,58,66,68,70,73
+36,37,58,64,67,70,76,80
+37,41,59,66,70,73,80,85
+
+INTRA16X16_CHROMAV_DC =
+6
+
+INTER16X16_LUMA =
+11,15,20,29,36,38,42,43
+15,17,22,29,39,43,45,46
+20,22,32,34,47,48,49,50
+29,29,34,44,50,51,52,53
+36,39,47,50,51,52,55,55
+38,43,48,51,52,53,56,58
+42,45,49,52,55,56,55,60
+43,46,50,53,55,58,60,63
+
+INTER16X16_LUMA_DC =
+9
+
+INTER16X16_CHROMAU =
+11,15,20,29,36,38,42,43
+15,17,22,29,39,43,45,46
+20,22,32,34,47,48,49,50
+29,29,34,44,50,51,52,53
+36,39,47,50,51,52,55,55
+38,43,48,51,52,53,56,58
+42,45,49,52,55,56,55,60
+43,46,50,53,55,58,60,63
+
+INTER16X16_CHROMAU_DC =
+9
+
+INTER16X16_CHROMAV =
+11,15,20,29,36,38,42,43
+15,17,22,29,39,43,45,46
+20,22,32,34,47,48,49,50
+29,29,34,44,50,51,52,53
+36,39,47,50,51,52,55,55
+38,43,48,51,52,53,56,58
+42,45,49,52,55,56,55,60
+43,46,50,53,55,58,60,63
+
+INTER16X16_CHROMAV_DC =
+9
+
+INTRA32X32_LUMA =
+ 7, 9,13,18,25,35,36,37
+ 9,10,15,21,32,35,37,41
+13,15,18,23,35,55,58,59
+18,21,23,26,65,58,64,66
+25,32,35,65,66,66,67,70
+35,35,55,58,66,68,70,73
+36,37,58,64,67,70,76,80
+37,41,59,66,70,73,80,85
+
+INTRA32X32_LUMA_DC =
+6
+
+INTRA32X32_CHROMAU =
+ 7, 9,13,18,25,35,36,37
+ 9,10,15,21,32,35,37,41
+13,15,18,23,35,55,58,59
+18,21,23,26,65,58,64,66
+25,32,35,65,66,66,67,70
+35,35,55,58,66,68,70,73
+36,37,58,64,67,70,76,80
+37,41,59,66,70,73,80,85
+
+INTRA32X32_CHROMAU_DC =
+6
+
+INTRA32X32_CHROMAV =
+ 7, 9,13,18,25,35,36,37
+ 9,10,15,21,32,35,37,41
+13,15,18,23,35,55,58,59
+18,21,23,26,65,58,64,66
+25,32,35,65,66,66,67,70
+35,35,55,58,66,68,70,73
+36,37,58,64,67,70,76,80
+37,41,59,66,70,73,80,85
+
+INTRA32X32_CHROMAV_DC =
+6
+
+INTER32X32_LUMA =
+11,15,20,29,36,38,42,43
+15,17,22,29,39,43,45,46
+20,22,32,34,47,48,49,50
+29,29,34,44,50,51,52,53
+36,39,47,50,51,52,55,55
+38,43,48,51,52,53,56,58
+42,45,49,52,55,56,55,60
+43,46,50,53,55,58,60,63
+
+INTER32X32_LUMA_DC =
+9
+
+INTER32X32_CHROMAU =
+11,15,20,29,36,38,42,43
+15,17,22,29,39,43,45,46
+20,22,32,34,47,48,49,50
+29,29,34,44,50,51,52,53
+36,39,47,50,51,52,55,55
+38,43,48,51,52,53,56,58
+42,45,49,52,55,56,55,60
+43,46,50,53,55,58,60,63
+
+INTER32X32_CHROMAU_DC =
+9
+
+INTER32X32_CHROMAV =
+11,15,20,29,36,38,42,43
+15,17,22,29,39,43,45,46
+20,22,32,34,47,48,49,50
+29,29,34,44,50,51,52,53
+36,39,47,50,51,52,55,55
+38,43,48,51,52,53,56,58
+42,45,49,52,55,56,55,60
+43,46,50,53,55,58,60,63
+
+INTER32X32_CHROMAV_DC =
+9
+
+INTRA64X64_LUMA =
+ 7, 9,13,18,25,35,36,37
+ 9,10,15,21,32,35,37,41
+13,15,18,23,35,55,58,59
+18,21,23,26,65,58,64,66
+25,32,35,65,66,66,67,70
+35,35,55,58,66,68,70,73
+36,37,58,64,67,70,76,80
+37,41,59,66,70,73,80,85
+
+INTRA64X64_LUMA_DC =
+6
+
+INTER64X64_LUMA =
+11,15,20,29,36,38,42,43
+15,17,22,29,39,43,45,46
+20,22,32,34,47,48,49,50
+29,29,34,44,50,51,52,53
+36,39,47,50,51,52,55,55
+38,43,48,51,52,53,56,58
+42,45,49,52,55,56,55,60
+43,46,50,53,55,58,60,63
+
+INTER64X64_LUMA_DC =
+9
diff --git a/source/Lib/CommonLib/Quant.cpp b/source/Lib/CommonLib/Quant.cpp
index 15489433d85cb91bfc0a8f08151ee1cef2b62c13..0bc59f1e2f95c98bbd1c038a79cbdeb021fc0dca 100644
--- a/source/Lib/CommonLib/Quant.cpp
+++ b/source/Lib/CommonLib/Quant.cpp
@@ -542,8 +542,15 @@ void Quant::setScalingList(ScalingList *scalingList, const int maxLog2TrDynamicR
   {
     for(uint32_t list = 0; list < SCALING_LIST_NUM; list++)
     {
+#if JVET_R0166_SCALING_LISTS_CHROMA_444
+      if (size == SCALING_LIST_2x2 && list < 4)   // skip 2x2 luma
+#else
       if ((size == SCALING_LIST_2x2 && list < 4) || (size == SCALING_LIST_64x64 && list % (SCALING_LIST_NUM / SCALING_LIST_PRED_MODES) != 0))   // skip 2x2 luma
+#endif
         continue;
+#if JVET_R0166_SCALING_LISTS_CHROMA_444
+      scalingListId = g_scalingListId[size][list];
+#endif
       if (scalingList->getChromaScalingListPresentFlag() || scalingList->isLumaScalingList(scalingListId))
       {
         for(int qp = minimumQp; qp < maximumQp; qp++)
@@ -556,7 +563,9 @@ void Quant::setScalingList(ScalingList *scalingList, const int maxLog2TrDynamicR
       {
          scalingList->processDefaultMatrix(scalingListId);
       }
+#if !JVET_R0166_SCALING_LISTS_CHROMA_444
       scalingListId++;
+#endif
     }
   }
   //based on square result and apply downsample technology
@@ -568,9 +577,15 @@ void Quant::setScalingList(ScalingList *scalingList, const int maxLog2TrDynamicR
       for (uint32_t list = 0; list < SCALING_LIST_NUM; list++) //9
       {
         int largerSide = (sizew > sizeh) ? sizew : sizeh;
+#if !JVET_R0166_SCALING_LISTS_CHROMA_444
         if (largerSide == SCALING_LIST_64x64 && list % (SCALING_LIST_NUM / SCALING_LIST_PRED_MODES) != 0) continue;
+#endif
         if (largerSide < SCALING_LIST_4x4) printf("Rectangle Error !\n");
+#if JVET_R0166_SCALING_LISTS_CHROMA_444
+        recScalingListId = g_scalingListId[largerSide][list];
+#else
         recScalingListId = SCALING_LIST_NUM * (largerSide - 2) + 2 + (list / ((largerSide == SCALING_LIST_64x64) ? 3 : 1));
+#endif
         for (int qp = minimumQp; qp < maximumQp; qp++)
         {
           xSetRecScalingListEnc(scalingList, list, sizew, sizeh, qp, recScalingListId);
@@ -595,13 +610,22 @@ void Quant::setScalingListDec(const ScalingList &scalingList)
   {
     for(uint32_t list = 0; list < SCALING_LIST_NUM; list++)
     {
+#if JVET_R0166_SCALING_LISTS_CHROMA_444
+      if (size == SCALING_LIST_2x2 && list < 4)   // skip 2x2 luma
+#else
       if ((size == SCALING_LIST_2x2 && list < 4) || (size == SCALING_LIST_64x64 && list % (SCALING_LIST_NUM / SCALING_LIST_PRED_MODES) != 0))   // skip 2x2 luma
+#endif
         continue;
+#if JVET_R0166_SCALING_LISTS_CHROMA_444
+      scalingListId = g_scalingListId[size][list];
+#endif
       for(int qp = minimumQp; qp < maximumQp; qp++)
       {
         xSetScalingListDec(scalingList, list, size, qp, scalingListId);
       }
+#if !JVET_R0166_SCALING_LISTS_CHROMA_444
       scalingListId++;
+#endif
     }
   }
   //based on square result and apply downsample technology
@@ -614,9 +638,15 @@ void Quant::setScalingListDec(const ScalingList &scalingList)
       for (uint32_t list = 0; list < SCALING_LIST_NUM; list++) //9
       {
         int largerSide = (sizew > sizeh) ? sizew : sizeh;
+#if !JVET_R0166_SCALING_LISTS_CHROMA_444
         if (largerSide == SCALING_LIST_64x64 && list % (SCALING_LIST_NUM / SCALING_LIST_PRED_MODES) != 0) continue;
+#endif
         if (largerSide < SCALING_LIST_4x4) printf("Rectangle Error !\n");
+#if JVET_R0166_SCALING_LISTS_CHROMA_444
+        recScalingListId = g_scalingListId[largerSide][list];
+#else
         recScalingListId = SCALING_LIST_NUM * (largerSide - 2) + 2 + (list / ((largerSide == SCALING_LIST_64x64) ? 3 : 1));
+#endif
         for (int qp = minimumQp; qp < maximumQp; qp++)
         {
           xSetRecScalingListDec(scalingList, list, sizew, sizeh, qp, recScalingListId);
diff --git a/source/Lib/CommonLib/Rom.cpp b/source/Lib/CommonLib/Rom.cpp
index c22e29f5648307a8ded6cab7fa858afe93c200e4..61814be666379ee943c954d3de7396fa1b460d50 100644
--- a/source/Lib/CommonLib/Rom.cpp
+++ b/source/Lib/CommonLib/Rom.cpp
@@ -678,6 +678,19 @@ const int g_quantInterDefault8x8[8 * 8] =
 const uint32_t g_scalingListSize [SCALING_LIST_SIZE_NUM] = { 1, 4, 16, 64, 256, 1024, 4096, 16384 };
 const uint32_t g_scalingListSizeX[SCALING_LIST_SIZE_NUM] = { 1, 2,  4,  8,  16,   32,   64,   128 };
 
+#if JVET_R0166_SCALING_LISTS_CHROMA_444
+const uint32_t g_scalingListId[SCALING_LIST_SIZE_NUM][SCALING_LIST_NUM] =
+{
+  {  0,  0,  0,  0,  0,  0},  // SCALING_LIST_1x1
+  {  0,  0,  0,  0,  0,  1},  // SCALING_LIST_2x2
+  {  2,  3,  4,  5,  6,  7},  // SCALING_LIST_4x4
+  {  8,  9, 10, 11, 12, 13},  // SCALING_LIST_8x8
+  { 14, 15, 16, 17, 18, 19},  // SCALING_LIST_16x16
+  { 20, 21, 22, 23, 24, 25},  // SCALING_LIST_32x32
+  { 26, 21, 22, 27, 24, 25},  // SCALING_LIST_64x64
+  {  0,  0,  0,  0,  0,  0},  // SCALING_LIST_128x128
+};
+#endif
 
 
 Mv   g_reusedUniMVs[32][32][8][8][2][33];
diff --git a/source/Lib/CommonLib/Rom.h b/source/Lib/CommonLib/Rom.h
index e3b7fa5905c8c278a3ee13c99a86741160ea9e5b..54e7a3b1cfd855773b8cb85c5e3faad4a7819836 100644
--- a/source/Lib/CommonLib/Rom.h
+++ b/source/Lib/CommonLib/Rom.h
@@ -176,6 +176,9 @@ extern const int g_quantInterDefault8x8[8*8];
 
 extern const uint32_t g_scalingListSize [SCALING_LIST_SIZE_NUM];
 extern const uint32_t g_scalingListSizeX[SCALING_LIST_SIZE_NUM];
+#if JVET_R0166_SCALING_LISTS_CHROMA_444
+extern const uint32_t g_scalingListId[SCALING_LIST_SIZE_NUM][SCALING_LIST_NUM];
+#endif
 
 extern MsgLevel g_verbosity;
 
diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h
index 86f59e9b5bbdb73a911df061ca6efa8edb6c14cf..1e903f5f3ca06d807f4660c5ddbfe2c70cfd82e3 100644
--- a/source/Lib/CommonLib/TypeDef.h
+++ b/source/Lib/CommonLib/TypeDef.h
@@ -63,6 +63,8 @@
 
 #define JVET_R0165_OPTIONAL_ENTRY_POINT                   1 // JVET-R0165: Optional entry point offset
 
+#define JVET_R0166_SCALING_LISTS_CHROMA_444               1 // JVET-R0166: Scaling list for Chroma 444
+
 #define R0324_PH_SYNTAX_CONDITION_MODIFY                  1 // JVET-R0324 add conditions on PH syntax to conder whether current pic is bi-predictive picture
 
 #define JVET_R0278_CONSTRAINT                             1 // JVET-R0278: ph_inter_slice_allowed_flag constraint