diff --git a/Code/Common/otbDataNode.txx b/Code/Common/otbDataNode.txx
index 405690df2fa87f7b4bf968cdc9f19cb902000bf6..debc61d297f648cba10059c44c271925f1d2889c 100644
--- a/Code/Common/otbDataNode.txx
+++ b/Code/Common/otbDataNode.txx
@@ -319,7 +319,7 @@ template <class TPrecision, unsigned int VDimension, class TValuePrecision>
     is >> value;
     return value;
   }
-  return "";
+  return 0;
 }
 
 /*
diff --git a/Code/Visualization/otbVectorDataGlComponent.h b/Code/Visualization/otbVectorDataGlComponent.h
index 634cfcb52ef03c009192f54dd423d287397205dd..369851d88c528f531a4a47104c77e785cb620e1a 100644
--- a/Code/Visualization/otbVectorDataGlComponent.h
+++ b/Code/Visualization/otbVectorDataGlComponent.h
@@ -72,6 +72,7 @@ public:
   typedef typename VectorDataType::Pointer        VectorDataPointerType;
   typedef typename VectorDataType::DataNodeType   DataNodeType;
   typedef typename DataNodeType::Pointer          DataNodePointerType;
+  typedef typename DataNodeType::ConstPointer          DataNodeConstPointerType;
   typedef typename VectorDataType::DataTreeType   DataTreeType;
   typedef typename DataNodeType::LineType         LineType;
   typedef typename DataNodeType::PolygonType      PolygonType;
@@ -129,11 +130,11 @@ protected:
   }
 
   /// Render a point
-  virtual void RenderPoint(const PointType & p, const RegionType & extent, const AffineTransformType * transform);
+  virtual void RenderPoint(DataNodePointerType dataNode, const RegionType & extent, const AffineTransformType * transform);
   /// Render a polyline
-  virtual void RenderLine(const LineType * l, const RegionType & extent, const AffineTransformType * transform);
+  virtual void RenderLine(DataNodePointerType dataNode, const RegionType & extent, const AffineTransformType * transform);
   // Render a complex polygon (with holes)
-  virtual void RenderPolygon(const PolygonType * extRing, const PolygonListType * intRings, const RegionType & extent, const AffineTransformType * transform);
+  virtual void RenderPolygon(DataNodePointerType dataNode, const RegionType & extent, const AffineTransformType * transform);
 
   // Recursive rendering method
   virtual void Render(InternalTreeNodeType * node, const RegionType & extent, const AffineTransformType * space2ScreenTransform);
diff --git a/Code/Visualization/otbVectorDataGlComponent.txx b/Code/Visualization/otbVectorDataGlComponent.txx
index bbbd4a1390ee74390cc017a501caaab277254220..e67b6f6b7c11f57de082acf79c58695d70273186 100644
--- a/Code/Visualization/otbVectorDataGlComponent.txx
+++ b/Code/Visualization/otbVectorDataGlComponent.txx
@@ -106,10 +106,10 @@ VectorDataGlComponent<TVectorData>
    template <class TVectorData>   
 void 
 VectorDataGlComponent<TVectorData>
-::RenderPoint(const PointType & p, const RegionType & extent, const AffineTransformType * transform)
+::RenderPoint(DataNodePointerType dataNode, const RegionType & extent, const AffineTransformType * transform)
 {
   // Take into account pixel spacing and origin
-  PointType spacePoint = p;
+  PointType spacePoint = dataNode->GetPoint();
   spacePoint[0]*= m_Spacing[0];
   spacePoint[1]*= m_Spacing[1];
   spacePoint[0]+= m_Origin[0];
@@ -130,8 +130,9 @@ VectorDataGlComponent<TVectorData>
 template <class TVectorData>   
 void 
 VectorDataGlComponent<TVectorData>
-::RenderLine(const LineType * l, const RegionType & extent, const AffineTransformType * transform)
+::RenderLine(DataNodePointerType dataNode, const RegionType & extent, const AffineTransformType * transform)
 {
+  const LineType * l = dataNode->GetLine();
   // Iterate on the line
   typename LineType::VertexListType::ConstIterator vIt = l->GetVertexList()->Begin();
 
@@ -159,8 +160,10 @@ VectorDataGlComponent<TVectorData>
 template <class TVectorData>   
 void 
 VectorDataGlComponent<TVectorData>
-::RenderPolygon(const PolygonType * extRing, const PolygonListType * intRings, const RegionType & extent, const AffineTransformType * transform)
+::RenderPolygon(DataNodePointerType dataNode, const RegionType & extent, const AffineTransformType * transform)
 {
+  const PolygonType * extRing = dataNode->GetPolygonExteriorRing();
+  const PolygonListType * intRings = dataNode->GetPolygonInteriorRings();
   typedef std::vector<GLdouble * > VertexVectorType;
 
   // A buffer to hold vertex until they are rendered
@@ -264,19 +267,19 @@ VectorDataGlComponent<TVectorData>
     {
     case FEATURE_POINT:
     {
-    this->RenderPoint(node->Get()->GetPoint(),extent,space2ScreenTransform);
+//    this->RenderPoint(node->Get()->GetPoint(),extent,space2ScreenTransform);
+    this->RenderPoint(node->Get(), extent, space2ScreenTransform);
     break;
     
     }
     case FEATURE_LINE:
     {
-    this->RenderLine(node->Get()->GetLine(),extent,space2ScreenTransform);
+    this->RenderLine(node->Get(), extent, space2ScreenTransform);
     break;
     }
     case FEATURE_POLYGON:
     {
-    this->RenderPolygon(node->Get()->GetPolygonExteriorRing(),node->Get()->GetPolygonInteriorRings(),
-                        extent,space2ScreenTransform);
+    this->RenderPolygon(node->Get(), extent, space2ScreenTransform);
     break;
     }
     default:
@@ -292,7 +295,7 @@ VectorDataGlComponent<TVectorData>
   // Render each child
   for(typename ChildrenListType::iterator it = children.begin(); it!=children.end();++it)
     {
-    this->Render(*it,extent,space2ScreenTransform);
+    this->Render(*it, extent, space2ScreenTransform);
     }
 }