diff --git a/source/Lib/EncoderLib/EncTemporalFilter.cpp b/source/Lib/EncoderLib/EncTemporalFilter.cpp
index 6b15a6b54bfdaba1a8fcd3142b85701f77e1ef1e..b1ec5f36a9aecb6ef4430f2934551c47f4c2ad7d 100644
--- a/source/Lib/EncoderLib/EncTemporalFilter.cpp
+++ b/source/Lib/EncoderLib/EncTemporalFilter.cpp
@@ -207,6 +207,8 @@ bool EncTemporalFilter::filter(PelStorage *orgPic, int receivedPoc)
       srcPic.mvs.allocate(m_sourceWidth / 4, m_sourceHeight / 4);
 
       motionEstimation(srcPic.mvs, origPadded, srcPic.picBuffer, origSubsampled2, origSubsampled4);
+      applyMotion(srcPic.mvs, srcPic.picBuffer, dummyPicBufferTO);
+      srcPic.picBuffer.swap(dummyPicBufferTO);
       srcPic.origOffset = poc - currentFilePoc;
     }
 
@@ -703,12 +705,6 @@ void EncTemporalFilter::bilateralFilter(const PelStorage &orgPic,
   double overallStrength) const
 {
   const int numRefs = int(srcFrameInfo.size());
-  std::vector<PelStorage> correctedPics(numRefs);
-  for (int i = 0; i < numRefs; i++)
-  {
-    correctedPics[i].create(m_chromaFormatIDC, m_area, 0, m_padding);
-    applyMotion(srcFrameInfo[i].mvs, srcFrameInfo[i].picBuffer, correctedPics[i]);
-  }
 
   const int refStrengthRow = m_futureRefs > 0 ? 0 : 1;
 
@@ -751,8 +747,8 @@ void EncTemporalFilter::bilateralFilter(const PelStorage &orgPic,
           for (int i = 0; i < numRefs; i++)
           {
             double variance = 0, diffsum = 0;
-            const ptrdiff_t refStride = correctedPics[i].bufs[c].stride;
-            const Pel *     refPel = correctedPics[i].bufs[c].buf + y * refStride + x;
+            const ptrdiff_t refStride = srcFrameInfo[i].picBuffer.bufs[c].stride;
+            const Pel *     refPel = srcFrameInfo[i].picBuffer.bufs[c].buf + y * refStride + x;
             for( int y1 = 0; y1 < blockSizeY; y1++ )
             {
               for( int x1 = 0; x1 < blockSizeX; x1++ )
@@ -795,7 +791,7 @@ void EncTemporalFilter::bilateralFilter(const PelStorage &orgPic,
           const int error = srcFrameInfo[i].mvs.get(x / blockSizeX, y / blockSizeY).error;
           const int noise = srcFrameInfo[i].mvs.get(x / blockSizeX, y / blockSizeY).noise;
 #endif
-          const Pel *pCorrectedPelPtr = correctedPics[i].bufs[c].buf + (y * correctedPics[i].bufs[c].stride + x);
+          const Pel* pCorrectedPelPtr = srcFrameInfo[i].picBuffer.bufs[c].buf + (y * srcFrameInfo[i].picBuffer.bufs[c].stride + x);
           const int refVal = (int) *pCorrectedPelPtr;
           double diff = (double)(refVal - orgVal);
           diff *= bitDepthDiffWeighting;