diff --git a/source/Lib/CommonLib/DepQuant.cpp b/source/Lib/CommonLib/DepQuant.cpp
index e1d3a6e6717a9dc258107fb838f0d2450d8f5186..168a4eb30998c5568ace38669a8c1866e956522b 100644
--- a/source/Lib/CommonLib/DepQuant.cpp
+++ b/source/Lib/CommonLib/DepQuant.cpp
@@ -1063,66 +1063,12 @@ namespace DQIntern
       m_goRiceZero    = 0;
     }
 
-#if JVET_M0297_32PT_MTS_ZERO_OUT
-    void checkRdCosts( const ScanPosType spt, const PQData& pqDataA, const PQData& pqDataB, Decision& decisionA, Decision& decisionB, bool zeroFix) const
-#else
     void checkRdCosts( const ScanPosType spt, const PQData& pqDataA, const PQData& pqDataB, Decision& decisionA, Decision& decisionB) const
-#endif
     {
       const int32_t*  goRiceTab = g_goRiceBits[m_goRicePar];
-#if JVET_M0297_32PT_MTS_ZERO_OUT
-      int64_t         rdCostA;
-      int64_t         rdCostB;
-      int64_t         rdCostZ;
-#else
       int64_t         rdCostA   = m_rdCost + pqDataA.deltaDist;
       int64_t         rdCostB   = m_rdCost + pqDataB.deltaDist;
       int64_t         rdCostZ   = m_rdCost;
-#endif
-#if JVET_M0297_32PT_MTS_ZERO_OUT
-      if( zeroFix )
-      {
-        rdCostZ = m_rdCost;
-#if JVET_M0173_MOVE_GT2_TO_FIRST_PASS
-        if( m_remRegBins >= 4 )
-#else
-        if( m_remRegBins >= 3 )
-#endif
-        {
-          if( spt == SCAN_ISCSBB )
-          {
-            rdCostZ += m_sigFracBits.intBits[0];
-          }
-          else if( spt == SCAN_SOCSBB )
-          {
-            rdCostZ += m_sbbFracBits.intBits[1] + m_sigFracBits.intBits[0];
-          }
-          else if( m_numSigSbb )
-          {
-            rdCostZ += m_sigFracBits.intBits[0];
-          }
-          else
-          {
-            rdCostZ = decisionA.rdCost;
-          }
-        }
-        else
-        {
-          rdCostZ += goRiceTab[m_goRiceZero];
-        }
-        if( rdCostZ < decisionA.rdCost )
-        {
-          decisionA.rdCost = rdCostZ;
-          decisionA.absLevel = 0;
-          decisionA.prevId = m_stateId;
-        }
-      }
-      else
-      {
-        rdCostA = m_rdCost + pqDataA.deltaDist;
-        rdCostB = m_rdCost + pqDataB.deltaDist;
-        rdCostZ = m_rdCost;
-#endif
 #if JVET_M0173_MOVE_GT2_TO_FIRST_PASS
       if( m_remRegBins >= 4 )
 #else
@@ -1190,9 +1136,6 @@ namespace DQIntern
         decisionB.absLevel = pqDataB.absLevel;
         decisionB.prevId   = m_stateId;
       }
-#if JVET_M0297_32PT_MTS_ZERO_OUT
-      }
-#endif
     }
 
     inline void checkRdCostStart(int32_t lastOffset, const PQData &pqData, Decision &decision) const
@@ -1227,7 +1170,7 @@ namespace DQIntern
     }
 
 #if JVET_M0297_32PT_MTS_ZERO_OUT
-    inline void checkRdCostSkipSbbZeroFix(Decision &decision) const
+    inline void checkRdCostSkipSbbZeroOut(Decision &decision) const
     {
       int64_t rdCost = m_rdCost + m_sbbFracBits.intBits[0];
       decision.rdCost = rdCost;
@@ -1547,8 +1490,8 @@ namespace DQIntern
 
   private:
 #if JVET_M0297_32PT_MTS_ZERO_OUT
-    void    xDecideAndUpdate  ( const TCoeff absCoeff, const ScanInfo& scanInfo, bool zeroFix );
-    void    xDecide           ( const ScanPosType spt, const TCoeff absCoeff, const int lastOffset, Decision* decisions, bool zeroFix );
+    void    xDecideAndUpdate  ( const TCoeff absCoeff, const ScanInfo& scanInfo, bool zeroOut );
+    void    xDecide           ( const ScanPosType spt, const TCoeff absCoeff, const int lastOffset, Decision* decisions, bool zeroOut );
 #else
     void    xDecideAndUpdate  ( const TCoeff absCoeff, const ScanInfo& scanInfo );
     void    xDecide           ( const ScanPosType spt, const TCoeff absCoeff, const int lastOffset, Decision* decisions );
@@ -1591,59 +1534,46 @@ namespace DQIntern
 
 
 #if JVET_M0297_32PT_MTS_ZERO_OUT
-  void DepQuant::xDecide( const ScanPosType spt, const TCoeff absCoeff, const int lastOffset, Decision* decisions, bool zeroFix)
+  void DepQuant::xDecide( const ScanPosType spt, const TCoeff absCoeff, const int lastOffset, Decision* decisions, bool zeroOut)
 #else
   void DepQuant::xDecide( const ScanPosType spt, const TCoeff absCoeff, const int lastOffset, Decision* decisions)
 #endif
   {
     ::memcpy( decisions, startDec, 8*sizeof(Decision) );
 
+#if JVET_M0297_32PT_MTS_ZERO_OUT
+    if( zeroOut )
+    {
+      if( spt==SCAN_EOCSBB )
+      {
+        m_skipStates[0].checkRdCostSkipSbbZeroOut( decisions[0] );
+        m_skipStates[1].checkRdCostSkipSbbZeroOut( decisions[1] );
+        m_skipStates[2].checkRdCostSkipSbbZeroOut( decisions[2] );
+        m_skipStates[3].checkRdCostSkipSbbZeroOut( decisions[3] );
+      }
+      return;
+    }
+#endif
+
     PQData  pqData[4];
     m_quant.preQuantCoeff( absCoeff, pqData );
-#if JVET_M0297_32PT_MTS_ZERO_OUT
-    m_prevStates[0].checkRdCosts( spt, pqData[0], pqData[2], decisions[0], decisions[2], zeroFix);
-    m_prevStates[1].checkRdCosts( spt, pqData[0], pqData[2], decisions[2], decisions[0], zeroFix);
-    m_prevStates[2].checkRdCosts( spt, pqData[3], pqData[1], decisions[1], decisions[3], zeroFix);
-    m_prevStates[3].checkRdCosts( spt, pqData[3], pqData[1], decisions[3], decisions[1], zeroFix);
-#else
     m_prevStates[0].checkRdCosts( spt, pqData[0], pqData[2], decisions[0], decisions[2]);
     m_prevStates[1].checkRdCosts( spt, pqData[0], pqData[2], decisions[2], decisions[0]);
     m_prevStates[2].checkRdCosts( spt, pqData[3], pqData[1], decisions[1], decisions[3]);
     m_prevStates[3].checkRdCosts( spt, pqData[3], pqData[1], decisions[3], decisions[1]);
-#endif
     if( spt==SCAN_EOCSBB )
     {
-#if JVET_M0297_32PT_MTS_ZERO_OUT
-      if( zeroFix )
-      {
-        m_skipStates[0].checkRdCostSkipSbbZeroFix( decisions[0] );
-        m_skipStates[1].checkRdCostSkipSbbZeroFix( decisions[1] );
-        m_skipStates[2].checkRdCostSkipSbbZeroFix( decisions[2] );
-        m_skipStates[3].checkRdCostSkipSbbZeroFix( decisions[3] );
-      }
-      else
-      {
-#endif
       m_skipStates[0].checkRdCostSkipSbb( decisions[0] );
       m_skipStates[1].checkRdCostSkipSbb( decisions[1] );
       m_skipStates[2].checkRdCostSkipSbb( decisions[2] );
       m_skipStates[3].checkRdCostSkipSbb( decisions[3] );
-#if JVET_M0297_32PT_MTS_ZERO_OUT
-      }
-#endif
     }
-#if JVET_M0297_32PT_MTS_ZERO_OUT
-    if (!zeroFix) {
-#endif
     m_startState.checkRdCostStart( lastOffset, pqData[0], decisions[0] );
     m_startState.checkRdCostStart( lastOffset, pqData[2], decisions[2] );
-#if JVET_M0297_32PT_MTS_ZERO_OUT
-    }
-#endif
   }
 
 #if JVET_M0297_32PT_MTS_ZERO_OUT
-  void DepQuant::xDecideAndUpdate( const TCoeff absCoeff, const ScanInfo& scanInfo, bool zeroFix )
+  void DepQuant::xDecideAndUpdate( const TCoeff absCoeff, const ScanInfo& scanInfo, bool zeroOut )
 #else
   void DepQuant::xDecideAndUpdate( const TCoeff absCoeff, const ScanInfo& scanInfo )
 #endif
@@ -1653,7 +1583,7 @@ namespace DQIntern
     std::swap( m_prevStates, m_currStates );
 
 #if JVET_M0297_32PT_MTS_ZERO_OUT
-    xDecide( scanInfo.spt, absCoeff, lastOffset(scanInfo.scanIdx), decisions, zeroFix );
+    xDecide( scanInfo.spt, absCoeff, lastOffset(scanInfo.scanIdx), decisions, zeroOut );
 #else
     xDecide( scanInfo.spt, absCoeff, lastOffset(scanInfo.scanIdx), decisions);
 #endif
@@ -1669,7 +1599,11 @@ namespace DQIntern
         m_currStates[3].updateStateEOS( scanInfo, m_prevStates, m_skipStates, decisions[3] );
         ::memcpy( decisions+4, decisions, 4*sizeof(Decision) );
       }
+#if JVET_M0297_32PT_MTS_ZERO_OUT
+      else if( !zeroOut )
+#else
       else
+#endif
       {
         switch( scanInfo.nextNbInfoSbb.num )
         {
@@ -1732,12 +1666,6 @@ namespace DQIntern
     ::memset( tu.getCoeffs( compID ).buf, 0x00, numCoeff*sizeof(TCoeff) );
     absSum          = 0;
 
-#if JVET_M0297_32PT_MTS_ZERO_OUT
-    const CompArea& area = tu.blocks[compID];
-    const uint32_t width = area.width;
-    const uint32_t height = area.height;
-#endif
-
     //===== find first test position =====
     int   firstTestPos = numCoeff - 1;
     const TCoeff thres = m_quant.getLastThreshold();
@@ -1763,15 +1691,17 @@ namespace DQIntern
     m_startState.init();
 
 #if JVET_M0297_32PT_MTS_ZERO_OUT
-    int effWidth = width, effHeight = height;
+    int effWidth = tuPars.m_width, effHeight = tuPars.m_height;
+    bool zeroOut = false;
 #if JVET_M0464_UNI_MTS
     if( tu.mtsIdx > 1 && !tu.cu->transQuantBypass && compID == COMPONENT_Y )
 #else
     if( tu.cu->emtFlag && !tu.transformSkip[compID] && !tu.cu->transQuantBypass && compID == COMPONENT_Y )
 #endif
     {
-      effHeight = ( height == 32 ) ? 16 : height;
-      effWidth = ( width == 32 ) ? 16 : width;
+      effHeight = ( tuPars.m_height == 32 ) ? 16 : tuPars.m_height;
+      effWidth = ( tuPars.m_width == 32 ) ? 16 : tuPars.m_width;
+      zeroOut  = ( effHeight < tuPars.m_height || effWidth < tuPars.m_width );
     }
 #endif
 
@@ -1780,7 +1710,7 @@ namespace DQIntern
     {
       const ScanInfo& scanInfo = tuPars.m_scanInfo[ scanIdx ];
 #if JVET_M0297_32PT_MTS_ZERO_OUT
-      xDecideAndUpdate( abs( tCoeff[ scanInfo.rasterPos ] ), scanInfo, ( effWidth < width || effHeight < height ) && ( scanInfo.posX >= effWidth || scanInfo.posY >= effHeight ) );
+      xDecideAndUpdate( abs( tCoeff[ scanInfo.rasterPos ] ), scanInfo, zeroOut && ( scanInfo.posX >= effWidth || scanInfo.posY >= effHeight ) );
 #else
       xDecideAndUpdate( abs( tCoeff[ scanInfo.rasterPos ] ), scanInfo );
 #endif