diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h
index 1c7b98b412edf649d60ff25e4b364c27eb7a1103..a71731ede7705ce9d75199398a26a283d7c95026 100644
--- a/source/Lib/CommonLib/TypeDef.h
+++ b/source/Lib/CommonLib/TypeDef.h
@@ -58,6 +58,8 @@
 
 #define JVET_Q0371_DEBLOCKING_CLEANUP                     1 //JVET_Q0371: cleanup on deblocking across subpicture boundaries
 
+#define JVET_Q0289_BUGFIX_RECT_SLICE_FLAG                 1 //JVET-Q0289: If NumTilesInPic is equal to 1, don't signal the rect_slice_flag and infer its value to be 1.
+
 #define CABAC_RETRAIN                                     1 // CABAC retraining based on VTM8rc1
 
 #define JVET_Q0210_SUBPIC_VIRTUAL_BOUNDARY_CONSTRAINT     1 // JVET-Q0210 (aspect 7): when subpicture signalling is present, virtual boundaries if present shall be in the SPS.
diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp
index 4f6d7f067afa905ad67963bc7b09f4979ffb286d..bdd78d24872bd77f34e4bdadff58314dc898b4f5 100644
--- a/source/Lib/DecoderLib/VLCReader.cpp
+++ b/source/Lib/DecoderLib/VLCReader.cpp
@@ -533,9 +533,20 @@ void HLSyntaxReader::parsePPS( PPS* pcPPS )
 #endif
     }
     pcPPS->initTiles();
-     
     // rectangular slice signalling
+#if JVET_Q0289_BUGFIX_RECT_SLICE_FLAG
+    if (pcPPS->getNumTiles() > 1)
+    {
+      READ_CODE(1, uiCode, "rect_slice_flag");
+    }
+    else
+    {
+      uiCode = 1;
+    }
+    pcPPS->setRectSliceFlag(uiCode == 1);
+#else
     READ_CODE(1, uiCode, "rect_slice_flag");                          pcPPS->setRectSliceFlag( uiCode == 1 );
+#endif
     if (pcPPS->getRectSliceFlag()) 
     {
       READ_FLAG(uiCode, "single_slice_per_subpic_flag");            pcPPS->setSingleSlicePerSubPicFlag(uiCode == 1);
diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp
index 1b6652af2eb875eb3139925e9ad421d27c76021c..1837ea134612d509285b83920f019fd2a0f6f196 100644
--- a/source/Lib/EncoderLib/VLCWriter.cpp
+++ b/source/Lib/EncoderLib/VLCWriter.cpp
@@ -333,7 +333,14 @@ void HLSWriter::codePPS( const PPS* pcPPS )
     }
      
     // rectangular slice signalling
+#if JVET_Q0289_BUGFIX_RECT_SLICE_FLAG
+    if (pcPPS->getNumTiles() > 1)
+    {
+      WRITE_FLAG(pcPPS->getRectSliceFlag() ? 1 : 0, "rect_slice_flag");
+    }
+#else
     WRITE_FLAG( pcPPS->getRectSliceFlag( ) ? 1 : 0, "rect_slice_flag");
+#endif
     if (pcPPS->getRectSliceFlag())
     {
       WRITE_FLAG(pcPPS->getSingleSlicePerSubPicFlag( ) ? 1 : 0, "single_slice_per_subpic_flag");