diff --git a/Code/IO/otbGDALImageIO.cxx b/Code/IO/otbGDALImageIO.cxx
index 6c7067ea63452440f43555481fdce8a601ec76cc..a6c21f573035d7d510e475e838321292361ec141 100755
--- a/Code/IO/otbGDALImageIO.cxx
+++ b/Code/IO/otbGDALImageIO.cxx
@@ -54,6 +54,7 @@ GDALImageIO::GDALImageIO()
 
   m_currentfile = NULL;
   m_poBands     = NULL;
+  m_hDriver     = NULL;
   
   m_NbBands = 0;
 
@@ -61,7 +62,10 @@ GDALImageIO::GDALImageIO()
 
 GDALImageIO::~GDALImageIO()
 {
-	if( m_poBands != NULL ) delete [] m_poBands;
+//THOMAS
+	if( m_hDriver != NULL ) GDALClose( m_hDriver );
+
+        if( m_poBands != NULL ) delete [] m_poBands;
 }
 
 
@@ -374,7 +378,6 @@ void GDALImageIO::InternalReadImageInformation()
     // (take time to check !!)
     if(m_PxType == GDT_Byte)
       {
-// OTB-FA-00006-CS
 //      SetComponentType(CHAR);
       SetComponentType(UCHAR);
       }
@@ -758,12 +761,14 @@ void GDALImageIO::InternalReadImageInformation()
 /** Romain décide que l'on PEUT créer des images dans les formats GDAL */
 bool GDALImageIO::CanWriteFile( const char* name )
 {
+
+return false;
+#if 0
         // Save image name 
         //m_currentfile=name; 
         m_FileName = std::string(name);
         	
         otbMsgDebugMacro(<<"GDALImageIO::CanWriteFile()");
-        otbMsgDebugMacro(<<"CanWrite : NbComponents " << this->GetNumberOfComponents());
         std::string extGDAL;
         GDALDriver* hDriver ;
         GDALDataset* dataSet ;
@@ -773,8 +778,6 @@ bool GDALImageIO::CanWriteFile( const char* name )
         GDALDataType eDT = GDT_Float32;
         
         // First check the extension
-  	otbMsgDebugMacro(<<"OutputFilename : "<<name);
-  
  	if(  name == NULL )
     	{
       		itkDebugMacro(<<"No filename specified.");
@@ -793,14 +796,16 @@ bool GDALImageIO::CanWriteFile( const char* name )
 
 	std::cout << "nom du fichier : " << name << std::endl;
   	// Recuperation du type a partir du nom de fichier
-  	TypeConversion(name, &extGDAL);
+  	extGDAL = TypeConversion(name);
   	std::cout << "Extension GDAL correspondante : " << extGDAL << std::endl;
   	
   	if (extGDAL=="NOT-FOUND")
   	{
   		return false;
   	}  	
-    	
+
+/* THOMAS */
+/*    	
   	// Init GDAL parameters 
   	GDALAllRegister();
   
@@ -823,8 +828,11 @@ bool GDALImageIO::CanWriteFile( const char* name )
     	}
   	else
     	{
+//                GDALClose(hDriver);
       		return true;
     	}
+*/
+#endif
 }
 
 /** TODO : Methode Write non implementee */
@@ -884,7 +892,9 @@ void GDALImageIO::Write(const void* buffer)
                 	otbMsgDebugMacro( << "NbOctets/pix : " << m_NbOctetPixel << " pxType : " << m_PxType);
                 	otbMsgDebugMacro( << "PremiereCol : " << lPremiereColonne << " PremiereLig : " << lPremiereLigne);
                 	otbMsgDebugMacro( << "NbCol : " << lNbColonnes << " NbLig : " << lNbLignes);
-                	lCrGdal = m_poBands[nbComponents]->RasterIO(GF_Write,lPremiereColonne,lPremiereLigne,lNbColonnes, lNbLignes, value , lNbColonnes, lNbLignes, m_PxType,0, 0 ) ;
+                        
+                	lCrGdal = m_poDataset->GetRasterBand(nbComponents+1)->RasterIO(GF_Write,lPremiereColonne,lPremiereLigne,lNbColonnes, lNbLignes, value , lNbColonnes, lNbLignes, m_PxType,0, 0 ) ;
+//                	lCrGdal = m_poBands[nbComponents]->RasterIO(GF_Write,lPremiereColonne,lPremiereLigne,lNbColonnes, lNbLignes, value , lNbColonnes, lNbLignes, m_PxType,0, 0 ) ;
         		otbMsgDebugMacro( << "STEP 2");
         		if (lCrGdal == CE_Failure)
         		{
@@ -899,7 +909,9 @@ void GDALImageIO::Write(const void* buffer)
                 {
 	        	memcpy((void*)(&(value[i])),(const void*)(&(p[i])),(size_t)(m_NbOctetPixel));
         	}
-        	lCrGdal = m_poBands[0]->RasterIO(GF_Write,lPremiereColonne,lPremiereLigne,lNbColonnes, lNbLignes, value , lNbColonnes, lNbLignes, m_PxType,0, 0 ) ;
+               	lCrGdal = m_poDataset->GetRasterBand(1)->RasterIO(GF_Write,lPremiereColonne,lPremiereLigne,lNbColonnes, lNbLignes, value , lNbColonnes, lNbLignes, m_PxType,0, 0 ) ;
+
+//        	lCrGdal = m_poBands[0]->RasterIO(GF_Write,lPremiereColonne,lPremiereLigne,lNbColonnes, lNbLignes, value , lNbColonnes, lNbLignes, m_PxType,0, 0 ) ;
         	if (lCrGdal == CE_Failure)
         	{
     	       		itkExceptionMacro(<< "Erreur lors de l'écriture de l'image (format GDAL) " << m_FileName.c_str()<<".");
@@ -923,8 +935,8 @@ void GDALImageIO::InternalWriteImageInformation()
 	int i;
  
  	std::string extGDAL;
-        GDALDriver* hDriver ;
-        GDALDataset* dataSet ;
+//        GDALDriver* hDriver ;
+//        GDALDataset* dataSet ;
         char c;
         int nXSize;
         int nYSize;
@@ -942,18 +954,18 @@ void GDALImageIO::InternalWriteImageInformation()
     	nXSize = this->GetDimensions(0);
     	nYSize = this->GetDimensions(1);
        
-    	if( (nXSize==0) & (nYSize==0))
+    	if( (nXSize==0) && (nYSize==0))
       	{
-      	itkExceptionMacro(<<"La dimension n'est pas définie.");
+      	        itkExceptionMacro(<<"La dimension n'est pas définie.");
       	}
-    	else
+/*    	else
       	{
       	// Set image dimensions into IO
       	m_Dimensions[0] = nXSize;
       	m_Dimensions[1] = nYSize;
       	otbMsgDebugMacro(<<"Get Dimensions : x="<<m_Dimensions[0]<<" & y="<<m_Dimensions[1]);
       	}
-
+*/
     	otbMsgDebugMacro(<<"Nb of Components : "<<this->GetNumberOfComponents());
 
       	/*this->SetNumberOfDimensions(2);
@@ -967,8 +979,7 @@ void GDALImageIO::InternalWriteImageInformation()
     	
     	if(m_poBands==NULL)
       	{
-      	itkExceptionMacro(<<"Erreur d'allocation memoire du 'rasterBands'");
-      	return;
+              	itkExceptionMacro(<<"Erreur d'allocation memoire du 'rasterBands'");
       	}
       	    	
     // Get Data Type
@@ -1031,17 +1042,19 @@ void GDALImageIO::InternalWriteImageInformation()
     otbMsgDebugMacro(<<"Component Type : "<<m_ComponentType);
     otbMsgDebugMacro(<<"NbOctetPixel   : "<<m_NbOctetPixel);
     
-    TypeConversion(m_FileName.c_str(), &extGDAL);
-    hDriver = GetGDALDriverManager()->GetDriverByName(extGDAL.c_str());
+    extGDAL = TypeConversion(m_FileName.c_str());
+    m_hDriver = GetGDALDriverManager()->GetDriverByName(extGDAL.c_str());
     
-    m_NbBands=3;
-    dataSet = hDriver->Create(m_FileName.c_str(), nXSize,nYSize,m_NbBands,eDT,NULL);
+//    m_NbBands=3;
+//    dataSet = m_hDriver->Create(m_FileName.c_str(), nXSize,nYSize,m_NbBands,eDT,NULL);
+    m_poDataset = m_hDriver->Create(m_FileName.c_str(), nXSize,nYSize,m_NbBands,eDT,NULL);
 
-    if (dataSet == NULL)
-    	itkExceptionMacro(<< "GDAL Writing failed");
+//    if (dataSet == NULL)
+     if (m_poDataset == NULL)
+   	itkExceptionMacro(<< "GDAL Writing failed");
     	
-    for(i=0 ; i<m_NbBands ; i++)
-	m_poBands[i] = dataSet->GetRasterBand(i+1);
+//    for(i=0 ; i<m_NbBands ; i++)
+//	m_poBands[i] = dataSet->GetRasterBand(i+1);
 	
 otbMsgDebugMacro( << "Driver: GDAL - "<<extGDAL);
 otbMsgDebugMacro(<< "         Write files     : "<< m_FileName);
@@ -1053,10 +1066,10 @@ otbMsgDebugMacro( <<"         NumberOfComponents : "<<this->GetNumberOfComponent
 
 }	
 
-void GDALImageIO::TypeConversion(const char* name, std::string* extGDAL)
+std::string GDALImageIO::TypeConversion(const char* name)
 {
 	std::string extension;
-	
+	std::string extGDAL;
 	//Recupérer extension du fichier image
 	int i=0;
 	while (name[i]!='\0')
@@ -1069,15 +1082,16 @@ void GDALImageIO::TypeConversion(const char* name, std::string* extGDAL)
 	}
 	
 	if ((extension=="tif")||(extension=="tiff")||(extension=="TIF")||(extension=="TIFF"))
-			(*extGDAL)="GTiff";
+			extGDAL="GTiff";
 	else if (extension=="hdr")
-			(*extGDAL)="ENVI";
+			extGDAL="ENVI";
 	else if (extension=="png")
-			(*extGDAL)="PNG";
+			extGDAL="PNG";
 	else if (extension=="jpg")
-			(*extGDAL)="JPEG";
+			extGDAL="JPEG";
 	else
-			(*extGDAL)="NOT-FOUND";     
+			extGDAL="NOT-FOUND"; 
+        return(extGDAL);   
 }
 
 bool GDALImageIO::GDALInfoReportCorner( const char * corner_name, double x, double y,
diff --git a/Code/IO/otbGDALImageIO.h b/Code/IO/otbGDALImageIO.h
index 877e532f8deb4de6799720125e4e4f593665c647..d11e250c752a8bfdea1d19171a810a22093a5141 100755
--- a/Code/IO/otbGDALImageIO.h
+++ b/Code/IO/otbGDALImageIO.h
@@ -142,9 +142,10 @@ private:
     */
   bool GetGdalImageFileName( const char * filename, std::string & GdalFileName );
 
-  void TypeConversion(const char* extension, std::string* extGDAL);
+  std::string TypeConversion(const char* extension);
 
   /** GDAL parameters. */
+  GDALDriver * m_hDriver;
   GDALDataset* m_poDataset;
   GDALRasterBand** m_poBands;
   GDALDataType m_PxType;
diff --git a/Code/IO/otbONERAImageIO.cxx b/Code/IO/otbONERAImageIO.cxx
index 201189d336150ed995d1031f12b9d4818979cfec..3c54f746e24aacb51e264ff05b86e783a7ec55f4 100644
--- a/Code/IO/otbONERAImageIO.cxx
+++ b/Code/IO/otbONERAImageIO.cxx
@@ -123,13 +123,13 @@ bool ONERAImageIO::CanReadFile( const char* FileNameToRead )
   m_Headerfile.open( HeaderFileName.c_str(),  std::ios::in );
   if( m_Headerfile.fail() )
     {
-    otbMsgDebugMacro(<<"ONERAImageIO::CanReadFile() failed header open ! " );
+    otbMsgDevMacro(<<"ONERAImageIO::CanReadFile() failed header open ! " );
     return false;
     }
   m_Datafile.open( DataFileName.c_str(),  std::ios::in );
   if( m_Datafile.fail() )
     {
-    otbMsgDebugMacro(<<"ONERAImageIO::CanReadFile() failed data open ! " );
+    otbMsgDevMacro(<<"ONERAImageIO::CanReadFile() failed data open ! " );
     return false;
     }
 
@@ -289,13 +289,13 @@ bool ONERAImageIO::OpenOneraHeaderFileForReading(const char* filename)
 
 void ONERAImageIO::ReadImageInformation()
 {
-  this->InternalReadImageInformation(m_Datafile);
+  this->InternalReadImageInformation();
 }
 
 
 
 
-void ONERAImageIO::InternalReadImageInformation(std::fstream& file)
+void ONERAImageIO::InternalReadImageInformation()
 {