diff --git a/source/App/EncoderApp/EncApp.cpp b/source/App/EncoderApp/EncApp.cpp
index e5ebd2ca1e6dad1709a3834c858029c500ecfb7f..135a3c9f1d175f31f9d94e3feddb5840580e2951 100644
--- a/source/App/EncoderApp/EncApp.cpp
+++ b/source/App/EncoderApp/EncApp.cpp
@@ -371,8 +371,13 @@ void EncApp::xInitLibCfg()
 #endif
   m_cEncLib.setRDpenalty                                         ( m_rdPenalty );
   m_cEncLib.setCTUSize                                           ( m_uiCTUSize );
+#if JVET_Q0119_CLEANUPS
+  m_cEncLib.setSubPicInfoPresentFlag                             ( m_subPicInfoPresentFlag );
+  if(m_subPicInfoPresentFlag)
+#else
   m_cEncLib.setSubPicPresentFlag                                 ( m_subPicPresentFlag );
   if(m_subPicPresentFlag)
+#endif
   {
     m_cEncLib.setNumSubPics                                      ( m_numSubPics );
     for (int i = 0; i < m_numSubPics; i++)
@@ -385,11 +390,20 @@ void EncApp::xInitLibCfg()
       m_cEncLib.setLoopFilterAcrossSubpicEnabledFlag             ( m_loopFilterAcrossSubpicEnabledFlag[i], i );
     }
   }
+
+#if JVET_Q0119_CLEANUPS
+  m_cEncLib.setSubPicIdMappingExplicitlySignaledFlag             ( m_subPicIdMappingExplicitlySignaledFlag );
+  if (m_subPicIdMappingExplicitlySignaledFlag)
+  {
+    m_cEncLib.setSubPicIdMappingInSpsFlag                        ( m_subPicIdMappingInSpsFlag );
+    if(m_subPicIdMappingInSpsFlag)
+#else
   m_cEncLib.setSubPicIdPresentFlag                               ( m_subPicIdPresentFlag );
   if (m_subPicIdPresentFlag) 
   {
     m_cEncLib.setSubPicIdSignallingPresentFlag                   ( m_subPicIdSignallingPresentFlag );
     if(m_subPicIdSignallingPresentFlag)
+#endif
     {
       m_cEncLib.setSubPicIdLen                                   ( m_subPicIdLen );
       for (int i = 0; i < m_numSubPics; i++)
diff --git a/source/App/EncoderApp/EncAppCfg.cpp b/source/App/EncoderApp/EncAppCfg.cpp
index 6417fb0896eb46ef01e78befd8d312a24fb3dee6..08a52a2370d6a4177e05e74af591f7fbf03e63eb 100644
--- a/source/App/EncoderApp/EncAppCfg.cpp
+++ b/source/App/EncoderApp/EncAppCfg.cpp
@@ -870,7 +870,11 @@ bool EncAppCfg::parseCfg( int argc, char* argv[] )
   ("NonPackedSource",                                 m_nonPackedConstraintFlag,                        false, "Indicate that source does not contain frame packing")
   ("FrameOnly",                                       m_frameOnlyConstraintFlag,                        false, "Indicate that the bitstream contains only frames")
   ("CTUSize",                                         m_uiCTUSize,                                       128u, "CTUSize (specifies the CTU size if QTBT is on) [default: 128]")
+#if JVET_Q0119_CLEANUPS
+  ("SubPicInfoPresentFlag",                           m_subPicInfoPresentFlag,                          false, "equal to 1 specifies that subpicture parameters are present in in the SPS RBSP syntax")
+#else
   ("SubPicPresentFlag",                               m_subPicPresentFlag,                              false, "equal to 1 specifies that subpicture parameters are present in in the SPS RBSP syntax")
+#endif
   ("NumSubPics",                                      m_numSubPics,                                        0u, "specifies the number of subpictures")
   ("SubPicCtuTopLeftX",                               cfg_subPicCtuTopLeftX,            cfg_subPicCtuTopLeftX, "specifies horizontal position of top left CTU of i-th subpicture in unit of CtbSizeY")
   ("SubPicCtuTopLeftY",                               cfg_subPicCtuTopLeftY,            cfg_subPicCtuTopLeftY, "specifies vertical position of top left CTU of i-th subpicture in unit of CtbSizeY")
@@ -878,8 +882,13 @@ bool EncAppCfg::parseCfg( int argc, char* argv[] )
   ("SubPicHeight",                                    cfg_subPicHeight,                      cfg_subPicHeight, "specifies the height of the i-th subpicture in units of CtbSizeY")
   ("SubPicTreatedAsPicFlag",                          cfg_subPicTreatedAsPicFlag,  cfg_subPicTreatedAsPicFlag, "equal to 1 specifies that the i-th subpicture of each coded picture in the CLVS is treated as a picture in the decoding process excluding in-loop filtering operations")
   ("LoopFilterAcrossSubpicEnabledFlag",               cfg_loopFilterAcrossSubpicEnabledFlag, cfg_loopFilterAcrossSubpicEnabledFlag, "equal to 1 specifies that in-loop filtering operations may be performed across the boundaries of the i-th subpicture in each coded picture in the CLVS")
+#if JVET_Q0119_CLEANUPS
+  ("SubPicIdPresentFlag",                             m_subPicIdMappingExplicitlySignaledFlag,          false, "equal to 1 specifies that subpicture ID mapping is present in the SPS")
+  ("SubPicIdMappingInSpsFlag",                        m_subPicIdMappingInSpsFlag,                       false, "equal to 1 specifies that subpicture ID mapping is signalled in the SPS")
+#else
   ("SubPicIdPresentFlag",                             m_subPicIdPresentFlag,                            false, "equal to 1 specifies that subpicture ID mapping is present in the SPS")
   ("SubPicIdSignallingPresentFlag",                   m_subPicIdSignallingPresentFlag,                  false, "equal to 1 specifies that subpicture ID mapping is signalled in the SPS")
+#endif
   ("SubPicIdLen",                                     m_subPicIdLen,                                       0u, "specifies the number of bits used to represent the syntax element sps_subpic_id[ i ]. ")
   ("SubPicId",                                        cfg_subPicId,                              cfg_subPicId, "specifies that subpicture ID of the i-th subpicture")
   ("EnablePartitionConstraintsOverride",              m_SplitConsOverrideEnabledFlag,                    true, "Enable partition constraints override")
@@ -1586,7 +1595,11 @@ bool EncAppCfg::parseCfg( int argc, char* argv[] )
     //number of fields to encode
     m_framesToBeEncoded *= 2;
   }
+#if JVET_Q0119_CLEANUPS
+  if ( m_subPicInfoPresentFlag )
+#else
   if ( m_subPicPresentFlag )
+#endif
   {
     CHECK( m_numSubPics > 255 || m_numSubPics < 1, "Number of subpicture must be within 1 to 255" );
     m_subPicCtuTopLeftX                 = cfg_subPicCtuTopLeftX.values;
@@ -1601,9 +1614,15 @@ bool EncAppCfg::parseCfg( int argc, char* argv[] )
       CHECK(m_subPicCtuTopLeftX[i] + m_subPicWidth[i] > (m_iSourceWidth + m_uiCTUSize - 1) / m_uiCTUSize, "subpicture must not exceed picture boundary");
       CHECK(m_subPicCtuTopLeftY[i] + m_subPicHeight[i] > (m_iSourceHeight + m_uiCTUSize - 1) / m_uiCTUSize, "subpicture must not exceed picture boundary");
     }
+#if JVET_Q0119_CLEANUPS
+    if (m_subPicIdMappingExplicitlySignaledFlag)
+    {
+      if (m_subPicIdMappingInSpsFlag)
+#else
     if (m_subPicIdPresentFlag) 
     {
       if (m_subPicIdSignallingPresentFlag) 
+#endif
       {
         CHECK( m_subPicIdLen > 16, "sibpic ID length must not exceed 16 bits" );
       }
@@ -3592,8 +3611,13 @@ void EncAppCfg::xPrintParameter()
     msg( DETAILS, "Profile                                : %s\n", profileToString(m_profile) );
   }
   msg( DETAILS, "CU size / depth / total-depth          : %d / %d / %d\n", m_uiMaxCUWidth, m_uiMaxCUDepth, m_uiMaxCodingDepth );
+#if JVET_Q0119_CLEANUPS
+  msg(DETAILS, "subpicture info present flag                       : %d\n", m_subPicInfoPresentFlag);
+  if (m_subPicInfoPresentFlag)
+#else
   msg(DETAILS, "subpicture present flag                            : %d\n", m_subPicPresentFlag);
   if (m_subPicPresentFlag) 
+#endif
   {
     msg(DETAILS, "number of subpictures                            : %d\n", m_numSubPics);
     for (int i = 0; i < m_numSubPics; i++) 
@@ -3605,10 +3629,18 @@ void EncAppCfg::xPrintParameter()
 
     }
   }
+
+#if JVET_Q0119_CLEANUPS
+  msg(DETAILS, "subpicture ID present flag                            : %d\n", m_subPicIdMappingExplicitlySignaledFlag);
+  if (m_subPicIdMappingExplicitlySignaledFlag)
+  {
+    msg(DETAILS, "subpicture ID signalling present flag                            : %d\n", m_subPicIdMappingInSpsFlag);
+#else
   msg(DETAILS, "subpicture ID present flag                            : %d\n", m_subPicIdPresentFlag);
   if (m_subPicIdPresentFlag) 
   {
     msg(DETAILS, "subpicture ID signalling present flag                            : %d\n", m_subPicIdSignallingPresentFlag);
+#endif
     for (int i = 0; i < m_numSubPics; i++) 
     {
       msg(DETAILS, "[%d]th subpictures ID length                           :%d\n", i, m_subPicIdLen);
diff --git a/source/App/EncoderApp/EncAppCfg.h b/source/App/EncoderApp/EncAppCfg.h
index 2bfc490580cc58af3c5e4ff4b097cb8dddd606b9..45420e443cd057bf50a7ee7d97dce7760f7f8eed 100644
--- a/source/App/EncoderApp/EncAppCfg.h
+++ b/source/App/EncoderApp/EncAppCfg.h
@@ -273,7 +273,11 @@ protected:
 
   // coding unit (CU) definition
   unsigned  m_uiCTUSize;
+#if JVET_Q0119_CLEANUPS
+  bool m_subPicInfoPresentFlag;
+#else
   bool m_subPicPresentFlag;
+#endif
   unsigned m_numSubPics;
   std::vector<uint32_t> m_subPicCtuTopLeftX;
   std::vector<uint32_t> m_subPicCtuTopLeftY;
@@ -281,8 +285,13 @@ protected:
   std::vector<uint32_t> m_subPicHeight;
   std::vector<uint32_t> m_subPicTreatedAsPicFlag;
   std::vector<uint32_t> m_loopFilterAcrossSubpicEnabledFlag;
+#if JVET_Q0119_CLEANUPS
+  bool m_subPicIdMappingExplicitlySignaledFlag;
+  bool m_subPicIdMappingInSpsFlag;
+#else
   bool m_subPicIdPresentFlag;
   bool m_subPicIdSignallingPresentFlag;
+#endif
   unsigned m_subPicIdLen;
   std::vector<uint32_t> m_subPicId;
   bool      m_SplitConsOverrideEnabledFlag;
diff --git a/source/Lib/CommonLib/Slice.cpp b/source/Lib/CommonLib/Slice.cpp
index c4ad7c567b36e1247f505f6de8d141b3b1d4aa85..64a44a74c8957dd0c834fdb4a59850a9817ef0bd 100644
--- a/source/Lib/CommonLib/Slice.cpp
+++ b/source/Lib/CommonLib/Slice.cpp
@@ -1634,8 +1634,10 @@ PicHeader::PicHeader()
 , m_recoveryPocCnt                                ( 0 )
 , m_spsId                                         ( -1 )
 , m_ppsId                                         ( -1 )
+#if !JVET_Q0119_CLEANUPS
 , m_subPicIdSignallingPresentFlag                 ( 0 )
 , m_subPicIdLen                                   ( 0 )
+#endif
 , m_loopFilterAcrossVirtualBoundariesDisabledFlag ( 0 )
 , m_numVerVirtualBoundaries                       ( 0 )
 , m_numHorVirtualBoundaries                       ( 0 )
@@ -1694,7 +1696,9 @@ PicHeader::PicHeader()
 , m_scalingListApsId                              ( -1 )
 , m_scalingListAps                                ( nullptr )
 {
+#if !JVET_Q0119_CLEANUPS
   memset(m_subPicId,                                0,    sizeof(m_subPicId));
+#endif
   memset(m_virtualBoundariesPosX,                   0,    sizeof(m_virtualBoundariesPosX));
   memset(m_virtualBoundariesPosY,                   0,    sizeof(m_virtualBoundariesPosY));
   memset(m_saoEnabledFlag,                          0,    sizeof(m_saoEnabledFlag));
@@ -1736,8 +1740,10 @@ void PicHeader::initPicHeader()
   m_recoveryPocCnt                                = 0;
   m_spsId                                         = -1;
   m_ppsId                                         = -1;
+#if !JVET_Q0119_CLEANUPS
   m_subPicIdSignallingPresentFlag                 = 0;
   m_subPicIdLen                                   = 0;
+#endif
   m_loopFilterAcrossVirtualBoundariesDisabledFlag = 0;
   m_numVerVirtualBoundaries                       = 0;
   m_numHorVirtualBoundaries                       = 0;
@@ -1794,7 +1800,9 @@ void PicHeader::initPicHeader()
   m_scalingListPresentFlag                        = 0;
   m_scalingListApsId                              = -1;
   m_scalingListAps                                = nullptr;
+#if !JVET_Q0119_CLEANUPS
   memset(m_subPicId,                                0,    sizeof(m_subPicId));
+#endif
   memset(m_virtualBoundariesPosX,                   0,    sizeof(m_virtualBoundariesPosX));
   memset(m_virtualBoundariesPosY,                   0,    sizeof(m_virtualBoundariesPosY));
   memset(m_saoEnabledFlag,                          0,    sizeof(m_saoEnabledFlag));
@@ -1852,10 +1860,19 @@ SPS::SPS()
 // Structure
 , m_maxWidthInLumaSamples     (352)
 , m_maxHeightInLumaSamples    (288)
+#if JVET_Q0119_CLEANUPS
+, m_subPicInfoPresentFlag         (0)
+#else
 , m_subPicPresentFlag         (0)
+#endif
 , m_numSubPics(1)
+#if JVET_Q0119_CLEANUPS
+, m_subPicIdMappingExplicitlySignalledFlag ( false )
+, m_subPicIdMappingInSpsFlag ( false )
+#else
 , m_subPicIdPresentFlag(0)
 , m_subPicIdSignallingPresentFlag(0)
+#endif
 , m_subPicIdLen(16)
 , m_log2MinCodingBlockSize    (  0)
 , m_log2DiffMaxMinCodingBlockSize(0)
@@ -2115,7 +2132,11 @@ PPS::PPS()
 , m_numRefIdxL1DefaultActive         (1)
 , m_rpl1IdxPresentFlag               (false)
 , m_numSubPics                       (1)
+#if JVET_Q0119_CLEANUPS
+, m_subPicIdMappingInPpsFlag         (0)
+#else
 , m_subPicIdSignallingPresentFlag    (0)
+#endif
 , m_subPicIdLen                      (16)
 , m_noPicPartitionFlag               (1)
 , m_log2CtuSize                      (0)
diff --git a/source/Lib/CommonLib/Slice.h b/source/Lib/CommonLib/Slice.h
index 6418e04aa787c17babdc9b1cec58e6c7c3dd4953..a7a43f20589a31a15142f21345a2efa1cceb5df6 100644
--- a/source/Lib/CommonLib/Slice.h
+++ b/source/Lib/CommonLib/Slice.h
@@ -1091,7 +1091,11 @@ private:
   // Structure
   uint32_t              m_maxWidthInLumaSamples;
   uint32_t              m_maxHeightInLumaSamples;
+#if JVET_Q0119_CLEANUPS
+  bool                  m_subPicInfoPresentFlag;                // indicates the presence of sub-picture info
+#else
   bool                  m_subPicPresentFlag;                    // indicates the presence of sub-pictures
+#endif
   uint8_t               m_numSubPics;                        //!< number of sub-pictures used
   uint32_t              m_subPicCtuTopLeftX[MAX_NUM_SUB_PICS];                
   uint32_t              m_subPicCtuTopLeftY[MAX_NUM_SUB_PICS];                
@@ -1099,8 +1103,13 @@ private:
   uint32_t              m_SubPicHeight[MAX_NUM_SUB_PICS];                     
   bool                  m_subPicTreatedAsPicFlag[MAX_NUM_SUB_PICS];           
   bool                  m_loopFilterAcrossSubpicEnabledFlag[MAX_NUM_SUB_PICS];
+#if JVET_Q0119_CLEANUPS
+  bool                  m_subPicIdMappingExplicitlySignalledFlag;
+  bool                  m_subPicIdMappingInSpsFlag;
+#else
   bool                  m_subPicIdPresentFlag;               //!< indicates the presence of sub-picture IDs
   bool                  m_subPicIdSignallingPresentFlag;     //!< indicates the presence of sub-picture ID signalling in the SPS
+#endif
   uint32_t              m_subPicIdLen;                       //!< sub-picture ID length in bits
   uint8_t               m_subPicId[MAX_NUM_SUB_PICS];        //!< sub-picture ID for each sub-picture in the sequence
 
@@ -1263,8 +1272,13 @@ public:
   void                    setMaxPicHeightInLumaSamples( uint32_t u )                                      { m_maxHeightInLumaSamples = u; }
   uint32_t                getMaxPicHeightInLumaSamples() const                                            { return  m_maxHeightInLumaSamples; }
 
+#if JVET_Q0119_CLEANUPS
+  void                    setSubPicInfoPresentFlag(bool b)                                                { m_subPicInfoPresentFlag = b;            }
+  bool                    getSubPicInfoPresentFlag() const                                                { return m_subPicInfoPresentFlag;         }
+#else
   void                    setSubPicPresentFlag(bool b)                                                    { m_subPicPresentFlag = b;                }
   bool                    getSubPicPresentFlag() const                                                    { return m_subPicPresentFlag;             }
+#endif
 
   void                    setNumSubPics( uint8_t u )                                                      { m_numSubPics = u;                        }
   uint8_t                 getNumSubPics( ) const                                                          { return  m_numSubPics;                    }
@@ -1280,10 +1294,17 @@ public:
   bool                    getSubPicTreatedAsPicFlag( int i ) const                                        { CHECK( i >= MAX_NUM_SUB_PICS, "Sub-picture index exceeds valid range" ); return  m_subPicTreatedAsPicFlag[i];            }
   void                    setLoopFilterAcrossSubpicEnabledFlag( int i, bool u )                           { CHECK( i >= MAX_NUM_SUB_PICS, "Sub-picture index exceeds valid range" ); m_loopFilterAcrossSubpicEnabledFlag[i] = u;     }
   bool                    getLoopFilterAcrossSubpicEnabledFlag( int i ) const                             { CHECK( i >= MAX_NUM_SUB_PICS, "Sub-picture index exceeds valid range" ); return  m_loopFilterAcrossSubpicEnabledFlag[i]; }
+#if JVET_Q0119_CLEANUPS
+  void                    setSubPicIdMappingExplicitlySignalledFlag( bool b )                             { m_subPicIdMappingExplicitlySignalledFlag = b;    }
+  bool                    getSubPicIdMappingExplicitlySignalledFlag() const                               { return m_subPicIdMappingExplicitlySignalledFlag; }
+  void                    setSubPicIdMappingInSpsFlag( bool b )                                           { m_subPicIdMappingInSpsFlag = b;                  }
+  bool                    getSubPicIdMappingInSpsFlag() const                                             { return  m_subPicIdMappingInSpsFlag;              }
+#else
   void                    setSubPicIdPresentFlag( bool b )                                                { m_subPicIdPresentFlag = b;               }
   bool                    getSubPicIdPresentFlag() const                                                  { return  m_subPicIdPresentFlag;           }
   void                    setSubPicIdSignallingPresentFlag( bool b )                                      { m_subPicIdSignallingPresentFlag = b;     }
   bool                    getSubPicIdSignallingPresentFlag() const                                        { return  m_subPicIdSignallingPresentFlag; }
+#endif
   void                    setSubPicIdLen( uint32_t u )                                                    { m_subPicIdLen = u;                       }
   uint32_t                getSubPicIdLen() const                                                          { return  m_subPicIdLen;                   }
   void                    setSubPicId( int i, uint8_t u )                                                 { CHECK( i >= MAX_NUM_SUB_PICS, "Sub-picture index exceeds valid range" ); m_subPicId[i] = u;     }
@@ -1630,7 +1651,11 @@ private:
   bool             m_useWeightedBiPred;                 //!< Use of Weighting Bi-Prediction (B_SLICE)
   bool             m_OutputFlagPresentFlag;             //!< Indicates the presence of output_flag in slice header
   uint8_t          m_numSubPics;                        //!< number of sub-pictures used - must match SPS
+#if JVET_Q0119_CLEANUPS
+  bool             m_subPicIdMappingInPpsFlag;
+#else
   bool             m_subPicIdSignallingPresentFlag;     //!< indicates the presence of sub-picture ID signalling in the PPS
+#endif
   uint32_t         m_subPicIdLen;                       //!< sub-picture ID length in bits
   uint8_t          m_subPicId[MAX_NUM_SUB_PICS];        //!< sub-picture ID for each sub-picture in the sequence
   bool             m_noPicPartitionFlag;                //!< no picture partitioning flag - single slice, single tile
@@ -1789,8 +1814,13 @@ public:
   bool                   getOutputFlagPresentFlag() const                                 { return m_OutputFlagPresentFlag;               }
   void                   setNumSubPics( uint8_t u )                                       { m_numSubPics = u;                             }
   uint8_t                getNumSubPics( ) const                                           { return  m_numSubPics;                         }
+#if JVET_Q0119_CLEANUPS
+  void                   setSubPicIdMappingInPpsFlag( bool b )                            { m_subPicIdMappingInPpsFlag = b;               }
+  bool                   getSubPicIdMappingInPpsFlag() const                              { return m_subPicIdMappingInPpsFlag;            }
+#else
   void                   setSubPicIdSignallingPresentFlag( bool b )                       { m_subPicIdSignallingPresentFlag = b;          }
   bool                   getSubPicIdSignallingPresentFlag() const                         { return  m_subPicIdSignallingPresentFlag;      }
+#endif
   void                   setSubPicIdLen( uint32_t u )                                     { m_subPicIdLen = u;                            }
   uint32_t               getSubPicIdLen() const                                           { return  m_subPicIdLen;                        }
   void                   setSubPicId( int i, uint8_t u )                                  { CHECK( i >= MAX_NUM_SUB_PICS, "Sub-picture index exceeds valid range" ); m_subPicId[i] = u;     }
@@ -2021,9 +2051,11 @@ private:
   uint32_t                    m_recoveryPocCnt;                                         //!< recovery POC count
   int                         m_spsId;                                                  //!< sequence parameter set ID
   int                         m_ppsId;                                                  //!< picture parameter set ID
+#if !JVET_Q0119_CLEANUPS
   bool                        m_subPicIdSignallingPresentFlag;                          //!< indicates the presence of sub-picture ID signalling in the SPS
   uint32_t                    m_subPicIdLen;                                            //!< sub-picture ID length in bits
   uint8_t                     m_subPicId[MAX_NUM_SUB_PICS];                             //!< sub-picture ID for each sub-picture in the sequence
+#endif
   bool                        m_loopFilterAcrossVirtualBoundariesDisabledFlag;          //!< loop filtering across virtual boundaries disabled
   unsigned                    m_numVerVirtualBoundaries;                                //!< number of vertical virtual boundaries
   unsigned                    m_numHorVirtualBoundaries;                                //!< number of horizontal virtual boundaries
@@ -2126,12 +2158,14 @@ public:
   uint32_t                    getSPSId() const                                          { return m_spsId;                                                                              }
   void                        setPPSId( uint32_t u )                                    { m_ppsId = u;                                                                                 }
   uint32_t                    getPPSId() const                                          { return m_ppsId;                                                                              }
+#if !JVET_Q0119_CLEANUPS
   void                        setSubPicIdSignallingPresentFlag( bool b )                { m_subPicIdSignallingPresentFlag = b;                                                         }
   bool                        getSubPicIdSignallingPresentFlag() const                  { return  m_subPicIdSignallingPresentFlag;                                                     }
   void                        setSubPicIdLen( uint32_t u )                              { m_subPicIdLen = u;                                                                           }
   uint32_t                    getSubPicIdLen() const                                    { return  m_subPicIdLen;                                                                       }
   void                        setSubPicId( int i, uint8_t u )                           { CHECK( i >= MAX_NUM_SUB_PICS, "Sub-pic index exceeds valid range" ); m_subPicId[i] = u;      }
   uint8_t                     getSubPicId( int i ) const                                { CHECK( i >= MAX_NUM_SUB_PICS, "Sub-pic index exceeds valid range" ); return  m_subPicId[i];  }
+#endif
   void                        setLoopFilterAcrossVirtualBoundariesDisabledFlag(bool b)  { m_loopFilterAcrossVirtualBoundariesDisabledFlag = b;                                         }
   bool                        getLoopFilterAcrossVirtualBoundariesDisabledFlag() const  { return m_loopFilterAcrossVirtualBoundariesDisabledFlag;                                      }
   void                        setNumVerVirtualBoundaries(unsigned u)                    { m_numVerVirtualBoundaries = u;                                                               }
diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h
index 52745d048ae5e34fc2e07f2c85953b09b44eeedd..d7729d719cde6ef9aad14968359f092b0db44dff 100644
--- a/source/Lib/CommonLib/TypeDef.h
+++ b/source/Lib/CommonLib/TypeDef.h
@@ -83,6 +83,8 @@
 
 #define JVET_Q0447_WP_PARAM_ESTIM                         1 // JVET-Q0447: Add search iterations for method 2,3 and 4
 
+#define JVET_Q0119_CLEANUPS                               1 // JVET-Q0119: AHG12: Cleanups on signalling of subpictures, tiles, and rectangular slices
+
 #define JVET_Q0820_ACT                                    1 // JVET-Q0820: ACT bug fixes and reversible ACT transform 
 
 #define JVET_Q0353_ACT_SW_FIX                             1 // JVET-Q0353: Bug fix of ACT 
diff --git a/source/Lib/DecoderLib/DecLib.cpp b/source/Lib/DecoderLib/DecLib.cpp
index beb58cf5cf93c4c07a5b9a5de95a802a6c6b7fcc..f55adff33e08115916be61498cabf8727a90156c 100644
--- a/source/Lib/DecoderLib/DecLib.cpp
+++ b/source/Lib/DecoderLib/DecLib.cpp
@@ -1258,7 +1258,11 @@ void DecLib::xActivateParameterSets( const int layerId )
   }
   if( sps->getRprEnabledFlag() )
   {
+#if JVET_Q0119_CLEANUPS
+    CHECK( sps->getSubPicInfoPresentFlag() != 0, "When res_change_in_clvs_allowed_flag is equal to 1, the value of subpic_info_present_flag shall be equal to 0." );
+#else
     CHECK( sps->getSubPicPresentFlag() != 0, "When res_change_in_clvs_allowed_flag is equal to 1, the value of subpic_info_present_flag shall be equal to 0." );
+#endif
   }
   CHECK( !sps->getRprEnabledFlag() && pps->getScalingWindow().getWindowEnabledFlag(), "When res_change_in_clvs_allowed_flag is equal to 0, the value of scaling_window_flag shall be equal to 0." );
 #else
diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp
index 9d22d2d1e4d85a9a2502391b0a72102e05a9c5d9..78a3e6a5dd7aae73092d65c4d8953dc99a17bae9 100644
--- a/source/Lib/DecoderLib/VLCReader.cpp
+++ b/source/Lib/DecoderLib/VLCReader.cpp
@@ -446,8 +446,13 @@ void HLSyntaxReader::parsePPS( PPS* pcPPS, ParameterSetManager *parameterSetMana
 
   READ_FLAG( uiCode, "output_flag_present_flag" );                    pcPPS->setOutputFlagPresentFlag( uiCode==1 );
 
+#if JVET_Q0119_CLEANUPS
+  READ_FLAG( uiCode, "subpic_id_mapping_in_pps_flag" );           pcPPS->setSubPicIdMappingInPpsFlag( uiCode != 0 );
+  if( pcPPS->getSubPicIdMappingInPpsFlag() )
+#else
   READ_FLAG(uiCode, "pps_subpic_id_signalling_present_flag");              pcPPS->setSubPicIdSignallingPresentFlag( uiCode != 0 );
   if( pcPPS->getSubPicIdSignallingPresentFlag() )
+#endif
   {
     READ_UVLC( uiCode, "pps_num_subpics_minus1" );                         pcPPS->setNumSubPics( uiCode + 1 );
     CHECK( uiCode > MAX_NUM_SUB_PICS-1,  "Number of sub-pictures exceeds limit");
@@ -1255,15 +1260,30 @@ void HLSyntaxReader::parseSPS(SPS* pcSPS)
   pcSPS->setLog2DiffMaxMinCodingBlockSize(uiCode+3);
   pcSPS->setMaxCUWidth(pcSPS->getCTUSize());
   pcSPS->setMaxCUHeight(pcSPS->getCTUSize());
-#if JVET_Q0043_RPR_and_Subpics
+
+#if JVET_Q0043_RPR_and_Subpics | JVET_Q0119_CLEANUPS
+#if JVET_Q0119_CLEANUPS
+  READ_FLAG( uiCode, "subpic_info_present_flag" );               pcSPS->setSubPicInfoPresentFlag(uiCode);
+#else
   READ_FLAG( uiCode, "subpic_info_present_flag" );               pcSPS->setSubPicPresentFlag(uiCode);
+#endif
 #else
   READ_FLAG( uiCode, "subpics_present_flag" );                   pcSPS->setSubPicPresentFlag(uiCode);
 #endif
 
+#if JVET_Q0119_CLEANUPS
+  if (pcSPS->getSubPicInfoPresentFlag())
+#else
   if (pcSPS->getSubPicPresentFlag()) 
+#endif
   {
+#if JVET_Q0119_CLEANUPS
+    READ_UVLC(uiCode, "sps_num_subpics_minus1"); pcSPS->setNumSubPics(uiCode + 1);
+    CHECK(uiCode > (pcSPS->getMaxPicWidthInLumaSamples() / (1 << pcSPS->getCTUSize())) * (pcSPS->getMaxPicHeightInLumaSamples() / (1 << pcSPS->getCTUSize())) - 1, "Invalid sps_num_subpics_minus1 value");
+#else
     READ_CODE(8, uiCode, "sps_num_subpics_minus1"); pcSPS->setNumSubPics(uiCode + 1);
+#endif
+
 #if JVET_Q0816
     if( pcSPS->getNumSubPics() == 1 )
     {
@@ -1350,9 +1370,30 @@ void HLSyntaxReader::parseSPS(SPS* pcSPS)
 #if JVET_Q0816
     }
 #endif
+
+#if JVET_Q0119_CLEANUPS
+    READ_UVLC( uiCode, "sps_subpic_id_len_minus1" );                       pcSPS->setSubPicIdLen( uiCode + 1 );
+    CHECK( uiCode > 15, "Invalid sps_subpic_id_len_minus1 value" );
+    CHECK( (1 << (uiCode + 1)) < pcSPS->getNumSubPics() + 1, "Invalid sps_subpic_id_len_minus1 value" );
+    READ_FLAG( uiCode, "subpic_id_mapping_explicitly_signalled_flag" );    pcSPS->setSubPicIdMappingExplicitlySignalledFlag( uiCode != 0 );
+    if (pcSPS->getSubPicIdMappingExplicitlySignalledFlag())
+    {
+      READ_FLAG( uiCode, "subpic_id_mapping_in_sps_flag" );                pcSPS->setSubPicIdMappingInSpsFlag( uiCode != 0 );
+      if (pcSPS->getSubPicIdMappingInSpsFlag())
+      {
+        for (int picIdx = 0; picIdx < pcSPS->getNumSubPics(); picIdx++)
+        {
+          READ_CODE(pcSPS->getSubPicIdLen(), uiCode, "sps_subpic_id[i]");   pcSPS->setSubPicId(picIdx, uiCode);
+        }
+      }
+    }
+#endif
   }
   else
   {
+#if JVET_Q0119_CLEANUPS
+    pcSPS->setSubPicIdMappingExplicitlySignalledFlag(0);
+#endif
     pcSPS->setNumSubPics(1);
     pcSPS->setSubPicCtuTopLeftX(0, 0);
     pcSPS->setSubPicCtuTopLeftY(0, 0);
@@ -1360,6 +1401,7 @@ void HLSyntaxReader::parseSPS(SPS* pcSPS)
     pcSPS->setSubPicHeight(0, (pcSPS->getMaxPicHeightInLumaSamples() + pcSPS->getCTUSize() - 1) >> floorLog2(pcSPS->getCTUSize()));
   }
 
+#if !JVET_Q0119_CLEANUPS
   READ_FLAG(uiCode, "sps_subpic_id_present_flag");                           pcSPS->setSubPicIdPresentFlag( uiCode != 0 );
   if( pcSPS->getSubPicIdPresentFlag() )
   {
@@ -1378,6 +1420,9 @@ void HLSyntaxReader::parseSPS(SPS* pcSPS)
     }
   }
   if( pcSPS->getSubPicIdPresentFlag() == false || pcSPS->getSubPicIdSignallingPresentFlag() == false )
+#else
+  if( !pcSPS->getSubPicIdMappingExplicitlySignalledFlag() || !pcSPS->getSubPicIdMappingInSpsFlag() ) // is it correct???
+#endif
   {
     for( int picIdx = 0; picIdx < pcSPS->getNumSubPics( ); picIdx++ )
     {
@@ -2106,6 +2151,7 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag
     CHECK(pps->getCtuSize() != sps->getCTUSize(), "PPS CTU size does not match CTU size in SPS");
   }
 
+#if !JVET_Q0119_CLEANUPS
   // sub-picture IDs
   if( sps->getSubPicIdPresentFlag() ) 
   {
@@ -2147,6 +2193,7 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag
       picHeader->setSubPicId( picIdx, picIdx );
     }
   }
+#endif
 
   // virtual boundaries
   if( !sps->getLoopFilterAcrossVirtualBoundariesDisabledFlag() )
@@ -3005,18 +3052,32 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par
     pcSlice->setPOC(iPOCmsb + iPOClsb);
   }
 
+#if JVET_Q0119_CLEANUPS
+  if (sps->getSubPicInfoPresentFlag())
+#else
   if (sps->getSubPicPresentFlag())
+#endif
   {
     uint32_t bitsSubPicId;
+#if JVET_Q0119_CLEANUPS
+    if (pcSlice->getSPS()->getSubPicIdMappingExplicitlySignalledFlag())
+#else
     if (sps->getSubPicIdSignallingPresentFlag())
+#endif
     {
       bitsSubPicId = sps->getSubPicIdLen();
     }
+#if !JVET_Q0119_CLEANUPS
     else if (picHeader->getSubPicIdSignallingPresentFlag())
     {
       bitsSubPicId = picHeader->getSubPicIdLen();
     }
+#endif
+#if JVET_Q0119_CLEANUPS
+    else if (pcSlice->getPPS()->getSubPicIdMappingInPpsFlag())
+#else
     else if (pps->getSubPicIdSignallingPresentFlag())
+#endif
     {
       bitsSubPicId = pps->getSubPicIdLen();
     }
@@ -3026,6 +3087,12 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par
     }
     READ_CODE(bitsSubPicId, uiCode, "slice_subpic_id");    pcSlice->setSliceSubPicId(uiCode);
   }
+#if JVET_Q0119_CLEANUPS
+  else
+  {
+    pcSlice->setSliceSubPicId(0);
+  }
+#endif
 
   // raster scan slices
   if(pps->getRectSliceFlag() == 0) 
diff --git a/source/Lib/EncoderLib/EncCfg.h b/source/Lib/EncoderLib/EncCfg.h
index b795a2a410ea39fb1d1476bcf975e6423c73f66f..5959637d9c245a45c835fcf970f3a2858fbffe53 100644
--- a/source/Lib/EncoderLib/EncCfg.h
+++ b/source/Lib/EncoderLib/EncCfg.h
@@ -266,7 +266,11 @@ protected:
 
   int       m_maxTempLayer;                      ///< Max temporal layer
   unsigned  m_CTUSize;
+#if JVET_Q0119_CLEANUPS
+  bool                  m_subPicInfoPresentFlag;
+#else
   bool                  m_subPicPresentFlag;
+#endif
   unsigned              m_numSubPics;
   uint32_t              m_subPicCtuTopLeftX[MAX_NUM_SUB_PICS];
   uint32_t              m_subPicCtuTopLeftY[MAX_NUM_SUB_PICS];
@@ -274,8 +278,13 @@ protected:
   uint32_t              m_subPicHeight[MAX_NUM_SUB_PICS];
   uint32_t              m_subPicTreatedAsPicFlag[MAX_NUM_SUB_PICS];
   uint32_t              m_loopFilterAcrossSubpicEnabledFlag[MAX_NUM_SUB_PICS];
+#if JVET_Q0119_CLEANUPS
+  bool                  m_subPicIdMappingExplicitlySignaledFlag;
+  bool                  m_subPicIdMappingInSpsFlag;
+#else
   bool                  m_subPicIdPresentFlag;
   bool                  m_subPicIdSignallingPresentFlag;
+#endif
   unsigned              m_subPicIdLen;
   uint32_t              m_subPicId[MAX_NUM_SUB_PICS];
   bool      m_useSplitConsOverride;
@@ -941,7 +950,11 @@ public:
   bool      getUseSplitConsOverride         ()         const { return m_useSplitConsOverride; }
   void      setDualITree                    ( bool b )       { m_dualITree = b; }
   bool      getDualITree                    ()         const { return m_dualITree; }
+#if JVET_Q0119_CLEANUPS
+  void      setSubPicInfoPresentFlag                        (bool b)                    { m_subPicInfoPresentFlag = b; }
+#else
   void      setSubPicPresentFlag                        (bool b)                    { m_subPicPresentFlag = b; }
+#endif
   void      setNumSubPics                               (uint32_t u)                { m_numSubPics = u; }
   void      setSubPicCtuTopLeftX                        (uint32_t u, int i)         { m_subPicCtuTopLeftX[i] = u; }
   void      setSubPicCtuTopLeftY                        (uint32_t u, int i)         { m_subPicCtuTopLeftY[i] = u; }
@@ -949,12 +962,22 @@ public:
   void      setSubPicHeight                             (uint32_t u, int i)         { m_subPicHeight[i] = u; }
   void      setSubPicTreatedAsPicFlag                   (bool b, int i)             { m_subPicTreatedAsPicFlag[i] = b; }
   void      setLoopFilterAcrossSubpicEnabledFlag        (uint32_t u, int i)         { m_loopFilterAcrossSubpicEnabledFlag[i] = u; }
+
+#if JVET_Q0119_CLEANUPS
+  void      setSubPicIdMappingExplicitlySignaledFlag    (bool b)                    { m_subPicIdMappingExplicitlySignaledFlag = b; }
+  void      setSubPicIdMappingInSpsFlag                 (bool b)                    { m_subPicIdMappingInSpsFlag = b; }
+#else
   void      setSubPicIdPresentFlag                      (bool b)                    { m_subPicIdPresentFlag = b; }
   void      setSubPicIdSignallingPresentFlag            (bool b)                    { m_subPicIdSignallingPresentFlag = b; }
+#endif
   void      setSubPicIdLen                              (uint32_t u)                { m_subPicIdLen = u; }
   void      setSubPicId                                 (uint32_t b, int i)         { m_subPicId[i] = b; }
 
+#if JVET_Q0119_CLEANUPS
+  bool      getSubPicInfoPresentFlag                    ()                          { return m_subPicInfoPresentFlag; }
+#else
   bool      getSubPicPresentFlag                        ()                          { return m_subPicPresentFlag; }
+#endif
   uint32_t  getNumSubPics                               ()                          { return m_numSubPics; }
   uint32_t  getSubPicCtuTopLeftX                        (int i)                     { return m_subPicCtuTopLeftX[i]; }
   uint32_t  getSubPicCtuTopLeftY                        (int i)                     { return m_subPicCtuTopLeftY[i]; }
@@ -962,8 +985,13 @@ public:
   uint32_t  getSubPicHeight                             (int i)                     { return m_subPicHeight[i]; }
   bool      getSubPicTreatedAsPicFlag                   (int i)                     { return m_subPicTreatedAsPicFlag[i]; }
   uint32_t  getLoopFilterAcrossSubpicEnabledFlag        (int i)                     { return m_loopFilterAcrossSubpicEnabledFlag[i]; }
+#if JVET_Q0119_CLEANUPS
+  bool      getSubPicIdMappingExplicitlySignaledFlag    ()                          { return m_subPicIdMappingExplicitlySignaledFlag; }
+  bool      getSubPicIdMappingInSpsFlag                 ()                          { return m_subPicIdMappingInSpsFlag; }
+#else
   bool      getSubPicIdPresentFlag                      ()                          { return m_subPicIdPresentFlag; }
   bool      getSubPicIdSignallingPresentFlag            ()                          { return m_subPicIdSignallingPresentFlag; }
+#endif
   uint32_t  getSubPicIdLen                              ()                          { return m_subPicIdLen; }
   uint32_t  getSubPicId                                 (int i)                     { return m_subPicId[i]; }
   void      setLFNST                        ( bool b )       { m_LFNST = b; }
diff --git a/source/Lib/EncoderLib/EncLib.cpp b/source/Lib/EncoderLib/EncLib.cpp
index 5b59d3243a724510b940f99c8f436146c350ba53..3f816256df452a85e01b8347fc0511f0cb02db8e 100644
--- a/source/Lib/EncoderLib/EncLib.cpp
+++ b/source/Lib/EncoderLib/EncLib.cpp
@@ -1265,8 +1265,13 @@ void EncLib::xInitSPS( SPS& sps, VPS& vps )
     sps.setRPL1CopyFromRPL0Flag( true );
   }
 
+#if JVET_Q0119_CLEANUPS
+  sps.setSubPicInfoPresentFlag(m_subPicInfoPresentFlag);
+  if (m_subPicInfoPresentFlag)
+#else
   sps.setSubPicPresentFlag(m_subPicPresentFlag);
   if (m_subPicPresentFlag) 
+#endif
   {
     sps.setNumSubPics(m_numSubPics);
     for (int i = 0; i < m_numSubPics; i++) 
@@ -1279,6 +1284,21 @@ void EncLib::xInitSPS( SPS& sps, VPS& vps )
       sps.setLoopFilterAcrossSubpicEnabledFlag(i, m_loopFilterAcrossSubpicEnabledFlag[i]);
     }
   }
+#if JVET_Q0119_CLEANUPS
+  sps.setSubPicIdMappingExplicitlySignalledFlag(m_subPicIdMappingExplicitlySignaledFlag);
+  if (m_subPicIdMappingExplicitlySignaledFlag)
+  {
+    sps.setSubPicIdMappingInSpsFlag(m_subPicIdMappingInSpsFlag);
+    if (m_subPicIdMappingInSpsFlag)
+    {
+      sps.setSubPicIdLen(m_subPicIdLen);
+      for (int i = 0; i < m_numSubPics; i++)
+      {
+        sps.setSubPicId(i, m_subPicId[i]);
+      }
+    }
+  }
+#else
   sps.setSubPicIdPresentFlag(m_subPicIdPresentFlag);
   if (m_subPicIdPresentFlag) 
   {
@@ -1292,6 +1312,7 @@ void EncLib::xInitSPS( SPS& sps, VPS& vps )
       }
     }
   }
+#endif
 
   sps.setLoopFilterAcrossVirtualBoundariesDisabledFlag( m_loopFilterAcrossVirtualBoundariesDisabledFlag );
   sps.setNumVerVirtualBoundaries            ( m_numVerVirtualBoundaries );
@@ -1348,7 +1369,11 @@ void EncLib::xInitPPS(PPS &pps, const SPS &sps)
 #endif
 
   pps.setNumSubPics(sps.getNumSubPics());
+#if JVET_Q0119_CLEANUPS
+  pps.setSubPicIdMappingInPpsFlag(false);
+#else
   pps.setSubPicIdSignallingPresentFlag(false);
+#endif
   pps.setSubPicIdLen(sps.getSubPicIdLen());
   for(int picIdx=0; picIdx<pps.getNumSubPics(); picIdx++)
   {
@@ -1717,12 +1742,14 @@ void EncLib::xInitPicHeader(PicHeader &picHeader, const SPS &sps, const PPS &pps
     picHeader.setCuChromaQpOffsetSubdivInter(0);
   }
   
+#if !JVET_Q0119_CLEANUPS
   // sub-pictures
   picHeader.setSubPicIdSignallingPresentFlag(sps.getSubPicIdSignallingPresentFlag());
   picHeader.setSubPicIdLen(sps.getSubPicIdLen());
   for(i=0; i<sps.getNumSubPics(); i++) {
     picHeader.setSubPicId(i, sps.getSubPicId(i));
   }
+#endif
 
   // virtual boundaries
   picHeader.setLoopFilterAcrossVirtualBoundariesDisabledFlag(sps.getLoopFilterAcrossVirtualBoundariesDisabledFlag());
diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp
index f1b94db14c01b30ab3deaca05f1197235de4fc2d..0b93282c873fc17b7afa6f30e8644701e999f237 100644
--- a/source/Lib/EncoderLib/VLCWriter.cpp
+++ b/source/Lib/EncoderLib/VLCWriter.cpp
@@ -275,8 +275,13 @@ void HLSWriter::codePPS( const PPS* pcPPS, const SPS* pcSPS )
   }
 
   WRITE_FLAG( pcPPS->getOutputFlagPresentFlag() ? 1 : 0,     "output_flag_present_flag" );
+#if JVET_Q0119_CLEANUPS
+  WRITE_FLAG( pcPPS->getSubPicIdMappingInPpsFlag() ? 1 : 0, "subpic_id_mapping_in_pps_flag" );
+  if( pcPPS->getSubPicIdMappingInPpsFlag() )
+#else
   WRITE_FLAG(pcPPS->getSubPicIdSignallingPresentFlag(), "pps_subpic_id_signalling_present_flag");
   if( pcPPS->getSubPicIdSignallingPresentFlag() )
+#endif
   {
     WRITE_UVLC( pcPPS->getNumSubPics() - 1, "pps_num_subpics_minus1" );
 
@@ -838,14 +843,26 @@ void HLSWriter::codeSPS( const SPS* pcSPS )
   WRITE_UVLC( pcSPS->getMaxPicHeightInLumaSamples(), "pic_height_max_in_luma_samples" );
   WRITE_CODE(floorLog2(pcSPS->getCTUSize()) - 5, 2, "sps_log2_ctu_size_minus5");
 
-#if JVET_Q0043_RPR_and_Subpics
+#if JVET_Q0043_RPR_and_Subpics | JVET_Q0119_CLEANUPS
+#if JVET_Q0119_CLEANUPS
+  WRITE_FLAG(pcSPS->getSubPicInfoPresentFlag(), "subpic_info_present_flag");
+#else
   WRITE_FLAG(pcSPS->getSubPicPresentFlag(), "subpic_info_present_flag");
+#endif
 #else
   WRITE_FLAG(pcSPS->getSubPicPresentFlag(), "subpics_present_flag");
 #endif
+#if JVET_Q0119_CLEANUPS
+  if (pcSPS->getSubPicInfoPresentFlag())
+#else
   if(pcSPS->getSubPicPresentFlag())
+#endif
   {
+#if JVET_Q0119_CLEANUPS
+    WRITE_UVLC(pcSPS->getNumSubPics() - 1, "sps_num_subpics_minus1");
+#else
     WRITE_CODE(pcSPS->getNumSubPics() - 1, 8, "sps_num_subpics_minus1");
+#endif
 #if JVET_Q0816
     if( pcSPS->getNumSubPics() > 1 )
     {
@@ -889,6 +906,23 @@ void HLSWriter::codeSPS( const SPS* pcSPS )
 #if JVET_Q0816
     }
 #endif
+
+#if JVET_Q0119_CLEANUPS
+    WRITE_UVLC(pcSPS->getSubPicIdLen() - 1, "sps_subpic_id_len_minus1");
+    WRITE_FLAG(pcSPS->getSubPicIdMappingExplicitlySignalledFlag(), "subpic_id_mapping_explicitly_signalled_flag");
+    if (pcSPS->getSubPicIdMappingExplicitlySignalledFlag())
+    {
+      WRITE_FLAG(pcSPS->getSubPicIdMappingInSpsFlag(), "subpic_id_mapping_in_sps_flag");
+      if (pcSPS->getSubPicIdMappingInSpsFlag())
+      {
+        for (int picIdx = 0; picIdx < pcSPS->getNumSubPics(); picIdx++)
+        {
+          WRITE_CODE(pcSPS->getSubPicId(picIdx), pcSPS->getSubPicIdLen(), "sps_subpic_id[i]");
+        }
+      }
+    }
+  }
+#else
   }
 
   WRITE_FLAG( pcSPS->getSubPicIdPresentFlag(), "sps_subpic_id_present_flag");
@@ -907,6 +941,7 @@ void HLSWriter::codeSPS( const SPS* pcSPS )
       }
     }
   }
+#endif
 
   WRITE_UVLC( pcSPS->getBitDepth(CHANNEL_TYPE_LUMA) - 8,                      "bit_depth_minus8" );
 
@@ -1429,6 +1464,7 @@ void HLSWriter::codePictureHeader( PicHeader* picHeader )
 #endif
 
   
+#if !JVET_Q0119_CLEANUPS
   // sub-picture IDs
   if( sps->getSubPicIdPresentFlag() ) 
   {
@@ -1469,6 +1505,7 @@ void HLSWriter::codePictureHeader( PicHeader* picHeader )
       picHeader->setSubPicId( picIdx, picIdx );
     }
   }
+#endif
 
   // virtual boundaries
   if( !sps->getLoopFilterAcrossVirtualBoundariesDisabledFlag() )
@@ -2131,18 +2168,32 @@ void HLSWriter::codeSliceHeader         ( Slice* pcSlice )
   WRITE_CODE(pcSlice->getPOC() & pocMask, pocBits, "slice_pic_order_cnt_lsb");
 #endif
 
+#if JVET_Q0119_CLEANUPS
+  if (pcSlice->getSPS()->getSubPicInfoPresentFlag())
+#else
   if (pcSlice->getSPS()->getSubPicPresentFlag())
+#endif
   {
     uint32_t bitsSubPicId;
+#if JVET_Q0119_CLEANUPS
+    if (pcSlice->getSPS()->getSubPicIdMappingExplicitlySignalledFlag())
+#else
     if (pcSlice->getSPS()->getSubPicIdSignallingPresentFlag())
+#endif
     {
       bitsSubPicId = pcSlice->getSPS()->getSubPicIdLen();
     }
+#if !JVET_Q0119_CLEANUPS
     else if (picHeader->getSubPicIdSignallingPresentFlag())
     {
       bitsSubPicId = picHeader->getSubPicIdLen();
     }
+#endif
+#if JVET_Q0119_CLEANUPS
+    else if (pcSlice->getPPS()->getSubPicIdMappingInPpsFlag())
+#else
     else if (pcSlice->getPPS()->getSubPicIdSignallingPresentFlag())
+#endif
     {
       bitsSubPicId = pcSlice->getPPS()->getSubPicIdLen();
     }