diff --git a/source/Lib/CommonLib/HRD.h b/source/Lib/CommonLib/HRD.h
index 288ec5c6dc93fd7bf021ef6229195da8e5be9b0a..82d40dabafdea7ed29bac44eb0cbd12e6ca10bf5 100644
--- a/source/Lib/CommonLib/HRD.h
+++ b/source/Lib/CommonLib/HRD.h
@@ -191,9 +191,9 @@ public:
   const GeneralHrdParams& getGeneralHrdParameters() { return m_generalHrdParams; }
 
   void                 setOlsHrdParameters(int tLayter, OlsHrdParams &olsHrdParam) { m_olsHrdParams[tLayter] = olsHrdParam; }
-  OlsHrdParams          getOlsHrdParameters() { return m_olsHrdParams[0]; }
-  OlsHrdParams*          getOlsHrdParametersAddr() { return &m_olsHrdParams[0]; }
-  const OlsHrdParams&    getOlsHrdParameters() const { return m_olsHrdParams[0]; }
+  OlsHrdParams           getOlsHrdParameters(int idx) { return m_olsHrdParams[idx]; }
+  OlsHrdParams*          getOlsHrdParametersAddr() { return m_olsHrdParams; }
+  const OlsHrdParams&    getOlsHrdParameters(int idx) const { return m_olsHrdParams[idx]; }
 
 
   void                       setBufferingPeriodSEI(const SEIBufferingPeriod* bp)  { bp->copyTo(m_bufferingPeriodSEI); m_bufferingPeriodInitialized = true; }
diff --git a/source/Lib/EncoderLib/EncGOP.cpp b/source/Lib/EncoderLib/EncGOP.cpp
index 1660efa6d7acd65f0ab103721bd1b73ab69aef3b..e6ef5219d886923866c582a775a060d46c8e7aa7 100644
--- a/source/Lib/EncoderLib/EncGOP.cpp
+++ b/source/Lib/EncoderLib/EncGOP.cpp
@@ -3226,6 +3226,7 @@ void EncGOP::compressGOP( int iPOCLast, int iNumPicRcvd, PicList& rcListPic,
           }
         }
         pcSlice->setPicHeader( pcPic->cs->picHeader );
+	pcSlice->setNalUnitLayerId( m_pcEncLib->getLayerId() );
 
         for ( uint32_t ui = 0 ; ui < numSubstreams; ui++ )
         {
diff --git a/source/Lib/EncoderLib/EncHRD.cpp b/source/Lib/EncoderLib/EncHRD.cpp
index c28dc0d4c473e7e1f728ddafd27293bb6de19139..bf3c16f4f55653db540eb369ae8f6b86329cc900 100644
--- a/source/Lib/EncoderLib/EncHRD.cpp
+++ b/source/Lib/EncoderLib/EncHRD.cpp
@@ -156,11 +156,10 @@ void EncHRD::initHRDParameters(EncCfg* encCfg)
 
   for (i = 0; i < MAX_TLAYER; i++)
   {
-    OlsHrdParams curOlsHrdParams = olsHrdParams[i];
-
-    curOlsHrdParams.setFixedPicRateGeneralFlag(1);
-    curOlsHrdParams.setElementDurationInTcMinus1(0);
-    curOlsHrdParams.setLowDelayHrdFlag(0);
+    olsHrdParams[i].setFixedPicRateGeneralFlag(1);
+    olsHrdParams[i].setFixedPicRateWithinCvsFlag(1);
+    olsHrdParams[i].setElementDurationInTcMinus1(0);
+    olsHrdParams[i].setLowDelayHrdFlag(0);
 
     //! \todo check for possible PTL violations
     // BitRate[ i ] = ( bit_rate_value_minus1[ i ] + 1 ) * 2^( 6 + bit_rate_scale )
@@ -180,17 +179,17 @@ void EncHRD::initHRDParameters(EncCfg* encCfg)
 
     for (j = 0; j < (m_generalHrdParams.getHrdCpbCntMinus1() + 1); j++)
     {
-      curOlsHrdParams.setBitRateValueMinus1(j, 0, (bitrateValue - 1));
-      curOlsHrdParams.setCpbSizeValueMinus1(j, 0, (cpbSizeValue - 1));
-      curOlsHrdParams.setDuCpbSizeValueMinus1(j, 0, (duCpbSizeValue - 1));
-      curOlsHrdParams.setDuBitRateValueMinus1(j, 0, (duBitRateValue - 1));
-      curOlsHrdParams.setCbrFlag(j, 0, false);
-
-      curOlsHrdParams.setBitRateValueMinus1(j, 1, (bitrateValue - 1));
-      curOlsHrdParams.setCpbSizeValueMinus1(j, 1, (cpbSizeValue - 1));
-      curOlsHrdParams.setDuCpbSizeValueMinus1(j, 1, (duCpbSizeValue - 1));
-      curOlsHrdParams.setDuBitRateValueMinus1(j, 1, (duBitRateValue - 1));
-      curOlsHrdParams.setCbrFlag(j, 1, false);
+      olsHrdParams[i].setBitRateValueMinus1(j, 0, (bitrateValue - 1));
+      olsHrdParams[i].setCpbSizeValueMinus1(j, 0, (cpbSizeValue - 1));
+      olsHrdParams[i].setDuCpbSizeValueMinus1(j, 0, (duCpbSizeValue - 1));
+      olsHrdParams[i].setDuBitRateValueMinus1(j, 0, (duBitRateValue - 1));
+      olsHrdParams[i].setCbrFlag(j, 0, false);
+
+      olsHrdParams[i].setBitRateValueMinus1(j, 1, (bitrateValue - 1));
+      olsHrdParams[i].setCpbSizeValueMinus1(j, 1, (cpbSizeValue - 1));
+      olsHrdParams[i].setDuCpbSizeValueMinus1(j, 1, (duCpbSizeValue - 1));
+      olsHrdParams[i].setDuBitRateValueMinus1(j, 1, (duBitRateValue - 1));
+      olsHrdParams[i].setCbrFlag(j, 1, false);
     }
   }
 }
diff --git a/source/Lib/EncoderLib/EncLib.cpp b/source/Lib/EncoderLib/EncLib.cpp
index 861b2158cf6de93e5f457249eec04c191f001480..6fdb1a9a3cc8d8d1e038bbf2d321c2094340c7bf 100644
--- a/source/Lib/EncoderLib/EncLib.cpp
+++ b/source/Lib/EncoderLib/EncLib.cpp
@@ -1490,8 +1490,12 @@ void EncLib::xInitHrdParameters(SPS &sps)
   GeneralHrdParams *generalHrdParams = sps.getGeneralHrdParameters();
   *generalHrdParams = m_encHRD.getGeneralHrdParameters();
 
-  OlsHrdParams *olsHrdParams = sps.getOlsHrdParameters();
-  *olsHrdParams = m_encHRD.getOlsHrdParameters();
+  OlsHrdParams *spsOlsHrdParams = sps.getOlsHrdParameters();
+  for(int i = 0; i < MAX_TLAYER; i++)
+  {
+    *spsOlsHrdParams = m_encHRD.getOlsHrdParameters(i);
+    spsOlsHrdParams++;
+  }
 }
 
 void EncLib::xInitPPS(PPS &pps, const SPS &sps)