diff --git a/source/Lib/CommonLib/LoopFilter.cpp b/source/Lib/CommonLib/LoopFilter.cpp
index 8d95a32332a5a1f3a08bb93d494c639f22a2a813..521581afe41b0e4526d364db76437fbc1682e0f6 100644
--- a/source/Lib/CommonLib/LoopFilter.cpp
+++ b/source/Lib/CommonLib/LoopFilter.cpp
@@ -135,11 +135,11 @@ void LoopFilter::create( const unsigned uiMaxCUDepth )
   m_enc = false;
 }
 
-void LoopFilter::initEncPicYuvBuffer(ChromaFormat chromaFormat, int lumaWidth, int lumaHeight)
+void LoopFilter::initEncPicYuvBuffer(ChromaFormat chromaFormat, const Size &size, const unsigned maxCUSize)
 {
-  const UnitArea picArea(chromaFormat, Area(0, 0, lumaWidth, lumaHeight));
+  const Area a = Area(Position(), size);
   m_encPicYuvBuffer.destroy();
-  m_encPicYuvBuffer.create(picArea);
+  m_encPicYuvBuffer.create(chromaFormat, a, maxCUSize, 7);
 }
 
 void LoopFilter::destroy()
@@ -425,7 +425,7 @@ void LoopFilter::xDeblockCU( CodingUnit& cu, const DeblockEdgeDir edgeDir )
         {
           bS |= xGetBoundaryStrengthSingle( cu, edgeDir, localPos, CHANNEL_TYPE_LUMA );
         }
-        if(cu.treeType != TREE_L && cu.chromaFormat != CHROMA_400)
+        if(cu.treeType != TREE_L && cu.chromaFormat != CHROMA_400 && cu.blocks[COMPONENT_Cb].valid())
         {
           bS |= xGetBoundaryStrengthSingle( cu, edgeDir, localPos, CHANNEL_TYPE_CHROMA );
         }
diff --git a/source/Lib/CommonLib/LoopFilter.h b/source/Lib/CommonLib/LoopFilter.h
index d82a7a63e29472a21d8c5f135e23ea59d0611de1..3ec3d51108b302a27025a863612d7a92e98c0601 100644
--- a/source/Lib/CommonLib/LoopFilter.h
+++ b/source/Lib/CommonLib/LoopFilter.h
@@ -111,7 +111,7 @@ public:
 
   /// CU-level deblocking function
   void xDeblockCU(CodingUnit& cu, const DeblockEdgeDir edgeDir);
-  void  initEncPicYuvBuffer(ChromaFormat chromaFormat, int lumaWidth, int lumaHeight);
+  void  initEncPicYuvBuffer(ChromaFormat chromaFormat, const Size &size, const unsigned maxCUSize);
   PelStorage& getDbEncPicYuvBuffer() { return m_encPicYuvBuffer; }
   void  setEnc(bool b) { m_enc = b; }
 
diff --git a/source/Lib/EncoderLib/EncLib.cpp b/source/Lib/EncoderLib/EncLib.cpp
index ea24fac6071713cc515dea0ed451b1fb3a50b37e..d1d538a472743ac4294f933d5a53f1f44d35481f 100644
--- a/source/Lib/EncoderLib/EncLib.cpp
+++ b/source/Lib/EncoderLib/EncLib.cpp
@@ -137,9 +137,9 @@ void EncLib::create( const int layerId )
   m_cLoopFilter.create( m_maxTotalCUDepth );
 #endif
 
-  if (!m_bLoopFilterDisable)
+  if (!m_bLoopFilterDisable && m_encDbOpt)
   {
-    m_cLoopFilter.initEncPicYuvBuffer(m_chromaFormatIDC, getSourceWidth(), getSourceHeight());
+    m_cLoopFilter.initEncPicYuvBuffer(m_chromaFormatIDC, Size(getSourceWidth(), getSourceHeight()), getMaxCUWidth());
   }
 
 #if ENABLE_SPLIT_PARALLELISM