diff --git a/Modules/Filtering/ImageManipulation/test/CMakeLists.txt b/Modules/Filtering/ImageManipulation/test/CMakeLists.txt
index 834a6d3da072adf5c4dbc385d46db7931132de97..17035f96f66fe1d52562e23782a123d628688b83 100644
--- a/Modules/Filtering/ImageManipulation/test/CMakeLists.txt
+++ b/Modules/Filtering/ImageManipulation/test/CMakeLists.txt
@@ -624,7 +624,7 @@ otb_add_test(NAME bfTvClampImageFilterTest COMMAND otbImageManipulationTestDrive
   )
 
 otb_add_test(NAME bfTvClampImageFilterConversionTest COMMAND otbImageManipulationTestDriver
-  otbClampImageFilterConversionTest
+  otbClampImageFilterConversionFromRealTest
   ${INPUTDATA}/veryverySmallFSATSW.tif
   )
 
diff --git a/Modules/Filtering/ImageManipulation/test/otbClampImageFilter.cxx b/Modules/Filtering/ImageManipulation/test/otbClampImageFilter.cxx
index fa48af6d6ec69b0451d5240647a98713a6106802..20b2a9c3fe81d8f7f813735316b07b1022a07d17 100644
--- a/Modules/Filtering/ImageManipulation/test/otbClampImageFilter.cxx
+++ b/Modules/Filtering/ImageManipulation/test/otbClampImageFilter.cxx
@@ -115,7 +115,7 @@ CompareImageReal( const ImageRefType::Pointer imRef ,
       {
       return false;
       }
-    else if ( ref != static_cast<double>( val ) )
+    else if ( static_cast<RealPixelType>( ref ) !=  val )
       {
       return false;
       }
@@ -156,11 +156,12 @@ CompareVectorReal( const ImageRefType::Pointer imRef ,
         {
         return false;
         }
-      else if ( ref != static_cast<double>( val ) )
+      else if ( static_cast<RealPixelType>(ref) !=  val )
         {
         return false;
         }
       }
+    std::cout<<itRef.Get()<<std::endl;
     ++it;
     ++itRef;
     }
@@ -190,18 +191,18 @@ CompareImageComplex( const ImageRefType::Pointer imageRef ,
     val = it.Get();
     reRef = itRef.Get()[0];
     imRef = itRef.Get()[1];
-    if ( ( reRef > static_cast<double>( max ) && val.real != max )
-      || ( imRef > static_cast<double>( max ) && val.imag != max ) ) 
+    if ( ( reRef > static_cast<double>( max ) && val.real() != max )
+      || ( imRef > static_cast<double>( max ) && val.imag() != max ) ) 
       {
       return false;
       }
-    else if ( ( reRef < static_cast<double>( min ) && val.real != min )
-           || ( imRef < static_cast<double>( min ) && val.imag != min ) ) 
+    else if ( ( reRef < static_cast<double>( min ) && val.real() != min )
+           || ( imRef < static_cast<double>( min ) && val.imag() != min ) ) 
       {
       return false;
       }
-    else if ( reRef != static_cast<double>( val.real )
-           || imRef != static_cast<double>( val.imag ) )
+    else if ( static_cast<RealType>( reRef ) !=  val.real() 
+           || static_cast<RealType>( imRef ) !=  val.imag() )
       {
       return false;
       }
@@ -229,27 +230,29 @@ CompareVectorComplex( const ImageRefType::Pointer imageRef ,
   it.GoToBegin();
   unsigned int nbChanel = im->GetNumberOfComponentsPerPixel ();
   ComplexType val;
-  double reRef , imRef;
+  float reRef , imRef;
   while ( !it.IsAtEnd() )
     {
-    
     for (unsigned int i = 0 ; i < nbChanel ; i++ )
       {
       val = it.Get()[i];
       reRef = itRef.Get()[ 2 * i ];
       imRef = itRef.Get()[ 2 * i + 1 ];
-      if ( ( reRef > static_cast<double>( max ) && val.real != max )
-        || ( imRef > static_cast<double>( max ) && val.imag != max ) ) 
+      std::cout<<it.Get()[0].real()<<" , "<<it.Get()[0].imag()<<" ; "<<
+      it.Get()[1].real()<<" , "<<it.Get()[1].imag()<<std::endl;
+      std::cout<<itRef.Get()<<std::endl;
+      if ( ( reRef > static_cast<double>( max ) && val.real() != max )
+        || ( imRef > static_cast<double>( max ) && val.imag() != max ) ) 
         {
         return false;
         }
-      else if ( ( reRef < static_cast<double>( min ) && val.real != min )
-             || ( imRef < static_cast<double>( min ) && val.imag != min ) ) 
+      else if ( ( reRef < static_cast<double>( min ) && val.real() != min )
+             || ( imRef < static_cast<double>( min ) && val.imag() != min ) ) 
         {
         return false;
         }
-      else if ( reRef != static_cast<double>( val.real )
-             || imRef != static_cast<double>( val.imag ) )
+      else if ( static_cast<RealType>( reRef ) != val.real()
+             || static_cast<RealType>( imRef ) != val.imag() )
         {
         return false;
         }
@@ -260,17 +263,27 @@ CompareVectorComplex( const ImageRefType::Pointer imageRef ,
     return true;
 }
 
-int otbClampImageFilterConversionTest(int itkNotUsed(argc), char* argv[])
+int otbClampImageFilterConversionFromRealTest(int itkNotUsed(argc), char* argv[])
 {
   typedef otb::ImageFileReader< ImageRefType > ReaderType;
   ReaderType::Pointer reader ( ReaderType::New() );
   reader->SetFileName( argv[1] );
   reader->Update();
   ImageRefType::Pointer imageRef = reader->GetOutput();
-  otb::VectorImage<int>::Pointer image = 
-    Cross < otb::VectorImage< std::complex<float> >  , otb::VectorImage<int> > ( argv[1] );
-  bool test = CompareVectorReal < otb::VectorImage<int> >( imageRef , image );
-  if (test)
+  otb::VectorImage< std::complex<float>>::Pointer image1 = 
+    Cross < otb::VectorImage< float >  , otb::VectorImage<std::complex<float>> > ( argv[1] );
+  bool test1 = CompareVectorComplex < otb::VectorImage<std::complex<float>> >( imageRef , image1 );
+
+
+  otb::Image<double>::Pointer image2 = 
+    Cross < otb::VectorImage< float >  , otb::Image<double> > ( argv[1] );
+  bool test2 = CompareImageReal < otb::Image<double> >( imageRef , image2 );
+
+  otb::Image< std::complex<float>>::Pointer image3 = 
+    Cross < otb::VectorImage< float >  , otb::Image<std::complex<float>> > ( argv[1] );
+  bool test3 = CompareImageComplex < otb::Image<std::complex<float>> >( imageRef , image3 );
+
+  if (test1 && test2 && test3)
     return EXIT_SUCCESS;
   return 42;
 }
diff --git a/Modules/Filtering/ImageManipulation/test/otbImageManipulationTestDriver.cxx b/Modules/Filtering/ImageManipulation/test/otbImageManipulationTestDriver.cxx
index c5b59f8ef2d62eb790adf085e5c9121db5f28d4a..da2d733fb90ced66e8b741e946fd26755c486131 100644
--- a/Modules/Filtering/ImageManipulation/test/otbImageManipulationTestDriver.cxx
+++ b/Modules/Filtering/ImageManipulation/test/otbImageManipulationTestDriver.cxx
@@ -85,7 +85,7 @@ void RegisterTests()
   REGISTER_TEST(otbMultiplyByScalarImageFilterTest);
   REGISTER_TEST(otbClampImageFilterNew);
   REGISTER_TEST(otbClampImageFilterTest);
-  REGISTER_TEST(otbClampImageFilterConversionTest);
+  REGISTER_TEST(otbClampImageFilterConversionFromRealTest);
   REGISTER_TEST(otbConcatenateVectorImageFilter);
   REGISTER_TEST(otbBinaryImageMinimalBoundingRegionCalculatorNew);
   REGISTER_TEST(otbVectorRescaleIntensityImageFilterNew);