diff --git a/Code/Visu/otbFullResolutionImageWidget.txx b/Code/Visu/otbFullResolutionImageWidget.txx
index c03caf641dceb8327c98f185a029cbbd475a430d..02c439df0ec53597661a787c72aa57db5f953b90 100644
--- a/Code/Visu/otbFullResolutionImageWidget.txx
+++ b/Code/Visu/otbFullResolutionImageWidget.txx
@@ -79,7 +79,7 @@ FullResolutionImageWidget<TPixel>
 ::resize(int x, int y, int w, int h)
 {
   //otbMsgDebugMacro(<<"resize: "<<x<<" "<<y<<" "<<w<<" "<<h);
-  IndexType index;
+  // IndexType index;
   SizeType size;
   size[0]=w;
   size[1]=h;
@@ -88,11 +88,12 @@ FullResolutionImageWidget<TPixel>
   region.SetIndex(m_UpperRightCorner);
   region.Crop(this->GetInput()->GetLargestPossibleRegion());
   this->SetViewedRegion(region);
+  this->redraw();
   this->Fl_Gl_Window::resize(region.GetIndex()[0],
 	       region.GetIndex()[1], 
 	       region.GetSize()[0],
 	       region.GetSize()[1]);
-  this->redraw();
+  
 }
 /** 
  * Test if the buffer has to be updated.
diff --git a/Code/Visu/otbImageWidgetBase.txx b/Code/Visu/otbImageWidgetBase.txx
index a85376a17dcfa44927560110136c3a2a4c6583ec..a098ff03a1e1b5723b7600ef6ece275798478178 100644
--- a/Code/Visu/otbImageWidgetBase.txx
+++ b/Code/Visu/otbImageWidgetBase.txx
@@ -250,6 +250,7 @@ ImageWidgetBase<TPixel>
   else
     {
       //otbMsgDebugMacro(<<"Show");
+      m_Image->SetRequestedRegion(m_BufferedRegion);
       m_Image->Update();
       this->show();
       this->redraw();
@@ -267,11 +268,15 @@ ImageWidgetBase<TPixel>
  if(this->UpdateOpenGlBufferedRegionRequested())
     {
       UpdateOpenGlBufferedRegion();
+      m_Image->SetRequestedRegion(m_BufferedRegion);
+      m_Image->Update();
       RebuildOpenGlBuffer();
     }
  if(m_ImageOverlayVisible && this->UpdateOpenGlImageOverlayBufferedRegionRequested())
     {
       UpdateOpenGlImageOverlayBufferedRegion();
+      m_ImageOverlay->SetRequestedRegion(m_BufferedRegion);
+      m_ImageOverlay->Update();
       RebuildOpenGlImageOverlayBuffer();
     }
 
@@ -355,18 +360,18 @@ ImageWidgetBase<TPixel>
   unsigned int index = 0;
   for(it.GoToBegin();!it.IsAtEnd();++it)
     {
-      m_OpenGlBuffer[index] = it.Get()[m_RedChannelIndex];
+      m_OpenGlBuffer[index] = static_cast<unsigned int>(it.Get()[m_RedChannelIndex]);
       if(m_ViewModelIsRGB)
 	{
-	  m_OpenGlBuffer[index+1] = it.Get()[m_GreenChannelIndex];
-	  m_OpenGlBuffer[index+2] = it.Get()[m_BlueChannelIndex];
+	  m_OpenGlBuffer[index+1] = static_cast<unsigned int>(it.Get()[m_GreenChannelIndex]);
+	  m_OpenGlBuffer[index+2] = static_cast<unsigned int>(it.Get()[m_BlueChannelIndex]);
 	  m_OpenGlBuffer[index+3] = 256;
 	  index+=4;
 	}
       else
 	{
-	  m_OpenGlBuffer[index+1] = it.Get()[m_RedChannelIndex];
-	  m_OpenGlBuffer[index+2] = it.Get()[m_RedChannelIndex];
+	  m_OpenGlBuffer[index+1] = static_cast<unsigned int>(it.Get()[m_RedChannelIndex]);
+	  m_OpenGlBuffer[index+2] = static_cast<unsigned int>(it.Get()[m_RedChannelIndex]);
 	  m_OpenGlBuffer[index+3] = 256;
 	  index+=4;
 	}
@@ -408,9 +413,9 @@ ImageWidgetBase<TPixel>
 	    }
 	  else
 	    {
-	      m_OpenGlImageOverlayBuffer[index] = it.Get()[0];
-	      m_OpenGlImageOverlayBuffer[index+1] = it.Get()[1];
-	      m_OpenGlImageOverlayBuffer[index+2] = it.Get()[2];
+	      m_OpenGlImageOverlayBuffer[index] =   static_cast<unsigned int>(it.Get()[0]);
+	      m_OpenGlImageOverlayBuffer[index+1] = static_cast<unsigned int>( it.Get()[1]);
+	      m_OpenGlImageOverlayBuffer[index+2] = static_cast<unsigned int>(it.Get()[2]);
 	      m_OpenGlImageOverlayBuffer[index+3] = m_ImageOverlayOpacity;
 	    } 
 	  index+=4;
@@ -420,10 +425,10 @@ ImageWidgetBase<TPixel>
     {
       for(it.GoToBegin();!it.IsAtEnd();++it)
 	{
-	  m_OpenGlImageOverlayBuffer[index] = it.Get()[0];
-	  m_OpenGlImageOverlayBuffer[index+1] = it.Get()[1];
-	  m_OpenGlImageOverlayBuffer[index+2] = it.Get()[2];
-	  m_OpenGlImageOverlayBuffer[index+3] = m_ImageOverlayOpacity;
+	  m_OpenGlImageOverlayBuffer[index] =  static_cast<unsigned int>(it.Get()[0]);
+	  m_OpenGlImageOverlayBuffer[index+1] =static_cast<unsigned int>(it.Get()[1]);
+	  m_OpenGlImageOverlayBuffer[index+2] =static_cast<unsigned int>(it.Get()[2]);
+	  m_OpenGlImageOverlayBuffer[index+3] =m_ImageOverlayOpacity;
 	  index+=4;
 	}
     }
diff --git a/Code/Visu/otbZoomableImageWidget.txx b/Code/Visu/otbZoomableImageWidget.txx
index ebe26440bbdb3bdbde888d62b132ccb5507fe863..01bc0a178d9b3cba668a85ab1b6c639f15aa33e6 100644
--- a/Code/Visu/otbZoomableImageWidget.txx
+++ b/Code/Visu/otbZoomableImageWidget.txx
@@ -68,7 +68,7 @@ ZoomableImageWidget<TPixel>
 	{
 	  this->GetInputOverlay()->Update();
 	}
-      this->Label(l);
+      this->label(l);
       this->resize(x, y, w, h);
     }
 }
@@ -106,10 +106,11 @@ ZoomableImageWidget<TPixel>
   IndexType bufferedULCorner = buffered.GetIndex();
   IndexType viewedRDCorner = viewed.GetIndex()+viewed.GetSize();
   IndexType bufferedRDCorner = buffered.GetIndex()+buffered.GetSize();
-  return ( viewedULCorner[0]<bufferedULCorner[0]
-	   ||viewedULCorner[1]<bufferedULCorner[1]
-	   ||viewedRDCorner[0]>bufferedRDCorner[0]
-	   ||viewedRDCorner[1]>bufferedRDCorner[1]);
+ //  return ( viewedULCorner[0]<bufferedULCorner[0]
+//  	   ||viewedULCorner[1]<bufferedULCorner[1]
+//  	   ||viewedRDCorner[0]>bufferedRDCorner[0]
+//  	   ||viewedRDCorner[1]>bufferedRDCorner[1]);
+  return true;
 }
 
 /** 
@@ -126,10 +127,11 @@ ZoomableImageWidget<TPixel>
   IndexType bufferedULCorner = buffered.GetIndex();
   IndexType viewedRDCorner = viewed.GetIndex()+viewed.GetSize();
   IndexType bufferedRDCorner = buffered.GetIndex()+buffered.GetSize();
-  return ( viewedULCorner[0]<bufferedULCorner[0]
-	   ||viewedULCorner[1]<bufferedULCorner[1]
-	   ||viewedRDCorner[0]>bufferedRDCorner[0]
-	   ||viewedRDCorner[1]>bufferedRDCorner[1]);
+ //  return ( viewedULCorner[0]<bufferedULCorner[0]
+//  	   ||viewedULCorner[1]<bufferedULCorner[1]
+//  	   ||viewedRDCorner[0]>bufferedRDCorner[0]
+//  	   ||viewedRDCorner[1]>bufferedRDCorner[1]);
+  return true;
 }
 /** 
  * Update OpenGlBuffer. 
@@ -171,8 +173,8 @@ ZoomableImageWidget<TPixel>
   SizeType newSize;
   RegionType newRegion;
 
-  newSize[0] = static_cast<unsigned int>((double)this->w()/zoomFactor)+1;
-  newSize[1] = static_cast<unsigned int>((double)this->h()/zoomFactor)+1;
+  newSize[0] = static_cast<unsigned int>((double)this->w()/zoomFactor);
+  newSize[1] = static_cast<unsigned int>((double)this->h()/zoomFactor);
   otbMsgDebugMacro(<<"SetZoomFactor: newSize ->"<<newSize);
   otbMsgDebugMacro(<<"SetZoomFactor: newIndex ->"<<newIndex);
   newRegion.SetIndex(m_ZoomUpperLeftCorner);
@@ -189,14 +191,13 @@ void
 ZoomableImageWidget<TPixel>
 ::SetZoomUpperLeftCorner(IndexType index)
 {
-  IndexType newIndex;
   SizeType size;
   RegionType newRegion;
 
   size = this->GetViewedRegion().GetSize();
   otbMsgDebugMacro(<<"SetZoomCenter: Size ->"<<size);
   
-  otbMsgDebugMacro(<<"SetZoomCenter: newIndex ->"<<newIndex);
+  otbMsgDebugMacro(<<"SetZoomCenter: newIndex ->"<<index);
   newRegion.SetIndex(index);
   newRegion.SetSize(size);
   this->SetViewedRegion(newRegion);
diff --git a/Testing/Code/Visu/CMakeLists.txt b/Testing/Code/Visu/CMakeLists.txt
index cb90cf11904d3c9832ea04fbf1e3f8209f6d7341..5522651447b4ffd3d5e9cd412c4765bd368cd8c8 100755
--- a/Testing/Code/Visu/CMakeLists.txt
+++ b/Testing/Code/Visu/CMakeLists.txt
@@ -32,10 +32,57 @@ ADD_TEST(viTvImageViewerNB ${CXX_TEST_PATH}/otbImageViewer
         ${INPUTDATA}/cthead1.png
         0 )
 
+# -------       otb::ImageWidgetBase -----------------------------------
+
+ADD_TEST(viTuImageWidgetBaseNew ${VISU_TESTS} 
+        otbImageWidgetBaseNew
+        )
+
+# -------       otb::FixedSizeFullImageWidget -----------------------------------
+
+ADD_TEST(viTuFixedSizeFullImageWidgetNew ${VISU_TESTS} 
+        otbFixedSizeFullImageWidgetNew
+        )
+
+ADD_TEST(viTvFixedSizFullImageWidget ${VISU_TESTS} 
+        otbFixedSizeFullImageWidget
+	${INPUTDATA}/poupees.png
+        )
+
+# -------       otb::FullResolutionImageWidget -----------------------------------
+
+ADD_TEST(viTuFullResolutionImageWidgetNew ${VISU_TESTS} 
+        otbFullResolutionImageWidgetNew
+        )
+
+ADD_TEST(viTvFullResolutionImageWidget ${VISU_TESTS} 
+        otbFullResolutionImageWidget
+	${INPUTDATA}/poupees.png
+        )
+
+# -------   otb::ZoomableImageWidget  -----------------------------------
+
+ADD_TEST(viTuZoomableImageWidgetNew ${VISU_TESTS} 
+        otbZoomableImageWidgetNew
+        )
+
+ADD_TEST(viTvZoomableImageWidget ${VISU_TESTS} 
+        otbZoomableImageWidget
+	${INPUTDATA}/poupees.png
+        )
+
+
 # -------       Fichiers sources CXX -----------------------------------
 SET(BasicVisu_SRCS
 otbImageView.cxx
 otbImageViewerNew.cxx
+otbImageWidgetBaseNew.cxx
+otbFixedSizeFullImageWidgetNew.cxx
+otbFixedSizeFullImageWidget.cxx
+otbFullResolutionImageWidgetNew.cxx
+otbFullResolutionImageWidget.cxx
+otbZoomableImageWidgetNew.cxx
+otbZoomableImageWidget.cxx
 )
 
 
diff --git a/Testing/Code/Visu/otbFixedSizeFullImageWidget.cxx b/Testing/Code/Visu/otbFixedSizeFullImageWidget.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..736286ecf9831130464ac5c3eeeeacb428c1786e
--- /dev/null
+++ b/Testing/Code/Visu/otbFixedSizeFullImageWidget.cxx
@@ -0,0 +1,94 @@
+/*=========================================================================
+
+Program:   ORFEO Toolbox
+Language:  C++
+Date:      $Date$
+Version:   $Revision$
+
+
+Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
+See OTBCopyright.txt for details.
+
+
+This software is distributed WITHOUT ANY WARRANTY; without even 
+the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+PURPOSE.  See the above copyright notices for more information.
+
+=========================================================================*/
+#include "otbFixedSizeFullImageWidget.h"
+#include "otbImageFileReader.h"
+#include <FL/Fl.H>
+
+
+int otbFixedSizeFullImageWidget( int argc, char * argv[] )
+{
+  try 
+    { 
+      char * filename = argv[1];      
+      typedef float PixelType;
+      typedef otb::FixedSizeFullImageWidget<PixelType> WidgetType;
+      typedef WidgetType::ImageType ImageType;
+      typedef otb::ImageFileReader<ImageType> ReaderType;
+      
+      ReaderType::Pointer reader = ReaderType::New();
+      ImageType::SizeType size;
+      ImageType::IndexType index;
+      ImageType::RegionType region;
+
+      index[0]=0;
+      index[1]=0;
+      size[0]=1;
+      size[1]=1;
+      reader->SetFileName(filename);
+      reader->Update();
+
+      Fl_Window window(size[0],size[1]);
+
+      WidgetType::Pointer widget = WidgetType::New();   
+      window.resizable(widget.GetPointer());
+      widget->SetInput(reader->GetOutput());
+      if(reader->GetOutput()->GetNumberOfComponentsPerPixel()>=3)
+	widget->SetViewModelToRGB();
+      else
+	widget->SetViewModelToGrayscale();
+      widget->Init(0,0,size[0],size[1],"Test Full Image Widget");
+      widget->redraw();
+      window.end();
+      window.show();
+      window.show();
+      widget->Show();
+      widget->redraw();
+      Fl::check();
+
+    for(int i = 0;i<=400;i+=40)
+	{
+	  Fl::check();
+	  window.resize(0,0,i,i);
+	  Fl::wait(0.2);
+	  Fl::check();
+	}
+
+  for(int i = 400;i>=0;i-=40)
+	{
+	  Fl::check();
+	  window.resize(0,0,i,i);
+	  Fl::wait(0.2);
+	  Fl::check();
+	}
+     } 
+
+  catch( itk::ExceptionObject & err ) 
+    { 
+      std::cout << "Exception itk::ExceptionObject levee !" << std::endl; 
+      std::cout << err << std::endl; 
+      return EXIT_FAILURE;
+    } 
+  catch( ... ) 
+    { 
+      std::cout << "Exception levee inconnue !" << std::endl; 
+      return EXIT_FAILURE;
+    } 
+
+
+  return EXIT_SUCCESS;
+}
diff --git a/Testing/Code/Visu/otbFixedSizeFullImageWidgetNew.cxx b/Testing/Code/Visu/otbFixedSizeFullImageWidgetNew.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..332cd279657986189cbb3c4f23b16785ec8e3b11
--- /dev/null
+++ b/Testing/Code/Visu/otbFixedSizeFullImageWidgetNew.cxx
@@ -0,0 +1,44 @@
+/*=========================================================================
+
+Program:   ORFEO Toolbox
+Language:  C++
+Date:      $Date$
+Version:   $Revision$
+
+
+Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
+See OTBCopyright.txt for details.
+
+
+This software is distributed WITHOUT ANY WARRANTY; without even 
+the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+PURPOSE.  See the above copyright notices for more information.
+
+=========================================================================*/
+#include "otbFixedSizeFullImageWidget.h"
+
+int otbFixedSizeFullImageWidgetNew( int argc, char * argv[] )
+{
+  try 
+    { 
+      typedef float PixelType;
+      typedef otb::FixedSizeFullImageWidget<PixelType> WidgetType;
+      
+      WidgetType::Pointer widget = WidgetType::New();
+    } 
+
+  catch( itk::ExceptionObject & err ) 
+    { 
+      std::cout << "Exception itk::ExceptionObject levee !" << std::endl; 
+      std::cout << err << std::endl; 
+      return EXIT_FAILURE;
+    } 
+  catch( ... ) 
+    { 
+      std::cout << "Exception levee inconnue !" << std::endl; 
+      return EXIT_FAILURE;
+    } 
+
+
+  return EXIT_SUCCESS;
+}
diff --git a/Testing/Code/Visu/otbFullResolutionImageWidget.cxx b/Testing/Code/Visu/otbFullResolutionImageWidget.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..f60b88da1040199ac29b6dab67aa2893c20a6137
--- /dev/null
+++ b/Testing/Code/Visu/otbFullResolutionImageWidget.cxx
@@ -0,0 +1,97 @@
+/*=========================================================================
+
+Program:   ORFEO Toolbox
+Language:  C++
+Date:      $Date$
+Version:   $Revision$
+
+
+Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
+See OTBCopyright.txt for details.
+
+
+This software is distributed WITHOUT ANY WARRANTY; without even 
+the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+PURPOSE.  See the above copyright notices for more information.
+
+=========================================================================*/
+#include "otbFullResolutionImageWidget.h"
+#include "otbImageFileReader.h"
+#include <FL/Fl.H>
+
+
+int otbFullResolutionImageWidget( int argc, char * argv[] )
+{
+  try 
+    { 
+      char * filename = argv[1];      
+      typedef float PixelType;
+      typedef otb::FullResolutionImageWidget<PixelType> WidgetType;
+      typedef WidgetType::ImageType ImageType;
+      typedef otb::ImageFileReader<ImageType> ReaderType;
+      
+      ReaderType::Pointer reader = ReaderType::New();
+      ImageType::SizeType size;
+      ImageType::IndexType index;
+      ImageType::RegionType region;
+
+      index[0]=0;
+      index[1]=0;
+      size[0]=1;
+      size[1]=1;
+      reader->SetFileName(filename);
+      reader->Update();
+
+      Fl_Window window(size[0],size[1]);
+
+      WidgetType::Pointer widget = WidgetType::New();   
+      window.resizable(widget.GetPointer());
+      widget->SetInput(reader->GetOutput());
+      if(reader->GetOutput()->GetNumberOfComponentsPerPixel()>=3)
+	widget->SetViewModelToRGB();
+      else
+	widget->SetViewModelToGrayscale();
+      widget->SetUpperRightCorner(index);
+      widget->Init(0,0,size[0],size[1],"Test Full Resolution Widget");
+      widget->redraw();
+      window.end();
+      window.show();
+      window.show();
+      widget->Show();
+      widget->redraw();
+      Fl::check();
+
+      int StepX =(reader->GetOutput()->GetLargestPossibleRegion().GetSize()[0]-size[0])/100;
+   int StepY =(reader->GetOutput()->GetLargestPossibleRegion().GetSize()[1]-size[1])/100;
+    for(int i = 0;i<=100;i+=5)
+	{
+	  Fl::check();
+	  window.resize(0,0,size[0]+i*StepX,size[1]+i*StepY);
+	  Fl::wait(0.2);
+	  Fl::check();
+	}
+
+  for(int i = 100;i>=0;i-=5)
+	{
+	  Fl::check();
+	  window.resize(0,0,size[0]+i*StepX,size[1]+i*StepY);
+	  Fl::wait(0.2);
+	  Fl::check();
+	}
+     } 
+
+  catch( itk::ExceptionObject & err ) 
+    { 
+      std::cout << "Exception itk::ExceptionObject levee !" << std::endl; 
+      std::cout << err << std::endl; 
+      return EXIT_FAILURE;
+    } 
+  catch( ... ) 
+    { 
+      std::cout << "Exception levee inconnue !" << std::endl; 
+      return EXIT_FAILURE;
+    } 
+
+
+  return EXIT_SUCCESS;
+}
diff --git a/Testing/Code/Visu/otbFullResolutionImageWidgetNew.cxx b/Testing/Code/Visu/otbFullResolutionImageWidgetNew.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..0dd20fe47f08c2b2871bf098a998c48c5f872d93
--- /dev/null
+++ b/Testing/Code/Visu/otbFullResolutionImageWidgetNew.cxx
@@ -0,0 +1,44 @@
+/*=========================================================================
+
+Program:   ORFEO Toolbox
+Language:  C++
+Date:      $Date$
+Version:   $Revision$
+
+
+Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
+See OTBCopyright.txt for details.
+
+
+This software is distributed WITHOUT ANY WARRANTY; without even 
+the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+PURPOSE.  See the above copyright notices for more information.
+
+=========================================================================*/
+#include "otbFullResolutionImageWidget.h"
+
+int otbFullResolutionImageWidgetNew( int argc, char * argv[] )
+{
+  try 
+    { 
+      typedef float PixelType;
+      typedef otb::FullResolutionImageWidget<PixelType> WidgetType;
+      
+      WidgetType::Pointer widget = WidgetType::New();
+    } 
+
+  catch( itk::ExceptionObject & err ) 
+    { 
+      std::cout << "Exception itk::ExceptionObject levee !" << std::endl; 
+      std::cout << err << std::endl; 
+      return EXIT_FAILURE;
+    } 
+  catch( ... ) 
+    { 
+      std::cout << "Exception levee inconnue !" << std::endl; 
+      return EXIT_FAILURE;
+    } 
+
+
+  return EXIT_SUCCESS;
+}
diff --git a/Testing/Code/Visu/otbImageWidgetBaseNew.cxx b/Testing/Code/Visu/otbImageWidgetBaseNew.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..2f7e49f3c572abc07a168f5fe788d7dd8d828810
--- /dev/null
+++ b/Testing/Code/Visu/otbImageWidgetBaseNew.cxx
@@ -0,0 +1,44 @@
+/*=========================================================================
+
+Program:   ORFEO Toolbox
+Language:  C++
+Date:      $Date$
+Version:   $Revision$
+
+
+Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
+See OTBCopyright.txt for details.
+
+
+This software is distributed WITHOUT ANY WARRANTY; without even 
+the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+PURPOSE.  See the above copyright notices for more information.
+
+=========================================================================*/
+#include "otbImageWidgetBase.h"
+
+int otbImageWidgetBaseNew( int argc, char * argv[] )
+{
+  try 
+    { 
+      typedef float PixelType;
+      typedef otb::ImageWidgetBase<PixelType> WidgetType;
+      
+      WidgetType::Pointer widget = WidgetType::New();
+    } 
+
+  catch( itk::ExceptionObject & err ) 
+    { 
+      std::cout << "Exception itk::ExceptionObject levee !" << std::endl; 
+      std::cout << err << std::endl; 
+      return EXIT_FAILURE;
+    } 
+  catch( ... ) 
+    { 
+      std::cout << "Exception levee inconnue !" << std::endl; 
+      return EXIT_FAILURE;
+    } 
+
+
+  return EXIT_SUCCESS;
+}
diff --git a/Testing/Code/Visu/otbVisuTests.cxx b/Testing/Code/Visu/otbVisuTests.cxx
index bfeb73f33b5e7e9a6aa917993dab4bfd0efcc156..ac61c2d41534e6a4e28023a6af96da3ea28d28a7 100755
--- a/Testing/Code/Visu/otbVisuTests.cxx
+++ b/Testing/Code/Visu/otbVisuTests.cxx
@@ -28,4 +28,11 @@ void RegisterTests()
 {
 REGISTER_TEST(otbImageView);
 REGISTER_TEST(otbImageViewerNew);
+REGISTER_TEST(otbImageWidgetBaseNew);
+REGISTER_TEST(otbFixedSizeFullImageWidgetNew);
+REGISTER_TEST(otbFixedSizeFullImageWidget);
+REGISTER_TEST(otbFullResolutionImageWidgetNew);
+REGISTER_TEST(otbFullResolutionImageWidget);
+REGISTER_TEST(otbZoomableImageWidgetNew);
+REGISTER_TEST(otbZoomableImageWidget); 
 }
diff --git a/Testing/Code/Visu/otbZoomableImageWidget.cxx b/Testing/Code/Visu/otbZoomableImageWidget.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..1a7bbdfdaaca0794c15e0e9d4a9b3d55536b6963
--- /dev/null
+++ b/Testing/Code/Visu/otbZoomableImageWidget.cxx
@@ -0,0 +1,99 @@
+/*=========================================================================
+
+Program:   ORFEO Toolbox
+Language:  C++
+Date:      $Date$
+Version:   $Revision$
+
+
+Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
+See OTBCopyright.txt for details.
+
+
+This software is distributed WITHOUT ANY WARRANTY; without even 
+the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+PURPOSE.  See the above copyright notices for more information.
+
+=========================================================================*/
+#include "otbZoomableImageWidget.h"
+#include "otbImageFileReader.h"
+#include <FL/Fl.H>
+
+
+int otbZoomableImageWidget( int argc, char * argv[] )
+{
+  try 
+    { 
+      char * filename = argv[1];      
+      typedef float PixelType;
+      typedef otb::ZoomableImageWidget<PixelType> WidgetType;
+      typedef WidgetType::ImageType ImageType;
+      typedef otb::ImageFileReader<ImageType> ReaderType;
+      
+      ReaderType::Pointer reader = ReaderType::New();
+      ImageType::SizeType size;
+      ImageType::IndexType index;
+      ImageType::RegionType region;
+      reader->SetFileName(filename);
+      reader->Update();
+      size=reader->GetOutput()->GetLargestPossibleRegion().GetSize();
+
+      Fl_Window window(size[0],size[1]);
+
+      WidgetType::Pointer widget = WidgetType::New();   
+      window.resizable(widget.GetPointer());
+      widget->SetInput(reader->GetOutput());
+      if(reader->GetOutput()->GetNumberOfComponentsPerPixel()>=3)
+	widget->SetViewModelToRGB();
+      else
+	widget->SetViewModelToGrayscale();
+      widget->Init(0,0,size[0],size[1],"Test Full Image Widget");
+      widget->redraw();
+      window.end();
+      window.show();
+      window.show();
+      widget->Show();
+      widget->redraw();
+      Fl::check();
+
+    for(double zoom  = 1.0;zoom<10.;zoom++)
+	{
+	  Fl::check();
+	  
+	  index[0]=size[0]/2-static_cast<int>(static_cast<double>(size[0]/2)/zoom+0.5);
+	  index[1]=size[1]/2-static_cast<int>(static_cast<double>(size[1]/2)/zoom+0.5);
+	  widget->SetZoomUpperLeftCorner(index);
+	  widget->SetZoomFactor(zoom);
+	  widget->redraw();
+	  Fl::wait(0.2);
+	  Fl::check();
+	}
+
+  for(double zoom=10.;zoom>=1.;zoom--)
+	{
+	  Fl::check();
+	  index[0]=size[0]/2-static_cast<int>(static_cast<double>(size[0])/(2*zoom)+0.5);
+	  index[1]=size[1]/2-static_cast<int>(static_cast<double>(size[1])/(2*zoom)+0.5);
+ 	  widget->SetZoomUpperLeftCorner(index);
+	  widget->SetZoomFactor(zoom);
+	  widget->redraw();
+	  Fl::wait(0.2);
+	  Fl::check();
+	}
+     } 
+
+  catch( itk::ExceptionObject & err ) 
+    { 
+      std::cout << "Exception itk::ExceptionObject levee !" << std::endl; 
+      std::cout << err << std::endl; 
+      return EXIT_FAILURE;
+    } 
+  catch( ... ) 
+    { 
+      std::cout << "Exception levee inconnue !" << std::endl; 
+      return EXIT_FAILURE;
+    } 
+
+
+  return EXIT_SUCCESS;
+}
diff --git a/Testing/Code/Visu/otbZoomableImageWidgetNew.cxx b/Testing/Code/Visu/otbZoomableImageWidgetNew.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..6079599187d81da43ac1b5722698998aea6d488d
--- /dev/null
+++ b/Testing/Code/Visu/otbZoomableImageWidgetNew.cxx
@@ -0,0 +1,44 @@
+/*=========================================================================
+
+Program:   ORFEO Toolbox
+Language:  C++
+Date:      $Date$
+Version:   $Revision$
+
+
+Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
+See OTBCopyright.txt for details.
+
+
+This software is distributed WITHOUT ANY WARRANTY; without even 
+the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+PURPOSE.  See the above copyright notices for more information.
+
+=========================================================================*/
+#include "otbZoomableImageWidget.h"
+
+int otbZoomableImageWidgetNew( int argc, char * argv[] )
+{
+  try 
+    { 
+      typedef float PixelType;
+      typedef otb::ZoomableImageWidget<PixelType> WidgetType;
+      
+      WidgetType::Pointer widget = WidgetType::New();
+    } 
+
+  catch( itk::ExceptionObject & err ) 
+    { 
+      std::cout << "Exception itk::ExceptionObject levee !" << std::endl; 
+      std::cout << err << std::endl; 
+      return EXIT_FAILURE;
+    } 
+  catch( ... ) 
+    { 
+      std::cout << "Exception levee inconnue !" << std::endl; 
+      return EXIT_FAILURE;
+    } 
+
+
+  return EXIT_SUCCESS;
+}