diff --git a/modules/gui/src/data_viewer/data_viewer.cc b/modules/gui/src/data_viewer/data_viewer.cc
index 2bc7d368f8ce6b178a01d9580de9d7d383edddd2..8db37d504cbb4556e365c6e3ffd293a6ad7a5b51 100644
--- a/modules/gui/src/data_viewer/data_viewer.cc
+++ b/modules/gui/src/data_viewer/data_viewer.cc
@@ -83,6 +83,7 @@ DataViewer::~DataViewer()
 void DataViewer::SetData(const Data& d)
 {
   panel_->SetData(d);
+  fft_->SetData(d);
   info_->SetImageInfo(d);
 }
 
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 4c4b59bb5df8bb4df9853d6f10dd42d577e78ed0..ec2345a5cd471ba29ab78eded8a53934d0ba5624 100644
--- a/modules/gui/src/data_viewer/data_viewer_panel_base.hh
+++ b/modules/gui/src/data_viewer/data_viewer_panel_base.hh
@@ -59,7 +59,7 @@ public:
   DataViewerPanelBase(const Data& data,QWidget* parent);
   virtual ~DataViewerPanelBase();
 
-  void SetData(const Data& d);
+  virtual void SetData(const Data& d);
 
   //////////////////
   // event handling
diff --git a/modules/gui/src/data_viewer/fft_panel.cc b/modules/gui/src/data_viewer/fft_panel.cc
index 00d3b60d2e2635600dae4d9b711144fa078fe46c..17dd63b4a9da18678ae40f712241b1c9a2a98f67 100644
--- a/modules/gui/src/data_viewer/fft_panel.cc
+++ b/modules/gui/src/data_viewer/fft_panel.cc
@@ -36,18 +36,17 @@ FFTPanel::FFTPanel(const Data& parent_data, QWidget* parent):
   DataViewerPanelBase(parent_data,parent),
   size_(std::min<int>(256,std::min<int>(parent_data.GetSize()[0],parent_data.GetSize()[1]))),
   parent_position_(parent_data.GetExtent().GetCenter()),
-  parent_data_(parent_data),
   fft_data_(CreateImage(Extent(Size(size_,size_),Point(0,0)),
-                              COMPLEX,HALF_FREQUENCY))
+                              COMPLEX,HALF_FREQUENCY)),
+  parent_observer_(parent_data)
 {
   QAction* a_set_size=new QAction("Set FFT size",this);
   popupmenu_->addAction(a_set_size);
   connect(a_set_size, SIGNAL(triggered()), this, SLOT(ShowSizeDialog()));
-  SetData(fft_data_);
+  DataViewerPanelBase::SetData(fft_data_);
   update_fft();
 }
 
-
 FFTPanel::~FFTPanel()
 {
 }
@@ -58,8 +57,6 @@ void FFTPanel::ObserverUpdate()
   UpdateView(true);
 }
 
-
-
 void FFTPanel::SetPosition(const Point& p)
 {
   parent_position_=p;
@@ -71,9 +68,14 @@ void FFTPanel::ShowSizeDialog()
   bool ok;
   #if QT_VERSION >= 0x040500
     int i = QInputDialog::getInt(this, "Set FFT size","FFT size", size_, 1, 
-                                 std::min<int>(parent_data_.GetSize()[0],parent_data_.GetSize()[1]), 1, &ok);
+                                 std::min<int>(parent_observer_.GetObservedData().GetSize()[0],
+                                               parent_observer_.GetObservedData().GetSize()[1]),
+                                 1, &ok);
   #else
-    int i = QInputDialog::getInteger(this, "Set FFT size","FFT size", size_, 1, std::min<int>(parent_data_.GetSize()[0],parent_data_.GetSize()[1]), 1, &ok);
+    int i = QInputDialog::getInteger(this, "Set FFT size","FFT size", size_, 1,
+                                     std::min<int>(parent_observer_.GetObservedData().GetSize()[0],
+                                                   parent_observer_.GetObservedData().GetSize()[1]),
+                                     1, &ok);
   #endif
   if (ok){
     SetFFTSize(i);
@@ -93,14 +95,21 @@ unsigned int FFTPanel::GetFFTSize()
   return size_;
 }
 
-void  FFTPanel::update_fft()
+void FFTPanel::SetData(const Data& parent_data)
 {
-  ImageHandle im=CreateImage(Extent(Size(size_,size_),
-                                                      parent_position_));
-  im.Paste(parent_data_);
+  parent_observer_=ParentDataObserver(parent_data);
+}
+
+
+void FFTPanel::update_fft()
+{
+  ImageHandle im=CreateImage(Extent(Size(size_,size_),parent_position_));
+  im.Paste(parent_observer_.GetObservedData());
   im.ApplyIP(alg::FFT());
   fft_data_.Paste(im);
   UpdateView(true);
 }
 
+
 }}}  //ns
+
diff --git a/modules/gui/src/data_viewer/fft_panel.hh b/modules/gui/src/data_viewer/fft_panel.hh
index fab31b6accdb9280ef12354da12cbcca4c787315..2add54b8d2ca8140a078249250382751dc18ae3e 100644
--- a/modules/gui/src/data_viewer/fft_panel.hh
+++ b/modules/gui/src/data_viewer/fft_panel.hh
@@ -29,6 +29,16 @@
 
 namespace ost { namespace img { namespace gui {
 
+class ParentDataObserver: public DataObserver
+{
+public:
+  ParentDataObserver(const Data& d):DataObserver(d){}
+  virtual void ObserverRelease()
+  {
+   // Noop as parent takes care of this.
+  }
+};
+
 class DLLEXPORT_OST_GUI FFTPanel: public DataViewerPanelBase
 {
 Q_OBJECT
@@ -39,6 +49,7 @@ public:
   void SetFFTSize(unsigned int size);
   unsigned int GetFFTSize();
   virtual void ObserverUpdate();
+  virtual void SetData(const Data& parent_data);
 
 public slots:
   void SetPosition(const Point& p);
@@ -48,8 +59,8 @@ protected:
   void update_fft();
   unsigned int size_;
   Point parent_position_;
-  const Data& parent_data_;
   ImageHandle fft_data_;
+  ParentDataObserver parent_observer_;
 };
 
 }}}  //ns