diff --git a/modules/gui/pymod/export_overlay.cc b/modules/gui/pymod/export_overlay.cc
index 4a19bceeb30e06a5e9e0737b64b53c0210dc7fd1..03131dfcc2880f95584e91ecb9dc72972e931cac 100644
--- a/modules/gui/pymod/export_overlay.cc
+++ b/modules/gui/pymod/export_overlay.cc
@@ -47,7 +47,7 @@ void plo_add2(PointlistOverlay& plo, const PointList& p)
   plo.Add(p);
 }
 
-/*void plo_add3(PointlistOverlay& plo, const Point& p, double scale)
+void plo_add3(PointlistOverlay& plo, const Point& p, double scale)
 {
   plo.Add(p,scale);
 }
@@ -56,7 +56,7 @@ void plo_add4(PointlistOverlay& plo, const PointList& p, double scale)
 {
   plo.Add(p,scale);
 }
-*/
+
 QColor qcolor_from_pyobj(boost::python::object& obj)
 {
 return QColor(boost::python::extract<int>(obj.attr("red")()),
@@ -64,7 +64,7 @@ return QColor(boost::python::extract<int>(obj.attr("red")()),
               boost::python::extract<int>(obj.attr("blue")()));
 }
 
-/*void set_active_color(PointlistOverlayBase& plo,boost::python::object& obj)
+void set_active_color(PointlistOverlayBase& plo,boost::python::object& obj)
 {
   QColor color=qcolor_from_pyobj(obj);
   plo.SetActiveColor(color);
@@ -73,7 +73,7 @@ void set_passive_color(PointlistOverlayBase& plo,boost::python::object& obj)
 {
   QColor color=qcolor_from_pyobj(obj);
   plo.SetPassiveColor(color);
-}*/
+}
 
 }//ns
 
@@ -94,16 +94,16 @@ void export_overlay()
     .def("GetSymbolShape",&PointlistOverlayBase::GetSymbolShape)
     .def("SetCrosshair",&PointlistOverlayBase::SetCrosshair)
     .def("GetCrosshair",&PointlistOverlayBase::GetCrosshair)
-   // .def("SetActiveColor",set_active_color)
-  //  .def("SetPassiveColor",set_passive_color)
+    .def("SetActiveColor",set_active_color)
+    .def("SetPassiveColor",set_passive_color)
     ;
 
   class_<PointlistOverlay,bases<PointlistOverlayBase>,boost::noncopyable>("PointlistOverlay",init<optional<const String&> >())
     .def(init<const PointList&,optional<const String&> >())
     .def("Add",plo_add1)
     .def("Add",plo_add2)
- //   .def("Add",plo_add3)
- //   .def("Add",plo_add4)
+    .def("Add",plo_add3)
+    .def("Add",plo_add4)
     .def("Remove",&PointlistOverlay::Remove)
     .def("Clear",&PointlistOverlay::Clear)
     ;
diff --git a/modules/gui/src/data_viewer/pointlist_overlay.cc b/modules/gui/src/data_viewer/pointlist_overlay.cc
index c031b8eef986581d3ea6043a7f2a7ad4817d3eac..899372608a3bf9607a26a1b64639496ac8e60a7a 100644
--- a/modules/gui/src/data_viewer/pointlist_overlay.cc
+++ b/modules/gui/src/data_viewer/pointlist_overlay.cc
@@ -31,15 +31,17 @@
 namespace ost { namespace img { namespace gui {
 
 PointlistOverlay::PointlistOverlay(const String& name):
-  PointlistOverlayBase(name)
+  PointlistOverlayBase(name),
+  pointlist_()
 {
-  build();
+  build_();
 }
 
 PointlistOverlay::PointlistOverlay(const PointList& pl, const String& name):
-  PointlistOverlayBase(name)
+  PointlistOverlayBase(name),
+  pointlist_()
 {
-  build();
+  build_();
   Add(pl);
 }
 
@@ -52,22 +54,22 @@ void PointlistOverlay::OnMenuEvent(QAction* e)
   }
 }
 
-void PointlistOverlay::Add(const Point& pnt)
+void PointlistOverlay::Add(const Point& pnt, double scale)
 {
-  pointlist_.push_back(pnt);
+  pointlist_.push_back(std::pair<Point,double>(pnt,scale));
 }
 
-void PointlistOverlay::Add(const PointList& pl)
+void PointlistOverlay::Add(const PointList& pl, double scale)
 {
   for(PointList::const_iterator it=pl.begin();it!=pl.end();++it) {
-    Add(*it);
+    Add(*it,scale);
   }
 }
 
 void PointlistOverlay::Remove(const Point& pnt)
 {
-  for(PointList::iterator it=pointlist_.begin();it!=pointlist_.end();++it){
-    if (*it==pnt) {
+  for(std::vector<std::pair<Point,double> >::iterator it=pointlist_.begin();it!=pointlist_.end();++it){
+    if (it->first==pnt) {
       pointlist_.erase(it);
     }
   }
@@ -80,13 +82,14 @@ void PointlistOverlay::Clear()
 
 void PointlistOverlay::OnDraw(QPainter& pnt, DataViewerPanel* dvp, bool is_active)
 {
-  std::vector<QPoint> qpointlist;
-  for(PointList::iterator it=pointlist_.begin();it!=pointlist_.end();++it){
-    qpointlist.push_back(dvp->FracPointToWinCenter((*it).ToVec2()));
+  std::vector<std::pair<QPoint,double> > qpointlist;
+  for(std::vector<std::pair<Point,double> >::iterator it=pointlist_.begin();it!=pointlist_.end();++it){
+    qpointlist.push_back(std::pair<QPoint,double> (dvp->FracPointToWinCenter((it->first).ToVec2()),it->second));
   }
   
-  DrawPointList(pnt,dvp, is_active? active_color_ : passive_color_,
-                qpointlist);
+  DrawVariableSizePointList(pnt,dvp,
+		is_active? active_color_ : passive_color_,
+		qpointlist);
 }
 
 bool PointlistOverlay::OnMouseEvent(QMouseEvent* e, 
@@ -96,19 +99,20 @@ bool PointlistOverlay::OnMouseEvent(QMouseEvent* e,
   if(e->buttons()==Qt::LeftButton && e->modifiers()&Qt::ShiftModifier) {
     // toggle point at mouse position
     Point mpoint = dvp->WinToPoint(e->x(),e->y());
-    PointList::iterator pos=find(pointlist_.begin(),
-                                       pointlist_.end(),mpoint);
-    if(pos!=pointlist_.end()) {
-      pointlist_.erase(pos);
-    } else {
-      pointlist_.push_back(mpoint);
+    for(std::vector<std::pair<Point,double> >::iterator it=pointlist_.begin();it!=pointlist_.end();++it){
+      if (it->first==mpoint) {
+        pointlist_.erase(it);
+        return true;
+      }
     }
+    pointlist_.push_back(std::pair<Point,double>(mpoint,1.0));
     return true;
   }
   return false;
 }
 
-void PointlistOverlay::build()
+
+void PointlistOverlay::build_()
 {
   menu_->addSeparator();
   a_clr_ = menu_->addAction("Clear");
diff --git a/modules/gui/src/data_viewer/pointlist_overlay.hh b/modules/gui/src/data_viewer/pointlist_overlay.hh
index 1095f2191f448dc4d9ac5fa318d59719a817b292..bbec437c4e5665c054390e8feb648dd2e6fc70df 100644
--- a/modules/gui/src/data_viewer/pointlist_overlay.hh
+++ b/modules/gui/src/data_viewer/pointlist_overlay.hh
@@ -45,8 +45,8 @@ public:
   virtual bool OnMouseEvent(QMouseEvent* e,  DataViewerPanel* dvp, 
                             const QPoint& lastmouse);
   
-  void Add(const Point& pnt);
-  void Add(const PointList& pl);
+  void Add(const Point& pnt, double scale=1.0);
+  void Add(const PointList& pl, double scale=1.0);
   
   //! remove all points on the given point
   void Remove(const Point& pnt);
@@ -55,11 +55,11 @@ public:
   void Clear();
   
 private:
-  PointList pointlist_;
+  std::vector<std::pair<Point,double> > pointlist_;
 
   QAction* a_clr_;
 
-  void build();
+  void build_();
 };
 
 }}}  //ns
diff --git a/modules/gui/src/data_viewer/pointlist_overlay_base.cc b/modules/gui/src/data_viewer/pointlist_overlay_base.cc
index fe76e291ef0614e15764766646ec78a67ff353f7..a1a6e0eb41e7706f47ff44fc131e49b092ab9c29 100644
--- a/modules/gui/src/data_viewer/pointlist_overlay_base.cc
+++ b/modules/gui/src/data_viewer/pointlist_overlay_base.cc
@@ -197,6 +197,18 @@ void PointlistOverlayBase::DrawPointList(QPainter& pnt, DataViewerPanel* dvp,
   }
   strategy_->SetSymbolSize(static_cast<int>((GetSymbolSize()-0.5) * dvp->GetZoomScale()));
 }
+void PointlistOverlayBase::DrawVariableSizePointList(QPainter& pnt, DataViewerPanel* dvp, 
+                                                     const QColor& color,
+                                                     const std::vector<std::pair<QPoint,double> >& pointlist)
+{
+  strategy_->SetPenColor(color);
+  strategy_->SetSymbolStrength(symbolstrength_);
+  for(unsigned int i = 0; i < pointlist.size(); i++) {
+    strategy_->SetSymbolSize(static_cast<int>((GetSymbolSize()-0.5) * dvp->GetZoomScale()*pointlist[i].second));
+    strategy_->Draw(pnt,pointlist[i].first);
+  }
+  strategy_->SetSymbolSize(static_cast<int>((GetSymbolSize()-0.5) * dvp->GetZoomScale()));
+}
 
 bool PointlistOverlayBase::GetCrosshair() const
 {
@@ -276,4 +288,14 @@ void PointlistOverlayBase::SetProps(PointlistOverlayBaseSettings* props)
   symbolstrength_=props->symbol_strength;
 }
 
+void PointlistOverlayBase::SetActiveColor(const QColor& col)
+{
+  active_color_=col;
+}
+
+void PointlistOverlayBase::SetPassiveColor(const QColor& col)
+{
+  passive_color_=col;
+}
+
 }}}  //ns
diff --git a/modules/gui/src/data_viewer/pointlist_overlay_base.hh b/modules/gui/src/data_viewer/pointlist_overlay_base.hh
index 606c859a1dcc32b2ff17eb1d2836cd17ab621e53..d80c1d8794773d0f055903ac0b9e776d1b9e9a1e 100644
--- a/modules/gui/src/data_viewer/pointlist_overlay_base.hh
+++ b/modules/gui/src/data_viewer/pointlist_overlay_base.hh
@@ -85,6 +85,7 @@ public:
 
   // own virtual interface
   virtual void DrawPointList(QPainter& pnt, DataViewerPanel* dvp, const QColor& col ,const std::vector<QPoint>& pointlist);
+  virtual void DrawVariableSizePointList(QPainter& pnt, DataViewerPanel* dvp, const QColor& col ,const std::vector<std::pair<QPoint,double> >& pointlist);
 
   //
   unsigned int GetSymbolSize() const;
@@ -93,6 +94,8 @@ public:
   void SetSymbolShape(unsigned int symbolshape);
   bool GetCrosshair() const;
   void SetCrosshair(bool flag);
+  void SetActiveColor(const QColor& col);
+  void SetPassiveColor(const QColor& col);
 private:
 
   template <class StrategyClass>