diff --git a/fsl/fsleyes/frame.py b/fsl/fsleyes/frame.py
index 2cbf65ca3a0f31a2e6948fc3a1a9a42c113a4921..68cc9e71648f858df366885184788ec0cf41032f 100644
--- a/fsl/fsleyes/frame.py
+++ b/fsl/fsleyes/frame.py
@@ -276,6 +276,11 @@ class FSLEyesFrame(wx.Frame):
 
         self.__auiManager.Update()
 
+        # PlotPanels don't draw themselves
+        # automatically when created.
+        if isinstance(panel, views.PlotPanel):
+            panel.draw()
+
         self.Thaw()
 
 
diff --git a/fsl/fsleyes/views/histogrampanel.py b/fsl/fsleyes/views/histogrampanel.py
index b33a1db5da6060a48366233a18d509da45f76005..4e3f799b0c09eb6d866644ef1b24817ff296c011 100644
--- a/fsl/fsleyes/views/histogrampanel.py
+++ b/fsl/fsleyes/views/histogrampanel.py
@@ -149,7 +149,9 @@ class HistogramPanel(plotpanel.OverlayPlotPanel):
         hss = [hs for hs in hss if hs is not None]
 
         for hs in hss:
+            hs.disableNotification('label')
             hs.label = self._displayCtx.getDisplay(hs.overlay).name
+            hs.enableNotification('label')
 
         if self.smooth:
             self.drawDataSeries(hss,
diff --git a/fsl/fsleyes/views/plotpanel.py b/fsl/fsleyes/views/plotpanel.py
index 4bf22abdd6a467cc2cb064aed674817a4a4489fc..8350d1797a7bafb136657bd93e20ff645b977e51 100644
--- a/fsl/fsleyes/views/plotpanel.py
+++ b/fsl/fsleyes/views/plotpanel.py
@@ -967,7 +967,7 @@ class OverlayPlotPanel(PlotPanel):
         allOverlays = self.__refreshProps.keys()
         allOverlays = set(allOverlays) - set(targetOverlays)
         allOverlays = list(allOverlays) + targetOverlays
-
+        
         # Make sure that property listeners are not
         # registered on overlays that we're not
         # interested in, and are registered on those
@@ -975,7 +975,7 @@ class OverlayPlotPanel(PlotPanel):
         # above ensures that we inadvertently don't
         # de-register a listener that we have just
         # registered, from the same target.
-        for overlay in allOverlays + targetOverlays:
+        for overlay in allOverlays:
 
             targets, propNames = self.__refreshProps.get(overlay, (None, None))
 
diff --git a/fsl/fsleyes/views/powerspectrumpanel.py b/fsl/fsleyes/views/powerspectrumpanel.py
index 7b0fc151199897ece4863ecfe86d14730399ab7a..893eaebcec425812c6949f2565d7ac460ae9e9aa 100644
--- a/fsl/fsleyes/views/powerspectrumpanel.py
+++ b/fsl/fsleyes/views/powerspectrumpanel.py
@@ -159,7 +159,9 @@ class PowerSpectrumPanel(plotpanel.OverlayPlotPanel):
         pss = [ps for ps in pss if ps is not None]
 
         for ps in pss:
-            ps.label = ps.makeLabel() 
+            ps.disableNotification('label')
+            ps.label = ps.makeLabel()
+            ps.enableNotification('label')
 
         self.drawDataSeries(extraSeries=pss,
                             preproc=self.__prepareSpectrumData)
diff --git a/fsl/fsleyes/views/timeseriespanel.py b/fsl/fsleyes/views/timeseriespanel.py
index 616cbc4b1168f4460b0f2f48114e6a33989c262f..4bcf9475886fb3c41f079bb5911cf6eb1dcc74a3 100644
--- a/fsl/fsleyes/views/timeseriespanel.py
+++ b/fsl/fsleyes/views/timeseriespanel.py
@@ -210,7 +210,14 @@ class TimeSeriesPanel(plotpanel.OverlayPlotPanel):
                 tss = tss[:i] + ts.getModelTimeSeries() + tss[i:]
 
         for ts in tss:
+
+            # Changing the label might trigger
+            # another call to this method, as
+            # the PlotPanel might have a listener
+            # registered on it.
+            ts.disableNotification('label')
             ts.label = ts.makeLabel()
+            ts.enableNotification('label')
 
         self.drawDataSeries(extraSeries=tss,
                             preproc=self.__prepareTimeSeriesData)