diff --git a/Testing/Code/IO/CMakeLists.txt b/Testing/Code/IO/CMakeLists.txt
index 8adb5844588b1d9830c14bdcc22eb7be014611f2..f7e593f458adde5c8b51d2af2ddbfda7f3aaf0e2 100644
--- a/Testing/Code/IO/CMakeLists.txt
+++ b/Testing/Code/IO/CMakeLists.txt
@@ -125,6 +125,7 @@ ADD_TEST(ioTvImageFileReaderWithComplexPixel_RADARSAT ${IO_TESTS1}
 ADD_TEST(ioTvImageFileReaderCompareComplexPixelWithFloatPixel_PALSAR ${IO_TESTS1}
          otbImageFileReaderCompareComplexPixelWithFloatPixelTest
          ${LARGEDATA}/PALSAR/200801280007/l1data/VOL-ALPSRP037120700-H1.1__A
+         ${TEMP}/ioTvImageFileReaderCompareComplexPixelWithFloatPixel_PALSAR.tif
          0 0 100 100)
 
 ENDIF(OTB_DATA_USE_LARGEINPUT)
diff --git a/Testing/Code/IO/otbImageFileReaderCompareComplexPixelWithFloatPixel.cxx b/Testing/Code/IO/otbImageFileReaderCompareComplexPixelWithFloatPixel.cxx
index e6116f4c7308392e15e67bd31a9111efbe096896..c5407fbb1b88f59f1b17e2c8ce1aaf8ce99bd23a 100644
--- a/Testing/Code/IO/otbImageFileReaderCompareComplexPixelWithFloatPixel.cxx
+++ b/Testing/Code/IO/otbImageFileReaderCompareComplexPixelWithFloatPixel.cxx
@@ -23,83 +23,106 @@
 #include "otbImage.h"
 #include "itkExceptionObject.h"
 #include "otbImageFileReader.h"
+#include "otbImageFileWriter.h"
 #include "otbExtractROI.h"
 #include "otbComplexToIntensityImageFilter.h"
 #include "itkComplexToRealImageFilter.h"
 #include "itkComplexToImaginaryImageFilter.h"
 #include "otbStreamingCompareImageFilter.h"
+#include "itkComplexToRealImageFilter.h"
+#include "itkComplexToImaginaryImageFilter.h"
+
 
 int otbImageFileReaderCompareComplexPixelWithFloatPixelTest(int argc, char* argv[])
 {
-  if (argc < 6)
+  if (argc < 7)
     {
-    std::cout << argv[0] << "<inputImage> <startX> <startY> <sizeX> <sizeY>"  << std::endl;
+    std::cout << argv[0] << "<inputImage> <outputImage> <startX> <startY> <sizeX> <sizeY>"  << std::endl;
     return EXIT_FAILURE;
     }
 
   const char * inputFilename  = argv[1];
-  unsigned int startX = (unsigned int)(::atoi(argv[2]));
-  unsigned int startY = (unsigned int)(::atoi(argv[3]));
-  unsigned int sizeX = (unsigned int)(::atoi(argv[4]));
-  unsigned int sizeY = (unsigned int)(::atoi(argv[5]));
+  const char * outputFilename  = argv[2];
+  unsigned int startX = (unsigned int)(::atoi(argv[3]));
+  unsigned int startY = (unsigned int)(::atoi(argv[4]));
+  unsigned int sizeX = (unsigned int)(::atoi(argv[5]));
+  unsigned int sizeY = (unsigned int)(::atoi(argv[6]));
 
   typedef std::complex<float> ComplexPixelType;
   typedef float               PixelType;
   const unsigned int Dimension = 2;
 
-  typedef otb::Image<PixelType,  Dimension> ImageType;
   typedef otb::Image<ComplexPixelType,  Dimension> ComplexImageType;
+  typedef otb::Image<PixelType,  Dimension>        ImageType;
+  typedef otb::ImageFileReader<ComplexImageType>   ReaderType;
+  typedef otb::ImageFileWriter<ComplexImageType>   WriterType;
+  typedef otb::ExtractROI<ComplexPixelType, ComplexPixelType>  ExtractROIFilterType;
+  typedef otb::StreamingCompareImageFilter<ImageType>          CompareFilterType;
+  typedef itk::ComplexToRealImageFilter<ComplexImageType, ImageType>     RealExtractorType;
+  typedef itk::ComplexToImaginaryImageFilter<ComplexImageType,ImageType> ImaginaryExtractorType;
+
+  ReaderType::Pointer reader = ReaderType::New();
+  reader->SetFileName(inputFilename);
+
+
+  ExtractROIFilterType::Pointer extractROIFilter = ExtractROIFilterType::New();
+  extractROIFilter->SetStartX(startX);
+  extractROIFilter->SetStartY(startY);
+  extractROIFilter->SetSizeX(sizeX);
+  extractROIFilter->SetSizeY(sizeY);
+  extractROIFilter->SetInput(reader->GetOutput());
 
-  typedef otb::ImageFileReader<ImageType>  FloatReaderType;
-  typedef otb::ImageFileReader<ComplexImageType>  ComplexReaderType;
+  WriterType::Pointer writer = WriterType::New();
+  writer->SetFileName(outputFilename);
+  writer->SetInput(extractROIFilter->GetOutput());
+  writer->Update();
 
-  ComplexReaderType::Pointer complexReader = ComplexReaderType::New();
-  FloatReaderType::Pointer floatReader = FloatReaderType::New();
+  std::cout << "Write " << std::endl;
 
-  complexReader->SetFileName(inputFilename);
-  floatReader->SetFileName(inputFilename);
+  ReaderType::Pointer readerAfterWrite = ReaderType::New();
+  readerAfterWrite->SetFileName(outputFilename);
+  readerAfterWrite->Update();
 
-  typedef otb::ExtractROI<PixelType, PixelType>  FloatExtractROIFilterType;
-  typedef otb::ExtractROI<ComplexPixelType, ComplexPixelType>  ComplexExtractROIFilterType;
+  /* Compare Real Part */
+  RealExtractorType::Pointer realExtractor = RealExtractorType::New();
+  RealExtractorType::Pointer realExtractorAfterWrite = RealExtractorType::New();
 
-  ComplexExtractROIFilterType::Pointer complexExtractROIFilter = ComplexExtractROIFilterType::New();
-  FloatExtractROIFilterType::Pointer floatExtractROIFilter = FloatExtractROIFilterType::New();
+  realExtractor->SetInput(extractROIFilter->GetOutput());
+  realExtractorAfterWrite->SetInput(readerAfterWrite->GetOutput());
 
-  floatExtractROIFilter->SetStartX(startX);
-  floatExtractROIFilter->SetStartY(startY);
-  floatExtractROIFilter->SetSizeX(sizeX);
-  floatExtractROIFilter->SetSizeY(sizeY);
-  floatExtractROIFilter->SetInput(floatReader->GetOutput());
+  CompareFilterType::Pointer compareRealPartFilter = CompareFilterType::New();
+  compareRealPartFilter->SetInput1(realExtractor->GetOutput());
+  compareRealPartFilter->SetInput2(realExtractorAfterWrite->GetOutput());
+  compareRealPartFilter->Update();
 
-  complexExtractROIFilter->SetStartX(startX);
-  complexExtractROIFilter->SetStartY(startY);
-  complexExtractROIFilter->SetSizeX(sizeX);
-  complexExtractROIFilter->SetSizeY(sizeY);
-  complexExtractROIFilter->SetInput(complexReader->GetOutput());
+  /* Compare Imaginary Part */
+  ImaginaryExtractorType::Pointer imagExtractor = ImaginaryExtractorType::New();
+  ImaginaryExtractorType::Pointer imagExtractorAfterWrite = ImaginaryExtractorType::New();
 
-  typedef itk::ComplexToRealImageFilter<ComplexImageType, ImageType> RealPartFilterType;
-  RealPartFilterType::Pointer realPart = RealPartFilterType::New();
-  realPart->SetInput(complexExtractROIFilter->GetOutput());
+  imagExtractor->SetInput(extractROIFilter->GetOutput());
+  imagExtractorAfterWrite->SetInput(readerAfterWrite->GetOutput());
 
-  typedef otb::StreamingCompareImageFilter<ImageType> CompareFilterType;
-  CompareFilterType::Pointer compareWithRealPartFilter = CompareFilterType::New();
-  compareWithRealPartFilter->SetInput1(floatExtractROIFilter->GetOutput());
-  compareWithRealPartFilter->SetInput2(realPart->GetOutput());
-  compareWithRealPartFilter->Update();
+  CompareFilterType::Pointer compareImagPartFilter = CompareFilterType::New();
+  compareImagPartFilter->SetInput1(imagExtractor->GetOutput());
+  compareImagPartFilter->SetInput2(imagExtractorAfterWrite->GetOutput());
+  compareImagPartFilter->Update();
 
-  typedef itk::ComplexToImaginaryImageFilter<ComplexImageType, ImageType> ImagPartFilterType;
-  ImagPartFilterType::Pointer imagPart = ImagPartFilterType::New();
-  imagPart->SetInput(complexExtractROIFilter->GetOutput());
+  std::cout << " Real Part comparison : " << compareRealPartFilter->GetMSE()<< std::endl;
+  std::cout << " Imaginary Part comparison : " << compareImagPartFilter->GetMSE()<< std::endl;
 
-  CompareFilterType::Pointer compareWithImagPartFilter = CompareFilterType::New();
-  compareWithImagPartFilter->SetInput1(floatExtractROIFilter->GetOutput());
-  compareWithImagPartFilter->SetInput2(imagPart->GetOutput());
-  compareWithImagPartFilter->Update();
 
-  if( compareWithRealPartFilter->GetMSE() > 0.0 ||
-      compareWithImagPartFilter->GetMSE() < 0.0000001 )
+  if( compareRealPartFilter->GetMSE() > 0.0 )
     {
+    std::cout << " Real part not the same " << std::endl;
     return EXIT_FAILURE;
     }
+
+  if( compareImagPartFilter->GetMSE() > 0.0 )
+    {
+    std::cout << " Imaginary part not the same" << std::endl;
+    return EXIT_FAILURE;
+    }
+
+
   return EXIT_SUCCESS;
 }