diff --git a/source/Lib/CommonLib/Slice.h b/source/Lib/CommonLib/Slice.h
index f8206364b6554414c96668e2a7cde78ef1d9170d..aff1913a55e41a1631c055f7ee7f121473c058de 100644
--- a/source/Lib/CommonLib/Slice.h
+++ b/source/Lib/CommonLib/Slice.h
@@ -936,8 +936,8 @@ public:
   OPI()
     : m_olsinfopresentflag (false)
     ,  m_htidinfopresentflag (false)
-    ,  m_opiolsidx (MAX_INT)
-    ,  m_opihtidplus1 (MAX_INT)
+    ,  m_opiolsidx (-1)
+    ,  m_opihtidplus1 (-1)
   {};
 
   virtual ~OPI() {};
diff --git a/source/Lib/EncoderLib/AnnexBwrite.h b/source/Lib/EncoderLib/AnnexBwrite.h
index e696e68f68c43584380426beef03ce5ff2c9dc49..d9007085fbe75a4cc0b1bbaf37f9c8a4e88f5975 100644
--- a/source/Lib/EncoderLib/AnnexBwrite.h
+++ b/source/Lib/EncoderLib/AnnexBwrite.h
@@ -78,8 +78,14 @@ std::vector<uint32_t> writeAnnexBAccessUnit(std::ostream& out, const AccessUnit&
   for (AccessUnit::const_iterator it = au.begin(); it != au.end(); it++)
   {
     const NALUnitEBSP& nalu = **it;
+#if JVET_S0163_ON_TARGETOLS_SUBLAYERS
+    const bool useLongStartCode = (it == au.begin() || nalu.m_nalUnitType == NAL_UNIT_OPI || nalu.m_nalUnitType == NAL_UNIT_DCI || nalu.m_nalUnitType == NAL_UNIT_VPS || nalu.m_nalUnitType == NAL_UNIT_SPS
+                                   || nalu.m_nalUnitType == NAL_UNIT_PPS || nalu.m_nalUnitType == NAL_UNIT_PREFIX_APS || nalu.m_nalUnitType == NAL_UNIT_SUFFIX_APS);
+#else
     const bool useLongStartCode = (it == au.begin() || nalu.m_nalUnitType == NAL_UNIT_DCI || nalu.m_nalUnitType == NAL_UNIT_VPS || nalu.m_nalUnitType == NAL_UNIT_SPS
                                    || nalu.m_nalUnitType == NAL_UNIT_PPS || nalu.m_nalUnitType == NAL_UNIT_PREFIX_APS || nalu.m_nalUnitType == NAL_UNIT_SUFFIX_APS);
+#endif
+
     const uint32_t size = writeAnnexBNalUnit(out, nalu, useLongStartCode);
 
     annexBsizes.push_back(size);
diff --git a/source/Lib/EncoderLib/EncCfg.h b/source/Lib/EncoderLib/EncCfg.h
index 943f64604d45a5b295109249e6854c3fd81cb892..b4b60bab2815549fe1b411600ef8d739239e0a02 100644
--- a/source/Lib/EncoderLib/EncCfg.h
+++ b/source/Lib/EncoderLib/EncCfg.h
@@ -1800,8 +1800,8 @@ public:
 #if JVET_S0163_ON_TARGETOLS_SUBLAYERS
   bool         getOPIEnabled()                      { return m_OPIEnabled; }
   void         setOPIEnabled(bool i)                { m_OPIEnabled = i; }
-  void         setHtidPlus1(int HTid)               { if (HTid != MAX_INT) { m_opi.setHtidInfoPresentFlag(true); m_opi.setOpiHtidPlus1(HTid);} }
-  void         setTargetOlsIdx(int TOlsIdx)         { if (TOlsIdx != MAX_INT) { m_opi.setOlsInfoPresentFlag(true); m_opi.setOpiOlsIdx(TOlsIdx); } }
+  void         setHtidPlus1(int HTid)               { m_opi.setHtidInfoPresentFlag(true); m_opi.setOpiHtidPlus1(HTid); }
+  void         setTargetOlsIdx(int TOlsIdx)         { m_opi.setOlsInfoPresentFlag(true); m_opi.setOpiOlsIdx(TOlsIdx); }
 #endif
 
   bool         getDCIEnabled()                      { return m_DCIEnabled; }
diff --git a/source/Lib/EncoderLib/EncLib.cpp b/source/Lib/EncoderLib/EncLib.cpp
index c798e0bb18cc26db7d85f5677585c851c0c6d463..0b72d2c1e7abea96fa5ff56065459a99eaf0c34d 100644
--- a/source/Lib/EncoderLib/EncLib.cpp
+++ b/source/Lib/EncoderLib/EncLib.cpp
@@ -234,7 +234,7 @@ void EncLib::init( bool isFieldCoding, AUWriterIf* auWriterIf )
 
   xInitVPS( sps0 );
 #if JVET_S0163_ON_TARGETOLS_SUBLAYERS
-  xInitOPI(m_opi, sps0);
+  xInitOPI(m_opi);
 #endif
   xInitDCI(m_dci, sps0);
 #if ENABLE_SPLIT_PARALLELISM
@@ -1151,15 +1151,20 @@ void EncLib::xInitVPS( const SPS& sps )
 }
 
 #if JVET_S0163_ON_TARGETOLS_SUBLAYERS
-void EncLib::xInitOPI(OPI& opi, const SPS& sps)
+void EncLib::xInitOPI(OPI& opi)
 {
-  if (opi.getOpiOlsIdx() == MAX_INT && m_vps)
+  if (m_OPIEnabled && m_vps)
   {
-    opi.setOpiOlsIdx(m_vps->deriveTargetOLSIdx());
-  }
-  if (opi.getOpiHtidPlus1() == MAX_INT && m_vps)
-  {
-    opi.setOpiHtidPlus1(m_vps->getMaxTidinTOls(opi.getOpiOlsIdx()) + 1);
+    if (!opi.getOlsInfoPresentFlag())
+    {
+      opi.setOpiOlsIdx(m_vps->deriveTargetOLSIdx());
+      opi.setOlsInfoPresentFlag(true);    
+    }
+    if (!opi.getHtidInfoPresentFlag())
+    {
+      opi.setOpiHtidPlus1(m_vps->getMaxTidinTOls(opi.getOpiOlsIdx()) + 1);
+      opi.setHtidInfoPresentFlag(true);
+    }
   }
 }
 #endif
diff --git a/source/Lib/EncoderLib/EncLib.h b/source/Lib/EncoderLib/EncLib.h
index 09479c49840573620da1c48973f18cd81d1f0357..61b9d9b4c12e1fa3e0c8bc2c928c9c88bd2f1c1b 100644
--- a/source/Lib/EncoderLib/EncLib.h
+++ b/source/Lib/EncoderLib/EncLib.h
@@ -168,7 +168,7 @@ public:
 protected:
   void  xGetNewPicBuffer  ( std::list<PelUnitBuf*>& rcListPicYuvRecOut, Picture*& rpcPic, int ppsId ); ///< get picture buffer which will be processed. If ppsId<0, then the ppsMap will be queried for the first match.
 #if JVET_S0163_ON_TARGETOLS_SUBLAYERS
-  void  xInitOPI(OPI& opi, const SPS& sps); ///< initialize Operating point Information (OPI) from encoder options
+  void  xInitOPI(OPI& opi); ///< initialize Operating point Information (OPI) from encoder options
 #endif
   void  xInitDCI(DCI& dci, const SPS& sps); ///< initialize Decoding Capability Information (DCI) from encoder options
   void  xInitVPS( const SPS& sps ); ///< initialize VPS from encoder options