diff --git a/Code/IO/otbImage.h b/Code/IO/otbImage.h
index 7b017afe54452f3dec426d57f8c19c17e27a1b16..c195513938500bc46248669a5b5525fc00a36fd2 100755
--- a/Code/IO/otbImage.h
+++ b/Code/IO/otbImage.h
@@ -31,7 +31,7 @@ namespace otb
  */
 template <class TPixel, unsigned int VImageDimension=2> 
 class ITK_EXPORT Image : public itk::Image<TPixel, VImageDimension>,
-			 public ImageBase
+			 public otb::ImageBase
 {
 public: 
 
@@ -53,31 +53,31 @@ public:
   itkTypeMacro(Image, itk::Image);
 
   /** Get the projection coordinate system of the image. */
-  std::string GetProjectionRef( void );
+  virtual std::string GetProjectionRef( void );
   
   /** Get the GCP projection coordinates of the image. */
-  std::string GetGCPProjection( void );
+  virtual std::string GetGCPProjection( void );
   
-  unsigned int GetGCPCount( void );
+  virtual unsigned int GetGCPCount( void );
   
-  OTB_GCP & GetGCPs ( unsigned int GCPnum );
+  virtual OTB_GCP & GetGCPs ( unsigned int GCPnum );
     
-  std::string GetGCPId( unsigned int GCPnum );   
-  std::string GetGCPInfo( unsigned int GCPnum );
-  double GetGCPRow( unsigned int GCPnum ); 
-  double GetGCPCol( unsigned int GCPnum ); 	
-  double GetGCPX( unsigned int GCPnum ); 
-  double GetGCPY( unsigned int GCPnum ); 
-  double GetGCPZ( unsigned int GCPnum );
+  virtual std::string GetGCPId( unsigned int GCPnum );   
+  virtual std::string GetGCPInfo( unsigned int GCPnum );
+  virtual double GetGCPRow( unsigned int GCPnum ); 
+  virtual double GetGCPCol( unsigned int GCPnum ); 	
+  virtual double GetGCPX( unsigned int GCPnum ); 
+  virtual double GetGCPY( unsigned int GCPnum ); 
+  virtual double GetGCPZ( unsigned int GCPnum );
   
   /** Get the six coefficients of affine geoTtransform. */
-  VectorType GetGeoTransform( void ); 
+  virtual VectorType GetGeoTransform( void ); 
   
   /** Get image corners. */
-  VectorType GetUpperLeftCorner( void );
-  VectorType GetUpperRightCorner( void );
-  VectorType GetLowerLeftCorner( void );
-  VectorType GetLowerRightCorner( void );
+  virtual VectorType GetUpperLeftCorner( void );
+  virtual VectorType GetUpperRightCorner( void );
+  virtual VectorType GetLowerLeftCorner( void );
+  virtual VectorType GetLowerRightCorner( void );
   
   void PrintSelf(std::ostream& os, Indent indent) const;
 
diff --git a/Code/IO/otbImage.txx b/Code/IO/otbImage.txx
index e6a8a0ce3d02ee38e38f116bd9b34ae5811916d7..cc1fd1f1bc15bfee394e9186caa33b0dbb904780 100755
--- a/Code/IO/otbImage.txx
+++ b/Code/IO/otbImage.txx
@@ -9,7 +9,8 @@
   $Id: $
 
 =========================================================================*/
-
+#ifndef __otbImage_txx
+#define __otbImage_txx
 
 #ifdef _MSC_VER
 #pragma warning ( disable : 4786 )
@@ -98,25 +99,25 @@ ImageBase::VectorType Image<TPixel, VImageDimension>::GetGeoTransform( void )
 }
 
 template <class TPixel, unsigned int VImageDimension>   
-ImageBase::  VectorType Image<TPixel, VImageDimension>::GetUpperLeftCorner( void )
+ImageBase::VectorType Image<TPixel, VImageDimension>::GetUpperLeftCorner( void )
 {
    return ( this->ImageBase::GetUpperLeftCorner( this->GetMetaDataDictionary() ) );	
 }
 
 template <class TPixel, unsigned int VImageDimension>   
-ImageBase::  VectorType Image<TPixel, VImageDimension>::GetUpperRightCorner( void )
+ImageBase::VectorType Image<TPixel, VImageDimension>::GetUpperRightCorner( void )
 {
    return ( this->ImageBase::GetUpperRightCorner( this->GetMetaDataDictionary() ) );	
 }
 
 template <class TPixel, unsigned int VImageDimension>   
-ImageBase::  VectorType Image<TPixel, VImageDimension>::GetLowerLeftCorner( void )
+ImageBase::VectorType Image<TPixel, VImageDimension>::GetLowerLeftCorner( void )
 {
    return ( this->ImageBase::GetLowerLeftCorner( this->GetMetaDataDictionary() ) );	
 }
 
 template <class TPixel, unsigned int VImageDimension>   
-ImageBase::  VectorType Image<TPixel, VImageDimension>::GetLowerRightCorner( void )
+ImageBase::VectorType Image<TPixel, VImageDimension>::GetLowerRightCorner( void )
 {
    return ( this->ImageBase::GetLowerRightCorner( this->GetMetaDataDictionary() ) );	
 }
@@ -133,4 +134,4 @@ Image<TPixel, VImageDimension>::PrintSelf(std::ostream& os, Indent indent) const
 
 
 } // end namespace otb
-
+#endif
diff --git a/Code/IO/otbImageBase.txx b/Code/IO/otbImageBase.cxx
similarity index 98%
rename from Code/IO/otbImageBase.txx
rename to Code/IO/otbImageBase.cxx
index 3a27d9769e736be166159d40e7498cd870a4c5a4..80c3082e376f285784541caecd423b232925cf94 100755
--- a/Code/IO/otbImageBase.txx
+++ b/Code/IO/otbImageBase.cxx
@@ -75,7 +75,7 @@ OTB_GCP & ImageBase::GetGCPs(MetaDataDictionaryType & dict, unsigned int GCPnum
   std::string key;
   
   ::itk::OStringStream lStream;
-  lStream << MetaDataKey::m_GCPParametersKey << GCPnum;
+  lStream << MetaDataKey::m_GCPParametersKey << GCPnum;
   key = lStream.str(); 
   
   if(dict.HasKey(key))
@@ -91,7 +91,7 @@ std::string ImageBase::GetGCPId(MetaDataDictionaryType & dict, unsigned int GCPn
   std::string key;
   
   ::itk::OStringStream lStream;
-  lStream << MetaDataKey::m_GCPParametersKey << GCPnum;
+  lStream << MetaDataKey::m_GCPParametersKey << GCPnum;
   key = lStream.str(); 
   
   if(dict.HasKey(key))
@@ -108,7 +108,7 @@ std::string ImageBase::GetGCPInfo(MetaDataDictionaryType & dict, unsigned int GC
   std::string key;
   
   ::itk::OStringStream lStream;
-  lStream << MetaDataKey::m_GCPParametersKey << GCPnum;
+  lStream << MetaDataKey::m_GCPParametersKey << GCPnum;
   key = lStream.str(); 
   
   if(dict.HasKey(key))
@@ -125,7 +125,7 @@ double ImageBase::GetGCPRow(MetaDataDictionaryType & dict, unsigned int GCPnum )
   std::string key;
   
   ::itk::OStringStream lStream;
-  lStream << MetaDataKey::m_GCPParametersKey << GCPnum;
+  lStream << MetaDataKey::m_GCPParametersKey << GCPnum;
   key = lStream.str(); 
   
 
@@ -143,7 +143,7 @@ double ImageBase::GetGCPCol(MetaDataDictionaryType & dict, unsigned int GCPnum )
   std::string key;
   
   ::itk::OStringStream lStream;
-  lStream << MetaDataKey::m_GCPParametersKey << GCPnum;
+  lStream << MetaDataKey::m_GCPParametersKey << GCPnum;
   key = lStream.str(); 
   
 
@@ -161,7 +161,7 @@ double ImageBase::GetGCPX(MetaDataDictionaryType & dict, unsigned int GCPnum )
   std::string key;
   
   ::itk::OStringStream lStream;
-  lStream << MetaDataKey::m_GCPParametersKey << GCPnum;
+  lStream << MetaDataKey::m_GCPParametersKey << GCPnum;
   key = lStream.str(); 
       
   if(dict.HasKey(key))
@@ -178,7 +178,7 @@ double ImageBase::GetGCPY(MetaDataDictionaryType & dict, unsigned int GCPnum )
   std::string key;
   
   ::itk::OStringStream lStream;
-  lStream << MetaDataKey::m_GCPParametersKey << GCPnum;
+  lStream << MetaDataKey::m_GCPParametersKey << GCPnum;
   key = lStream.str(); 
   
   if(dict.HasKey(key))
@@ -195,7 +195,7 @@ double ImageBase::GetGCPZ(MetaDataDictionaryType & dict, unsigned int GCPnum )
   std::string key;
   
   ::itk::OStringStream lStream;
-  lStream << MetaDataKey::m_GCPParametersKey << GCPnum;
+  lStream << MetaDataKey::m_GCPParametersKey << GCPnum;
   key = lStream.str(); 
      
   if(dict.HasKey(key))
@@ -263,7 +263,7 @@ ImageBase::VectorType ImageBase::GetLowerRightCorner( MetaDataDictionaryType & d
 }   
 
 void
-ImageBase::PrintSelf(std::ostream& os, Indent indent, const MetaDataDictionaryType & dict) const
+ImageBase::PrintSelf(std::ostream& os, itk::Indent indent, const MetaDataDictionaryType & dict) const
 { 
 
   std::vector<std::string> keys = dict.GetKeys();
diff --git a/Code/IO/otbImageBase.h b/Code/IO/otbImageBase.h
index 2dee98e9d50fa94c98087a196f803015f9c4465c..30e8534fe9c00fe18fec906fe742ee22caa2b7c8 100755
--- a/Code/IO/otbImageBase.h
+++ b/Code/IO/otbImageBase.h
@@ -16,11 +16,9 @@
 #pragma warning ( disable : 4786 )
 #endif
 
-#include "itkImageBase.h"
-#include "itkIndent.h"
+#include "itkMetaDataDictionary.h"
 
 #include "otbMetaDataKey.h"
-#include <gdal.h>
 
 #include <iostream>
 #include <string>
@@ -103,7 +101,6 @@ public:
   void PrintSelf(std::ostream& os, Indent indent, const MetaDataDictionaryType & dict) const;
                  
 
-protected:
   ImageBase();
   virtual ~ImageBase(){};
     
@@ -114,12 +111,8 @@ private:
   OTB_GCP m_GCP;
   
 };
-  
+
   
 } // end namespace otb
 
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbImageBase.txx"
-#endif
-
 #endif
diff --git a/Code/IO/otbMetaDataKey.h b/Code/IO/otbMetaDataKey.h
index 387500138d760e2f5f85396354b0366e3fc0a01b..854f6f2ba7f8c806f92e3c5a8bbbd68bf3adeb71 100755
--- a/Code/IO/otbMetaDataKey.h
+++ b/Code/IO/otbMetaDataKey.h
@@ -31,7 +31,7 @@ namespace otb
  * key of metadata used in the metadata dictionary.
  *
  */
-class /*ITK_EXPORT*/ MetaDataKey
+class ITK_EXPORT MetaDataKey
 {
 public:
 
diff --git a/Testing/Code/IO/CMakeLists.txt b/Testing/Code/IO/CMakeLists.txt
index 25d6e42bd3fcaa0cfa7c0f4c83066ba80716ca20..487910430ff36baee92c531ccd33bf17d8282899 100755
--- a/Testing/Code/IO/CMakeLists.txt
+++ b/Testing/Code/IO/CMakeLists.txt
@@ -3,6 +3,7 @@
 IF( NOT OTB_DISABLE_CXX_TESTING )
 
 SET(BASELINE ${OTB_DATA_ROOT}/Baseline/Images)
+SET(BASELINE_FILES ${OTB_DATA_ROOT}/Baseline/Files)
 SET(INPUTDATA ${OTB_DATA_ROOT}/Input)
 SET(TEMP ${OTBTesting_BINARY_DIR}/Temporary)
 #Images de teledetection (grosses images )
@@ -304,11 +305,6 @@ ADD_TEST(ioTvMultiChannelROI_SPOT52PNG_5 ${COMMON_TESTS}
          -startX 700 -startY 700 -sizeX 1000 -sizeY 1000
          -channels 4 )
 
-ADD_TEST(ioTuotbImageTest ${IO_TESTS} 
-         otbImageTest
-         ${IMAGEDATA}/SAR_ERS2_SLCI_SCENE1/DAT_01.001
-         )
-
 # ---  Ikonos PAN  ---
 ADD_TEST(ioTvMultiChannelROI_IkonosPAN2PNG ${COMMON_TESTS} 
 #   --compare-image ${TOL}   ${BASELINE}/ioExtractROI_IkonosPAN2PNG_100_100_77_300.png
@@ -349,9 +345,39 @@ ADD_TEST(ioTvMultiChannelROI_QuickbirdXS2PNG ${COMMON_TESTS}
          -startX 100 -startY 100 -sizeX 77 -sizeY 300
          -channels 1 2 3)
 
-
-
-
+ADD_TEST(ioTuOtbImageTestSAR_ERS ${IO_TESTS} 
+   --compare-ascii   ${BASELINE_FILES}/ioOtbImageTestSAR_ERS.txt
+                     ${TEMP}/ioOtbImageTestSAR_ERS.txt
+         otbImageTest
+         ${IMAGEDATA}/SAR_ERS2_SLCI_SCENE1/DAT_01.001
+         ${TEMP}/ioOtbImageTestSAR_ERS.txt)
+
+# ---  Otb::Image Test  ---
+ADD_TEST(ioTuOtbImageTestRadarsat ${IO_TESTS} 
+   --compare-ascii   ${BASELINE_FILES}/ioOtbImageTestRadarsat.txt
+                     ${TEMP}/ioOtbImageTestRadarsat.txt
+        otbImageTest
+       	${IMAGEDATA}/RADARSAT1/SCENE01/
+        ${TEMP}/ioOtbImageTestRadarsat.txt)
+
+# ---  Otb::VectorImage Test  ---
+ADD_TEST(ioTuOtbVectorImageTestRadarsat ${IO_TESTS} 
+   --compare-ascii   ${BASELINE_FILES}/ioOtbVectorImageTestRadarsat.txt
+                     ${TEMP}/ioOtbVectorImageTestRadarsat.txt
+        otbVectorImageTest
+        ${IMAGEDATA}/RADARSAT1/SCENE01/
+        ${TEMP}/ioOtbVectorImageTestRadarsat.txt)
+
+
+# ---  Otb::VectorImage Test  ---
+ADD_TEST(ioTuOtbVectorImageTestSpot5 ${IO_TESTS} 
+   --compare-ascii   ${BASELINE_FILES}/ioOtbVectorImageTestSpot5.txt
+                     ${TEMP}/ioOtbVectorImageTestSpot5.txt
+        otbVectorImageTest
+        ${IMAGEDATA}/SPOT5_SCENE01/IMAGERY.TIF
+        ${TEMP}/ioOtbVectorImageTestSpot5.txt)
+        
+        
 SET(BasicIO_SRCS
 otbGDALImageIOTestCanRead.cxx
 otbCAIImageIOTestCanRead.cxx
@@ -361,10 +387,11 @@ otbImageFileWriterTest.cxx
 otbVectorImageFileReaderWriterTest.cxx
 otbImageFileReaderRGBTest.cxx
 otbImageFileWriterRGBTest.cxx
-otbImageTest.cxx
 otbMultiToMonoChannelExtractROISAR.cxx
 otbImageFileReaderERS.cxx
 otbStreamingImageFilterTest.cxx
+otbImageTest.cxx
+otbVectorImageTest.cxx
 )
 
 INCLUDE_DIRECTORIES("${OTBTesting_BINARY_DIR}")
diff --git a/Testing/Code/IO/otbIOTests.cxx b/Testing/Code/IO/otbIOTests.cxx
index 5592b6c520136ec95a64f927905666a649ac6552..35108488425e14c3d5834f409e01858600c1bb24 100755
--- a/Testing/Code/IO/otbIOTests.cxx
+++ b/Testing/Code/IO/otbIOTests.cxx
@@ -23,4 +23,5 @@ REGISTER_TEST(otbImageTest);
 REGISTER_TEST(otbMultiToMonoChannelExtractROISAR);
 REGISTER_TEST(otbImageFileReaderERS);
 REGISTER_TEST(otbStreamingImageFilterTest);
+REGISTER_TEST(otbVectorImageTest);
 }
diff --git a/Testing/Code/IO/otbImageTest.cxx b/Testing/Code/IO/otbImageTest.cxx
index 10d4e5ab699eeb2ded5a229c90895e87c8863cff..12e4a606dcc9a9b6ca168c8eb9fa3ddac0e93d59 100755
--- a/Testing/Code/IO/otbImageTest.cxx
+++ b/Testing/Code/IO/otbImageTest.cxx
@@ -18,11 +18,11 @@
 
 #include "itkExceptionObject.h"
 #include <iostream>
+#include <fstream>
 #include <string>
 
 #include "otbImage.h"
 #include "otbImageFileReader.h"
-#include "otbMetaDataKey.h"
 
 
 int otbImageTest(int argc, char* argv[])
@@ -31,11 +31,16 @@ int otbImageTest(int argc, char* argv[])
   {
         // Verify the number of parameters in the command line
         const char * inputFilename  = argv[1];
+        const char * outputAsciiFilename  = argv[2];
       //  unsigned int  GCPnum((unsigned int)::atoi(argv[2]));
 
         typedef unsigned char  	                                InputPixelType;
         const   unsigned int        	                        Dimension = 2;
 
+	std::ofstream file;
+	
+	file.open(outputAsciiFilename);
+
         typedef otb::Image< InputPixelType,  Dimension >        InputImageType;
         
         InputImageType::Pointer image = InputImageType::New();
@@ -50,70 +55,74 @@ int otbImageTest(int argc, char* argv[])
 
 	image = reader->GetOutput();
 	
+	file << "------ IMAGE --------" << std::endl;
 	std::cout << "------ IMAGE --------" << std::endl;
+// Image n'est pas ecrit dans le fichier car des pointeurs sont affichés, donc la valeur dépend de l'instanciation 
+// -> pour pouvoir faire de tests de non regression sur la sortie ecrite dans le fichier ASCII
 	std::cout << image << std::endl;	
 	std::cout << "---------------------" << std::endl;
 	
-	std::cout << "Spacing " << image->GetSpacing() << std::endl;
-	std::cout << "Origin " << image->GetOrigin() << std::endl;
+	file << "Spacing " << image->GetSpacing() << std::endl;
+	file << "Origin " << image->GetOrigin() << std::endl;
 	
-	std::cout << "Projection REF " << image->GetProjectionRef() << std::endl;
+	file << "Projection REF " << image->GetProjectionRef() << std::endl;
 		 
-	std::cout << "GCP Projection " << image->GetGCPProjection() << std::endl;
+	file << "GCP Projection " << image->GetGCPProjection() << std::endl;
 	
 	unsigned int GCPCount = image->GetGCPCount();	
-	std::cout << "GCP Count " << image->GetGCPCount() << std::endl; 
+	file << "GCP Count " << image->GetGCPCount() << std::endl; 
 	
 	for(unsigned int GCPnum = 0 ; GCPnum < GCPCount ; GCPnum++ )
 	{
-		std::cout << "GCP[" << GCPnum << "] Id " << image->GetGCPId(GCPnum) << std::endl;
-		std::cout << "GCP[" << GCPnum << "] Info " << image->GetGCPInfo(GCPnum) << std::endl;
-		std::cout << "GCP[" << GCPnum << "] Row " << image->GetGCPRow(GCPnum) << std::endl;
-		std::cout << "GCP[" << GCPnum << "] Col " << image->GetGCPCol(GCPnum) << std::endl;
-		std::cout << "GCP[" << GCPnum << "] X " << image->GetGCPX(GCPnum) << std::endl;
-		std::cout << "GCP[" << GCPnum << "] Y " << image->GetGCPY(GCPnum) << std::endl;
-		std::cout << "GCP[" << GCPnum << "] Z " << image->GetGCPZ(GCPnum) << std::endl;
-		std::cout << "----------------" << std::endl;
+		file << "GCP[" << GCPnum << "] Id " << image->GetGCPId(GCPnum) << std::endl;
+		file << "GCP[" << GCPnum << "] Info " << image->GetGCPInfo(GCPnum) << std::endl;
+		file << "GCP[" << GCPnum << "] Row " << image->GetGCPRow(GCPnum) << std::endl;
+		file << "GCP[" << GCPnum << "] Col " << image->GetGCPCol(GCPnum) << std::endl;
+		file << "GCP[" << GCPnum << "] X " << image->GetGCPX(GCPnum) << std::endl;
+		file << "GCP[" << GCPnum << "] Y " << image->GetGCPY(GCPnum) << std::endl;
+		file << "GCP[" << GCPnum << "] Z " << image->GetGCPZ(GCPnum) << std::endl;
+		file << "----------------" << std::endl;
 	}
 	
 	InputImageType::VectorType tab = image->GetGeoTransform();
 
-	std::cout << "Geo Transform " << std::endl;
+	file << "Geo Transform " << std::endl;
 	for(int i = 0 ; i < tab.size() ; i++ )
 	{
-		std::cout << " " <<i<<" -> "<<tab[i]<< std::endl;
+		file << " " <<i<<" -> "<<tab[i]<< std::endl;
 	}
 	tab.clear();
 	
 	tab = image->GetUpperLeftCorner();
-	std::cout << "Corners " << std::endl;
+	file << "Corners " << std::endl;
 	for(int i = 0 ; i < tab.size() ; i++ )
 	{
-		std::cout << " UL[" <<i<<"] -> "<<tab[i]<< std::endl;
+		file << " UL[" <<i<<"] -> "<<tab[i]<< std::endl;
 	}
 	tab.clear();
 		
 	tab = image->GetUpperRightCorner();
 	for(int i = 0 ; i < tab.size() ; i++ )
 	{
-		std::cout << " UR[" <<i<<"] -> "<<tab[i]<< std::endl;
+		file << " UR[" <<i<<"] -> "<<tab[i]<< std::endl;
 	}
 	tab.clear();
 		
 	tab = image->GetLowerLeftCorner();
 	for(int i = 0 ; i < tab.size() ; i++ )
 	{
-		std::cout << " LL[" <<i<<"] -> "<<tab[i]<< std::endl;
+		file << " LL[" <<i<<"] -> "<<tab[i]<< std::endl;
 	}
 	tab.clear();
 			
 	tab = image->GetLowerRightCorner();
 	for(int i = 0 ; i < tab.size() ; i++ )
 	{
-		std::cout << " LR[" <<i<<"] -> "<<tab[i]<< std::endl;
+		file << " LR[" <<i<<"] -> "<<tab[i]<< std::endl;
 	}	
 	tab.clear();
 		
+	file.close();
 	
   } 
   catch( itk::ExceptionObject & err )