diff --git a/Source/Processors/Visualization/LfpDisplayCanvas.cpp b/Source/Processors/Visualization/LfpDisplayCanvas.cpp
index 7917cd2f799add28105cb823f77e3c4f63eb8ad1..b106e07e8580cea8c67a5a2f58e89da763bd1eb5 100755
--- a/Source/Processors/Visualization/LfpDisplayCanvas.cpp
+++ b/Source/Processors/Visualization/LfpDisplayCanvas.cpp
@@ -82,14 +82,14 @@ void LfpDisplayCanvas::beginAnimation()
 
 	screenBufferIndex = 0;
 	
-	startTimer(500);
+	startCallbacks();
 }
 
 void LfpDisplayCanvas::endAnimation()
 {
 	std::cout << "Ending animation." << std::endl;
 	
-	stopTimer();
+	stopCallbacks();
 }
 
 void LfpDisplayCanvas::update()
@@ -254,19 +254,22 @@ void LfpDisplayCanvas::paint(Graphics& g)
 {
 
 	//std::cout << "Painting" << std::endl;
-
-	updateScreenBuffer();
-
 	 g.setColour(Colours::grey);
 
 	 g.fillRect(0, 0, getWidth(), getHeight());
 	
-	 g.setColour(Colours::yellow);
+	 // g.setColour(Colours::yellow);
 
-	 g.drawLine(screenBufferIndex, 0, screenBufferIndex, getHeight());
+	 // g.drawLine(screenBufferIndex, 0, screenBufferIndex, getHeight());
 	
 }
 
+void LfpDisplayCanvas::refresh()
+{
+	updateScreenBuffer();
+
+}
+
 // -------------------------------------------------------------
 
 LfpTimescale::LfpTimescale(LfpDisplayCanvas* c) : canvas(c)
diff --git a/Source/Processors/Visualization/LfpDisplayCanvas.h b/Source/Processors/Visualization/LfpDisplayCanvas.h
index 8c0ce15eb6d927287dd96ea694a8b3ccb86e07e6..039ed1d0dd2b794573ac710376505605067f505c 100755
--- a/Source/Processors/Visualization/LfpDisplayCanvas.h
+++ b/Source/Processors/Visualization/LfpDisplayCanvas.h
@@ -60,6 +60,8 @@ public:
 
 	void paint(Graphics& g);
 
+	void refresh();
+
 	void resized();
 
 	float getXCoord(int chan, int samp);
diff --git a/Source/Processors/Visualization/Visualizer.h b/Source/Processors/Visualization/Visualizer.h
index 96250ba1095b4a5424c84b0d2494770919fc0a2e..fe0f15c72f45af1bd312ac2993049665d9368355 100755
--- a/Source/Processors/Visualization/Visualizer.h
+++ b/Source/Processors/Visualization/Visualizer.h
@@ -48,6 +48,9 @@ public:
     /** Called when parameters of underlying data processor are changed.*/
 	virtual void update() = 0;
 
+    /** Called instead of "repaint" to avoid redrawing underlying components if not necessary.*/
+    virtual void refresh() = 0;
+
     /** Called when data acquisition is active.*/
 	virtual void beginAnimation() = 0;
 
@@ -67,7 +70,7 @@ public:
     void stopCallbacks() { stopTimer(); }
 
     /** Called whenever the timer is triggered. */
-    void timerCallback() { repaint(); }
+    void timerCallback() { refresh(); }
 
     /** Refresh rate in Hz. */
     float refreshRate;