diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp
index 05325441f3e6f341dffebdcb1832311902a84dc4..451720415ff08b8d97660e39b08ffeefd5ce56d5 100644
--- a/source/Lib/DecoderLib/VLCReader.cpp
+++ b/source/Lib/DecoderLib/VLCReader.cpp
@@ -3004,6 +3004,13 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag
       picHeader->setDisProfFlag(0);
     }
 
+#if JVET_Q0819_PH_CHANGES
+    if( (pps->getUseWP() || pps->getWPBiPred()) && pps->getWpInfoInPhFlag() )
+    {
+      parsePredWeightTable(picHeader, sps);
+    }
+#endif
+
 #if !JVET_Q0806
   // triangle merge candidate list size
     if (sps->getUseTriangle() && picHeader->getMaxNumMergeCand() >= 2)
@@ -3073,13 +3080,6 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag
     picHeader->setMaxNumIBCMergeCand(0);
   }
 
-#if JVET_Q0819_PH_CHANGES
-  if ((pps->getUseWP() || pps->getWPBiPred()) && pps->getWpInfoInPhFlag())
-  {
-    parsePredWeightTable(picHeader, sps);
-  }
-#endif
-
 #if JVET_Q0819_PH_CHANGES
   if (pps->getQpDeltaInfoInPhFlag())
   {
@@ -3929,6 +3929,8 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par
 #if JVET_Q0819_PH_CHANGES
       if (pps->getWpInfoInPhFlag())
       {
+        CHECK(pcSlice->getNumRefIdx(REF_PIC_LIST_0) > picHeader->getNumL0Weights(), "ERROR: Number of active reference picture L0 is greater than the number of weighted prediction signalled in Picture Header");
+        CHECK(pcSlice->getNumRefIdx(REF_PIC_LIST_1) > picHeader->getNumL1Weights(), "ERROR: Number of active reference picture L1 is greater than the number of weighted prediction signalled in Picture Header");
         pcSlice->setWpScaling(picHeader->getWpScalingAll());
       }
       else
@@ -4646,6 +4648,8 @@ void HLSyntaxReader::parsePredWeightTable(PicHeader *picHeader, const SPS *sps)
 
   uint32_t numLxWeights;
   READ_UVLC(numLxWeights, "num_l0_weights");
+  picHeader->setNumL0Weights(numLxWeights);
+  picHeader->setNumL1Weights(0);
 
   bool moreSyntaxToBeParsed = true;
   for (int numRef = 0; numRef < NUM_REF_PIC_LIST_01 && moreSyntaxToBeParsed; numRef++)
@@ -4751,6 +4755,7 @@ void HLSyntaxReader::parsePredWeightTable(PicHeader *picHeader, const SPS *sps)
     {
       READ_UVLC(numLxWeights, "num_l1_weights");
       moreSyntaxToBeParsed = (numLxWeights == 0) ? false : true;
+      picHeader->setNumL1Weights(numLxWeights);
     }
   }
   CHECK(totalSignalledWeightFlags > 24, "Too many weight flag signalled");
diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp
index 2ad1b2d30b1b2748340879526c7e58f0e0b11a40..a831ddb176fd7a185f1db234bca4b8e832b2f130 100644
--- a/source/Lib/EncoderLib/VLCWriter.cpp
+++ b/source/Lib/EncoderLib/VLCWriter.cpp
@@ -2139,6 +2139,13 @@ void HLSWriter::codePictureHeader( PicHeader* picHeader )
       picHeader->setDisProfFlag(0);
     }
 
+#if JVET_Q0819_PH_CHANGES
+    if ((pps->getUseWP() || pps->getWPBiPred()) && pps->getWpInfoInPhFlag())
+    {
+      xCodePredWeightTable(picHeader, sps);
+    }
+#endif
+
 #if !JVET_Q0806
   // triangle merge candidate list size
     if (sps->getUseTriangle() && picHeader->getMaxNumMergeCand() >= 2)
@@ -2187,13 +2194,6 @@ void HLSWriter::codePictureHeader( PicHeader* picHeader )
     WRITE_UVLC(IBC_MRG_MAX_NUM_CANDS - picHeader->getMaxNumIBCMergeCand(), "pic_six_minus_max_num_ibc_merge_cand");
   }
 
-#if JVET_Q0819_PH_CHANGES
-  if ((pps->getUseWP() || pps->getWPBiPred()) && pps->getWpInfoInPhFlag())
-  {
-    xCodePredWeightTable(picHeader, sps);
-  }
-#endif
-
 #if JVET_Q0819_PH_CHANGES
   if (pps->getQpDeltaInfoInPhFlag())
   {