diff --git a/source/App/DecoderApp/DecApp.cpp b/source/App/DecoderApp/DecApp.cpp
index 72eb2ffe940e5e19a2b7dd3dcc6779596395ed82..7735309afc36ac6d4e62a2e33522f93f757c0f1a 100644
--- a/source/App/DecoderApp/DecApp.cpp
+++ b/source/App/DecoderApp/DecApp.cpp
@@ -233,11 +233,16 @@ uint32_t DecApp::decode()
         m_cDecLib.setNoOutputPriorPicsFlag (false);
       }
       if ( bNewPicture &&
+#if !JVET_M0101_HLS
            (   nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_W_RADL
             || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_N_LP
             || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_BLA_N_LP
             || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_BLA_W_RADL
             || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_BLA_W_LP ) )
+#else
+          (   nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_W_RADL
+            || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_N_LP) )
+#endif
       {
         xFlushOutput( pcListPic );
       }
@@ -247,7 +252,11 @@ uint32_t DecApp::decode()
         m_cDecLib.setFirstSliceInPicture (false);
       }
       // write reconstruction to file -- for additional bumping as defined in C.5.2.3
+#if !JVET_M0101_HLS
       if(!bNewPicture && nalu.m_nalUnitType >= NAL_UNIT_CODED_SLICE_TRAIL_N && nalu.m_nalUnitType <= NAL_UNIT_RESERVED_VCL31)
+#else
+      if (!bNewPicture && nalu.m_nalUnitType >= NAL_UNIT_CODED_SLICE_TRAIL && nalu.m_nalUnitType <= NAL_UNIT_RESERVED_VCL15)
+#endif
       {
         xWriteOutput( pcListPic, nalu.m_temporalId );
       }
diff --git a/source/App/EncoderApp/EncApp.cpp b/source/App/EncoderApp/EncApp.cpp
index 366267598e9c2d4543f2e2c3d8cd9d1fed4e1883..2e7dacc9650cf8574e9550b08e517ea33c607cc6 100644
--- a/source/App/EncoderApp/EncApp.cpp
+++ b/source/App/EncoderApp/EncApp.cpp
@@ -888,6 +888,7 @@ void EncApp::rateStatsAccum(const AccessUnit& au, const std::vector<uint32_t>& a
   {
     switch ((*it_au)->m_nalUnitType)
     {
+#if !JVET_M0101_HLS
     case NAL_UNIT_CODED_SLICE_TRAIL_R:
     case NAL_UNIT_CODED_SLICE_TRAIL_N:
     case NAL_UNIT_CODED_SLICE_TSA_R:
@@ -904,6 +905,15 @@ void EncApp::rateStatsAccum(const AccessUnit& au, const std::vector<uint32_t>& a
     case NAL_UNIT_CODED_SLICE_RADL_R:
     case NAL_UNIT_CODED_SLICE_RASL_N:
     case NAL_UNIT_CODED_SLICE_RASL_R:
+#else
+    case NAL_UNIT_CODED_SLICE_TRAIL:
+    case NAL_UNIT_CODED_SLICE_STSA:
+    case NAL_UNIT_CODED_SLICE_IDR_W_RADL:
+    case NAL_UNIT_CODED_SLICE_IDR_N_LP:
+    case NAL_UNIT_CODED_SLICE_CRA:
+    case NAL_UNIT_CODED_SLICE_RADL:
+    case NAL_UNIT_CODED_SLICE_RASL:
+#endif
 #if HEVC_VPS
     case NAL_UNIT_VPS:
 #endif
diff --git a/source/App/Parcat/parcat.cpp b/source/App/Parcat/parcat.cpp
index a0cc878819a3d593043580ff8577f149713d9d5b..9c72ed425708efd9e43577ed7cf8555f125b3424 100644
--- a/source/App/Parcat/parcat.cpp
+++ b/source/App/Parcat/parcat.cpp
@@ -102,6 +102,7 @@ const bool verbose = false;
 
 const char * NALU_TYPE[] =
 {
+#if !JVET_M0101_HLS
     "TRAIL_N",
     "TRAIL_R",
     "TSA_N",
@@ -150,6 +151,53 @@ const char * NALU_TYPE[] =
     "FD_NUT",
     "PREFIX_SEI_NUT",
     "SUFFIX_SEI_NUT",
+#else
+    "NAL_UNIT_CODED_SLICE_TRAIL",
+    "NAL_UNIT_CODED_SLICE_STSA",
+    "NAL_UNIT_CODED_SLICE_RADL",
+    "NAL_UNIT_CODED_SLICE_RASL",
+    "NAL_UNIT_RESERVED_VCL_4",
+    "NAL_UNIT_RESERVED_VCL_5",
+    "NAL_UNIT_RESERVED_VCL_6",
+    "NAL_UNIT_RESERVED_VCL_7",
+
+    "NAL_UNIT_CODED_SLICE_IDR_W_RADL",
+    "NAL_UNIT_CODED_SLICE_IDR_N_LP",
+    "NAL_UNIT_CODED_SLICE_CRA",
+
+    "NAL_UNIT_RESERVED_IRAP_VCL11",
+    "NAL_UNIT_RESERVED_IRAP_VCL12",
+    "NAL_UNIT_RESERVED_IRAP_VCL13",
+
+    "NAL_UNIT_RESERVED_VCL14",
+
+#if HEVC_VPS
+    "NAL_UNIT_VPS",
+#else
+    "NAL_UNIT_RESERVED_VCL15",
+#endif
+
+    "NAL_UNIT_RESERVED_NVCL16",
+
+    "NAL_UNIT_SPS",
+    "NAL_UNIT_PPS",
+#if JVET_M0132_APS
+    "NAL_UNIT_APS",
+#endif
+    "NAL_UNIT_ACCESS_UNIT_DELIMITER",
+    "NAL_UNIT_EOS",
+    "NAL_UNIT_EOB",
+    "NAL_UNIT_PREFIX_SEI",
+    "NAL_UNIT_SUFFIX_SEI",
+    "NAL_UNIT_FILLER_DATA",
+
+    "NAL_UNIT_RESERVED_NVCL26",
+    "NAL_UNIT_RESERVED_NVCL27",
+    "NAL_UNIT_UNSPECIFIED_28",
+    "NAL_UNIT_UNSPECIFIED_29",
+    "NAL_UNIT_UNSPECIFIED_30",
+    "NAL_UNIT_UNSPECIFIED_31"
+#endif
 };
 
 int calc_poc(int iPOClsb, int prevTid0POC, int getBitsForPOC, int nalu_type)
@@ -171,6 +219,7 @@ int calc_poc(int iPOClsb, int prevTid0POC, int getBitsForPOC, int nalu_type)
   {
     iPOCmsb = iPrevPOCmsb;
   }
+#if !JVET_M0101_HLS
   if ( nalu_type == NAL_UNIT_CODED_SLICE_BLA_W_LP
     || nalu_type == NAL_UNIT_CODED_SLICE_BLA_W_RADL
     || nalu_type == NAL_UNIT_CODED_SLICE_BLA_N_LP )
@@ -178,6 +227,7 @@ int calc_poc(int iPOClsb, int prevTid0POC, int getBitsForPOC, int nalu_type)
     // For BLA picture types, POCmsb is set to 0.
     iPOCmsb = 0;
   }
+#endif
 
   return iPOCmsb + iPOClsb;
 }
@@ -228,7 +278,11 @@ std::vector<uint8_t> filter_segment(const std::vector<uint8_t> & v, int idx, int
       int offset = 16;
 
       offset += 1; //first_slice_segment_in_pic_flag
+#if !JVET_M0101_HLS
       if (nalu_type >= NAL_UNIT_CODED_SLICE_BLA_W_LP && nalu_type <= NAL_UNIT_RESERVED_IRAP_VCL23)
+#else
+      if (nalu_type >= NAL_UNIT_CODED_SLICE_IDR_W_RADL && nalu_type <= NAL_UNIT_RESERVED_IRAP_VCL13)
+#endif
       {
         offset += 1; //no_output_of_prior_pics_flag
       }
diff --git a/source/Lib/CommonLib/NAL.h b/source/Lib/CommonLib/NAL.h
index f8185efb8e53a9d3f7d86cc72ef8d84310eab83c..57f98f7812e751f783c99c28c97d7bfbebfa5374 100644
--- a/source/Lib/CommonLib/NAL.h
+++ b/source/Lib/CommonLib/NAL.h
@@ -74,6 +74,15 @@ struct NALUnit
   /** returns true if the NALunit is a slice NALunit */
   bool isSlice()
   {
+#if JVET_M0101_HLS
+    return m_nalUnitType == NAL_UNIT_CODED_SLICE_TRAIL
+        || m_nalUnitType == NAL_UNIT_CODED_SLICE_STSA
+        || m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_W_RADL
+        || m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_N_LP
+        || m_nalUnitType == NAL_UNIT_CODED_SLICE_CRA
+        || m_nalUnitType == NAL_UNIT_CODED_SLICE_RADL
+        || m_nalUnitType == NAL_UNIT_CODED_SLICE_RASL;
+#else
     return m_nalUnitType == NAL_UNIT_CODED_SLICE_TRAIL_R
         || m_nalUnitType == NAL_UNIT_CODED_SLICE_TRAIL_N
         || m_nalUnitType == NAL_UNIT_CODED_SLICE_TSA_R
@@ -90,6 +99,7 @@ struct NALUnit
         || m_nalUnitType == NAL_UNIT_CODED_SLICE_RADL_R
         || m_nalUnitType == NAL_UNIT_CODED_SLICE_RASL_N
         || m_nalUnitType == NAL_UNIT_CODED_SLICE_RASL_R;
+#endif
   }
   bool isSei()
   {
diff --git a/source/Lib/CommonLib/Picture.cpp b/source/Lib/CommonLib/Picture.cpp
index d5ee0c4956c2bf31bacb5887aadbe87f0b7d3ecf..01380ecb7323c1f5bec26daf1ae163e489a0dcaa 100644
--- a/source/Lib/CommonLib/Picture.cpp
+++ b/source/Lib/CommonLib/Picture.cpp
@@ -553,7 +553,11 @@ void TileMap::initTileMap( const SPS& sps, const PPS& pps )
   // Tile size check
   int minWidth  = 1;
   int minHeight = 1;
+#if !JVET_M0101_HLS
   const int profileIdc = sps.getPTL()->getGeneralPTL()->getProfileIdc();
+#else
+  const int profileIdc = sps.getProfileTierLevel()->getProfileIdc();
+#endif
   if (  profileIdc == Profile::MAIN || profileIdc == Profile::MAIN10)
   {
     if (pps.getTilesEnabledFlag())
diff --git a/source/Lib/CommonLib/Rom.cpp b/source/Lib/CommonLib/Rom.cpp
index bd80c62f3abc27b031814d7f26af0c84c76c8179..e2ffe15e5ea4a61deeefc70e98ae86c5a5ada561 100644
--- a/source/Lib/CommonLib/Rom.cpp
+++ b/source/Lib/CommonLib/Rom.cpp
@@ -65,6 +65,30 @@ const char* nalUnitTypeToString(NalUnitType type)
 {
   switch (type)
   {
+#if JVET_M0101_HLS
+  case NAL_UNIT_CODED_SLICE_TRAIL:      return "TRAIL";
+  case NAL_UNIT_CODED_SLICE_STSA:       return "STSA";
+  case NAL_UNIT_CODED_SLICE_IDR_W_RADL: return "IDR_W_RADL";
+  case NAL_UNIT_CODED_SLICE_IDR_N_LP:   return "IDR_N_LP";
+  case NAL_UNIT_CODED_SLICE_CRA:        return "CRA";
+  case NAL_UNIT_CODED_SLICE_RADL:       return "RADL";
+  case NAL_UNIT_CODED_SLICE_RASL:       return "RASL";
+#if HEVC_VPS
+  case NAL_UNIT_VPS:                    return "VPS";
+#endif
+  case NAL_UNIT_SPS:                    return "SPS";
+  case NAL_UNIT_PPS:                    return "PPS";
+#if JVET_M0132_APS
+  case NAL_UNIT_APS:                    return "APS";
+#endif
+  case NAL_UNIT_ACCESS_UNIT_DELIMITER:  return "AUD";
+  case NAL_UNIT_EOS:                    return "EOS";
+  case NAL_UNIT_EOB:                    return "EOB";
+  case NAL_UNIT_FILLER_DATA:            return "FILLER";
+  case NAL_UNIT_PREFIX_SEI:             return "Prefix SEI";
+  case NAL_UNIT_SUFFIX_SEI:             return "Suffix SEI";
+  default:                              return "UNK";
+#else
   case NAL_UNIT_CODED_SLICE_TRAIL_R:    return "TRAIL_R";
   case NAL_UNIT_CODED_SLICE_TRAIL_N:    return "TRAIL_N";
   case NAL_UNIT_CODED_SLICE_TSA_R:      return "TSA_R";
@@ -96,6 +120,7 @@ const char* nalUnitTypeToString(NalUnitType type)
   case NAL_UNIT_PREFIX_SEI:             return "Prefix SEI";
   case NAL_UNIT_SUFFIX_SEI:             return "Suffix SEI";
   default:                              return "UNK";
+#endif
   }
 }
 
diff --git a/source/Lib/CommonLib/Slice.cpp b/source/Lib/CommonLib/Slice.cpp
index ec8b4f899bd77d7eaba188523c055a187cef0acf..a0f5c64e02e42cdbdd58013d9d4a9fd01257cf59 100644
--- a/source/Lib/CommonLib/Slice.cpp
+++ b/source/Lib/CommonLib/Slice.cpp
@@ -88,7 +88,7 @@ Slice::Slice()
 , m_colFromL0Flag                 ( true )
 , m_noOutputPriorPicsFlag         ( false )
 , m_noRaslOutputFlag              ( false )
-, m_handleCraAsBlaFlag            ( false )
+, m_handleCraAsCvsStartFlag            ( false )
 , m_colRefIdx                     ( 0 )
 , m_maxNumMergeCand               ( 0 )
 , m_maxNumAffineMergeCand         ( 0 )
@@ -123,7 +123,9 @@ Slice::Slice()
 , m_substreamSizes                ( )
 , m_cabacInitFlag                 ( false )
 , m_bLMvdL1Zero                   ( false )
+#if !JVET_M0101_HLS
 , m_temporalLayerNonReferenceFlag ( false )
+#endif
 , m_LFCrossSliceBoundaryFlag      ( false )
 , m_enableTMVPFlag                ( true )
 , m_encCABACTableIdx              (I_SLICE)
@@ -247,10 +249,12 @@ bool Slice::getRapPicFlag() const
 {
   return getNalUnitType() == NAL_UNIT_CODED_SLICE_IDR_W_RADL
       || getNalUnitType() == NAL_UNIT_CODED_SLICE_IDR_N_LP
+#if !JVET_M0101_HLS
       || getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_N_LP
       || getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_W_RADL
       || getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_W_LP
-      || getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA;
+#endif
+    || getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA;
 }
 
 
@@ -660,6 +664,7 @@ void Slice::checkCRA(const ReferencePictureSet *pReferencePictureSet, int& pocCR
     pocCRA = getPOC();
     associatedIRAPType = getNalUnitType();
   }
+#if !JVET_M0101_HLS
   else if ( getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_W_LP
          || getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_W_RADL
          || getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_N_LP ) // BLA picture found
@@ -667,6 +672,7 @@ void Slice::checkCRA(const ReferencePictureSet *pReferencePictureSet, int& pocCR
     pocCRA = getPOC();
     associatedIRAPType = getNalUnitType();
   }
+#endif
 }
 
 /** Function for marking the reference pictures when an IDR/CRA/CRANT/BLA/BLANT is encountered.
@@ -692,11 +698,16 @@ void Slice::decodingRefreshMarking(int& pocCRA, bool& bRefreshPending, PicList&
   Picture* rpcPic;
   int      pocCurr = getPOC();
 
+#if !JVET_M0101_HLS
   if ( getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_W_LP
     || getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_W_RADL
     || getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_N_LP
     || getNalUnitType() == NAL_UNIT_CODED_SLICE_IDR_W_RADL
     || getNalUnitType() == NAL_UNIT_CODED_SLICE_IDR_N_LP )  // IDR or BLA picture
+#else
+  if ( getNalUnitType() == NAL_UNIT_CODED_SLICE_IDR_W_RADL
+    || getNalUnitType() == NAL_UNIT_CODED_SLICE_IDR_N_LP)  // IDR picture
+#endif
   {
     // mark all pictures as not used for reference
     PicList::iterator        iterPic       = rcListPic.begin();
@@ -712,12 +723,14 @@ void Slice::decodingRefreshMarking(int& pocCRA, bool& bRefreshPending, PicList&
       }
       iterPic++;
     }
+#if !JVET_M0101_HLS
     if ( getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_W_LP
       || getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_W_RADL
       || getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_N_LP )
     {
       pocCRA = pocCurr;
     }
+#endif
     if (bEfficientFieldIRAPEnabled)
     {
       bRefreshPending = true;
@@ -960,25 +973,41 @@ void Slice::checkLeadingPictureRestrictions(PicList& rcListPic) const
   if(this->getAssociatedIRAPPOC() > this->getPOC())
   {
     // Do not check IRAP pictures since they may get a POC lower than their associated IRAP
+#if !JVET_M0101_HLS
     if(nalUnitType < NAL_UNIT_CODED_SLICE_BLA_W_LP ||
        nalUnitType > NAL_UNIT_RESERVED_IRAP_VCL23)
+#else
+    if (nalUnitType < NAL_UNIT_CODED_SLICE_IDR_W_RADL ||
+        nalUnitType > NAL_UNIT_RESERVED_IRAP_VCL13)
+#endif
     {
+#if !JVET_M0101_HLS
       CHECK( nalUnitType != NAL_UNIT_CODED_SLICE_RASL_N &&
              nalUnitType != NAL_UNIT_CODED_SLICE_RASL_R &&
              nalUnitType != NAL_UNIT_CODED_SLICE_RADL_N &&
              nalUnitType != NAL_UNIT_CODED_SLICE_RADL_R, "Invalid NAL unit type");
+#else
+      CHECK(nalUnitType != NAL_UNIT_CODED_SLICE_RASL &&
+            nalUnitType != NAL_UNIT_CODED_SLICE_RADL, "Invalid NAL unit type");
+#endif
     }
   }
 
   // When a picture is a trailing picture, it shall not be a RADL or RASL picture.
   if(this->getAssociatedIRAPPOC() < this->getPOC())
   {
+#if !JVET_M0101_HLS
     CHECK( nalUnitType == NAL_UNIT_CODED_SLICE_RASL_N ||
            nalUnitType == NAL_UNIT_CODED_SLICE_RASL_R ||
            nalUnitType == NAL_UNIT_CODED_SLICE_RADL_N ||
            nalUnitType == NAL_UNIT_CODED_SLICE_RADL_R, "Invalid NAL unit type" );
+#else
+    CHECK(nalUnitType == NAL_UNIT_CODED_SLICE_RASL ||
+          nalUnitType == NAL_UNIT_CODED_SLICE_RADL, "Invalid NAL unit type");
+#endif
   }
 
+#if !JVET_M0101_HLS
   // No RASL pictures shall be present in the bitstream that are associated
   // with a BLA picture having nal_unit_type equal to BLA_W_RADL or BLA_N_LP.
   if(nalUnitType == NAL_UNIT_CODED_SLICE_RASL_N ||
@@ -987,11 +1016,16 @@ void Slice::checkLeadingPictureRestrictions(PicList& rcListPic) const
     CHECK (this->getAssociatedIRAPType() == NAL_UNIT_CODED_SLICE_BLA_W_RADL ||
            this->getAssociatedIRAPType() == NAL_UNIT_CODED_SLICE_BLA_N_LP, "Invalid NAL unit type");
   }
+#endif
 
   // No RASL pictures shall be present in the bitstream that are associated with
   // an IDR picture.
+#if !JVET_M0101_HLS
   if(nalUnitType == NAL_UNIT_CODED_SLICE_RASL_N ||
      nalUnitType == NAL_UNIT_CODED_SLICE_RASL_R)
+#else
+  if (nalUnitType == NAL_UNIT_CODED_SLICE_RASL)
+#endif
   {
     CHECK( this->getAssociatedIRAPType() == NAL_UNIT_CODED_SLICE_IDR_N_LP   ||
            this->getAssociatedIRAPType() == NAL_UNIT_CODED_SLICE_IDR_W_RADL, "Invalid NAL unit type");
@@ -1000,11 +1034,19 @@ void Slice::checkLeadingPictureRestrictions(PicList& rcListPic) const
   // No RADL pictures shall be present in the bitstream that are associated with
   // a BLA picture having nal_unit_type equal to BLA_N_LP or that are associated
   // with an IDR picture having nal_unit_type equal to IDR_N_LP.
+#if !JVET_M0101_HLS
   if(nalUnitType == NAL_UNIT_CODED_SLICE_RADL_N ||
      nalUnitType == NAL_UNIT_CODED_SLICE_RADL_R)
+#else
+  if (nalUnitType == NAL_UNIT_CODED_SLICE_RADL)
+#endif
   {
+#if !JVET_M0101_HLS
     CHECK (this->getAssociatedIRAPType() == NAL_UNIT_CODED_SLICE_BLA_N_LP   ||
            this->getAssociatedIRAPType() == NAL_UNIT_CODED_SLICE_IDR_N_LP, "Invalid NAL unit type");
+#else
+    CHECK (this->getAssociatedIRAPType() == NAL_UNIT_CODED_SLICE_IDR_N_LP, "Invalid NAL unit type");
+#endif
   }
 
   // loop through all pictures in the reference picture buffer
@@ -1027,12 +1069,18 @@ void Slice::checkLeadingPictureRestrictions(PicList& rcListPic) const
     // (Note that any picture following in output order would be present in the DPB)
     if(pcSlice->getPicOutputFlag() == 1 && !this->getNoOutputPriorPicsFlag())
     {
+#if !JVET_M0101_HLS
       if(nalUnitType == NAL_UNIT_CODED_SLICE_BLA_N_LP    ||
          nalUnitType == NAL_UNIT_CODED_SLICE_BLA_W_LP    ||
          nalUnitType == NAL_UNIT_CODED_SLICE_BLA_W_RADL  ||
          nalUnitType == NAL_UNIT_CODED_SLICE_CRA         ||
          nalUnitType == NAL_UNIT_CODED_SLICE_IDR_N_LP    ||
          nalUnitType == NAL_UNIT_CODED_SLICE_IDR_W_RADL)
+#else
+      if (nalUnitType == NAL_UNIT_CODED_SLICE_CRA ||
+          nalUnitType == NAL_UNIT_CODED_SLICE_IDR_N_LP ||
+          nalUnitType == NAL_UNIT_CODED_SLICE_IDR_W_RADL)
+#endif
       {
         CHECK(pcPic->poc >= this->getPOC(), "Invalid POC");
       }
@@ -1043,8 +1091,12 @@ void Slice::checkLeadingPictureRestrictions(PicList& rcListPic) const
     // picture in output order.
     if(pcSlice->getPicOutputFlag() == 1)
     {
+#if !JVET_M0101_HLS
       if((nalUnitType == NAL_UNIT_CODED_SLICE_RADL_N ||
           nalUnitType == NAL_UNIT_CODED_SLICE_RADL_R))
+#else
+      if (nalUnitType == NAL_UNIT_CODED_SLICE_RADL)
+#endif
       {
         // rpcPic precedes the IRAP in decoding order
         if(this->getAssociatedIRAPPOC() > pcSlice->getAssociatedIRAPPOC())
@@ -1060,10 +1112,15 @@ void Slice::checkLeadingPictureRestrictions(PicList& rcListPic) const
 
     // When a picture is a leading picture, it shall precede, in decoding order,
     // all trailing pictures that are associated with the same IRAP picture.
-      if(nalUnitType == NAL_UNIT_CODED_SLICE_RASL_N ||
+#if !JVET_M0101_HLS
+    if (nalUnitType == NAL_UNIT_CODED_SLICE_RASL_N ||
          nalUnitType == NAL_UNIT_CODED_SLICE_RASL_R ||
          nalUnitType == NAL_UNIT_CODED_SLICE_RADL_N ||
          nalUnitType == NAL_UNIT_CODED_SLICE_RADL_R)
+#else
+    if (nalUnitType == NAL_UNIT_CODED_SLICE_RASL ||
+        nalUnitType == NAL_UNIT_CODED_SLICE_RADL )
+#endif
       {
         if(pcSlice->getAssociatedIRAPPOC() == this->getAssociatedIRAPPOC())
         {
@@ -1075,17 +1132,29 @@ void Slice::checkLeadingPictureRestrictions(PicList& rcListPic) const
 
     // Any RASL picture associated with a CRA or BLA picture shall precede any
     // RADL picture associated with the CRA or BLA picture in output order
+#if !JVET_M0101_HLS
     if(nalUnitType == NAL_UNIT_CODED_SLICE_RASL_N ||
        nalUnitType == NAL_UNIT_CODED_SLICE_RASL_R)
+#else
+    if (nalUnitType == NAL_UNIT_CODED_SLICE_RASL)
+#endif
     {
+#if !JVET_M0101_HLS
       if((this->getAssociatedIRAPType() == NAL_UNIT_CODED_SLICE_BLA_N_LP   ||
           this->getAssociatedIRAPType() == NAL_UNIT_CODED_SLICE_BLA_W_LP   ||
           this->getAssociatedIRAPType() == NAL_UNIT_CODED_SLICE_BLA_W_RADL ||
-          this->getAssociatedIRAPType() == NAL_UNIT_CODED_SLICE_CRA)       &&
+          this->getAssociatedIRAPType() == NAL_UNIT_CODED_SLICE_CRA) &&
+#else
+      if ((this->getAssociatedIRAPType() == NAL_UNIT_CODED_SLICE_CRA) &&
+#endif
           this->getAssociatedIRAPPOC() == pcSlice->getAssociatedIRAPPOC())
       {
+#if !JVET_M0101_HLS
         if(pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_RADL_N ||
            pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_RADL_R)
+#else
+        if (pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_RADL)
+#endif
         {
           CHECK( pcPic->poc <= this->getPOC(), "Invalid POC");
         }
@@ -1094,15 +1163,22 @@ void Slice::checkLeadingPictureRestrictions(PicList& rcListPic) const
 
     // Any RASL picture associated with a CRA picture shall follow, in output
     // order, any IRAP picture that precedes the CRA picture in decoding order.
+#if !JVET_M0101_HLS
     if(nalUnitType == NAL_UNIT_CODED_SLICE_RASL_N ||
        nalUnitType == NAL_UNIT_CODED_SLICE_RASL_R)
+#else
+    if (nalUnitType == NAL_UNIT_CODED_SLICE_RASL)
+#endif
     {
       if(this->getAssociatedIRAPType() == NAL_UNIT_CODED_SLICE_CRA)
       {
-        if(pcSlice->getPOC() < this->getAssociatedIRAPPOC() &&
-           (pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_N_LP   ||
+        if(pcSlice->getPOC() < this->getAssociatedIRAPPOC() && 
+          (
+#if !JVET_M0101_HLS
+            pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_N_LP   ||
             pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_W_LP   ||
             pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_W_RADL ||
+#endif
             pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_IDR_N_LP   ||
             pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_IDR_W_RADL ||
             pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA))
@@ -1187,15 +1263,19 @@ void Slice::applyReferencePictureSet( PicList& rcListPic, const ReferencePicture
       //check that pictures of higher temporal layers are not used
       CHECK( pcPic->usedByCurr && !(pcPic->layer<=this->getTLayer()), "Invalid state");
       //check that pictures of higher or equal temporal layer are not in the RPS if the current picture is a TSA picture
+#if !JVET_M0101_HLS
       if( this->getNalUnitType() == NAL_UNIT_CODED_SLICE_TSA_R || this->getNalUnitType() == NAL_UNIT_CODED_SLICE_TSA_N)
       {
         CHECK( !(pcPic->layer<this->getTLayer()), "Invalid state");
       }
+#endif
+#if !JVET_M0101_HLS
       //check that pictures marked as temporal layer non-reference pictures are not used for reference
       if( pcPic->poc != this->getPOC() && (pcPic->layer == this->getTLayer()))
       {
         CHECK( pcPic->usedByCurr && pcPic->slices[0]->getTemporalLayerNonReferenceFlag(), "Invalid state");
       }
+#endif
     }
   }
 }
@@ -1726,6 +1806,7 @@ SPSRExt::SPSRExt()
 
 SPS::SPS()
 : m_SPSId                     (  0)
+#if !JVET_M0101_HLS
 , m_bIntraOnlyConstraintFlag  (false)
 , m_maxBitDepthConstraintIdc  (  0)
 , m_maxChromaFormatConstraintIdc(CHROMA_420)
@@ -1758,6 +1839,7 @@ SPS::SPS()
 #endif
 , m_bNoDepQuantConstraintFlag (false)
 , m_bNoSignDataHidingConstraintFlag(false)
+#endif
 #if JVET_M0246_AFFINE_AMVR
 , m_affineAmvrEnabledFlag     ( false )
 #endif
@@ -2579,6 +2661,7 @@ void ParameterSetMap<SPS>::setID(SPS* parameterSet, const int psId)
   parameterSet->setSPSId(psId);
 }
 
+#if !JVET_M0101_HLS
 ProfileTierLevel::ProfileTierLevel()
   : m_profileSpace    (0)
   , m_tierFlag        (Level::MAIN)
@@ -2597,6 +2680,16 @@ PTL::PTL()
   ::memset(m_subLayerProfilePresentFlag, 0, sizeof(m_subLayerProfilePresentFlag));
   ::memset(m_subLayerLevelPresentFlag,   0, sizeof(m_subLayerLevelPresentFlag  ));
 }
+#else
+ProfileTierLevel::ProfileTierLevel()
+  : m_tierFlag        (Level::MAIN)
+  , m_profileIdc      (Profile::NONE)
+  , m_levelIdc        (Level::NONE)
+{
+  ::memset(m_subLayerLevelPresentFlag,   0, sizeof(m_subLayerLevelPresentFlag  ));
+  ::memset(m_subLayerLevelIdc, Level::NONE, sizeof(m_subLayerLevelIdc          ));
+}
+#endif
 
 void calculateParameterSetChangedFlag(bool &bChanged, const std::vector<uint8_t> *pOldData, const std::vector<uint8_t> *pNewData)
 {
diff --git a/source/Lib/CommonLib/Slice.h b/source/Lib/CommonLib/Slice.h
index 8b36e52d1b4ce37c115820aea2a87189336b001d..98ea2df2f904d5c6bf01883b4542e1255a98341d 100644
--- a/source/Lib/CommonLib/Slice.h
+++ b/source/Lib/CommonLib/Slice.h
@@ -191,14 +191,178 @@ private:
 };
 #endif
 
+#if JVET_M0101_HLS
+class ConstraintInfo
+{
+  bool              m_progressiveSourceFlag;
+  bool              m_interlacedSourceFlag;
+  bool              m_nonPackedConstraintFlag;
+  bool              m_frameOnlyConstraintFlag;
+  bool              m_intraOnlyConstraintFlag;
+  uint32_t          m_maxBitDepthConstraintIdc;
+  ChromaFormat      m_maxChromaFormatConstraintIdc;
+  bool              m_onePictureOnlyConstraintFlag;
+  bool              m_lowerBitRateConstraintFlag;
+
+  bool              m_noQtbttDualTreeIntraConstraintFlag;
+  bool              m_noSaoConstraintFlag;
+  bool              m_noAlfConstraintFlag;
+  bool              m_noPcmConstraintFlag;
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+  bool              m_noRefWraparoundConstraintFlag;
+#endif
+  bool              m_noTemporalMvpConstraintFlag;
+  bool              m_noSbtmvpConstraintFlag;
+  bool              m_noAmvrConstraintFlag;
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+  bool              m_noBdofConstraintFlag;
+#endif
+  bool              m_noCclmConstraintFlag;
+  bool              m_noMtsConstraintFlag;
+  bool              m_noAffineMotionConstraintFlag;
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+  bool              m_noGbiConstraintFlag;
+  bool              m_noMhIntraConstraintFlag;
+  bool              m_noTriangleConstraintFlag;
+#endif
+  bool              m_noLadfConstraintFlag;
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+  bool              m_noCurrPicRefConstraintFlag;
+  bool              m_noQpDeltaConstraintFlag;
+#endif
+  bool              m_noDepQuantConstraintFlag;
+  bool              m_noSignDataHidingConstraintFlag;
+
+public:
+  ConstraintInfo()
+    : m_progressiveSourceFlag (false)
+    , m_interlacedSourceFlag (false)
+    , m_nonPackedConstraintFlag (false)
+    , m_frameOnlyConstraintFlag  (false)
+    , m_intraOnlyConstraintFlag  (false)
+    , m_maxBitDepthConstraintIdc  (  0)
+    , m_maxChromaFormatConstraintIdc(CHROMA_420)
+    , m_noQtbttDualTreeIntraConstraintFlag(false)
+    , m_noSaoConstraintFlag      (false)
+    , m_noAlfConstraintFlag      (false)
+    , m_noPcmConstraintFlag      (false)
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+    , m_noRefWraparoundConstraintFlag(false)
+#endif
+    , m_noTemporalMvpConstraintFlag(false)
+    , m_noSbtmvpConstraintFlag   (false)
+    , m_noAmvrConstraintFlag     (false)
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+    , m_noBdofConstraintFlag     (false)
+#endif
+    , m_noCclmConstraintFlag     (false)
+    , m_noMtsConstraintFlag      (false)
+    , m_noAffineMotionConstraintFlag(false)
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+    , m_noGbiConstraintFlag      (false)
+    , m_noMhIntraConstraintFlag  (false)
+    , m_noTriangleConstraintFlag (false)
+#endif
+    , m_noLadfConstraintFlag     (false)
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+    , m_noCurrPicRefConstraintFlag(false)
+    , m_noQpDeltaConstraintFlag  (false)
+#endif
+    , m_noDepQuantConstraintFlag (false)
+    , m_noSignDataHidingConstraintFlag(false)
+  {}
+  
+  bool          getProgressiveSourceFlag() const { return m_progressiveSourceFlag; }
+  void          setProgressiveSourceFlag(bool b) { m_progressiveSourceFlag = b; }
+
+  bool          getInterlacedSourceFlag() const { return m_interlacedSourceFlag; }
+  void          setInterlacedSourceFlag(bool b) { m_interlacedSourceFlag = b; }
+
+  bool          getNonPackedConstraintFlag() const { return m_nonPackedConstraintFlag; }
+  void          setNonPackedConstraintFlag(bool b) { m_nonPackedConstraintFlag = b; }
+
+  bool          getFrameOnlyConstraintFlag() const { return m_frameOnlyConstraintFlag; }
+  void          setFrameOnlyConstraintFlag(bool b) { m_frameOnlyConstraintFlag = b; }
+
+  uint32_t      getMaxBitDepthConstraintIdc() const { return m_maxBitDepthConstraintIdc; }
+  void          setMaxBitDepthConstraintIdc(uint32_t bitDepth) { m_maxBitDepthConstraintIdc = bitDepth; }
+
+  ChromaFormat  getMaxChromaFormatConstraintIdc() const { return m_maxChromaFormatConstraintIdc; }
+  void          setMaxChromaFormatConstraintIdc(ChromaFormat fmt) { m_maxChromaFormatConstraintIdc = fmt; }
+
+  bool          getIntraOnlyConstraintFlag() const { return m_intraOnlyConstraintFlag; }
+  void          setIntraOnlyConstraintFlag(bool b) { m_intraOnlyConstraintFlag = b; }
+
+  bool          getOnePictureOnlyConstraintFlag() const { return m_onePictureOnlyConstraintFlag; }
+  void          setOnePictureOnlyConstraintFlag(bool b) { m_onePictureOnlyConstraintFlag = b; }
+
+  bool          getLowerBitRateConstraintFlag() const { return m_lowerBitRateConstraintFlag; }
+  void          setLowerBitRateConstraintFlag(bool b) { m_lowerBitRateConstraintFlag = b; }
+
+  bool          getNoQtbttDualTreeIntraConstraintFlag() const { return m_noQtbttDualTreeIntraConstraintFlag; }
+  void          setNoQtbttDualTreeIntraConstraintFlag(bool bVal) { m_noQtbttDualTreeIntraConstraintFlag = bVal; }
+  bool          getNoSaoConstraintFlag() const { return m_noSaoConstraintFlag; }
+  void          setNoSaoConstraintFlag(bool bVal) { m_noSaoConstraintFlag = bVal; }
+  bool          getNoAlfConstraintFlag() const { return m_noAlfConstraintFlag; }
+  void          setNoAlfConstraintFlag(bool bVal) { m_noAlfConstraintFlag = bVal; }
+  bool          getNoPcmConstraintFlag() const { return m_noPcmConstraintFlag; }
+  void          setNoPcmConstraintFlag(bool bVal) { m_noPcmConstraintFlag = bVal; }
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+  bool          getNoRefWraparoundConstraintFlag() const { return m_noRefWraparoundConstraintFlag; }
+  void          setNoRefWraparoundConstraintFlag(bool bVal) { m_noRefWraparoundConstraintFlag = bVal; }
+#endif
+  bool          getNoTemporalMvpConstraintFlag() const { return m_noTemporalMvpConstraintFlag; }
+  void          setNoTemporalMvpConstraintFlag(bool bVal) { m_noTemporalMvpConstraintFlag = bVal; }
+  bool          getNoSbtmvpConstraintFlag() const { return m_noSbtmvpConstraintFlag; }
+  void          setNoSbtmvpConstraintFlag(bool bVal) { m_noSbtmvpConstraintFlag = bVal; }
+  bool          getNoAmvrConstraintFlag() const { return m_noAmvrConstraintFlag; }
+  void          setNoAmvrConstraintFlag(bool bVal) { m_noAmvrConstraintFlag = bVal; }
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+  bool          getNoBdofConstraintFlag() const { return m_noBdofConstraintFlag; }
+  void          setNoBdofConstraintFlag(bool bVal) { m_noBdofConstraintFlag = bVal; }
+#endif
+  bool          getNoCclmConstraintFlag() const { return m_noCclmConstraintFlag; }
+  void          setNoCclmConstraintFlag(bool bVal) { m_noCclmConstraintFlag = bVal; }
+  bool          getNoMtsConstraintFlag() const { return m_noMtsConstraintFlag; }
+  void          setNoMtsConstraintFlag(bool bVal) { m_noMtsConstraintFlag = bVal; }
+  bool          getNoAffineMotionConstraintFlag() const { return m_noAffineMotionConstraintFlag; }
+  void          setNoAffineMotionConstraintFlag(bool bVal) { m_noAffineMotionConstraintFlag = bVal; }
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+  bool          getNoGbiConstraintFlag() const { return m_noGbiConstraintFlag; }
+  void          setNoGbiConstraintFlag(bool bVal) { m_noGbiConstraintFlag = bVal; }
+  bool          getNoMhIntraConstraintFlag() const { return m_noMhIntraConstraintFlag; }
+  void          setNoMhIntraConstraintFlag(bool bVal) { m_noMhIntraConstraintFlag = bVal; }
+  bool          getNoTriangleConstraintFlag() const { return m_noTriangleConstraintFlag; }
+  void          setNoTriangleConstraintFlag(bool bVal) { m_noTriangleConstraintFlag = bVal; }
+#endif
+  bool          getNoLadfConstraintFlag() const { return m_noLadfConstraintFlag; }
+  void          setNoLadfConstraintFlag(bool bVal) { m_noLadfConstraintFlag = bVal; }
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+  bool          getNoCurrPicRefConstraintFlag() const { return m_noCurrPicRefConstraintFlag; }
+  void          setNoCurrPicRefConstraintFlag(bool bVal) { m_noCurrPicRefConstraintFlag = bVal; }
+  bool          getNoQpDeltaConstraintFlag() const { return m_noQpDeltaConstraintFlag; }
+  void          setNoQpDeltaConstraintFlag(bool bVal) { m_noQpDeltaConstraintFlag = bVal; }
+#endif
+  bool          getNoDepQuantConstraintFlag() const { return m_noDepQuantConstraintFlag; }
+  void          setNoDepQuantConstraintFlag(bool bVal) { m_noDepQuantConstraintFlag = bVal; }
+  bool          getNoSignDataHidingConstraintFlag() const { return m_noSignDataHidingConstraintFlag; }
+  void          setNoSignDataHidingConstraintFlag(bool bVal) { m_noSignDataHidingConstraintFlag = bVal; }
+};
+#endif
+
 class ProfileTierLevel
 {
+#if !JVET_M0101_HLS
   int               m_profileSpace;
+#endif
   Level::Tier       m_tierFlag;
   Profile::Name     m_profileIdc;
+#if !JVET_M0101_HLS
   bool              m_profileCompatibilityFlag[32];
+#endif
   Level::Name       m_levelIdc;
 
+#if !JVET_M0101_HLS
   bool              m_progressiveSourceFlag;
   bool              m_interlacedSourceFlag;
   bool              m_nonPackedConstraintFlag;
@@ -208,12 +372,18 @@ class ProfileTierLevel
   bool              m_intraConstraintFlag;
   bool              m_onePictureOnlyConstraintFlag;
   bool              m_lowerBitRateConstraintFlag;
+#else
+  ConstraintInfo    m_constraintInfo;
+  bool              m_subLayerLevelPresentFlag[MAX_TLAYER - 1];
+  Level::Name       m_subLayerLevelIdc[MAX_TLAYER - 1];
+#endif
 
 public:
                 ProfileTierLevel();
-
+#if !JVET_M0101_HLS
   int           getProfileSpace() const                     { return m_profileSpace;                }
   void          setProfileSpace(int x)                      { m_profileSpace = x;                   }
+#endif
 
   Level::Tier   getTierFlag() const                         { return m_tierFlag;                    }
   void          setTierFlag(Level::Tier x)                  { m_tierFlag = x;                       }
@@ -221,12 +391,15 @@ public:
   Profile::Name getProfileIdc() const                       { return m_profileIdc;                  }
   void          setProfileIdc(Profile::Name x)              { m_profileIdc = x;                     }
 
+#if !JVET_M0101_HLS
   bool          getProfileCompatibilityFlag(int i) const    { return m_profileCompatibilityFlag[i]; }
   void          setProfileCompatibilityFlag(int i, bool x)  { m_profileCompatibilityFlag[i] = x;    }
+#endif
 
   Level::Name   getLevelIdc() const                         { return m_levelIdc;                    }
   void          setLevelIdc(Level::Name x)                  { m_levelIdc = x;                       }
 
+#if !JVET_M0101_HLS
   bool          getProgressiveSourceFlag() const            { return m_progressiveSourceFlag;       }
   void          setProgressiveSourceFlag(bool b)            { m_progressiveSourceFlag = b;          }
 
@@ -253,9 +426,23 @@ public:
 
   bool          getLowerBitRateConstraintFlag() const       { return m_lowerBitRateConstraintFlag;  }
   void          setLowerBitRateConstraintFlag(bool b)       { m_lowerBitRateConstraintFlag = b;     }
+#endif
+
+#if JVET_M0101_HLS
+  ConstraintInfo*         getConstraintInfo()              { return &m_constraintInfo; }
+  const ConstraintInfo*   getConstraintInfo() const        { return &m_constraintInfo; }
+
+  bool                    getSubLayerLevelPresentFlag(int i) const     { return m_subLayerLevelPresentFlag[i];   }
+  void                    setSubLayerLevelPresentFlag(int i, bool x)   { m_subLayerLevelPresentFlag[i] = x;      }
+
+  Level::Name             getSubLayerLevelIdc(int i) const             { return m_subLayerLevelIdc[i];   }
+  void                    setSubLayerLevelIdc(int i, Level::Name x)    { m_subLayerLevelIdc[i] = x;      }
+#endif
+
 };
 
 
+#if !JVET_M0101_HLS
 class PTL
 {
   ProfileTierLevel m_generalPTL;
@@ -276,6 +463,7 @@ public:
   ProfileTierLevel*       getSubLayerPTL(int i)                        { return &m_subLayerPTL[i];               }
   const ProfileTierLevel* getSubLayerPTL(int i) const                  { return &m_subLayerPTL[i];               }
 };
+#endif
 
 struct HrdSubLayerInfo
 {
@@ -827,6 +1015,7 @@ class SPS
 {
 private:
   int               m_SPSId;
+#if !JVET_M0101_HLS
   bool              m_bIntraOnlyConstraintFlag;
   uint32_t          m_maxBitDepthConstraintIdc;
   uint32_t          m_maxChromaFormatConstraintIdc;
@@ -859,6 +1048,7 @@ private:
 #endif
   bool              m_bNoDepQuantConstraintFlag;
   bool              m_bNoSignDataHidingConstraintFlag;
+#endif
 
 #if JVET_M0246_AFFINE_AMVR
   bool              m_affineAmvrEnabledFlag;
@@ -948,7 +1138,11 @@ private:
 
   static const int  m_winUnitX[NUM_CHROMA_FORMAT];
   static const int  m_winUnitY[NUM_CHROMA_FORMAT];
+#if !JVET_M0101_HLS
   PTL               m_pcPTL;
+#else
+  ProfileTierLevel  m_profileTierLevel;
+#endif
 
   bool              m_alfEnabledFlag;
 
@@ -1001,6 +1195,7 @@ public:
   int                     getVPSId() const                                                                { return m_VPSId;                                                      }
   void                    setVPSId(int i)                                                                 { m_VPSId = i;                                                         }
 #endif
+#if !JVET_M0101_HLS
   bool                    getIntraOnlyConstraintFlag() const                                              { return m_bIntraOnlyConstraintFlag;                                   }
   void                    setIntraOnlyConstraintFlag(bool bVal)                                           { m_bIntraOnlyConstraintFlag = bVal;                                   }
   uint32_t                getMaxBitDepthConstraintIdc() const                                             { return m_maxBitDepthConstraintIdc;                                   }
@@ -1057,6 +1252,7 @@ public:
   void                    setNoDepQuantConstraintFlag(bool bVal)                                          { m_bNoDepQuantConstraintFlag = bVal;                                  }
   bool                    getNoSignDataHidingConstraintFlag() const                                       { return m_bNoSignDataHidingConstraintFlag;                            }
   void                    setNoSignDataHidingConstraintFlag(bool bVal)                                    { m_bNoSignDataHidingConstraintFlag = bVal;                            }
+#endif
   int                     getSPSId() const                                                                { return m_SPSId;                                                      }
   void                    setSPSId(int i)                                                                 { m_SPSId = i;                                                         }
   ChromaFormat            getChromaFormatIdc () const                                                     { return m_chromaFormatIdc;                                            }
@@ -1215,8 +1411,13 @@ public:
   void                    setVuiParametersPresentFlag(bool b)                                             { m_vuiParametersPresentFlag = b;                                      }
   VUI*                    getVuiParameters()                                                              { return &m_vuiParameters;                                             }
   const VUI*              getVuiParameters() const                                                        { return &m_vuiParameters;                                             }
+#if !JVET_M0101_HLS
   const PTL*              getPTL() const                                                                  { return &m_pcPTL;                                                     }
   PTL*                    getPTL()                                                                        { return &m_pcPTL;                                                     }
+#else
+  const ProfileTierLevel* getProfileTierLevel() const                                                     { return &m_profileTierLevel; }
+  ProfileTierLevel*       getProfileTierLevel()                                                           { return &m_profileTierLevel; }
+#endif
 
   const SPSRExt&          getSpsRangeExtension() const                                                    { return m_spsRangeExtension;                                          }
   SPSRExt&                getSpsRangeExtension()                                                          { return m_spsRangeExtension;                                          }
@@ -1688,7 +1889,7 @@ private:
 
   bool                       m_noOutputPriorPicsFlag;
   bool                       m_noRaslOutputFlag;
-  bool                       m_handleCraAsBlaFlag;
+  bool                       m_handleCraAsCvsStartFlag;
 
   uint32_t                       m_colRefIdx;
   uint32_t                       m_maxNumMergeCand;
@@ -1734,7 +1935,9 @@ private:
   bool                       m_cabacInitFlag;
 
   bool                       m_bLMvdL1Zero;
+#if !JVET_M0101_HLS
   bool                       m_temporalLayerNonReferenceFlag;
+#endif
   bool                       m_LFCrossSliceBoundaryFlag;
 
   bool                       m_enableTMVPFlag;
@@ -1840,14 +2043,21 @@ public:
   bool                        getMvdL1ZeroFlag() const                               { return m_bLMvdL1Zero;                                         }
   int                         getNumRpsCurrTempList() const;
   int                         getList1IdxToList0Idx( int list1Idx ) const            { return m_list1IdxToList0Idx[list1Idx];                        }
+#if !JVET_M0101_HLS
   bool                        isReferenceNalu() const                                { return ((getNalUnitType() <= NAL_UNIT_RESERVED_VCL_R15) && (getNalUnitType()%2 != 0)) || ((getNalUnitType() >= NAL_UNIT_CODED_SLICE_BLA_W_LP) && (getNalUnitType() <= NAL_UNIT_RESERVED_IRAP_VCL23) ); }
+#endif
   void                        setPOC( int i )                                        { m_iPOC              = i;                                      }
   void                        setNalUnitType( NalUnitType e )                        { m_eNalUnitType      = e;                                      }
   NalUnitType                 getNalUnitType() const                                 { return m_eNalUnitType;                                        }
   bool                        getRapPicFlag() const;
   bool                        getIdrPicFlag() const                                  { return getNalUnitType() == NAL_UNIT_CODED_SLICE_IDR_W_RADL || getNalUnitType() == NAL_UNIT_CODED_SLICE_IDR_N_LP; }
+#if !JVET_M0101_HLS
   bool                        isIRAP() const                                         { return (getNalUnitType() >= 16) && (getNalUnitType() <= 23);  }
   bool                        isIDRorBLA() const                                      { return (getNalUnitType() >= 16) && (getNalUnitType() <= 20);  }
+#else
+  bool                        isIRAP() const { return (getNalUnitType() >= NAL_UNIT_CODED_SLICE_IDR_W_RADL) && (getNalUnitType() <= NAL_UNIT_RESERVED_IRAP_VCL13); }
+  bool                        isIDRorBLA() const { return (getNalUnitType() >= NAL_UNIT_CODED_SLICE_IDR_W_RADL) && (getNalUnitType() <= NAL_UNIT_CODED_SLICE_IDR_N_LP); }
+#endif
   void                        checkCRA(const ReferencePictureSet *pReferencePictureSet, int& pocCRA, NalUnitType& associatedIRAPType, PicList& rcListPic);
   void                        decodingRefreshMarking(int& pocCRA, bool& bRefreshPending, PicList& rcListPic, const bool bEfficientFieldIRAPEnabled);
   void                        setSliceType( SliceType e )                            { m_eSliceType        = e;                                      }
@@ -1960,8 +2170,8 @@ public:
   void                        setNoRaslOutputFlag( bool val )                        { m_noRaslOutputFlag = val;                                     }
   bool                        getNoRaslOutputFlag() const                            { return m_noRaslOutputFlag;                                    }
 
-  void                        setHandleCraAsBlaFlag( bool val )                      { m_handleCraAsBlaFlag = val;                                   }
-  bool                        getHandleCraAsBlaFlag() const                          { return m_handleCraAsBlaFlag;                                  }
+  void                        setHandleCraAsCvsStartFlag( bool val )                 { m_handleCraAsCvsStartFlag = val;                                   }
+  bool                        getHandleCraAsCvsStartFlag() const                     { return m_handleCraAsCvsStartFlag;                                  }
 
   void                        setSliceMode( SliceConstraint mode )                   { m_sliceMode = mode;                                           }
   SliceConstraint             getSliceMode() const                                   { return m_sliceMode;                                           }
@@ -2024,8 +2234,10 @@ public:
 
   void                        setCabacInitFlag( bool val )                           { m_cabacInitFlag = val;                                        } //!< set CABAC initial flag
   bool                        getCabacInitFlag()                               const { return m_cabacInitFlag;                                       } //!< get CABAC initial flag
+#if !JVET_M0101_HLS
   bool                        getTemporalLayerNonReferenceFlag()               const { return m_temporalLayerNonReferenceFlag;                       }
   void                        setTemporalLayerNonReferenceFlag(bool x)               { m_temporalLayerNonReferenceFlag = x;                          }
+#endif
   void                        setLFCrossSliceBoundaryFlag( bool   val )              { m_LFCrossSliceBoundaryFlag = val;                             }
   bool                        getLFCrossSliceBoundaryFlag()                    const { return m_LFCrossSliceBoundaryFlag;                            }
 
diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h
index 32b3fc7177e49ea1eef0c555967dcbd79a74b3d7..04de41c875df11c5ede678b82888df1f84fa3304 100644
--- a/source/Lib/CommonLib/TypeDef.h
+++ b/source/Lib/CommonLib/TypeDef.h
@@ -282,6 +282,8 @@ typedef std::pair<int, int>  TrCost;
 
 #define JVET_M0132_APS                                    1  // APS
 
+#define JVET_M0101_HLS                                    1  // joint HLS syntax
+
 #define KEEP_PRED_AND_RESI_SIGNALS                        0
 
 
@@ -935,6 +937,57 @@ enum PPSExtensionFlagIndex
 //       effort can be done without use of macros to alter the names used to indicate the different NAL unit types.
 enum NalUnitType
 {
+#if JVET_M0101_HLS
+  NAL_UNIT_CODED_SLICE_TRAIL = 0, // 0
+  NAL_UNIT_CODED_SLICE_STSA,      // 1
+
+  //KJS: keep RADL/RASL since there is no real decision on these types yet
+  NAL_UNIT_CODED_SLICE_RADL,      // 2   should be NAL_UNIT_RESERVED_VCL_2,
+  NAL_UNIT_CODED_SLICE_RASL,      // 3   should be NAL_UNIT_RESERVED_VCL_3,
+  
+  NAL_UNIT_RESERVED_VCL_4,
+  NAL_UNIT_RESERVED_VCL_5,
+  NAL_UNIT_RESERVED_VCL_6,
+  NAL_UNIT_RESERVED_VCL_7,
+  
+  NAL_UNIT_CODED_SLICE_IDR_W_RADL,  // 8
+  NAL_UNIT_CODED_SLICE_IDR_N_LP,    // 9
+  NAL_UNIT_CODED_SLICE_CRA,         // 10
+  
+  NAL_UNIT_RESERVED_IRAP_VCL11,
+  NAL_UNIT_RESERVED_IRAP_VCL12,
+  NAL_UNIT_RESERVED_IRAP_VCL13,
+
+  NAL_UNIT_RESERVED_VCL14,
+
+#if HEVC_VPS
+  NAL_UNIT_VPS,                     // probably not coming back
+#else
+  NAL_UNIT_RESERVED_VCL15,
+#endif
+
+  NAL_UNIT_RESERVED_NVCL16,         // probably DPS
+
+  NAL_UNIT_SPS,                     // 17
+  NAL_UNIT_PPS,                     // 18
+#if JVET_M0132_APS
+  NAL_UNIT_APS,                     // 19 NAL unit type number needs to be reaaranged.
+#endif
+  NAL_UNIT_ACCESS_UNIT_DELIMITER,   // 20
+  NAL_UNIT_EOS,                     // 21
+  NAL_UNIT_EOB,                     // 22
+  NAL_UNIT_PREFIX_SEI,              // 23
+  NAL_UNIT_SUFFIX_SEI,              // 24
+  NAL_UNIT_FILLER_DATA,             // 25  keep: may be added with HRD 
+
+  NAL_UNIT_RESERVED_NVCL26,
+  NAL_UNIT_RESERVED_NVCL27,
+  NAL_UNIT_UNSPECIFIED_28,
+  NAL_UNIT_UNSPECIFIED_29,
+  NAL_UNIT_UNSPECIFIED_30,
+  NAL_UNIT_UNSPECIFIED_31,
+  NAL_UNIT_INVALID,
+#else
   NAL_UNIT_CODED_SLICE_TRAIL_N = 0, // 0
   NAL_UNIT_CODED_SLICE_TRAIL_R,     // 1
 
@@ -1016,6 +1069,7 @@ enum NalUnitType
   NAL_UNIT_UNSPECIFIED_62,
   NAL_UNIT_UNSPECIFIED_63,
   NAL_UNIT_INVALID,
+#endif
 };
 
 #if SHARP_LUMA_DELTA_QP
diff --git a/source/Lib/DecoderLib/DecLib.cpp b/source/Lib/DecoderLib/DecLib.cpp
index 4e08b972379c6fa3880efa7092e980347649be49..6970b7752711758cbefb5e3cf618a4dcab98b5f2 100644
--- a/source/Lib/DecoderLib/DecLib.cpp
+++ b/source/Lib/DecoderLib/DecLib.cpp
@@ -1001,12 +1001,14 @@ bool DecLib::xDecodeSlice(InputNALUnit &nalu, int &iSkipFrame, int iPOCLastDispl
 #endif
 
   m_apcSlicePilot->setNalUnitType(nalu.m_nalUnitType);
+#if !JVET_M0101_HLS
   bool nonReferenceFlag = (m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_TRAIL_N ||
                            m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_TSA_N   ||
                            m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_STSA_N  ||
                            m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_RADL_N  ||
                            m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_RASL_N);
   m_apcSlicePilot->setTemporalLayerNonReferenceFlag(nonReferenceFlag);
+#endif
   m_apcSlicePilot->setTLayer(nalu.m_temporalId);
 
   m_HLSReader.setBitstream( &nalu.getBitstream() );
@@ -1055,9 +1057,14 @@ bool DecLib::xDecodeSlice(InputNALUnit &nalu, int &iSkipFrame, int iPOCLastDispl
   //For inference of NoOutputOfPriorPicsFlag
   if (m_apcSlicePilot->getRapPicFlag())
   {
+#if !JVET_M0101_HLS
     if ((m_apcSlicePilot->getNalUnitType() >= NAL_UNIT_CODED_SLICE_BLA_W_LP && m_apcSlicePilot->getNalUnitType() <= NAL_UNIT_CODED_SLICE_IDR_N_LP) ||
         (m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA && m_bFirstSliceInSequence) ||
-        (m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA && m_apcSlicePilot->getHandleCraAsBlaFlag()))
+        (m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA && m_apcSlicePilot->getHandleCraAsCvsStartFlag()))
+#else
+    if ((m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA && m_bFirstSliceInSequence) ||
+        (m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA && m_apcSlicePilot->getHandleCraAsCvsStartFlag()))
+#endif
     {
       m_apcSlicePilot->setNoRaslOutputFlag(true);
     }
@@ -1090,7 +1097,11 @@ bool DecLib::xDecodeSlice(InputNALUnit &nalu, int &iSkipFrame, int iPOCLastDispl
   }
 
   //For inference of PicOutputFlag
+#if !JVET_M0101_HLS
   if (m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_RASL_N || m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_RASL_R)
+#else
+  if (m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_RASL)
+#endif
   {
     if ( m_craNoRaslOutputFlag )
     {
@@ -1125,12 +1136,14 @@ bool DecLib::xDecodeSlice(InputNALUnit &nalu, int &iSkipFrame, int iPOCLastDispl
     return false;
   }
   // Skip TFD pictures associated with BLA/BLANT pictures
+#if !JVET_M0101_HLS
   if (isSkipPictureForBLA(iPOCLastDisplay))
   {
     m_prevSliceSkipped = true;
     m_skippedPOC = m_apcSlicePilot->getPOC();
     return false;
   }
+#endif
 
   // clear previous slice skipped flag
   m_prevSliceSkipped = false;
@@ -1524,6 +1537,7 @@ bool DecLib::decode(InputNALUnit& nalu, int& iSkipFrame, int& iPOCLastDisplay)
       }
       return false;
 
+#if !JVET_M0101_HLS
     case NAL_UNIT_CODED_SLICE_TRAIL_R:
     case NAL_UNIT_CODED_SLICE_TRAIL_N:
     case NAL_UNIT_CODED_SLICE_TSA_R:
@@ -1540,6 +1554,15 @@ bool DecLib::decode(InputNALUnit& nalu, int& iSkipFrame, int& iPOCLastDisplay)
     case NAL_UNIT_CODED_SLICE_RADL_R:
     case NAL_UNIT_CODED_SLICE_RASL_N:
     case NAL_UNIT_CODED_SLICE_RASL_R:
+#else
+    case NAL_UNIT_CODED_SLICE_TRAIL:
+    case NAL_UNIT_CODED_SLICE_STSA:
+    case NAL_UNIT_CODED_SLICE_IDR_W_RADL:
+    case NAL_UNIT_CODED_SLICE_IDR_N_LP:
+    case NAL_UNIT_CODED_SLICE_CRA:
+    case NAL_UNIT_CODED_SLICE_RADL:
+    case NAL_UNIT_CODED_SLICE_RASL:
+#endif
       ret = xDecodeSlice(nalu, iSkipFrame, iPOCLastDisplay);
 #if JVET_J0090_MEMORY_BANDWITH_MEASURE
       if ( ret )
@@ -1580,7 +1603,7 @@ bool DecLib::decode(InputNALUnit& nalu, int& iSkipFrame, int& iPOCLastDisplay)
         msg( NOTICE, "Note: found NAL_UNIT_FILLER_DATA with %u bytes payload.\n", size);
         return false;
       }
-
+#if !JVET_M0101_HLS
     case NAL_UNIT_RESERVED_VCL_N10:
     case NAL_UNIT_RESERVED_VCL_R11:
     case NAL_UNIT_RESERVED_VCL_N12:
@@ -1601,11 +1624,26 @@ bool DecLib::decode(InputNALUnit& nalu, int& iSkipFrame, int& iPOCLastDisplay)
     case NAL_UNIT_RESERVED_VCL31:
 #if !HEVC_VPS
     case NAL_UNIT_RESERVED_32:
+#endif
+#else
+    case NAL_UNIT_RESERVED_VCL_4:
+    case NAL_UNIT_RESERVED_VCL_5:
+    case NAL_UNIT_RESERVED_VCL_6:
+    case NAL_UNIT_RESERVED_VCL_7:
+
+    case NAL_UNIT_RESERVED_IRAP_VCL11:
+    case NAL_UNIT_RESERVED_IRAP_VCL12:
+    case NAL_UNIT_RESERVED_IRAP_VCL13:
+
+    case NAL_UNIT_RESERVED_VCL14:
+#if !HEVC_VPS
+    case NAL_UNIT_RESERVED_VCL15:
+#endif
 #endif
       msg( NOTICE, "Note: found reserved VCL NAL unit.\n");
       xParsePrefixSEIsForUnknownVCLNal();
       return false;
-
+#if !JVET_M0101_HLS
     case NAL_UNIT_RESERVED_NVCL41:
     case NAL_UNIT_RESERVED_NVCL42:
     case NAL_UNIT_RESERVED_NVCL43:
@@ -1613,8 +1651,14 @@ bool DecLib::decode(InputNALUnit& nalu, int& iSkipFrame, int& iPOCLastDisplay)
     case NAL_UNIT_RESERVED_NVCL45:
     case NAL_UNIT_RESERVED_NVCL46:
     case NAL_UNIT_RESERVED_NVCL47:
+#else
+    case NAL_UNIT_RESERVED_NVCL16:
+    case NAL_UNIT_RESERVED_NVCL26:
+    case NAL_UNIT_RESERVED_NVCL27:
+#endif
       msg( NOTICE, "Note: found reserved NAL unit.\n");
       return false;
+#if !JVET_M0101_HLS
     case NAL_UNIT_UNSPECIFIED_48:
     case NAL_UNIT_UNSPECIFIED_49:
     case NAL_UNIT_UNSPECIFIED_50:
@@ -1631,6 +1675,12 @@ bool DecLib::decode(InputNALUnit& nalu, int& iSkipFrame, int& iPOCLastDisplay)
     case NAL_UNIT_UNSPECIFIED_61:
     case NAL_UNIT_UNSPECIFIED_62:
     case NAL_UNIT_UNSPECIFIED_63:
+#else
+    case NAL_UNIT_UNSPECIFIED_28:
+    case NAL_UNIT_UNSPECIFIED_29:
+    case NAL_UNIT_UNSPECIFIED_30:
+    case NAL_UNIT_UNSPECIFIED_31:
+#endif
       msg( NOTICE, "Note: found unspecified NAL unit.\n");
       return false;
     default:
@@ -1641,6 +1691,7 @@ bool DecLib::decode(InputNALUnit& nalu, int& iSkipFrame, int& iPOCLastDisplay)
   return false;
 }
 
+#if !JVET_M0101_HLS
 /** Function for checking if picture should be skipped because of association with a previous BLA picture
  *  This function skips all TFD pictures that follow a BLA picture in decoding order and precede it in output order.
  */
@@ -1654,6 +1705,7 @@ bool DecLib::isSkipPictureForBLA( int& iPOCLastDisplay )
   }
   return false;
 }
+#endif
 
 /** Function for checking if picture should be skipped because of random access. This function checks the skipping of pictures in the case of -s option random access.
  *  All pictures prior to the random access point indicated by the counter iSkipFrame are skipped.
@@ -1673,10 +1725,14 @@ bool DecLib::isRandomAccessSkipPicture( int& iSkipFrame, int& iPOCLastDisplay )
   }
   else if (m_pocRandomAccess == MAX_INT) // start of random access point, m_pocRandomAccess has not been set yet.
   {
+#if !JVET_M0101_HLS
     if (   m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA
         || m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_W_LP
         || m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_N_LP
         || m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_W_RADL )
+#else
+    if (m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA )
+#endif
     {
       // set the POC random access since we need to skip the reordered pictures in the case of CRA/CRANT/BLA/BLANT.
       m_pocRandomAccess = m_apcSlicePilot->getPOC();
@@ -1696,7 +1752,11 @@ bool DecLib::isRandomAccessSkipPicture( int& iSkipFrame, int& iPOCLastDisplay )
     }
   }
   // skip the reordered pictures, if necessary
+#if !JVET_M0101_HLS
   else if (m_apcSlicePilot->getPOC() < m_pocRandomAccess && (m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_RASL_R || m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_RASL_N))
+#else
+  else if (m_apcSlicePilot->getPOC() < m_pocRandomAccess && (m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_RASL))
+#endif
   {
     iPOCLastDisplay++;
     return true;
diff --git a/source/Lib/DecoderLib/DecLib.h b/source/Lib/DecoderLib/DecLib.h
index d64b2f48f3df8392ebde4589c88dc872ee3cf7eb..89a4acc8f2fe1b65691363d09e21016936095e45 100644
--- a/source/Lib/DecoderLib/DecLib.h
+++ b/source/Lib/DecoderLib/DecLib.h
@@ -108,8 +108,9 @@ private:
 #if JVET_J0090_MEMORY_BANDWITH_MEASURE
   CacheModel              m_cacheModel;
 #endif
-
+#if !JVET_M0101_HLS
   bool isSkipPictureForBLA(int& iPOCLastDisplay);
+#endif
   bool isRandomAccessSkipPicture(int& iSkipFrame,  int& iPOCLastDisplay);
   Picture*                m_pcPic;
   uint32_t                    m_uiSliceSegmentIdx;
@@ -187,7 +188,11 @@ protected:
 #if JVET_M0132_APS
   void      xDecodeAPS(InputNALUnit& nalu);
 #endif
+#if !JVET_M0101_HLS
   void      xUpdatePreviousTid0POC( Slice *pSlice ) { if ((pSlice->getTLayer()==0) && (pSlice->isReferenceNalu() && (pSlice->getNalUnitType()!=NAL_UNIT_CODED_SLICE_RASL_R)&& (pSlice->getNalUnitType()!=NAL_UNIT_CODED_SLICE_RADL_R))) { m_prevTid0POC=pSlice->getPOC(); } }
+#else
+  void      xUpdatePreviousTid0POC(Slice *pSlice) { if ((pSlice->getTLayer() == 0) && (pSlice->getNalUnitType()!=NAL_UNIT_CODED_SLICE_RASL) && (pSlice->getNalUnitType()!=NAL_UNIT_CODED_SLICE_RADL))  { m_prevTid0POC = pSlice->getPOC(); }  }
+#endif
   void      xParsePrefixSEImessages();
   void      xParsePrefixSEIsForUnknownVCLNal();
 
diff --git a/source/Lib/DecoderLib/NALread.cpp b/source/Lib/DecoderLib/NALread.cpp
index 2d676be22f669499b7dcf625ee151b07a0fc6f94..7b507b99fbe67d13581ea4bdcf2b7bc48f749907 100644
--- a/source/Lib/DecoderLib/NALread.cpp
+++ b/source/Lib/DecoderLib/NALread.cpp
@@ -141,6 +141,7 @@ void readNalUnitHeader(InputNALUnit& nalu)
     if ( nalu.m_temporalId )
     {
 #if HEVC_VPS
+#if !JVET_M0101_HLS
       CHECK(  nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_BLA_W_LP
            || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_BLA_W_RADL
            || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_BLA_N_LP
@@ -153,6 +154,17 @@ void readNalUnitHeader(InputNALUnit& nalu)
            || nalu.m_nalUnitType == NAL_UNIT_EOB
             , "Invalid NAL type" );
 #else
+      CHECK(  nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_W_RADL
+           || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_N_LP
+           || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_CRA
+           || nalu.m_nalUnitType == NAL_UNIT_VPS
+           || nalu.m_nalUnitType == NAL_UNIT_SPS
+           || nalu.m_nalUnitType == NAL_UNIT_EOS
+           || nalu.m_nalUnitType == NAL_UNIT_EOB
+           , "Invalid NAL type" );
+#endif
+#else
+#if !JVET_M0101_HLS
       CHECK(nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_BLA_W_LP
            || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_BLA_W_RADL
            || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_BLA_N_LP
@@ -163,15 +175,30 @@ void readNalUnitHeader(InputNALUnit& nalu)
            || nalu.m_nalUnitType == NAL_UNIT_EOS
            || nalu.m_nalUnitType == NAL_UNIT_EOB
            , "Invalid NAL type");
+#else
+      CHECK(nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_W_RADL
+         || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_IDR_N_LP
+         || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_CRA
+         || nalu.m_nalUnitType == NAL_UNIT_SPS
+         || nalu.m_nalUnitType == NAL_UNIT_EOS
+         || nalu.m_nalUnitType == NAL_UNIT_EOB
+         , "Invalid NAL type");
+#endif
 #endif
+
     }
     else
     {
+#if !JVET_M0101_HLS
       CHECK(  nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_TSA_R
            || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_TSA_N
            || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_STSA_R
            || nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_STSA_N
             , "Invalid NAL type" );
+#else
+      CHECK(nalu.m_nalUnitType == NAL_UNIT_CODED_SLICE_STSA
+         , "Invalid NAL type");
+#endif
     }
   }
 }
diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp
index 945b6ad19f5dcc79290c24cc427c28d5ef5fce87..5bcd4e35bb7f4496e55d0976d247efe92ac506ea 100644
--- a/source/Lib/DecoderLib/VLCReader.cpp
+++ b/source/Lib/DecoderLib/VLCReader.cpp
@@ -893,6 +893,7 @@ void HLSyntaxReader::parseSPS(SPS* pcSPS)
 #if HEVC_VPS
   READ_CODE( 4,  uiCode, "sps_video_parameter_set_id");          pcSPS->setVPSId        ( uiCode );
 #endif
+#if !JVET_M0101_HLS
   READ_UVLC(     uiCode, "sps_seq_parameter_set_id" );           pcSPS->setSPSId( uiCode );
   CHECK(uiCode > 15, "Invalid SPS id signalled");
 
@@ -938,7 +939,17 @@ void HLSyntaxReader::parseSPS(SPS* pcSPS)
     // sps_temporal_id_nesting_flag must be 1 when sps_max_sub_layers_minus1 is 0
     CHECK( uiCode != 1, "Invalid maximum number of T-layers" );
   }
-  parsePTL(pcSPS->getPTL(), 1, pcSPS->getMaxTLayers() - 1);
+  parsePTL(pcSPS->getPTL(), true, pcSPS->getMaxTLayers() - 1);
+#else
+  READ_CODE(3, uiCode, "sps_max_sub_layers_minus1");          pcSPS->setMaxTLayers   (uiCode + 1);
+  CHECK(uiCode > 6, "Invalid maximum number of T-layer signalled");
+  READ_CODE(5, uiCode, "sps_reserved_zero_5bits");
+  CHECK(uiCode != 0, "sps_reserved_zero_5bits not equal to zero");
+
+  parseProfileTierLevel(pcSPS->getProfileTierLevel(), pcSPS->getMaxTLayers() - 1);
+
+  READ_UVLC(uiCode, "sps_seq_parameter_set_id");           pcSPS->setSPSId(uiCode);
+#endif
 
   READ_UVLC(     uiCode, "chroma_format_idc" );                  pcSPS->setChromaFormatIdc( ChromaFormat(uiCode) );
   CHECK(uiCode > 3, "Invalid chroma format signalled");
@@ -1058,10 +1069,12 @@ void HLSyntaxReader::parseSPS(SPS* pcSPS)
   pcSPS->setMaxBTSize(maxBTSize[1], maxBTSize[0], maxBTSize[2]);
   pcSPS->setMaxTTSize(maxTTSize[1], maxTTSize[0], maxTTSize[2]);
 
+#if !JVET_M0101_HLS
   if (pcSPS->getPTL()->getGeneralPTL()->getLevelIdc() >= Level::LEVEL5)
   {
     CHECK(log2MinCUSize + pcSPS->getLog2DiffMaxMinCodingBlockSize() < 5, "Invalid code");
   }
+#endif
 
 #if MAX_TB_SIZE_SIGNALLING
   // KJS: Not in syntax
@@ -1511,6 +1524,7 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, ParameterSetManager *para
       {
         iPOCmsb = iPrevPOCmsb;
       }
+#if !JVET_M0101_HLS
       if ( pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_W_LP
            || pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_W_RADL
            || pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_N_LP )
@@ -1518,6 +1532,7 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, ParameterSetManager *para
         // For BLA picture types, POCmsb is set to 0.
         iPOCmsb = 0;
       }
+#endif
       pcSlice->setPOC              (iPOCmsb+iPOClsb);
 
       ReferencePictureSet* rps;
@@ -1633,6 +1648,7 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, ParameterSetManager *para
         offset += rps->getNumberOfLongtermPictures();
         rps->setNumberOfPictures(offset);
       }
+#if !JVET_M0101_HLS
       if ( pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_W_LP
            || pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_W_RADL
            || pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_N_LP )
@@ -1642,6 +1658,7 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, ParameterSetManager *para
         (*rps)=ReferencePictureSet();
         pcSlice->setRPS(rps);
       }
+#endif
       if (sps->getSPSTemporalMVPEnabledFlag())
       {
         READ_FLAG( uiCode, "slice_temporal_mvp_enabled_flag" );
@@ -2119,8 +2136,81 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, ParameterSetManager *para
   return;
 }
 
+#if JVET_M0101_HLS
+void HLSyntaxReader::parseConstraintInfo(ConstraintInfo *cinfo)
+{
+  uint32_t symbol;
+  READ_FLAG(symbol,  "general_progressive_source_flag"          ); cinfo->setProgressiveSourceFlag(symbol ? true : false);
+  READ_FLAG(symbol,  "general_interlaced_source_flag"           ); cinfo->setInterlacedSourceFlag(symbol ? true : false);
+  READ_FLAG(symbol,  "general_non_packed_constraint_flag"       ); cinfo->setNonPackedConstraintFlag(symbol ? true : false);
+  READ_FLAG(symbol,  "general_frame_only_constraint_flag"       ); cinfo->setFrameOnlyConstraintFlag(symbol ? true : false);
+  READ_FLAG(symbol,  "intra_only_constraint_flag"               ); cinfo->setIntraOnlyConstraintFlag(symbol ? true : false);
+
+  READ_CODE(4, symbol,  "max_bitdepth_constraint_idc"              ); cinfo->setMaxBitDepthConstraintIdc(symbol);
+  READ_CODE(2, symbol,  "max_chroma_format_constraint_idc"         ); cinfo->setMaxChromaFormatConstraintIdc((ChromaFormat)symbol);
+  
+  READ_FLAG(symbol,  "no_qtbtt_dual_tree_intra_constraint_flag" ); cinfo->setNoQtbttDualTreeIntraConstraintFlag(symbol > 0 ? true : false);
+  READ_FLAG(symbol,  "no_sao_constraint_flag");                    cinfo->setNoSaoConstraintFlag(symbol > 0 ? true : false);
+  READ_FLAG(symbol,  "no_alf_constraint_flag");                    cinfo->setNoAlfConstraintFlag(symbol > 0 ? true : false);
+  READ_FLAG(symbol,  "no_pcm_constraint_flag");                    cinfo->setNoPcmConstraintFlag(symbol > 0 ? true : false);
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+  READ_FLAG(symbol,  "no_ref_wraparound_constraint_flag");         cinfo->setNoRefWraparoundConstraintFlag(symbol > 0 ? true : false);
+#endif
+  READ_FLAG(symbol,  "no_temporal_mvp_constraint_flag");           cinfo->setNoTemporalMvpConstraintFlag(symbol > 0 ? true : false);
+  READ_FLAG(symbol,  "no_sbtmvp_constraint_flag");                 cinfo->setNoSbtmvpConstraintFlag(symbol > 0 ? true : false);
+  READ_FLAG(symbol,  "no_amvr_constraint_flag");                   cinfo->setNoAmvrConstraintFlag(symbol > 0 ? true : false);
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+  READ_FLAG(symbol,  "no_bdof_constraint_flag");                   cinfo->setNoBdofConstraintFlag(symbol > 0 ? true : false);
+#endif
+  READ_FLAG(symbol, "no_cclm_constraint_flag");                    cinfo->setNoCclmConstraintFlag(symbol > 0 ? true : false);
+  READ_FLAG(symbol, "no_mts_constraint_flag");                     cinfo->setNoMtsConstraintFlag(symbol > 0 ? true : false);
+  READ_FLAG(symbol, "no_affine_motion_constraint_flag");           cinfo->setNoAffineMotionConstraintFlag(symbol > 0 ? true : false);
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+  READ_FLAG(symbol, "no_gbi_constraint_flag");                     cinfo->setNoGbiConstraintFlag(symbol > 0 ? true : false);
+  READ_FLAG(symbol, "no_mh_intra_constraint_flag");                cinfo->setNoMhIntraConstraintFlag(symbol > 0 ? true : false);
+  READ_FLAG(symbol, "no_triangle_constraint_flag");                cinfo->setNoTriangleConstraintFlag(symbol > 0 ? true : false);
+#endif
+  READ_FLAG(symbol, "no_ladf_constraint_flag");                    cinfo->setNoLadfConstraintFlag(symbol > 0 ? true : false);
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+  READ_FLAG(symbol, "no_curr_pic_ref_constraint_flag");            cinfo->setNoCurrPicRefConstraintFlag(symbol > 0 ? true : false);
+  READ_FLAG(symbol, "no_qp_delta_constraint_flag");                cinfo->setNoQpDeltaConstraintFlag(symbol > 0 ? true : false);
+#endif
+  READ_FLAG(symbol, "no_dep_quant_constraint_flag");               cinfo->setNoDepQuantConstraintFlag(symbol > 0 ? true : false);
+  READ_FLAG(symbol, "no_sign_data_hiding_constraint_flag");        cinfo->setNoSignDataHidingConstraintFlag(symbol > 0 ? true : false);
+}
+
 
+void HLSyntaxReader::parseProfileTierLevel(ProfileTierLevel *ptl, int maxNumSubLayersMinus1)
+{
+  uint32_t symbol;
+  READ_CODE(7 , symbol,   "general_profile_idc"              ); ptl->setProfileIdc  (Profile::Name(symbol));
+  READ_FLAG(    symbol,   "general_tier_flag"                ); ptl->setTierFlag    (symbol ? Level::HIGH : Level::MAIN);
 
+  parseConstraintInfo( ptl->getConstraintInfo() );
+
+  READ_CODE(8 , symbol,   "general_level_idc"                ); ptl->setLevelIdc    (Level::Name(symbol));
+
+  for (int i = 0; i < maxNumSubLayersMinus1; i++)
+  {
+    READ_FLAG( symbol, "sub_layer_level_present_flag[i]"   ); ptl->setSubLayerLevelPresentFlag  (i, symbol);
+  }
+
+  while (!isByteAligned())
+  {
+    READ_FLAG(    symbol,   "ptl_alignment_zero_bit"        ); CHECK (symbol != 0, "ptl_alignment_zero_bit not equal to zero");
+  }
+
+  for (int i = 0; i < maxNumSubLayersMinus1; i++)
+  {
+    if (ptl->getSubLayerLevelPresentFlag(i))
+    {
+      READ_CODE(8 , symbol,   "sub_layer_level_idc"                ); ptl->setSubLayerLevelIdc    (i, Level::Name(symbol));
+    }
+  }
+}
+
+
+#else
 void HLSyntaxReader::parsePTL( PTL *rpcPTL, bool profilePresentFlag, int maxNumSubLayersMinus1 )
 {
   uint32_t uiCode;
@@ -2228,6 +2318,7 @@ void HLSyntaxReader::parseProfileTier(ProfileTierLevel *ptl, const bool /*bIsSub
   }
 #undef PTL_TRACE_TEXT
 }
+#endif
 
 void HLSyntaxReader::parseTerminatingBit( uint32_t& ruiBit )
 {
diff --git a/source/Lib/DecoderLib/VLCReader.h b/source/Lib/DecoderLib/VLCReader.h
index ac4a6bed11a401db99f75ca525dd9fbac4fb2471..db9070a7079ef73c0bbfaf6710c5d54de126e737 100644
--- a/source/Lib/DecoderLib/VLCReader.h
+++ b/source/Lib/DecoderLib/VLCReader.h
@@ -109,6 +109,9 @@ public:
 
 protected:
   void xReadRbspTrailingBits();
+#if JVET_M0101_HLS
+  bool isByteAligned() { return (m_pcBitstream->getNumBitsUntilByteAligned() != 0 ); }
+#endif
 };
 
 
@@ -153,8 +156,13 @@ public:
   void  parseAPS            ( APS* pcAPS);
 #endif
   void  parseVUI            ( VUI* pcVUI, SPS* pcSPS );
+#if !JVET_M0101_HLS
   void  parsePTL            ( PTL *rpcPTL, bool profilePresentFlag, int maxNumSubLayersMinus1 );
   void  parseProfileTier    ( ProfileTierLevel *ptl, const bool bIsSubLayer );
+#else
+  void  parseConstraintInfo   (ConstraintInfo *cinfo);
+  void  parseProfileTierLevel ( ProfileTierLevel *ptl, int maxNumSubLayersMinus1);
+#endif
   void  parseHrdParameters  ( HRD *hrd, bool cprms_present_flag, uint32_t tempLevelHigh );
   void  parseSliceHeader    ( Slice* pcSlice, ParameterSetManager *parameterSetManager, const int prevTid0POC );
   void  parseTerminatingBit ( uint32_t& ruiBit );
diff --git a/source/Lib/EncoderLib/EncGOP.cpp b/source/Lib/EncoderLib/EncGOP.cpp
index ff610aa75635439f9cbd1441841bc69f8419d9f6..7d687a17e4d7ea3b6058065e154ff038e0dbcfa0 100644
--- a/source/Lib/EncoderLib/EncGOP.cpp
+++ b/source/Lib/EncoderLib/EncGOP.cpp
@@ -995,7 +995,11 @@ void EfficientFieldIRAPMapping::initialize(const bool isField, const int gopSize
 
       // check if POC corresponds to IRAP
       NalUnitType tmpUnitType = pEncGop->getNalUnitType(pocCurr, lastIDR, isField);
+#if !JVET_M0101_HLS
       if(tmpUnitType >= NAL_UNIT_CODED_SLICE_BLA_W_LP && tmpUnitType <= NAL_UNIT_CODED_SLICE_CRA) // if picture is an IRAP
+#else
+      if (tmpUnitType >= NAL_UNIT_CODED_SLICE_IDR_W_RADL && tmpUnitType <= NAL_UNIT_CODED_SLICE_CRA) // if picture is an IRAP
+#endif
       {
         if(pocCurr%2 == 0 && iGOPid < gopSize-1 && pCfg->getGOPEntry(iGOPid).m_POC == pCfg->getGOPEntry(iGOPid+1).m_POC-1)
         { // if top field and following picture in enc order is associated bottom field
@@ -1517,6 +1521,7 @@ void EncGOP::compressGOP( int iPOCLast, int iNumPicRcvd, PicList& rcListPic,
 #endif
     // Set the nal unit type
     pcSlice->setNalUnitType(getNalUnitType(pocCurr, m_iLastIDR, isField));
+#if !JVET_M0101_HLS
     if(pcSlice->getTemporalLayerNonReferenceFlag())
     {
       if (pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_TRAIL_R &&
@@ -1534,15 +1539,22 @@ void EncGOP::compressGOP( int iPOCLast, int iNumPicRcvd, PicList& rcListPic,
         pcSlice->setNalUnitType(NAL_UNIT_CODED_SLICE_RASL_N);
       }
     }
+#endif
 
     if (m_pcCfg->getEfficientFieldIRAPEnabled())
     {
+#if !JVET_M0101_HLS
       if ( pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_W_LP
         || pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_W_RADL
         || pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_N_LP
         || pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_IDR_W_RADL
         || pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_IDR_N_LP
         || pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA )  // IRAP picture
+#else
+      if ( pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_IDR_W_RADL
+        || pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_IDR_N_LP
+        || pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA)  // IRAP picture
+#endif
       {
         m_associatedIRAPType = pcSlice->getNalUnitType();
         m_associatedIRAPPOC = pocCurr;
@@ -1578,12 +1590,18 @@ void EncGOP::compressGOP( int iPOCLast, int iNumPicRcvd, PicList& rcListPic,
     }
     if (!m_pcCfg->getEfficientFieldIRAPEnabled())
     {
+#if !JVET_M0101_HLS
       if ( pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_W_LP
         || pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_W_RADL
         || pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_BLA_N_LP
         || pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_IDR_W_RADL
         || pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_IDR_N_LP
         || pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA )  // IRAP picture
+#else
+      if ( pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_IDR_W_RADL
+        || pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_IDR_N_LP
+        || pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA)  // IRAP picture
+#endif
       {
         m_associatedIRAPType = pcSlice->getNalUnitType();
         m_associatedIRAPPOC = pocCurr;
@@ -1593,7 +1611,11 @@ void EncGOP::compressGOP( int iPOCLast, int iNumPicRcvd, PicList& rcListPic,
     }
 
     if ((pcSlice->checkThatAllRefPicsAreAvailable(rcListPic, pcSlice->getRPS(), false, m_iLastRecoveryPicPOC, m_pcCfg->getDecodingRefreshType() == 3) != 0) || (pcSlice->isIRAP())
+#if !JVET_M0101_HLS
       || (m_pcCfg->getEfficientFieldIRAPEnabled() && isField && pcSlice->getAssociatedIRAPType() >= NAL_UNIT_CODED_SLICE_BLA_W_LP && pcSlice->getAssociatedIRAPType() <= NAL_UNIT_CODED_SLICE_CRA && pcSlice->getAssociatedIRAPPOC() == pcSlice->getPOC()+1)
+#else
+      || (m_pcCfg->getEfficientFieldIRAPEnabled() && isField && pcSlice->getAssociatedIRAPType() >= NAL_UNIT_CODED_SLICE_IDR_W_RADL && pcSlice->getAssociatedIRAPType() <= NAL_UNIT_CODED_SLICE_CRA && pcSlice->getAssociatedIRAPPOC() == pcSlice->getPOC() + 1)
+#endif
       )
     {
       pcSlice->createExplicitReferencePictureSetFromReference(rcListPic, pcSlice->getRPS(), pcSlice->isIRAP(), m_iLastRecoveryPicPOC, m_pcCfg->getDecodingRefreshType() == 3, m_pcCfg->getEfficientFieldIRAPEnabled()
@@ -1604,12 +1626,18 @@ void EncGOP::compressGOP( int iPOCLast, int iNumPicRcvd, PicList& rcListPic,
     pcSlice->applyReferencePictureSet(rcListPic, pcSlice->getRPS());
 
     if(pcSlice->getTLayer() > 0
+#if !JVET_M0101_HLS
       &&  !( pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_RADL_N     // Check if not a leading picture
           || pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_RADL_R
           || pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_RASL_N
           || pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_RASL_R )
+#else
+      && !(pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_RADL     // Check if not a leading picture
+        || pcSlice->getNalUnitType() == NAL_UNIT_CODED_SLICE_RASL)
+#endif
         )
     {
+#if !JVET_M0101_HLS
       if(pcSlice->isTemporalLayerSwitchingPoint(rcListPic) || pcSlice->getSPS()->getTemporalIdNestingFlag())
       {
         if(pcSlice->getTemporalLayerNonReferenceFlag())
@@ -1622,6 +1650,9 @@ void EncGOP::compressGOP( int iPOCLast, int iNumPicRcvd, PicList& rcListPic,
         }
       }
       else if(pcSlice->isStepwiseTemporalLayerSwitchingPointCandidate(rcListPic))
+#else
+    if (pcSlice->isStepwiseTemporalLayerSwitchingPointCandidate(rcListPic))
+#endif
       {
         bool isSTSA=true;
         for(int ii=iGOPid+1;(ii<m_pcCfg->getGOPSize() && isSTSA==true);ii++)
@@ -1655,6 +1686,7 @@ void EncGOP::compressGOP( int iPOCLast, int iNumPicRcvd, PicList& rcListPic,
         }
         if(isSTSA==true)
         {
+#if !JVET_M0101_HLS
           if(pcSlice->getTemporalLayerNonReferenceFlag())
           {
             pcSlice->setNalUnitType(NAL_UNIT_CODED_SLICE_STSA_N);
@@ -1663,6 +1695,9 @@ void EncGOP::compressGOP( int iPOCLast, int iNumPicRcvd, PicList& rcListPic,
           {
             pcSlice->setNalUnitType(NAL_UNIT_CODED_SLICE_STSA_R);
           }
+#else
+          pcSlice->setNalUnitType(NAL_UNIT_CODED_SLICE_STSA);
+#endif
         }
       }
     }
@@ -2615,7 +2650,11 @@ void EncGOP::compressGOP( int iPOCLast, int iNumPicRcvd, PicList& rcListPic,
         pcSlice->setNoRaslOutputFlag(false);
         if (pcSlice->isIRAP())
         {
+#if !JVET_M0101_HLS
           if (pcSlice->getNalUnitType() >= NAL_UNIT_CODED_SLICE_BLA_W_LP && pcSlice->getNalUnitType() <= NAL_UNIT_CODED_SLICE_IDR_N_LP)
+#else
+          if (pcSlice->getNalUnitType() >= NAL_UNIT_CODED_SLICE_IDR_W_RADL && pcSlice->getNalUnitType() <= NAL_UNIT_CODED_SLICE_IDR_N_LP)
+#endif
           {
             pcSlice->setNoRaslOutputFlag(true);
           }
@@ -3634,7 +3673,11 @@ NalUnitType EncGOP::getNalUnitType(int pocCurr, int lastIDR, bool isField)
   if (m_pcCfg->getEfficientFieldIRAPEnabled() && isField && pocCurr == (m_pcCfg->getUseCompositeRef() ? 2: 1))
   {
     // to avoid the picture becoming an IRAP
+#if !JVET_M0101_HLS
     return NAL_UNIT_CODED_SLICE_TRAIL_R;
+#else
+    return NAL_UNIT_CODED_SLICE_TRAIL;
+#endif
   }
 
   if (m_pcCfg->getDecodingRefreshType() != 3 && (pocCurr - isField) % (m_pcCfg->getIntraPeriod() * (m_pcCfg->getUseCompositeRef() ? 2 : 1)) == 0)
@@ -3657,17 +3700,29 @@ NalUnitType EncGOP::getNalUnitType(int pocCurr, int lastIDR, bool isField)
       // picture can be still decodable when random accessing to a CRA/CRANT/BLA/BLANT picture by
       // controlling the reference pictures used for encoding that leading picture. Such a leading
       // picture need not be marked as a TFD picture.
+#if !JVET_M0101_HLS
       return NAL_UNIT_CODED_SLICE_RASL_R;
+#else
+      return NAL_UNIT_CODED_SLICE_RASL;
+#endif
     }
   }
   if (lastIDR>0)
   {
     if (pocCurr < lastIDR)
     {
+#if !JVET_M0101_HLS
       return NAL_UNIT_CODED_SLICE_RADL_R;
+#else
+      return NAL_UNIT_CODED_SLICE_RADL;
+#endif
     }
   }
+#if !JVET_M0101_HLS
   return NAL_UNIT_CODED_SLICE_TRAIL_R;
+#else
+  return NAL_UNIT_CODED_SLICE_TRAIL;
+#endif
 }
 
 void EncGOP::xUpdateRasInit(Slice* slice)
diff --git a/source/Lib/EncoderLib/EncLib.cpp b/source/Lib/EncoderLib/EncLib.cpp
index b767e5d97dd4184fa041ca9f911b529241bdfc84..d402c7be9296321cba9ebe03e09168e54e534703 100644
--- a/source/Lib/EncoderLib/EncLib.cpp
+++ b/source/Lib/EncoderLib/EncLib.cpp
@@ -855,6 +855,7 @@ void EncLib::xInitVPS(VPS &vps, const SPS &sps)
 
 void EncLib::xInitSPS(SPS &sps)
 {
+#if !JVET_M0101_HLS
   sps.setIntraOnlyConstraintFlag(m_bIntraOnlyConstraintFlag);
   sps.setMaxBitDepthConstraintIdc(m_maxBitDepthConstraintIdc);
   sps.setMaxChromaFormatConstraintIdc(m_maxChromaFormatConstraintIdc);
@@ -913,7 +914,50 @@ void EncLib::xInitSPS(SPS &sps)
     /* A Profile::MAIN10 decoder can always decode Profile::MAIN */
     profileTierLevel.setProfileCompatibilityFlag( Profile::MAIN10, 1 );
   }
+#else
+  ProfileTierLevel* profileTierLevel = sps.getProfileTierLevel();
+  ConstraintInfo* cinfo = profileTierLevel->getConstraintInfo();
+  cinfo->setProgressiveSourceFlag       (m_progressiveSourceFlag);
+  cinfo->setInterlacedSourceFlag        (m_interlacedSourceFlag);
+  cinfo->setNonPackedConstraintFlag     (m_nonPackedConstraintFlag);
+  cinfo->setFrameOnlyConstraintFlag     (m_frameOnlyConstraintFlag);
+  cinfo->setIntraOnlyConstraintFlag         (m_intraConstraintFlag);
+  cinfo->setMaxBitDepthConstraintIdc    (m_maxBitDepthConstraintIdc);
+  cinfo->setMaxChromaFormatConstraintIdc((ChromaFormat)m_maxChromaFormatConstraintIdc);
+  cinfo->setNoQtbttDualTreeIntraConstraintFlag(m_bNoQtbttDualTreeIntraConstraintFlag);
+  cinfo->setNoSaoConstraintFlag(m_bNoSaoConstraintFlag);
+  cinfo->setNoAlfConstraintFlag(m_bNoAlfConstraintFlag);
+  cinfo->setNoPcmConstraintFlag(m_bNoPcmConstraintFlag);
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+  cinfo->setNoRefWraparoundConstraintFlag(m_bNoRefWraparoundConstraintFlag);
+#endif
+  cinfo->setNoTemporalMvpConstraintFlag(m_bNoTemporalMvpConstraintFlag);
+  cinfo->setNoSbtmvpConstraintFlag(m_bNoSbtmvpConstraintFlag);
+  cinfo->setNoAmvrConstraintFlag(m_bNoAmvrConstraintFlag);
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+  cinfo->setNoBdofConstraintFlag(m_bNoBdofConstraintFlag);
+#endif
+  cinfo->setNoCclmConstraintFlag(m_bNoCclmConstraintFlag);
+  cinfo->setNoMtsConstraintFlag(m_bNoMtsConstraintFlag);
+  cinfo->setNoAffineMotionConstraintFlag(m_bNoAffineMotionConstraintFlag);
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+  cinfo->setNoGbiConstraintFlag(m_bNoGbiConstraintFlag);
+  cinfo->setNoMhIntraConstraintFlag(m_bNoMhIntraConstraintFlag);
+  cinfo->setNoTriangleConstraintFlag(m_bNoTriangleConstraintFlag);
+#endif
+  cinfo->setNoLadfConstraintFlag(m_bNoLadfConstraintFlag);
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+  cinfo->setNoCurrPicRefConstraintFlag(m_bNoCurrPicRefConstraintFlag);
+  cinfo->setNoQpDeltaConstraintFlag(m_bNoQpDeltaConstraintFlag);
+#endif
+  cinfo->setNoDepQuantConstraintFlag(m_bNoDepQuantConstraintFlag);
+  cinfo->setNoSignDataHidingConstraintFlag(m_bNoSignDataHidingConstraintFlag);
 
+  profileTierLevel->setLevelIdc                    (m_level);
+  profileTierLevel->setTierFlag                    (m_levelTier);
+  profileTierLevel->setProfileIdc                  (m_profile);
+
+#endif
   /* XXX: should Main be marked as compatible with still picture? */
   /* XXX: may be a good idea to refactor the above into a function
    * that chooses the actual compatibility based upon options */
diff --git a/source/Lib/EncoderLib/EncSlice.cpp b/source/Lib/EncoderLib/EncSlice.cpp
index dca7ba1edd2e2c70bd5a03dd868561a525cc2e48..674e3a10fcd56ed7b6d9b1a04fcb264ac87b6b4e 100644
--- a/source/Lib/EncoderLib/EncSlice.cpp
+++ b/source/Lib/EncoderLib/EncSlice.cpp
@@ -426,6 +426,7 @@ void EncSlice::initEncSlice(Picture* pcPic, const int pocLast, const int pocCurr
   // Non-referenced frame marking
   // ------------------------------------------------------------------------------------------------------------------
 
+#if !JVET_M0101_HLS
   if(pocLast == 0)
   {
     rpcSlice->setTemporalLayerNonReferenceFlag(false);
@@ -434,6 +435,7 @@ void EncSlice::initEncSlice(Picture* pcPic, const int pocLast, const int pocCurr
   {
     rpcSlice->setTemporalLayerNonReferenceFlag(!m_pcCfg->getGOPEntry(iGOPid).m_refPic);
   }
+#endif
   pcPic->referenced = true;
 
   // ------------------------------------------------------------------------------------------------------------------
diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp
index bd7a238bbe7320abb4c77b8b2c1179d248c3721a..93af6cb2f61d43abb429520b590e70c9b1d58573 100644
--- a/source/Lib/EncoderLib/VLCWriter.cpp
+++ b/source/Lib/EncoderLib/VLCWriter.cpp
@@ -605,6 +605,7 @@ void HLSWriter::codeSPS( const SPS* pcSPS )
 #if HEVC_VPS
   WRITE_CODE( pcSPS->getVPSId (),          4,       "sps_video_parameter_set_id" );
 #endif
+#if !JVET_M0101_HLS
   WRITE_UVLC( pcSPS->getSPSId (),                   "sps_seq_parameter_set_id" );
 
   WRITE_FLAG(pcSPS->getIntraOnlyConstraintFlag() ? 1 : 0, "intra_only_constraint_flag");
@@ -640,12 +641,21 @@ void HLSWriter::codeSPS( const SPS* pcSPS )
   WRITE_FLAG(pcSPS->getNoDepQuantConstraintFlag() ? 1 : 0, "no_dep_quant_constraint_flag");
   WRITE_FLAG(pcSPS->getNoSignDataHidingConstraintFlag() ? 1 : 0, "no_sign_data_hiding_constraint_flag");
 
-  // KJS: Marakech decision: sub-layers added back
   CHECK( pcSPS->getMaxTLayers() == 0, "Maximum number of temporal sub-layers is '0'" );
   WRITE_CODE( pcSPS->getMaxTLayers() - 1,  3,       "sps_max_sub_layers_minus1" );
 
   WRITE_FLAG( pcSPS->getTemporalIdNestingFlag() ? 1 : 0, "sps_temporal_id_nesting_flag" );
   codePTL( pcSPS->getPTL(), true, pcSPS->getMaxTLayers() - 1 );
+#else
+  CHECK(pcSPS->getMaxTLayers() == 0, "Maximum number of temporal sub-layers is '0'");
+
+  WRITE_CODE(pcSPS->getMaxTLayers() - 1, 3, "sps_max_sub_layers_minus1");
+  WRITE_CODE(0,                          5, "sps_reserved_zero_5bits");
+
+  codeProfileTierLevel( pcSPS->getProfileTierLevel(), pcSPS->getMaxTLayers() - 1 );
+
+  WRITE_UVLC(pcSPS->getSPSId (), "sps_seq_parameter_set_id");
+#endif
 
   WRITE_UVLC( int(pcSPS->getChromaFormatIdc ()),    "chroma_format_idc" );
 
@@ -1478,7 +1488,79 @@ void HLSWriter::codeSliceHeader         ( Slice* pcSlice )
 
 }
 
+#if JVET_M0101_HLS
+void  HLSWriter::codeConstraintInfo  ( const ConstraintInfo* cinfo )
+{
+  WRITE_FLAG(cinfo->getProgressiveSourceFlag(),   "general_progressive_source_flag"         );
+  WRITE_FLAG(cinfo->getInterlacedSourceFlag(),    "general_interlaced_source_flag"          );
+  WRITE_FLAG(cinfo->getNonPackedConstraintFlag(), "general_non_packed_constraint_flag"      );
+  WRITE_FLAG(cinfo->getFrameOnlyConstraintFlag(), "general_frame_only_constraint_flag"      );
+  WRITE_FLAG(cinfo->getIntraOnlyConstraintFlag(),     "intra_only_constraint_flag"      );
+
+  WRITE_CODE(cinfo->getMaxBitDepthConstraintIdc(), 4, "max_bitdepth_constraint_idc" );
+  WRITE_CODE(cinfo->getMaxChromaFormatConstraintIdc(), 2, "max_chroma_format_constraint_idc" );
+
+  WRITE_FLAG(cinfo->getNoQtbttDualTreeIntraConstraintFlag() ? 1 : 0, "no_qtbtt_dual_tree_intra_constraint_flag");
+  WRITE_FLAG(cinfo->getNoSaoConstraintFlag() ? 1 : 0, "no_sao_constraint_flag");
+  WRITE_FLAG(cinfo->getNoAlfConstraintFlag() ? 1 : 0, "no_alf_constraint_flag");
+  WRITE_FLAG(cinfo->getNoPcmConstraintFlag() ? 1 : 0, "no_pcm_constraint_flag");
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+  WRITE_FLAG(cinfo->getNoRefWraparoundConstraintFlag() ? 1 : 0, "no_ref_wraparound_constraint_flag");
+#endif
+  WRITE_FLAG(cinfo->getNoTemporalMvpConstraintFlag() ? 1 : 0, "no_temporal_mvp_constraint_flag");
+  WRITE_FLAG(cinfo->getNoSbtmvpConstraintFlag() ? 1 : 0, "no_sbtmvp_constraint_flag");
+  WRITE_FLAG(cinfo->getNoAmvrConstraintFlag() ? 1 : 0, "no_amvr_constraint_flag");
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+  WRITE_FLAG(cinfo->getNoBdofConstraintFlag() ? 1 : 0, "no_bdof_constraint_flag");
+#endif
+  WRITE_FLAG(cinfo->getNoCclmConstraintFlag() ? 1 : 0, "no_cclm_constraint_flag");
+  WRITE_FLAG(cinfo->getNoMtsConstraintFlag() ? 1 : 0, "no_mts_constraint_flag");
+  WRITE_FLAG(cinfo->getNoAffineMotionConstraintFlag() ? 1 : 0, "no_affine_motion_constraint_flag");
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+  WRITE_FLAG(cinfo->getNoGbiConstraintFlag() ? 1 : 0, "no_gbi_constraint_flag");
+  WRITE_FLAG(cinfo->getNoMhIntraConstraintFlag() ? 1 : 0, "no_mh_intra_constraint_flag");
+  WRITE_FLAG(cinfo->getNoTriangleConstraintFlag() ? 1 : 0, "no_triangle_constraint_flag");
+#endif
+  WRITE_FLAG(cinfo->getNoLadfConstraintFlag() ? 1 : 0, "no_ladf_constraint_flag");
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+  WRITE_FLAG(cinfo->getNoCurrPicRefConstraintFlag() ? 1 : 0, "no_curr_pic_ref_constraint_flag");
+  WRITE_FLAG(cinfo->getNoQpDeltaConstraintFlag() ? 1 : 0, "no_qp_delta_constraint_flag");
+#endif
+  WRITE_FLAG(cinfo->getNoDepQuantConstraintFlag() ? 1 : 0, "no_dep_quant_constraint_flag");
+  WRITE_FLAG(cinfo->getNoSignDataHidingConstraintFlag() ? 1 : 0, "no_sign_data_hiding_constraint_flag");
+}
+
+
+void  HLSWriter::codeProfileTierLevel    ( const ProfileTierLevel* ptl, int maxNumSubLayersMinus1 )
+{
+  WRITE_CODE( int(ptl->getProfileIdc()), 7 ,   "general_profile_idc"                     );
+  WRITE_FLAG( ptl->getTierFlag()==Level::HIGH, "general_tier_flag"                       );
+
+  codeConstraintInfo(ptl->getConstraintInfo());
+
+  WRITE_CODE( int(ptl->getLevelIdc()), 8 ,     "general_level_idc"                     );
+
+  for (int i = 0; i < maxNumSubLayersMinus1; i++)
+  {
+    WRITE_FLAG( ptl->getSubLayerLevelPresentFlag(i),   "sub_layer_level_present_flag[i]" );
+  }
+
+  while (!xIsByteAligned())
+  {
+    WRITE_FLAG(0, "ptl_alignment_zero_bit");
+  }
 
+  for(int i = 0; i < maxNumSubLayersMinus1; i++)
+  {
+    if( ptl->getSubLayerLevelPresentFlag(i) )
+    {
+      WRITE_CODE( int(ptl->getSubLayerLevelIdc(i)), 8, "sub_layer_level_idc[i]" );
+    }
+  }
+
+}
+
+#else
 void HLSWriter::codePTL( const PTL* pcPTL, bool profilePresentFlag, int maxNumSubLayersMinus1)
 {
   if(profilePresentFlag)
@@ -1561,6 +1643,7 @@ void HLSWriter::codeProfileTier( const ProfileTierLevel* ptl, const bool /*bIsSu
   WRITE_FLAG(false,   PTL_TRACE_TEXT("reserved_zero_bit" ));
 #undef PTL_TRACE_TEXT
 }
+#endif
 
 #if HEVC_TILES_WPP
 /**
diff --git a/source/Lib/EncoderLib/VLCWriter.h b/source/Lib/EncoderLib/VLCWriter.h
index 5470e805d1fa86e0b6675781616b2b28cdfdfac2..b69da6629f1152c306b9baadb53712751d43fb16 100644
--- a/source/Lib/EncoderLib/VLCWriter.h
+++ b/source/Lib/EncoderLib/VLCWriter.h
@@ -88,6 +88,9 @@ protected:
   void  xWriteFlagTr          ( uint32_t value,               const char *pSymbolName);
 #endif
   void  xWriteRbspTrailingBits();
+#if JVET_M0101_HLS
+  bool xIsByteAligned()      {return (m_pcBitIf->getNumBitsUntilByteAligned() != 0); } ;
+#endif
 };
 
 
@@ -129,8 +132,13 @@ public:
   void  codeVPS                 ( const VPS* pcVPS );
 #endif
   void  codeSliceHeader         ( Slice* pcSlice );
+#if !JVET_M0101_HLS
   void  codePTL                 ( const PTL* pcPTL, bool profilePresentFlag, int maxNumSubLayersMinus1);
   void  codeProfileTier         ( const ProfileTierLevel* ptl, const bool bIsSubLayer );
+#else
+  void  codeConstraintInfo      ( const ConstraintInfo* cinfo );
+  void  codeProfileTierLevel    ( const ProfileTierLevel* ptl, int maxNumSubLayersMinus1 );
+#endif
   void  codeHrdParameters       ( const HRD *hrd, bool commonInfPresentFlag, uint32_t maxNumSubLayersMinus1 );
 #if HEVC_TILES_WPP
   void  codeTilesWPPEntryPoint  ( Slice* pSlice );