diff --git a/source/Lib/CommonLib/Slice.h b/source/Lib/CommonLib/Slice.h
index 22ac7ed2d7745099d354ffeb455737b72edc6ff5..8e0443bfdd9f754a332b76b38a6bdd5f17c9ab0f 100644
--- a/source/Lib/CommonLib/Slice.h
+++ b/source/Lib/CommonLib/Slice.h
@@ -1271,6 +1271,9 @@ private:
   int              m_numTileRowsMinus1;
   std::vector<int> m_tileColumnWidth;
   std::vector<int> m_tileRowHeight;
+#if JVET_O0452_PPS_BRICK_SIGNALING_CONDITION
+  std::vector<int> m_tileHeight;
+#endif
 
   bool             m_singleTileInPicFlag;
   int              m_tileColsWidthMinus1;
@@ -1454,6 +1457,10 @@ public:
   int                    getNumTileRowsMinus1() const                                     { return m_numTileRowsMinus1;                   }
   void                   setTileRowHeight(const std::vector<int>& rowHeight)              { m_tileRowHeight = rowHeight;                  }
   uint32_t               getTileRowHeight(uint32_t rowIdx) const                          { return m_tileRowHeight[rowIdx];               }
+#if JVET_O0452_PPS_BRICK_SIGNALING_CONDITION
+  void                   setTileHeight(uint32_t tileIdx, uint32_t tileHeight)             { m_tileHeight[tileIdx] = tileHeight;           }
+  uint32_t               getTileHeight(uint32_t tileIdx) const                            { return m_tileHeight[tileIdx];                 }
+#endif
 
   bool                   getSingleTileInPicFlag() const                                   { return m_singleTileInPicFlag;                 }
   void                   setSingleTileInPicFlag(bool val)                                 { m_singleTileInPicFlag = val;                  }
diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h
index aae385021c123c4de5d5a957cfe4dc4a5397adf8..20881e35deb8bf347256473d90fe19ab4d7414dd 100644
--- a/source/Lib/CommonLib/TypeDef.h
+++ b/source/Lib/CommonLib/TypeDef.h
@@ -65,6 +65,8 @@
 #define JVET_O0238_PPS_OR_SLICE                           1 // JVET-O0238: Signal certain parameters either in PPS or per slice
 #define SUPPORT_FOR_RECT_SLICES_WITH_VARYING_NUMBER_OF_TILES 1
 
+#define JVET_O0452_PPS_BRICK_SIGNALING_CONDITION          1  // JVET-O0452: brick_split_flag signaled as RowHeight > 1 and uniform_brick_spacing_flag signaled as RowHeight > 2
+
 #define FLATTEN_BUFFERS                                                                                                \
   (1 && JVET_O0502_ISP_CLEANUP && JVET_O0364_PADDING && JVET_O0426_MRL_REF_SAMPLES_DC_MODE                             \
    && JVET_O0925_MIP_SIMPLIFICATIONS && JVET_O0364_PDPC_DC)
diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp
index ba73150eb8bcbe59b7df8e28ceb6a9377589d7be..620fde0cac1530d13426e8f2ca85da71d18f15f8 100644
--- a/source/Lib/DecoderLib/VLCReader.cpp
+++ b/source/Lib/DecoderLib/VLCReader.cpp
@@ -588,13 +588,31 @@ void HLSyntaxReader::parsePPS( PPS* pcPPS, ParameterSetManager *parameterSetMana
       std::vector<std::vector<int>>  brickRowHeightMinus1 (numTilesInPic);
       for( int i = 0; i < numTilesInPic; i++ )
       {
+#if JVET_O0452_PPS_BRICK_SIGNALING_CONDITION
+        if (pcPPS->getTileHeight(i) > 1)
+        {
+#endif
         READ_FLAG( uiCode, "brick_split_flag [i]" );
         brickSplitFlag[i] = (uiCode == 1);
+#if JVET_O0452_PPS_BRICK_SIGNALING_CONDITION
+        }
+        else
+          brickSplitFlag[i] = 0;
+#endif
 
         if( brickSplitFlag[i] )
         {
+#if JVET_O0452_PPS_BRICK_SIGNALING_CONDITION
+          if (pcPPS->getTileHeight(i) > 2)
+          {
+#endif
           READ_FLAG( uiCode, "uniform_brick_spacing_flag [i]" );
           uniformBrickSpacingFlag[i] = (uiCode == 1);
+#if JVET_O0452_PPS_BRICK_SIGNALING_CONDITION
+          }
+          else
+            uniformBrickSpacingFlag[i] = 1;
+#endif
           if( uniformBrickSpacingFlag[i] )
           {
             READ_UVLC( uiCode, "brick_height_minus1" );
diff --git a/source/Lib/EncoderLib/EncLib.cpp b/source/Lib/EncoderLib/EncLib.cpp
index de684c90252349f3131407a18847b50cbcc47cb2..641909dc52248a18d3a26146c39eb08fbfcd091c 100644
--- a/source/Lib/EncoderLib/EncLib.cpp
+++ b/source/Lib/EncoderLib/EncLib.cpp
@@ -1867,12 +1867,25 @@ void  EncLib::xInitPPSforTiles(PPS &pps)
     // check brick splits for each tile
     for (int tileIdx=0; tileIdx < numTiles; tileIdx++)
     {
+#if JVET_O0452_PPS_BRICK_SIGNALING_CONDITION
+      const int tileY = tileIdx / (m_iNumColumnsMinus1 + 1);
+
+      int tileHeight = tileRowHeight[tileY];
+
+      pps.setTileHeight(tileIdx, tileHeight);
+
+      CHECK((tileHeight <= 1) && (pps.getBrickSplitFlag(tileIdx) == 0), "The value of brick_split_flag[ i ] shall be 0 if tileHeight <= 1");
+#endif
       if (pps.getBrickSplitFlag(tileIdx))
       {
+#if !JVET_O0452_PPS_BRICK_SIGNALING_CONDITION
         const int tileY = tileIdx / (m_iNumColumnsMinus1+1);
 
         int tileHeight = tileRowHeight [tileY];
-
+#endif
+#if JVET_O0452_PPS_BRICK_SIGNALING_CONDITION
+        CHECK((tileHeight <= 2) && (pps.getUniformBrickSpacingFlag(tileIdx) == 1), "The value of uniform_brick_spacing_flag[ i ] shall be 1 if tileHeight <= 2");
+#endif
         if (pps.getUniformBrickSpacingFlag(tileIdx))
         {
           CHECK((pps.getBrickHeightMinus1(tileIdx) + 1) >= tileHeight, "Brick height larger than or equal to tile height");
diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp
index d21fc833c9ceba022dc26f84d001f040468306ea..6832bbf16fe23233b41491a46cdb833030bf2f1d 100644
--- a/source/Lib/EncoderLib/VLCWriter.cpp
+++ b/source/Lib/EncoderLib/VLCWriter.cpp
@@ -341,9 +341,15 @@ void HLSWriter::codePPS( const PPS* pcPPS )
 
     for( int i = 0; pcPPS->getBrickSplittingPresentFlag()  &&  i < numTilesInPic; i++ )
     {
+#if JVET_O0452_PPS_BRICK_SIGNALING_CONDITION
+      if (pcPPS->getTileHeight(i) > 1)
+#endif
       WRITE_FLAG( pcPPS->getBrickSplitFlag(i) ? 1 : 0, "brick_split_flag [i]" );
       if( pcPPS->getBrickSplitFlag(i) )
       {
+#if JVET_O0452_PPS_BRICK_SIGNALING_CONDITION
+        if (pcPPS->getTileHeight(i) > 2)
+#endif
         WRITE_FLAG( pcPPS->getUniformBrickSpacingFlag(i) ? 1 : 0, "uniform_brick_spacing_flag [i]" );
         if( pcPPS->getUniformBrickSpacingFlag(i) )
           WRITE_UVLC( pcPPS->getBrickHeightMinus1(i), "brick_height_minus1" );