diff --git a/Code/Visu/otbFixedSizeFullImageWidget.txx b/Code/Visu/otbFixedSizeFullImageWidget.txx
index 11214a88cefd22e2f3b60a4f96952a341cea34dd..dc3a4dd7996fa451bda2d0282936258d1b45db72 100644
--- a/Code/Visu/otbFixedSizeFullImageWidget.txx
+++ b/Code/Visu/otbFixedSizeFullImageWidget.txx
@@ -121,7 +121,7 @@ FixedSizeFullImageWidget<TPixel>
 ::UpdateOpenGlBufferedRegion(void)
 {
   //otbMsgDebugMacro(<<"UpdateOpenGlBufferedRegion: "<<this->GetViewedRegion());
-  this->SetBufferedRegion((this->GetInput()->GetLargestPossibleRegion()));
+  this->SetBufferedRegion(this->GetViewedRegion());
 }
 } // end namespace otb
 #endif
diff --git a/Code/Visu/otbImageWidgetBase.txx b/Code/Visu/otbImageWidgetBase.txx
index 659edaa32b6b99354f09a939ae3bdc39f661c4bb..4b45dd2d7f73c6aa15e80002e4209fa3fe0c0e6c 100644
--- a/Code/Visu/otbImageWidgetBase.txx
+++ b/Code/Visu/otbImageWidgetBase.txx
@@ -179,14 +179,12 @@ ImageWidgetBase<TPixel>
 {
   m_Image=image;
   m_Image->UpdateOutputInformation();
-  
   SizeType size;
   size.Fill(0);
   m_BufferedRegion.SetSize(size);
   SizeType displaySize;
   displaySize[0]=this->w();
   displaySize[1]=this->h();
-  
   m_ViewedRegion.SetSize(displaySize);
   m_ViewedRegion.Crop(m_Image->GetLargestPossibleRegion());
 }
@@ -300,10 +298,14 @@ ImageWidgetBase<TPixel>
       m_ImageOverlay->SetRequestedRegion(m_BufferedRegion);
       m_ImageOverlay->PropagateRequestedRegion();
       m_ImageOverlay->UpdateOutputData();
-      RebuildOpenGlImageOverlayBuffer();
     }
   }
  
+  if(m_ImageOverlayVisible)
+  {
+    RebuildOpenGlImageOverlayBuffer();
+  }
+
   if (!this->valid())
   {
     valid(1);
@@ -322,10 +324,15 @@ ImageWidgetBase<TPixel>
   glDisable(GL_BLEND);
 
 
-  glRasterPos2i(0,0);
-
 #ifndef OTB_GL_USE_ACCEL
-  glPixelZoom(m_OpenGlIsotropicZoom, m_OpenGlIsotropicZoom);
+
+  // To be consistent with old method
+  int displayHeight = static_cast<int>(vcl_ceil(m_BufferedRegion.GetSize()[1]*m_OpenGlIsotropicZoom));
+  int viewPortOffset = 0;  
+  viewPortOffset = h()-displayHeight;
+  glRasterPos2i(0,viewPortOffset);
+
+  glPixelZoom(m_OpenGlIsotropicZoom,m_OpenGlIsotropicZoom);
 
   // display the image
   glDrawPixels(m_BufferedRegion.GetSize()[0],
@@ -426,6 +433,7 @@ ImageWidgetBase<TPixel>
       //otbMsgDebugMacro(<<"Deleting previous buffer ...");
     delete [] m_OpenGlBuffer;
   }
+  //otbMsgDebugMacro(<<"Buffered region: "<<m_BufferedRegion); 
   unsigned int bufferLenght = 4*m_BufferedRegion.GetNumberOfPixels();
   //otbMsgDebugMacro(<<"New buffer lenght: "<<bufferLenght);
   m_OpenGlBuffer = new unsigned char[bufferLenght];