diff --git a/modules/gui/src/data_viewer/data_viewer_panel_base.cc b/modules/gui/src/data_viewer/data_viewer_panel_base.cc
index dd968c6b6616fd9e46b19674bb26bf34f27ea731..6405eb7774f285a666e80fc14eec050491dfe493 100644
--- a/modules/gui/src/data_viewer/data_viewer_panel_base.cc
+++ b/modules/gui/src/data_viewer/data_viewer_panel_base.cc
@@ -77,7 +77,8 @@ DataViewerPanelBase::DataViewerPanelBase(const Data& data,QWidget* parent):
   update_extent_(),
   fast_low_mag_(true),
   fast_high_mag_(true),
-  antialiasing_(true)
+  antialiasing_(true),
+  drag_start_()
 {
   update_min_max();
   UpdateNormalizer(data_min_,data_max_,1.0,false);
@@ -521,35 +522,34 @@ void DataViewerPanelBase::mouseMoveEvent(QMouseEvent* event)
     int dy = event->y()-last_y_;
     move(dx,dy);
   } else if(event->buttons() == Qt::LeftButton  && event->modifiers()==Qt::NoModifier) {
-    static Point drag_start;
     // left mouse drag does selection box
     if(!rubberband_->isVisible()){
-      drag_start=WinToPoint(rubberband_->geometry().topLeft());
+      drag_start_=WinToPoint(rubberband_->geometry().topLeft());
       rubberband_->show();
     }
     QSize vsize=size();
     Point mouse_pos=WinToPoint(event->x(),event->y());
     Point max_pos=WinToPoint(vsize.width(),vsize.height());
     Point min_pos=WinToPoint(0,0);
-    selection_=Extent(Point(std::max(min_pos[0],std::min(drag_start[0],mouse_pos[0])),
-                            std::max(min_pos[1],std::min(drag_start[1],mouse_pos[1])), slab_),
-                      Point(std::max(drag_start[0],std::min(max_pos[0],mouse_pos[0])),
-                            std::max(drag_start[1],std::min(max_pos[1],mouse_pos[1])), slab_));
+    selection_=Extent(Point(std::max(min_pos[0],std::min(drag_start_[0],mouse_pos[0])),
+                            std::max(min_pos[1],std::min(drag_start_[1],mouse_pos[1])), slab_),
+                      Point(std::max(drag_start_[0],std::min(max_pos[0],mouse_pos[0])),
+                            std::max(drag_start_[1],std::min(max_pos[1],mouse_pos[1])), slab_));
     if(selection_mode_>0){
       Size s=selection_.GetSize();
       int minsize=std::min<int>(s[0],s[1]);
       if(selection_mode_==2){
         minsize=1<<static_cast<int>(floor(log(Real(minsize))/log(Real(2.0))));
       }
-      if(drag_start[0]>mouse_pos[0] && drag_start[1]>mouse_pos[1]){
-        selection_.SetStart(drag_start-Point(minsize,minsize)+Point(1,1));
-        selection_.SetEnd(drag_start);        
-      }else if(drag_start[0]>mouse_pos[0] && drag_start[1]<=mouse_pos[1]){
-        selection_.SetStart(drag_start-Point(minsize,0)+Point(1,0));
-        selection_.SetEnd(drag_start+Point(0,minsize)-Point(0,1));        
-      }else if(drag_start[0]<=mouse_pos[0] && drag_start[1]>mouse_pos[1]){
-        selection_.SetStart(drag_start-Point(0,minsize)+Point(0,1));        
-        selection_.SetEnd(drag_start+Point(minsize,0)-Point(1,0));
+      if(drag_start_[0]>mouse_pos[0] && drag_start_[1]>mouse_pos[1]){
+        selection_.SetStart(drag_start_-Point(minsize,minsize)+Point(1,1));
+        selection_.SetEnd(drag_start_);        
+      }else if(drag_start_[0]>mouse_pos[0] && drag_start_[1]<=mouse_pos[1]){
+        selection_.SetStart(drag_start_-Point(minsize,0)+Point(1,0));
+        selection_.SetEnd(drag_start_+Point(0,minsize)-Point(0,1));        
+      }else if(drag_start_[0]<=mouse_pos[0] && drag_start_[1]>mouse_pos[1]){
+        selection_.SetStart(drag_start_-Point(0,minsize)+Point(0,1));        
+        selection_.SetEnd(drag_start_+Point(minsize,0)-Point(1,0));
       }else{
         selection_.SetEnd(selection_.GetStart()+Point(minsize,minsize)-Point(1,1));
       }
diff --git a/modules/gui/src/data_viewer/data_viewer_panel_base.hh b/modules/gui/src/data_viewer/data_viewer_panel_base.hh
index ec2345a5cd471ba29ab78eded8a53934d0ba5624..1727ea9a3e0d5c0fa6c2c9363e9acc77eaf72996 100644
--- a/modules/gui/src/data_viewer/data_viewer_panel_base.hh
+++ b/modules/gui/src/data_viewer/data_viewer_panel_base.hh
@@ -245,7 +245,8 @@ private:
   bool fast_high_mag_;
 
   bool antialiasing_;
-  
+  Point drag_start_;
+
   void move(int dx, int dy);
   void slab(int dz);
   void zoom(int d);