diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h
index ecd14902c0c714e463a572178c94407460d76bb8..88a323329203b5c882bc0f5ea856e055a741d3c0 100644
--- a/source/Lib/CommonLib/TypeDef.h
+++ b/source/Lib/CommonLib/TypeDef.h
@@ -60,6 +60,8 @@
 
 #define JVET_S_PROFILES                                   1 // Profile definitions
 
+#define JVET_S_SUB_PROFILE                                1 // Move signalling of ptl_num_sub_profiles
+
 #define JVET_S0219_ASPECT2_CHANGE_ORDER_APS_PARAMS_TYPE   1 // JVET-S0219 aspect2: change the order to put the aps_params_type before the aps_adaptation_parameter_set_id.
 
 #define JVET_R0270                                        1 // JVET-S0270: Treating picture with mixed RASL and RADL slices as RASL picture
diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp
index a0e33aca4d4ccadca9f8f965fb48737b61dd14c6..9b4fcc4e7958521fa0e8d9c1ee855361bb794ef1 100644
--- a/source/Lib/DecoderLib/VLCReader.cpp
+++ b/source/Lib/DecoderLib/VLCReader.cpp
@@ -4847,6 +4847,7 @@ void HLSyntaxReader::parseProfileTierLevel(ProfileTierLevel *ptl, bool profileTi
 #if JVET_S0179_CONDITIONAL_SIGNAL_GCI
     parseConstraintInfo(ptl->getConstraintInfo());
 #endif
+#if !JVET_S_SUB_PROFILE
     READ_CODE(8, symbol, "num_sub_profiles");
     uint8_t numSubProfiles = symbol;
     ptl->setNumSubProfile( numSubProfiles );
@@ -4854,6 +4855,7 @@ void HLSyntaxReader::parseProfileTierLevel(ProfileTierLevel *ptl, bool profileTi
     {
       READ_CODE(32, symbol, "general_sub_profile_idc[i]"); ptl->setSubProfileIdc(i, symbol);
     }
+#endif
   }
 
 #if JVET_S0203
@@ -4893,6 +4895,20 @@ void HLSyntaxReader::parseProfileTierLevel(ProfileTierLevel *ptl, bool profileTi
       ptl->setSubLayerLevelIdc( i, ptl->getSubLayerLevelIdc( i + 1 ) );
     }
   }
+
+#if JVET_S_SUB_PROFILE
+  if (profileTierPresentFlag)
+  {
+    READ_CODE(8, symbol, "ptl_num_sub_profiles");
+    uint8_t numSubProfiles = symbol;
+    ptl->setNumSubProfile(numSubProfiles);
+    for (int i = 0; i < numSubProfiles; i++)
+    {
+      READ_CODE(32, symbol, "general_sub_profile_idc[i]");
+      ptl->setSubProfileIdc(i, symbol);
+    }
+  }
+#endif
 }
 
 
diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp
index fcf448d8db98156a7fb80aee3d82932e01c21023..c81549ef8dc4da118f7bf76923b7143662e53281 100644
--- a/source/Lib/EncoderLib/VLCWriter.cpp
+++ b/source/Lib/EncoderLib/VLCWriter.cpp
@@ -2789,11 +2789,13 @@ void  HLSWriter::codeProfileTierLevel    ( const ProfileTierLevel* ptl, bool pro
 #if JVET_S0179_CONDITIONAL_SIGNAL_GCI
     codeConstraintInfo(ptl->getConstraintInfo());
 #endif
+#if !JVET_S_SUB_PROFILE
     WRITE_CODE(ptl->getNumSubProfile(), 8, "num_sub_profiles");
     for (int i = 0; i < ptl->getNumSubProfile(); i++)
     {
       WRITE_CODE(ptl->getSubProfileIdc(i) , 32, "general_sub_profile_idc[i]");
     }
+#endif
   }
 
 #if JVET_S0203
@@ -2826,6 +2828,16 @@ void  HLSWriter::codeProfileTierLevel    ( const ProfileTierLevel* ptl, bool pro
     }
   }
 
+#if JVET_S_SUB_PROFILE
+  if (profileTierPresentFlag)
+  {
+    WRITE_CODE(ptl->getNumSubProfile(), 8, "ptl_num_sub_profiles");
+    for (int i = 0; i < ptl->getNumSubProfile(); i++)
+    {
+      WRITE_CODE(ptl->getSubProfileIdc(i), 32, "general_sub_profile_idc[i]");
+    }
+  }
+#endif
 }