diff --git a/Testing/Code/IO/CMakeLists.txt b/Testing/Code/IO/CMakeLists.txt
index 4b89ca0b525791df4c2f8da51c2352fc44301f18..0e1940787c593f991976cf2f9a42103489ccc1f1 100755
--- a/Testing/Code/IO/CMakeLists.txt
+++ b/Testing/Code/IO/CMakeLists.txt
@@ -141,6 +141,13 @@ ADD_TEST(ioTvONERAImageFileReader ${IO_TESTS}
         ${IMAGEDATA}/ONERA/spa3_0215_rad.ent
         ${TEMP}/ioImageFileReaderONERA.png )
 
+ADD_TEST(ioTvONERAImageFileReaderComplex ${IO_TESTS} 
+#  --compare-image ${TOL}   ${BASELINE}/ioImageFileReaderPNG2PNG_cthead1.png
+#                    ${TEMP}/ioImageFileReaderPNG2PNG_cthead1.png
+        otbImageFileReaderONERAComplex
+        ${IMAGEDATA}/ONERA/spa3_0215_rad.ent
+        ${TEMP}/ioImageFileReaderONERAComplex.hd )
+
 # -------            otb::ImageFileReader pour CAI  ------------------------------
 # Niveau de Gris
 ADD_TEST(ioTvImageFileReaderPNG2PNG ${IO_TESTS} 
@@ -496,6 +503,7 @@ otbGDALImageIOTestCanRead.cxx
 otbCAIImageIOTestCanRead.cxx
 otbONERAImageIOTestCanRead.cxx
 otbImageFileReaderONERA.cxx
+otbImageFileReaderONERAComplex.cxx
 otbCAIImageIOTestCanWrite.cxx
 otbImageFileReaderTest.cxx
 otbImageFileWriterTest.cxx
diff --git a/Testing/Code/IO/otbIOTests.cxx b/Testing/Code/IO/otbIOTests.cxx
index e9aa9b29290d4e6920aa3312afca8d3b219007fe..a9f7fd1e298e0679cd0d5a4ca892b361a52a73a7 100755
--- a/Testing/Code/IO/otbIOTests.cxx
+++ b/Testing/Code/IO/otbIOTests.cxx
@@ -24,6 +24,7 @@ REGISTER_TEST(otbImageTest);
 REGISTER_TEST(otbMultiToMonoChannelExtractROISAR);
 REGISTER_TEST(otbImageFileReaderERS);
 REGISTER_TEST(otbImageFileReaderONERATest);
+REGISTER_TEST(otbImageFileReaderONERAComplex);
 REGISTER_TEST(otbStreamingImageFilterTest);
 REGISTER_TEST(otbStreamingImageFileWriterTest);
 REGISTER_TEST(otbVectorImageTest);
diff --git a/Testing/Code/IO/otbImageFileReaderONERAComplex.cxx b/Testing/Code/IO/otbImageFileReaderONERAComplex.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..8291711a9b68e35598355cce0b42cc88d7e03a37
--- /dev/null
+++ b/Testing/Code/IO/otbImageFileReaderONERAComplex.cxx
@@ -0,0 +1,104 @@
+// $Id$
+#if defined(_MSC_VER)
+#pragma warning ( disable : 4786 )
+#endif
+
+//#define MAIN
+
+
+#include "itkImage.h"
+#include "itkVectorImage.h"
+#include "itkExceptionObject.h"
+#include <iostream>
+#include "itkComplexToModulusImageFilter.h"
+#include "itkStreamingImageFilter.h"
+#include "otbImageFileReader.h"
+#include "otbImageFileWriter.h"
+
+int otbImageFileReaderONERAComplex(int argc, char* argv[])
+{
+  try
+  {
+        // Verify the number of parameters in the command line
+        const char * inputFilename  = argv[1];
+        const char * outputFilename = argv[2];
+
+        typedef std::complex<float>  	                        InputPixelType;
+        typedef float                             		OutputPixelType;
+        const   unsigned int        	                        Dimension = 2;
+
+        typedef itk::Image< InputPixelType,  Dimension >        InputImageType;
+        typedef itk::Image< OutputPixelType, Dimension >        OutputImageType;
+
+        typedef otb::ImageFileReader< InputImageType  >         ReaderType;
+        typedef otb::ImageFileWriter< OutputImageType >         WriterType;
+
+        typedef itk::StreamingImageFilter< InputImageType, InputImageType >         StreamingType;
+	
+        StreamingType::Pointer streaming = StreamingType::New();
+        ReaderType::Pointer complexReader = ReaderType::New();
+ 
+	complexReader->SetFileName( inputFilename  );
+	streaming->SetNumberOfStreamDivisions(100);
+	streaming->SetInput(complexReader->GetOutput());
+	streaming->Update();
+
+
+	InputImageType::Pointer image = streaming->GetOutput();
+	InputImageType::IndexType pixelIndex;
+	InputImageType::PixelType      pixelValue;
+	pixelIndex[0] = 0;      // x position of the pixel
+	pixelIndex[1] = 0;      // y position of the pixel
+        pixelValue = image->GetPixel( pixelIndex );
+	std::cout << " PixelValue : ("<< pixelIndex[0]<<" , "<< pixelIndex[1]<<" ) = "<< pixelValue << std::endl;
+
+  	typedef itk::ComplexToModulusImageFilter< 
+                       InputImageType, OutputImageType > ModulusFilterType;
+
+  	ModulusFilterType::Pointer modulusFilter = ModulusFilterType::New();
+  	modulusFilter->SetInput( complexReader->GetOutput() );
+//	modulusFilter->Update(); 
+        modulusFilter->Update(); 
+
+	OutputImageType::Pointer module = modulusFilter->GetOutput();
+        
+	InputImageType::PixelType       complexValue;
+	OutputImageType::PixelType      modulusValue;
+
+	for(unsigned int x = 100 ; x < 200 ; x++ )
+	{ 
+	  for(unsigned int y = 100 ; y < 200 ; y++ )
+	  {
+	  pixelIndex[0] = x;      // x position of the pixel
+	  pixelIndex[1] = y;      // y position of the pixel
+
+	  complexValue = image->GetPixel( pixelIndex );
+	  modulusValue = module->GetPixel( pixelIndex );
+	  std::cout << " PixelValue : ("<< pixelIndex[0]<<" , "<< pixelIndex[1]<<" ) = "<< complexValue << std::endl;
+	  std::cout << " PixelValue : ("<< pixelIndex[0]<<" , "<< pixelIndex[1]<<" ) = "<< modulusValue << std::endl;
+          }
+	}
+	
+
+        WriterType::Pointer writer = WriterType::New();
+	
+        writer->SetFileName( outputFilename );        
+        writer->SetInput( modulusFilter->GetOutput() );
+        writer->Update(); 
+
+  } 
+  catch( itk::ExceptionObject & err ) 
+  { 
+    std::cerr << "Exception OTB attrappee dans exception ITK !" << std::endl; 
+    std::cerr << err << std::endl; 
+    return EXIT_FAILURE;
+  } 
+  catch( ... )
+  {
+    std::cerr << "Exception OTB non attrappee !" << std::endl; 
+    return EXIT_FAILURE;
+  }
+  
+  return EXIT_SUCCESS;
+}
+