diff --git a/source/App/EncoderApp/EncApp.cpp b/source/App/EncoderApp/EncApp.cpp
index edb125d6..5a1ebfa8 100644
--- a/source/App/EncoderApp/EncApp.cpp
+++ b/source/App/EncoderApp/EncApp.cpp
@@ -314,7 +314,9 @@ void EncApp::xInitLibCfg()
   m_cEncLib.setNoActConstraintFlag                               ( !m_useColorTrans );
   m_cEncLib.setNoLmcsConstraintFlag                              ( !m_lmcsEnabled );
 #endif
-
+#if JVET_S0092_ON_CONSTRAINT_INFO_SIGNALLING
+  m_cEncLib.setIncludeConstraintInfoFlag                         ( m_includeConstraintInfoFlag );
+#endif
 
   //====== Coding Structure ========
   m_cEncLib.setIntraPeriod                                       ( m_iIntraPeriod );
diff --git a/source/App/EncoderApp/EncAppCfg.cpp b/source/App/EncoderApp/EncAppCfg.cpp
index 6ba70d73..f113a754 100644
--- a/source/App/EncoderApp/EncAppCfg.cpp
+++ b/source/App/EncoderApp/EncAppCfg.cpp
@@ -134,6 +134,9 @@ EncAppCfg::EncAppCfg()
 , m_noCraConstraintFlag(false)
 , m_noGdrConstraintFlag(false)
 , m_noApsConstraintFlag(false)
+#if JVET_S0092_ON_CONSTRAINT_INFO_SIGNALLING
+, m_includeConstraintInfoFlag(true)
+#endif
 
 #if EXTENSION_360_VIDEO
 , m_ext360(*this)
@@ -816,6 +819,9 @@ bool EncAppCfg::parseCfg( int argc, char* argv[] )
   ("Tier",                                            m_levelTier,                                Level::MAIN, "Tier to use for interpretation of --Level (main or high only)")
   ("SubProfile",                                      cfg_SubProfile,                          cfg_SubProfile,  "Sub-profile idc")
   ("EnableDecodingCapabilityInformation",             m_DCIEnabled,                                     false, "Enables writing of Decoding Capability Information")
+#if JVET_S0092_ON_CONSTRAINT_INFO_SIGNALLING
+  ("IncludeConstraintInfo",                           m_includeConstraintInfoFlag,                       true, "Include the constraint info in the general constraint info syntax structure")
+#endif
   ("MaxBitDepthConstraint",                           m_bitDepthConstraint,                                0u, "Bit depth to use for profile-constraint for RExt profiles. 0=automatically choose based upon other parameters")
   ("MaxChromaFormatConstraint",                       tmpConstraintChromaFormat,                            0, "Chroma-format to use for the profile-constraint for RExt profiles. 0=automatically choose based upon other parameters")
   ("IntraConstraintFlag",                             m_intraConstraintFlag,                            false, "Value of general_intra_constraint_flag to use for RExt profiles (not used if an explicit RExt sub-profile is specified)")
diff --git a/source/App/EncoderApp/EncAppCfg.h b/source/App/EncoderApp/EncAppCfg.h
index fd03f6a8..968e3b00 100644
--- a/source/App/EncoderApp/EncAppCfg.h
+++ b/source/App/EncoderApp/EncAppCfg.h
@@ -186,6 +186,9 @@ protected:
   bool      m_noCraConstraintFlag;
   bool      m_noGdrConstraintFlag;
   bool      m_noApsConstraintFlag;
+#if JVET_S0092_ON_CONSTRAINT_INFO_SIGNALLING
+  bool      m_includeConstraintInfoFlag;
+#endif
 
   // profile/level
   Profile::Name m_profile;
diff --git a/source/Lib/CommonLib/Slice.h b/source/Lib/CommonLib/Slice.h
index c7f471ae..0e75faed 100644
--- a/source/Lib/CommonLib/Slice.h
+++ b/source/Lib/CommonLib/Slice.h
@@ -307,6 +307,9 @@ class ConstraintInfo
   bool              m_noCraConstraintFlag;
   bool              m_noGdrConstraintFlag;
   bool              m_noApsConstraintFlag;
+#if JVET_S0092_ON_CONSTRAINT_INFO_SIGNALLING
+  bool              m_includeConstraintInfoFlag;
+#endif
 
 public:
   ConstraintInfo()
@@ -382,6 +385,9 @@ public:
     , m_noCraConstraintFlag (false)
     , m_noGdrConstraintFlag (false)
     , m_noApsConstraintFlag (false)
+#if JVET_S0092_ON_CONSTRAINT_INFO_SIGNALLING
+    , m_includeConstraintInfoFlag(true)
+#endif
   {}
 
 #if !JVET_R0090_VUI
@@ -529,6 +535,10 @@ public:
   void          setNoGdrConstraintFlag(bool bVal) { m_noGdrConstraintFlag = bVal; }
   bool          getNoApsConstraintFlag() const { return m_noApsConstraintFlag; }
   void          setNoApsConstraintFlag(bool bVal) { m_noApsConstraintFlag = bVal; }
+#if JVET_S0092_ON_CONSTRAINT_INFO_SIGNALLING
+  bool          getIncludeConstraintInfoFlag() const { return m_includeConstraintInfoFlag; }
+  void          setIncludeConstraintInfoFlag(bool bVal) { m_includeConstraintInfoFlag = bVal; }
+#endif
 
   friend bool             operator == (const ConstraintInfo& op1, const ConstraintInfo& op2);
   friend bool             operator != (const ConstraintInfo& op1, const ConstraintInfo& op2);
diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h
index 9715ee90..a0644e26 100644
--- a/source/Lib/CommonLib/TypeDef.h
+++ b/source/Lib/CommonLib/TypeDef.h
@@ -116,6 +116,8 @@
 
 #define JVET_R0094_DPB_TID_OFFSET                         1 // JVET-R0094: DPB output temporal ID offsets
 
+#define JVET_S0092_ON_CONSTRAINT_INFO_SIGNALLING          1 // Move length indicator from last to first in constraint info strucutre
+
 #define JVET_R0437_BS_DERIVATION                          1 // JVET-R0437: fix the bS derivation for palette mode
 
 #define JVET_R0110_MIXED_LOSSLESS                         1 // JVET-R0110: Slice level mixed lossy/lossless coding: encoder only method
diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp
index 4c565914..2d7cc702 100644
--- a/source/Lib/DecoderLib/VLCReader.cpp
+++ b/source/Lib/DecoderLib/VLCReader.cpp
@@ -4873,6 +4873,13 @@ void HLSyntaxReader::getSlicePoc(Slice* pcSlice, PicHeader* picHeader, Parameter
 void HLSyntaxReader::parseConstraintInfo(ConstraintInfo *cinfo)
 {
   uint32_t symbol;
+#if JVET_S0092_ON_CONSTRAINT_INFO_SIGNALLING
+  READ_CODE(8, symbol, "gci_num_constraint_bytes");
+  uint8_t gciNumConstraintBytes = symbol;
+  if( gciNumConstraintBytes > 8 )
+  {
+#endif
+
 #if !JVET_R0090_VUI
   READ_FLAG(symbol,  "general_progressive_source_flag"          ); cinfo->setProgressiveSourceFlag(symbol ? true : false);
   READ_FLAG(symbol,  "general_interlaced_source_flag"           ); cinfo->setInterlacedSourceFlag(symbol ? true : false);
@@ -5049,6 +5056,95 @@ void HLSyntaxReader::parseConstraintInfo(ConstraintInfo *cinfo)
   READ_FLAG(symbol, "no_cra_constraint_flag");                     cinfo->setNoCraConstraintFlag(symbol > 0 ? true : false);
   READ_FLAG(symbol, "no_gdr_constraint_flag");                     cinfo->setNoGdrConstraintFlag(symbol > 0 ? true : false);
   READ_FLAG(symbol, "no_aps_constraint_flag");                     cinfo->setNoApsConstraintFlag(symbol > 0 ? true : false);
+
+#if JVET_S0092_ON_CONSTRAINT_INFO_SIGNALLING
+  while (!isByteAligned())
+  {
+    READ_FLAG(symbol, "gci_alignment_zero_bit"); CHECK(symbol != 0, "gci_alignment_zero_bit not equal to zero");
+  }
+  }
+  else
+  {
+#if !JVET_R0090_VUI
+  cinfo->setProgressiveSourceFlag(false);
+  cinfo->setInterlacedSourceFlag(false);
+#endif
+  cinfo->setNonPackedConstraintFlag(false);
+  cinfo->setFrameOnlyConstraintFlag(false);
+  cinfo->setNonProjectedConstraintFlag(false);
+  cinfo->setIntraOnlyConstraintFlag(false);
+  cinfo->setMaxBitDepthConstraintIdc(15);
+  cinfo->setMaxChromaFormatConstraintIdc((ChromaFormat)3);
+#if JVET_R0286_GCI_CLEANUP
+  cinfo->setSingleLayerConstraintFlag(false);
+  cinfo->setAllLayersIndependentConstraintFlag(false);
+#endif
+  cinfo->setNoResChangeInClvsConstraintFlag(false);
+  cinfo->setOneTilePerPicConstraintFlag(false);
+  cinfo->setOneSlicePerPicConstraintFlag(false);
+  cinfo->setOneSubpicPerPicConstraintFlag(false);
+  cinfo->setNoQtbttDualTreeIntraConstraintFlag(false);
+  cinfo->setNoPartitionConstraintsOverrideConstraintFlag(false);
+  cinfo->setNoSaoConstraintFlag(false);
+  cinfo->setNoAlfConstraintFlag(false);
+  cinfo->setNoCCAlfConstraintFlag(false);
+  cinfo->setNoJointCbCrConstraintFlag(false);
+#if JVET_R0286_GCI_CLEANUP
+  cinfo->setNoMrlConstraintFlag(false);
+  cinfo->setNoIspConstraintFlag(false);
+  cinfo->setNoMipConstraintFlag(false);
+#endif
+  cinfo->setNoRefWraparoundConstraintFlag(false);
+  cinfo->setNoTemporalMvpConstraintFlag(false);
+  cinfo->setNoSbtmvpConstraintFlag(false);
+  cinfo->setNoAmvrConstraintFlag(false);
+  cinfo->setNoBdofConstraintFlag(false);
+  cinfo->setNoDmvrConstraintFlag(false);
+  cinfo->setNoCclmConstraintFlag(false);
+  cinfo->setNoMtsConstraintFlag(false);
+  cinfo->setNoSbtConstraintFlag(false);
+#if JVET_R0286_GCI_CLEANUP
+  cinfo->setNoLfnstConstraintFlag(false);
+#endif
+  cinfo->setNoAffineMotionConstraintFlag(false);
+#if JVET_R0286_GCI_CLEANUP
+  cinfo->setNoMmvdConstraintFlag(false);
+  cinfo->setNoSmvdConstraintFlag(false);
+  cinfo->setNoProfConstraintFlag(false);
+#endif
+  cinfo->setNoBcwConstraintFlag(false);
+  cinfo->setNoIbcConstraintFlag(false);
+  cinfo->setNoCiipConstraintFlag(false);
+#if !JVET_R0214_MMVD_SYNTAX_MODIFICATION
+  cinfo->setNoFPelMmvdConstraintFlag(false);
+#endif
+  cinfo->setNoGeoConstraintFlag(false);
+  cinfo->setNoLadfConstraintFlag(false);
+  cinfo->setNoTransformSkipConstraintFlag(false);
+  cinfo->setNoBDPCMConstraintFlag(false);
+#if JVET_R0286_GCI_CLEANUP
+  cinfo->setNoPaletteConstraintFlag(false);
+  cinfo->setNoActConstraintFlag(false);
+  cinfo->setNoLmcsConstraintFlag(false);
+#endif
+  cinfo->setNoQpDeltaConstraintFlag(false);
+  cinfo->setNoDepQuantConstraintFlag(false);
+  cinfo->setNoSignDataHidingConstraintFlag(false);
+  cinfo->setNoMixedNaluTypesInPicConstraintFlag(false);
+  cinfo->setNoTrailConstraintFlag(false);
+  cinfo->setNoStsaConstraintFlag(false);
+  cinfo->setNoRaslConstraintFlag(false);
+  cinfo->setNoRadlConstraintFlag(false);
+  cinfo->setNoIdrConstraintFlag(false);
+  cinfo->setNoCraConstraintFlag(false);
+  cinfo->setNoGdrConstraintFlag(false);
+  cinfo->setNoApsConstraintFlag(false);
+  }
+  for (int i = 0; i < gciNumConstraintBytes - 9; i++)
+  {
+    READ_CODE(8, symbol, "gci_reserved_byte[ i ]");
+  }
+#endif
 }
 
 
diff --git a/source/Lib/EncoderLib/EncCfg.h b/source/Lib/EncoderLib/EncCfg.h
index 18335b5b..09715cae 100644
--- a/source/Lib/EncoderLib/EncCfg.h
+++ b/source/Lib/EncoderLib/EncCfg.h
@@ -230,6 +230,9 @@ protected:
   bool      m_noCraConstraintFlag;
   bool      m_noGdrConstraintFlag;
   bool      m_noApsConstraintFlag;
+#if JVET_S0092_ON_CONSTRAINT_INFO_SIGNALLING
+  bool      m_includeConstraintInfoFlag;
+#endif
 
   /* profile & level */
   Profile::Name m_profile;
@@ -887,6 +890,10 @@ public:
   void      setNoGdrConstraintFlag(bool bVal) { m_noGdrConstraintFlag = bVal; }
   bool      getNoApsConstraintFlag() const { return m_noApsConstraintFlag; }
   void      setNoApsConstraintFlag(bool bVal) { m_noApsConstraintFlag = bVal; }
+#if JVET_S0092_ON_CONSTRAINT_INFO_SIGNALLING
+  bool      getIncludeConstraintInfoFlag() const { return m_includeConstraintInfoFlag; }
+  void      setIncludeConstraintInfoFlag(bool bVal) { m_includeConstraintInfoFlag = bVal; }
+#endif
 
 
   void      setFrameRate                    ( int   i )      { m_iFrameRate = i; }
diff --git a/source/Lib/EncoderLib/EncLib.cpp b/source/Lib/EncoderLib/EncLib.cpp
index a1fa2262..ffea6e43 100644
--- a/source/Lib/EncoderLib/EncLib.cpp
+++ b/source/Lib/EncoderLib/EncLib.cpp
@@ -1171,6 +1171,9 @@ void EncLib::xInitSPS( SPS& sps )
   cinfo->setNoCraConstraintFlag(m_noCraConstraintFlag);
   cinfo->setNoGdrConstraintFlag(m_noGdrConstraintFlag);
   cinfo->setNoApsConstraintFlag(m_noApsConstraintFlag);
+#if JVET_S0092_ON_CONSTRAINT_INFO_SIGNALLING
+  cinfo->setIncludeConstraintInfoFlag(m_includeConstraintInfoFlag);
+#endif
 
   profileTierLevel->setLevelIdc                    (m_level);
   profileTierLevel->setTierFlag                    (m_levelTier);
diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp
index 1d312e73..ac04b95f 100644
--- a/source/Lib/EncoderLib/VLCWriter.cpp
+++ b/source/Lib/EncoderLib/VLCWriter.cpp
@@ -2831,6 +2831,12 @@ void HLSWriter::codeSliceHeader         ( Slice* pcSlice )
 
 void  HLSWriter::codeConstraintInfo  ( const ConstraintInfo* cinfo )
 {
+#if JVET_S0092_ON_CONSTRAINT_INFO_SIGNALLING
+  uint8_t gciNumConstraintBytes = cinfo->getIncludeConstraintInfoFlag() ? 9 : 0;
+  WRITE_CODE(gciNumConstraintBytes, 8, "gci_num_constraint_bytes");
+  if (gciNumConstraintBytes > 8)
+  {
+#endif
 #if !JVET_R0090_VUI
   WRITE_FLAG(cinfo->getProgressiveSourceFlag(),   "general_progressive_source_flag"         );
   WRITE_FLAG(cinfo->getInterlacedSourceFlag(),    "general_interlaced_source_flag"          );
@@ -2907,6 +2913,17 @@ void  HLSWriter::codeConstraintInfo  ( const ConstraintInfo* cinfo )
   WRITE_FLAG(cinfo->getNoCraConstraintFlag() ? 1 : 0, "no_cra_constraint_flag");
   WRITE_FLAG(cinfo->getNoGdrConstraintFlag() ? 1 : 0, "no_gdr_constraint_flag");
   WRITE_FLAG(cinfo->getNoApsConstraintFlag() ? 1 : 0, "no_aps_constraint_flag");
+#if JVET_S0092_ON_CONSTRAINT_INFO_SIGNALLING
+  while (!isByteAligned())
+  {
+    WRITE_FLAG(0, "gci_alignment_zero_bit");
+  }
+  }
+  for (int i = 0; i < gciNumConstraintBytes - 9; i++)
+  {
+    WRITE_CODE(0, 8, "gci_reserved_byte[ i ]");
+  }
+#endif
 }
 
 void  HLSWriter::codeProfileTierLevel    ( const ProfileTierLevel* ptl, bool profileTierPresentFlag, int maxNumSubLayersMinus1 )
