diff --git a/Code/IO/otbGDALImageIO.cxx b/Code/IO/otbGDALImageIO.cxx
index ac0aef1919087a5ed87b3e5d61ecba9da9b56934..b2e25335e76940dd778b0db75495727c1b9f840f 100644
--- a/Code/IO/otbGDALImageIO.cxx
+++ b/Code/IO/otbGDALImageIO.cxx
@@ -772,17 +772,13 @@ void GDALImageIO::Write(const void* buffer)
     {
       itkExceptionMacro(<< "Error while writing image (GDAL format) " << m_FileName.c_str()<<".");
     }
+    m_poBands[nbComponents]->FlushCache();
   }
 
   delete [] value;
   value = NULL;
 
   m_poDataset->FlushCache();
-   if(m_poDataset != NULL)
-     {
-     GDALClose(m_poDataset);
-     m_poDataset = NULL;
-     }
 }
 
 /** TODO : Methode WriteImageInformation non implementee */
diff --git a/Code/IO/otbImageFileWriter.txx b/Code/IO/otbImageFileWriter.txx
index 267287be333774392c606bb5b930bbb85330e641..ea5f2ac0da9dc64f3ff7590cf63b00a76b76f5c6 100644
--- a/Code/IO/otbImageFileWriter.txx
+++ b/Code/IO/otbImageFileWriter.txx
@@ -73,7 +73,9 @@ ImageFileWriter<TInputImage>
                         itk::ImageIOFactory::WriteMode ) );
   this->SetNumberOfStreamDivisions( static_cast<unsigned int>( CalculateNumberOfStreamDivisions() ) );
   this->Superclass::Write();
-
+  //TODO: Force ImageIO desctructor. Should be fixed once GDALImageIO
+  //will be refactored.
+  this->SetImageIO(NULL);
 }
 
 /**