diff --git a/Code/Visualization/otbVerticalAsymptoteCurve.cxx b/Code/Visualization/otbVerticalAsymptoteCurve.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..cda135111d8a1b326303c5313b03bbcd2ada4fc0
--- /dev/null
+++ b/Code/Visualization/otbVerticalAsymptoteCurve.cxx
@@ -0,0 +1,91 @@
+/*=========================================================================
+
+  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.
+
+=========================================================================*/
+#ifndef __otbVerticalAsymptoteCurve_cxx
+#define __otbVerticalAsymptoteCurve_cxx
+
+#include "otbVerticalAsymptoteCurve.h"
+
+namespace otb
+{
+
+VerticalAsymptoteCurve::VerticalAsymptoteCurve() 
+{
+  // Default histogram color
+  m_VerticalAsymptoteColor.Fill(0.5);
+  m_Abcisse = 0.;
+}
+ 
+// VerticalAsymptoteCurve::~VerticalAsymptoteCurve()
+// {}
+ 
+void  VerticalAsymptoteCurve::Render(const RegionType& extent,const AffineTransformType * space2ScreenTransform)
+{
+  double x,y;
+  PointType spacePoint, screenPoint;
+  
+  // Rendering bounds
+  glColor3d(m_VerticalAsymptoteColor[0],m_VerticalAsymptoteColor[1],m_VerticalAsymptoteColor[2]);
+  glBegin(GL_LINES);
+  // UL
+  spacePoint[0] = m_Abcisse;
+  spacePoint[1] = extent.GetIndex()[1];
+  screenPoint   = space2ScreenTransform->TransformPoint(spacePoint);
+  std::cout <<"Space Point " << spacePoint <<  " screenPoint "<< screenPoint<< std::endl;
+  glVertex2d(screenPoint[0],spacePoint[1]);
+
+  // LL
+  spacePoint[1] = extent.GetIndex()[1]+ extent.GetSize()[1]; 
+  screenPoint   = space2ScreenTransform->TransformPoint(spacePoint);
+  std::cout <<"Space Point " << spacePoint <<  " screenPoint "<< screenPoint<< std::endl;
+  glVertex2d(screenPoint[0],spacePoint[1]);
+  glEnd();
+}
+ 
+void
+VerticalAsymptoteCurve::BeforeRendering()
+{
+  // Initialize
+  m_Minimum[0] = 100;
+  m_Minimum[1] = 100;
+  
+  m_Maximum[1] = -10;
+  m_Maximum[0] = -10; 
+}
+
+
+ 
+VerticalAsymptoteCurve::PointType  
+VerticalAsymptoteCurve
+::GetMinimum()
+{
+  return m_Minimum;
+}
+
+ 
+VerticalAsymptoteCurve::PointType 
+VerticalAsymptoteCurve
+::GetMaximum()
+{
+  return m_Maximum;
+}
+
+
+} // end namespace otb
+#endif
+
+
diff --git a/Code/Visualization/otbVerticalAsymptoteCurve.h b/Code/Visualization/otbVerticalAsymptoteCurve.h
new file mode 100644
index 0000000000000000000000000000000000000000..9b1a138135c50a0dcdc937f6bb398b5c4b1c4ed4
--- /dev/null
+++ b/Code/Visualization/otbVerticalAsymptoteCurve.h
@@ -0,0 +1,106 @@
+/*=========================================================================
+
+  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.
+
+=========================================================================*/
+#ifndef __otbVerticalAsymptoteCurve_h
+#define __otbVerticalAsymptoteCurve_h
+
+#include "otbCurve2D.h"
+#include "itkContinuousIndex.h"
+#include "itkObjectFactory.h"
+
+namespace otb
+{
+/** \class VerticalAsymptoteCurve
+*   \brief Class for Vertical Asymptots rendering.
+*
+*   \sa ImageViewerModel
+*  \ingroup Visualization
+ */
+
+class ITK_EXPORT  VerticalAsymptoteCurve
+  : public Curve2D
+{
+public:
+  /** Standard class typedefs */
+  typedef VerticalAsymptoteCurve               Self;
+  typedef Curve2D                              Superclass;
+  typedef itk::SmartPointer<Self>              Pointer;
+  typedef itk::SmartPointer<const Self>        ConstPointer;
+
+  // Standard class macros
+  itkNewMacro(Self);
+  itkTypeMacro(VerticalAsymptoteCurve,Curve2D);
+
+  /// Superclass typedefs
+  typedef  Superclass::AffineTransformType AffineTransformType;
+  typedef  Superclass::RegionType          RegionType;
+  typedef  Superclass::PointType           PointType;
+  typedef  Superclass::VectorType          VectorType;
+  typedef  Superclass::ColorType           ColorType;
+  typedef itk::ContinuousIndex<double,2>   ContinuousIndexType;
+
+  /// Render the curve according to display extent and axis characteristics
+  virtual void  Render(const RegionType& extent,const AffineTransformType * space2ScreenTransform);
+
+  /// Pre-computation
+  virtual void BeforeRendering();
+  
+  /// Get the min for each axis from the data available
+  virtual PointType GetMinimum();
+
+  /// Get the max for each axis from the data available
+  virtual PointType GetMaximum();
+
+  /// Set/Get the Asymptote color 
+  itkSetMacro(VerticalAsymptoteColor,ColorType);
+  itkGetMacro(VerticalAsymptoteColor,ColorType);
+
+  /// Set the abcisse 
+  itkSetMacro(Abcisse,double);
+  itkGetMacro(Abcisse,double);
+  
+protected:
+  /** Constructor */
+  VerticalAsymptoteCurve();
+  /** Destructor */
+  virtual  ~VerticalAsymptoteCurve(){};
+  /** Printself method */
+  void PrintSelf(std::ostream& os, itk::Indent indent) const
+  {
+    Superclass::PrintSelf(os,indent);
+  }
+
+private:
+  VerticalAsymptoteCurve(const Self&);     // purposely not implemented
+  void operator=(const Self&); // purposely not implemented
+
+  // The histogram color
+  ColorType            m_VerticalAsymptoteColor;
+
+  PointType            m_Minimum;
+  PointType            m_Maximum;
+
+  double               m_Abcisse;
+  double               m_SpaceAbcisse;
+  
+}; // end class
+} // end namespace otb
+
+
+#endif
+
+