diff --git a/source/Lib/DecoderLib/DecLib.cpp b/source/Lib/DecoderLib/DecLib.cpp
index e0a9f3b13ca7c51cacd094e403110fe18aa0e2bd..c3f1ff4ec65bb3b2b473820af64b6f79044cba2a 100644
--- a/source/Lib/DecoderLib/DecLib.cpp
+++ b/source/Lib/DecoderLib/DecLib.cpp
@@ -173,12 +173,6 @@ bool tryDecodePicture( Picture* pcEncPic, const int expectedPoc, const std::stri
                   pcEncPic->copySAO( *pic, 0 );
                 }
 
-                pcDecLib->executeLoopFilters();
-                if ( pic->cs->sps->getUseSAO() )
-                {
-                  pcEncPic->copySAO( *pic, 1 );
-                }
-
                 if( pic->cs->sps->getUseALF() )
                 {
                   for( int compIdx = 0; compIdx < MAX_NUM_COMPONENT; compIdx++ )
@@ -192,6 +186,12 @@ bool tryDecodePicture( Picture* pcEncPic, const int expectedPoc, const std::stri
                   }
                 }
 
+                pcDecLib->executeLoopFilters();
+                if ( pic->cs->sps->getUseSAO() )
+                {
+                  pcEncPic->copySAO( *pic, 1 );
+                }
+
                 pcEncPic->cs->copyStructure( *pic->cs, CH_L, true, true );
 
                 if( CS::isDualITree( *pcEncPic->cs ) )
@@ -1088,7 +1088,7 @@ bool DecLib::xDecodeSlice(InputNALUnit &nalu, int &iSkipFrame, int iPOCLastDispl
     pcSlice->checkCRA(pcSlice->getRPS(), m_pocCRA, m_associatedIRAPType, m_cListPic );
     // Set reference list
     pcSlice->setRefPicList( m_cListPic, true, true );
-	
+
     if (!pcSlice->isIntra())
     {
       bool bLowDelay = true;
diff --git a/source/Lib/EncoderLib/EncSlice.cpp b/source/Lib/EncoderLib/EncSlice.cpp
index 1ebdd446361e692cb7581557e345117aa6e9e862..aa936c70394412be9fd8660a45aa3395fafb2168 100644
--- a/source/Lib/EncoderLib/EncSlice.cpp
+++ b/source/Lib/EncoderLib/EncSlice.cpp
@@ -1919,6 +1919,15 @@ void EncSlice::encodeSlice   ( Picture* pcPic, OutputBitstream* pcSubstreams, ui
       }
     }
 #endif
+
+#if JVET_L0646_GBI
+    bool updateGbiCodingOrder = cs.slice->getSliceType() == B_SLICE && ctuTsAddr == startCtuTsAddr;
+    if( updateGbiCodingOrder )
+    {
+      resetGbiCodingOrder(false, cs);
+    }
+#endif
+
     m_CABACWriter->coding_tree_unit( cs, ctuArea, pcPic->m_prevQP, ctuRsAddr );
 
 #if HEVC_TILES_WPP