diff --git a/source/App/EncoderApp/EncApp.cpp b/source/App/EncoderApp/EncApp.cpp
index bd3d639ffc0399cd5d3e6123764ee44efa3dbe0f..c0f2a3c5e6c44a7d65d02876755ef06cd699272b 100644
--- a/source/App/EncoderApp/EncApp.cpp
+++ b/source/App/EncoderApp/EncApp.cpp
@@ -112,6 +112,52 @@ void EncApp::xInitLibCfg()
   m_cEncLib.setConformanceWindow                                 ( m_confWinLeft, m_confWinRight, m_confWinTop, m_confWinBottom );
   m_cEncLib.setFramesToBeEncoded                                 ( m_framesToBeEncoded );
 
+  //====== SPS constraint flags =======
+  m_cEncLib.setIntraOnlyConstraintFlag                           ( m_intraConstraintFlag );
+  m_cEncLib.setMaxBitDepthConstraintIdc                          ( m_bitDepthConstraint - 8 );
+  m_cEncLib.setMaxChromaFormatConstraintIdc                      ( m_chromaFormatConstraint );
+  m_cEncLib.setFrameConstraintFlag                               ( m_bFrameConstraintFlag );
+  m_cEncLib.setNoQtbttDualTreeIntraConstraintFlag                ( !m_dualTree );
+  m_cEncLib.setNoSaoConstraintFlag                               ( !m_bUseSAO );
+  m_cEncLib.setNoAlfConstraintFlag                               ( !m_alf );
+  m_cEncLib.setNoPcmConstraintFlag                               ( !m_usePCM );
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+  m_cEncLib.setNoRefWraparoundConstraintFlag                     ( m_bNoRefWraparoundConstraintFlag );
+#endif
+  m_cEncLib.setNoTemporalMvpConstraintFlag                       ( m_TMVPModeId ? false : true );
+  m_cEncLib.setNoSbtmvpConstraintFlag                            ( m_SubPuMvpMode ? false : true );
+  m_cEncLib.setNoAmvrConstraintFlag                              ( m_bNoAmvrConstraintFlag );
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+  m_cEncLib.setNoBdofConstraintFlag                              ( !m_BIO );
+#endif
+  m_cEncLib.setNoCclmConstraintFlag                              ( m_LMChroma ? false : true );
+#if JVET_M0464_UNI_MTS
+#if JVET_M0303_IMPLICIT_MTS
+  m_cEncLib.setNoMtsConstraintFlag                               ( (m_MTS || m_MTSImplicit) ? false : true );
+#else
+  m_cEncLib.setNoMtsConstraintFlag                               ( m_MTS ? false : true );
+#endif
+#else
+#if JVET_M0303_IMPLICIT_MTS
+  m_cEncLib.setNoMtsConstraintFlag                               ( (m_EMT || m_MTSImplicit) ? false : true );
+#else
+  m_cEncLib.setNoMtsConstraintFlag                               ( m_EMT ? false : true );
+#endif
+#endif
+  m_cEncLib.setNoAffineMotionConstraintFlag                      ( !m_Affine );
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+  m_cEncLib.setNoGbiConstraintFlag                               ( !m_GBi );
+  m_cEncLib.setNoMhIntraConstraintFlag                           ( !m_MHIntra );
+  m_cEncLib.setNoTriangleConstraintFlag                          ( !m_Triangle );
+#endif
+  m_cEncLib.setNoLadfConstraintFlag                              ( !m_LadfEnabed );
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+  m_cEncLib.setNoCurrPicRefConstraintFlag                        ( !m_IBCMode );
+  m_cEncLib.setNoQpDeltaConstraintFlag                           ( m_bNoQpDeltaConstraintFlag );
+#endif
+  m_cEncLib.setNoDepQuantConstraintFlag                          ( !m_depQuantEnabledFlag);
+  m_cEncLib.setNoSignDataHidingConstraintFlag                    ( !m_signDataHidingEnabledFlag );
+
   //====== Coding Structure ========
   m_cEncLib.setIntraPeriod                                       ( m_iIntraPeriod );
   m_cEncLib.setDecodingRefreshType                               ( m_iDecodingRefreshType );
diff --git a/source/App/EncoderApp/EncAppCfg.cpp b/source/App/EncoderApp/EncAppCfg.cpp
index b4dd2036f766a4f19e92a7bf2f808be73a1f6b40..4121873d62264d34fd064cb4d6fd092344e489bf 100644
--- a/source/App/EncoderApp/EncAppCfg.cpp
+++ b/source/App/EncoderApp/EncAppCfg.cpp
@@ -108,6 +108,38 @@ EncAppCfg::EncAppCfg()
 , m_snrInternalColourSpace(false)
 , m_outputInternalColourSpace(false)
 , m_packedYUVMode(false)
+, m_bIntraOnlyConstraintFlag(false)
+, m_maxBitDepthConstraintIdc(0)
+, m_maxChromaFormatConstraintIdc(CHROMA_420)
+, m_bFrameConstraintFlag(false)
+, m_bNoQtbttDualTreeIntraConstraintFlag(false)
+, m_bNoSaoConstraintFlag(false)
+, m_bNoAlfConstraintFlag(false)
+, m_bNoPcmConstraintFlag(false)
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+, m_bNoRefWraparoundConstraintFlag(false)
+#endif
+, m_bNoTemporalMvpConstraintFlag(false)
+, m_bNoSbtmvpConstraintFlag(false)
+, m_bNoAmvrConstraintFlag(false)
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+, m_bNoBdofConstraintFlag(false)
+#endif
+, m_bNoCclmConstraintFlag(false)
+, m_bNoMtsConstraintFlag(false)
+, m_bNoAffineMotionConstraintFlag(false)
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+, m_bNoGbiConstraintFlag(false)
+, m_bNoMhIntraConstraintFlag(false)
+, m_bNoTriangleConstraintFlag(false)
+#endif
+, m_bNoLadfConstraintFlag(false)
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+, m_bNoCurrPicRefConstraintFlag(false)
+, m_bNoQpDeltaConstraintFlag(false)
+#endif
+, m_bNoDepQuantConstraintFlag(false)
+, m_bNoSignDataHidingConstraintFlag(false)
 #if EXTENSION_360_VIDEO
 , m_ext360(*this)
 #endif
diff --git a/source/App/EncoderApp/EncAppCfg.h b/source/App/EncoderApp/EncAppCfg.h
index 38c52dcf4237bcc08e74ddc23e2b9e72621e38ae..da31485c4ac349713bf6cdd7666124a7ab9842ee 100644
--- a/source/App/EncoderApp/EncAppCfg.h
+++ b/source/App/EncoderApp/EncAppCfg.h
@@ -117,6 +117,39 @@ protected:
   bool      m_bClipOutputVideoToRec709Range;
   bool      m_packedYUVMode;                                  ///< If true, output 10-bit and 12-bit YUV data as 5-byte and 3-byte (respectively) packed YUV data
 
+  bool      m_bIntraOnlyConstraintFlag;
+  uint32_t  m_maxBitDepthConstraintIdc;
+  uint32_t  m_maxChromaFormatConstraintIdc;
+  bool      m_bFrameConstraintFlag;
+  bool      m_bNoQtbttDualTreeIntraConstraintFlag;
+  bool      m_bNoSaoConstraintFlag;
+  bool      m_bNoAlfConstraintFlag;
+  bool      m_bNoPcmConstraintFlag;
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+  bool      m_bNoRefWraparoundConstraintFlag;
+#endif
+  bool      m_bNoTemporalMvpConstraintFlag;
+  bool      m_bNoSbtmvpConstraintFlag;
+  bool      m_bNoAmvrConstraintFlag;
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+  bool      m_bNoBdofConstraintFlag;
+#endif
+  bool      m_bNoCclmConstraintFlag;
+  bool      m_bNoMtsConstraintFlag;
+  bool      m_bNoAffineMotionConstraintFlag;
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+  bool      m_bNoGbiConstraintFlag;
+  bool      m_bNoMhIntraConstraintFlag;
+  bool      m_bNoTriangleConstraintFlag;
+#endif
+  bool      m_bNoLadfConstraintFlag;
+#if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
+  bool      m_bNoCurrPicRefConstraintFlag;
+  bool      m_bNoQpDeltaConstraintFlag;
+#endif
+  bool      m_bNoDepQuantConstraintFlag;
+  bool      m_bNoSignDataHidingConstraintFlag;
+
   // profile/level
   Profile::Name m_profile;
   Level::Tier   m_levelTier;
diff --git a/source/Lib/EncoderLib/EncLib.cpp b/source/Lib/EncoderLib/EncLib.cpp
index 29361fbba5a1b74f74d45d3140136ed64df0e1d1..e62fedc1c3a0b48504df6fe83c39b7be27aa749c 100644
--- a/source/Lib/EncoderLib/EncLib.cpp
+++ b/source/Lib/EncoderLib/EncLib.cpp
@@ -822,50 +822,39 @@ void EncLib::xInitVPS(VPS &vps, const SPS &sps)
 
 void EncLib::xInitSPS(SPS &sps)
 {
-  sps.setIntraOnlyConstraintFlag(m_intraConstraintFlag);
-  sps.setMaxBitDepthConstraintIdc(m_bitDepthConstraintValue - 8);
-  sps.setMaxChromaFormatConstraintIdc(m_chromaFormatConstraintValue);
+  sps.setIntraOnlyConstraintFlag(m_bIntraOnlyConstraintFlag);
+  sps.setMaxBitDepthConstraintIdc(m_maxBitDepthConstraintIdc);
+  sps.setMaxChromaFormatConstraintIdc(m_maxChromaFormatConstraintIdc);
   sps.setFrameConstraintFlag(m_frameOnlyConstraintFlag);
-  sps.setNoQtbttDualTreeIntraConstraintFlag(!m_dualITree);
-  sps.setNoSaoConstraintFlag(!m_bUseSAO);
-  sps.setNoAlfConstraintFlag(!m_alf);
-  sps.setNoPcmConstraintFlag(!m_usePCM);
+  sps.setNoQtbttDualTreeIntraConstraintFlag(m_bNoQtbttDualTreeIntraConstraintFlag);
+  sps.setNoSaoConstraintFlag(m_bNoSaoConstraintFlag);
+  sps.setNoAlfConstraintFlag(m_bNoAlfConstraintFlag);
+  sps.setNoPcmConstraintFlag(m_bNoPcmConstraintFlag);
 #if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
-  sps.setNoRefWraparoundConstraintFlag(!m_bNoRefWraparoundConstraintFlag);
+  sps.setNoRefWraparoundConstraintFlag(m_bNoRefWraparoundConstraintFlag);
 #endif
-  sps.setNoTemporalMvpConstraintFlag(m_TMVPModeId ? false : true);
-  sps.setNoSbtmvpConstraintFlag(m_SubPuMvpMode ? false : true);
-  sps.setNoAmvrConstraintFlag(!m_bNoAmvrConstraintFlag);
+  sps.setNoTemporalMvpConstraintFlag(m_bNoTemporalMvpConstraintFlag);
+  sps.setNoSbtmvpConstraintFlag(m_bNoSbtmvpConstraintFlag);
+  sps.setNoAmvrConstraintFlag(m_bNoAmvrConstraintFlag);
 #if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
-  sps.setNoBdofConstraintFlag(!m_BIO);
+  sps.setNoBdofConstraintFlag(m_bNoBdofConstraintFlag);
 #endif
-  sps.setNoCclmConstraintFlag(m_LMChroma ? false : true);
-#if JVET_M0464_UNI_MTS
-#if JVET_M0303_IMPLICIT_MTS
-  sps.setNoMtsConstraintFlag((m_IntraMTS || m_InterMTS || m_ImplicitMTS) ? false : true);
-#else
-  sps.setNoMtsConstraintFlag((m_IntraMTS || m_InterMTS) ? false : true);
-#endif
-#else
-#if JVET_M0303_IMPLICIT_MTS
-  sps.setNoMtsConstraintFlag((m_IntraEMT || m_InterEMT || m_ImplicitMTS) ? false : true);
-#else
-  sps.setNoMtsConstraintFlag((m_IntraEMT || m_InterEMT) ? false : true);
-#endif
-#endif
-  sps.setNoAffineMotionConstraintFlag(!m_Affine);
+  sps.setNoCclmConstraintFlag(m_bNoCclmConstraintFlag);
+  sps.setNoMtsConstraintFlag(m_bNoMtsConstraintFlag);
+  sps.setNoAffineMotionConstraintFlag(m_bNoAffineMotionConstraintFlag);
 #if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
-  sps.setNoGbiConstraintFlag(!m_GBi);
-  sps.setNoMhIntraConstraintFlag(!m_MHIntra);
-  sps.setNoTriangleConstraintFlag(!m_Triangle);
+  sps.setNoGbiConstraintFlag(m_bNoGbiConstraintFlag);
+  sps.setNoMhIntraConstraintFlag(m_bNoMhIntraConstraintFlag);
+  sps.setNoTriangleConstraintFlag(m_bNoTriangleConstraintFlag);
 #endif
-  sps.setNoLadfConstraintFlag(!m_LadfEnabled);
+  sps.setNoLadfConstraintFlag(m_bNoLadfConstraintFlag);
 #if JVET_M0451_INTEROPERABILITY_POINT_SYNTAX
-  sps.setNoCurrPicRefConstraintFlag(!m_IBCMode);
-  sps.setNoQpDeltaConstraintFlag(!m_bNoQpDeltaConstraintFlag);
+  sps.setNoCurrPicRefConstraintFlag(m_bNoCurrPicRefConstraintFlag);
+  sps.setNoQpDeltaConstraintFlag(m_bNoQpDeltaConstraintFlag);
 #endif
-  sps.setNoDepQuantConstraintFlag(!m_DepQuantEnabledFlag);
-  sps.setNoSignDataHidingConstraintFlag(!m_SignDataHidingEnabledFlag);
+  sps.setNoDepQuantConstraintFlag(m_bNoDepQuantConstraintFlag);
+  sps.setNoSignDataHidingConstraintFlag(m_bNoSignDataHidingConstraintFlag);
+
   ProfileTierLevel& profileTierLevel = *sps.getPTL()->getGeneralPTL();
   profileTierLevel.setLevelIdc                    (m_level);
   profileTierLevel.setTierFlag                    (m_levelTier);