diff --git a/source/Lib/CommonLib/Slice.cpp b/source/Lib/CommonLib/Slice.cpp
index 910fd7d9305261c89b8cd0524bc8f6c7f6f41cfa..108d535e1f5b3cae506bb73795e2f94b2fbea323 100644
--- a/source/Lib/CommonLib/Slice.cpp
+++ b/source/Lib/CommonLib/Slice.cpp
@@ -205,6 +205,7 @@ void Slice::initSlice()
   m_tileGroupCcAlfCrEnabledFlag = 0;
   m_tileGroupCcAlfCbApsId = -1;
   m_tileGroupCcAlfCrApsId = -1;
+  m_nuhLayerId = 0;
 }
 
 void Slice::inheritFromPicHeader( PicHeader *picHeader, const PPS *pps, const SPS *sps )
diff --git a/source/Lib/DecoderLib/SEIread.cpp b/source/Lib/DecoderLib/SEIread.cpp
index ea60ad99d3b869db29b0165a0b59419a0fa52ddf..7fe22535d163e41a0ec7ee682f2667fe10055f5a 100644
--- a/source/Lib/DecoderLib/SEIread.cpp
+++ b/source/Lib/DecoderLib/SEIread.cpp
@@ -786,8 +786,8 @@ void SEIReader::xParseSEIBufferingPeriod(SEIBufferingPeriod& sei, uint32_t paylo
   }
 #if !JVET_S0181_PROPOSAL2_BUFFERING_PERIOD_CLEANUP
   sei_read_code( pDecodedMessageOutputStream, 3, code, "bp_max_sub_layers_minus1" );     sei.m_bpMaxSubLayers = code + 1;
-  sei_read_uvlc( pDecodedMessageOutputStream, code, "bp_cpb_cnt_minus1" ); sei.m_bpCpbCnt = code + 1;
 #endif
+ sei_read_uvlc( pDecodedMessageOutputStream, code, "bp_cpb_cnt_minus1" ); sei.m_bpCpbCnt = code + 1;
 #if JVET_S0181_PROPOSAL1
   if (sei.m_bpMaxSubLayers - 1 > 0)
   {
@@ -862,6 +862,10 @@ void SEIReader::xParseSEIPictureTiming(SEIPictureTiming& sei, uint32_t payloadSi
 #if JVET_S0185_PROPOSAl1_PICTURE_TIMING_CLEANUP
   sei_read_code( pDecodedMessageOutputStream, bp.m_cpbRemovalDelayLength, symbol, "pt_cpb_removal_delay_minus1[bp_max_sub_layers_minus1]" );
   sei.m_auCpbRemovalDelay[bp.m_bpMaxSubLayers - 1] = symbol + 1;
+  if (bp.m_bpMaxSubLayers == 1)
+  {
+    sei.m_ptSubLayerDelaysPresentFlag[0] = true;
+  }
   for (int i = temporalId; i < bp.m_bpMaxSubLayers - 1; i++)
   {
     sei_read_flag(pDecodedMessageOutputStream, symbol, "pt_sub_layer_delays_present_flag[i]");
@@ -1050,7 +1054,7 @@ void SEIReader::xParseSEIPictureTiming(SEIPictureTiming& sei, uint32_t payloadSi
       sei.m_duCommonCpbRemovalDelayFlag = symbol;
       if( sei.m_duCommonCpbRemovalDelayFlag )
       {
-        for( int i = temporalId; i < bp.m_bpMaxSubLayers - 1; i ++ )
+        for( int i = temporalId; i <= bp.m_bpMaxSubLayers - 1; i ++ )
         {
           if( sei.m_ptSubLayerDelaysPresentFlag[i] )
           {
@@ -1065,7 +1069,7 @@ void SEIReader::xParseSEIPictureTiming(SEIPictureTiming& sei, uint32_t payloadSi
         sei.m_numNalusInDuMinus1[i] = symbol;
         if( !sei.m_duCommonCpbRemovalDelayFlag && i < sei.m_numDecodingUnitsMinus1 )
         {
-          for( int j = temporalId; j < bp.m_bpMaxSubLayers - 1; j ++ )
+          for( int j = temporalId; j <= bp.m_bpMaxSubLayers - 1; j ++ )
           {
             if( sei.m_ptSubLayerDelaysPresentFlag[j] )
             {
diff --git a/source/Lib/EncoderLib/EncGOP.cpp b/source/Lib/EncoderLib/EncGOP.cpp
index 135e37d4fd32979a1a18d4c39a2a672451e3d8f5..a9930425829d04e3eea2ab2b00135b4cad7095e3 100644
--- a/source/Lib/EncoderLib/EncGOP.cpp
+++ b/source/Lib/EncoderLib/EncGOP.cpp
@@ -849,6 +849,10 @@ void EncGOP::xCreatePictureTimingSEI  (int IRAPGOPid, SEIMessages& seiMessages,
     pictureTimingSEI->m_auCpbRemovalDelay[maxNumSubLayers-1] = std::min<int>(std::max<int>(1, m_totalCoded[maxNumSubLayers-1] - m_lastBPSEI[maxNumSubLayers-1]), static_cast<int>(pow(2, static_cast<double>(cpbRemovalDelayLegth)))); // Syntax element signalled as minus, hence the .
     CHECK( (m_totalCoded[maxNumSubLayers-1] - m_lastBPSEI[maxNumSubLayers-1]) > pow(2, static_cast<double>(cpbRemovalDelayLegth)), " cpbRemovalDelayLegth too small for m_auCpbRemovalDelay[pt_max_sub_layers_minus1] at picture timing SEI " );
     const uint32_t temporalId = slice->getTLayer();
+    if (maxNumSubLayers == 1)
+    {
+      pictureTimingSEI->m_ptSubLayerDelaysPresentFlag[0] = true;
+    }
     for( int i = temporalId ; i < maxNumSubLayers - 1 ; i ++ )
     {
       int indexWithinGOP = (m_totalCoded[maxNumSubLayers - 1] - m_lastBPSEI[maxNumSubLayers - 1]) % m_pcCfg->getGOPSize();
diff --git a/source/Lib/EncoderLib/SEIwrite.cpp b/source/Lib/EncoderLib/SEIwrite.cpp
index 085fce9de5e058f4709f22fd395caa98a8547c0b..66f8d85f33ebc958717de3a40a7539d44489fc50 100644
--- a/source/Lib/EncoderLib/SEIwrite.cpp
+++ b/source/Lib/EncoderLib/SEIwrite.cpp
@@ -479,7 +479,7 @@ void SEIWriter::xWriteSEIPictureTiming(const SEIPictureTiming& sei, const SEIBuf
       WRITE_FLAG( sei.m_duCommonCpbRemovalDelayFlag, "du_commmon_cpb_removal_delay_flag" );
       if( sei.m_duCommonCpbRemovalDelayFlag )
       {
-        for( int i = temporalId; i < bp.m_bpMaxSubLayers - 1; i ++ )
+        for( int i = temporalId; i <= bp.m_bpMaxSubLayers - 1; i ++ )
         {
           if( sei.m_ptSubLayerDelaysPresentFlag[i] )
             WRITE_CODE( sei.m_duCommonCpbRemovalDelayMinus1[i], bp.m_duCpbRemovalDelayIncrementLength, "du_common_cpb_removal_delay_increment_minus1[i]" );
@@ -490,7 +490,7 @@ void SEIWriter::xWriteSEIPictureTiming(const SEIPictureTiming& sei, const SEIBuf
         WRITE_UVLC( sei.m_numNalusInDuMinus1[i], "num_nalus_in_du_minus1[i]" );
         if( !sei.m_duCommonCpbRemovalDelayFlag && i < sei.m_numDecodingUnitsMinus1 )
         {
-          for( int j = temporalId; j < bp.m_bpMaxSubLayers - 1; j ++ )
+          for( int j = temporalId; j <= bp.m_bpMaxSubLayers - 1; j ++ )
           {
             if( sei.m_ptSubLayerDelaysPresentFlag[j] )
               WRITE_CODE( sei.m_duCpbRemovalDelayMinus1[i * bp.m_bpMaxSubLayers + j], bp.m_duCpbRemovalDelayIncrementLength, "du_cpb_removal_delay_increment_minus1[i][j]" );