Index: source/Lib/CommonLib/UnitPartitioner.cpp
===================================================================
--- source/Lib/CommonLib/UnitPartitioner.cpp	(revision 3789)
+++ source/Lib/CommonLib/UnitPartitioner.cpp	(revision 3790)
@@ -581,12 +581,14 @@
     PartSplit lastSplit = m_partStack.back().split;
     if( lastSplit != CTU_LEVEL && lastSplit != CU_QUAD_SPLIT )                  return false;
 
-    // allowing QT split even if a BT split is implied
-    if( implicitSplit != CU_DONT_SPLIT )                                        return true;
+    if( implicitSplit == CU_QUAD_SPLIT )                                        return true;
 
     unsigned minQtSize = cs.pcv->getMinQtSize( *cs.slice, chType );
     if( currArea().lwidth() <= minQtSize || currArea().lheight() <= minQtSize ) return false;
 
+    // allowing QT split even if a BT split is implied
+    if( implicitSplit != CU_DONT_SPLIT )                                        return true;
+
     return true;
   }
   break;
@@ -698,9 +700,11 @@
 #else
     const CompArea& area      = currArea().Y();
     const unsigned maxBtSize  = cs.pcv->getMaxBtSize( *cs.slice, chType );
+    const unsigned minQtSize  = cs.pcv->getMinQtSize( *cs.slice, chType );
     const bool isBtAllowed    = area.width <= maxBtSize && area.height <= maxBtSize;
+    const bool isQtAllowed    = area.width > minQtSize && area.height > minQtSize && currBtDepth == 0;
 
-    if( !isBlInPic && !isTrInPic )
+    if( !isBlInPic && !isTrInPic && isQtAllowed )
     {
       split = CU_QUAD_SPLIT;
     }
@@ -707,6 +711,11 @@
     else if( !isBlInPic && isBtAllowed )
     {
       split = CU_HORZ_SPLIT;
     }
     else if( !isTrInPic && isBtAllowed )
     {
