diff --git a/fsl/data/strings.py b/fsl/data/strings.py
index 851b74d4b73780a872c9a2883801bb5d3e30c054..a14d3e519457316d3203942e18dbf6246ca4e9db 100644
--- a/fsl/data/strings.py
+++ b/fsl/data/strings.py
@@ -134,7 +134,7 @@ messages = TypeDict({
                                     'in this FEAT analysis',
     'ClusterPanel.badData'        : 'Cluster data could not be parsed - '
                                     'check your cluster_*.txt files.',
-    'ClusterPanel.loadingCluster' : 'Loading data for cluster {} ...',
+    'ClusterPanel.loadingCluster' : 'Loading clusters for COPE{} ...',
 
     'OrthoEditProfile.displaySpaceChange' : 'Setting {} as the display '
                                             'space reference image - this '
diff --git a/fsl/fsleyes/controls/clusterpanel.py b/fsl/fsleyes/controls/clusterpanel.py
index c6900e8cf432faab6852b2cd43d9415eb16e7b09..fb60a1e2c9c5ddfc204ee18ca48ee190273e6525 100644
--- a/fsl/fsleyes/controls/clusterpanel.py
+++ b/fsl/fsleyes/controls/clusterpanel.py
@@ -14,7 +14,6 @@ import                        wx
 import pwidgets.widgetgrid as widgetgrid
 
 import fsl.fsleyes.panel   as fslpanel
-import fsl.utils.dialog    as fsldlg
 import fsl.data.strings    as strings
 import fsl.data.featimage  as featimage
 
@@ -152,15 +151,32 @@ class ClusterPanel(fslpanel.FSLEyesPanel):
         self.__sizer.Show(self.__mainSizer,    False)
         self.Layout()
 
+        
+    def __enable(self):
+        """Enables the ``ClusterPanel``. This amounts to hiding the
+        disabled message panel, and showing the :class:`.WidgetGrid`.
+        """
+        self.__sizer.Show(self.__disabledText, False)
+        self.__sizer.Show(self.__mainSizer,    True)
+        self.Layout() 
+
     
     def __statSelected(self, ev):
         """Called when a COPE is selected. Clears the cluster table, and
         displays clusters for the newly selected COPE (see the
         :meth:`__displayClusterData` method)
         """
-        idx  = self.__statSelect.GetSelection()
+        idx  = self.__statSelect.GetSelection() 
         data = self.__statSelect.GetClientData(idx)
-        self.__displayClusterData(data)
+        con  = idx + 1
+        
+        self.__disable(strings.messages[self, 'loadingCluster'].format(con))
+
+        self.Refresh()
+        self.Update()
+ 
+        self.__displayClusterData(con, data)
+        self.__enable()
         self.__enableOverlayButtons()
 
 
@@ -219,11 +235,14 @@ class ClusterPanel(fslpanel.FSLEyesPanel):
         self._overlayList.append(mask)
         self._displayCtx.getDisplay(mask).overlayType = 'label'
 
-        
-    def __displayClusterData(self, clusters):
+
+    def __displayClusterData(self, contrast, clusters):
         """Updates the cluster table so that it is displaying the given list
         of clusters.
 
+        :arg contrast: The number of the contrast to which the clusters are
+                       related.
+
         :arg clusters: A sequence of objects, each representing one cluster.
                        See the :meth:`.FEATImage.clusterResults` method.
         """
@@ -243,7 +262,6 @@ class ClusterPanel(fslpanel.FSLEyesPanel):
         overlay = self.__selectedOverlay
         opts    = self._displayCtx.getOpts(overlay)
 
-        grid.ClearGrid()
         grid.SetGridSize(len(clusters), 10)
 
         for col, i in cols.items():
@@ -266,15 +284,8 @@ class ClusterPanel(fslpanel.FSLEyesPanel):
 
             return sizer
 
-        dlg = fsldlg.SimpleMessageDialog()
-
-        dlg.Show()
-
         for i, clust in enumerate(clusters):
 
-            dlg.SetMessage(
-                strings.messages[self, 'loadingCluster'].format(clust.index))
-
             zmaxbtn    = makeCoordButton((clust.zmaxx,
                                           clust.zmaxy,
                                           clust.zmaxz))
@@ -297,8 +308,7 @@ class ClusterPanel(fslpanel.FSLEyesPanel):
             grid.SetWidget(i, cols['copemaxcoords'], copemaxbtn)
             grid.SetText(  i, cols['copemean'],      fmt(clust.copemean))
 
-        dlg.Close()
-        dlg.Destroy()
+        grid.Refresh()
         
 
     def __overlayListChanged(self, *a):
@@ -369,12 +379,10 @@ class ClusterPanel(fslpanel.FSLEyesPanel):
             
         self.__statSelect .Clear()
         self.__clusterList.ClearGrid()
+        self.__clusterList.Refresh()
 
         self.__selectedOverlay = overlay
 
-        self.__sizer.Show(self.__disabledText, False)
-        self.__sizer.Show(self.__mainSizer,    True)
-
         numCons  = overlay.numContrasts()
         conNames = overlay.contrastNames()
 
@@ -405,7 +413,8 @@ class ClusterPanel(fslpanel.FSLEyesPanel):
         self.__overlayName.SetLabel(overlay.getAnalysisName())
 
         self.__statSelect.SetSelection(0)
-        self.__displayClusterData(clusts[0][1])
+        self.__displayClusterData(1, clusts[0][1])
+
+        self.__enable()
 
         self.Layout()
-        return
diff --git a/fsl/fsleyes/controls/melodicclassificationgrid.py b/fsl/fsleyes/controls/melodicclassificationgrid.py
index 95113429b80850c34a776a8ce7a6409a3a7ad2c1..6d2a7fe23071282b5a7afefdab7161f3888431ed 100644
--- a/fsl/fsleyes/controls/melodicclassificationgrid.py
+++ b/fsl/fsleyes/controls/melodicclassificationgrid.py
@@ -129,6 +129,7 @@ class ComponentGrid(fslpanel.FSLEyesPanel):
 
         self.__deregisterCurrentOverlay()
         self.__grid.ClearGrid()
+        self.__grid.Refresh()
 
         overlay = self._displayCtx.getSelectedOverlay()
 
@@ -183,6 +184,8 @@ class ComponentGrid(fslpanel.FSLEyesPanel):
             tags.Bind(texttag.EVT_TTP_TAG_ADDED,   self.__onTagAdded)
             tags.Bind(texttag.EVT_TTP_TAG_REMOVED, self.__onTagRemoved)
 
+        self.__grid.Refresh()
+
         self.__refreshTagOptions()
         self.__refreshTags()
 
@@ -512,6 +515,8 @@ class LabelGrid(fslpanel.FSLEyesPanel):
             tags.Bind(texttag.EVT_TTP_TAG_REMOVED, self.__onTagRemoved)
             tags.Bind(texttag.EVT_TTP_TAG_SELECT,  self.__onTagSelect)
 
+        self.__grid.Refresh()
+
 
     def __refreshTags(self):
         """Re-populates the label-component mappings shown on the
diff --git a/fsl/fsleyes/controls/overlaydisplaypanel.py b/fsl/fsleyes/controls/overlaydisplaypanel.py
index afc1dd207221330bc561991c1e5753472c2070a0..aa01a05c8cc33c2b3824c089e2a0ec1d205123ad 100644
--- a/fsl/fsleyes/controls/overlaydisplaypanel.py
+++ b/fsl/fsleyes/controls/overlaydisplaypanel.py
@@ -40,7 +40,7 @@ class OverlayDisplayPanel(fslpanel.FSLEyesPanel):
        :scale: 50%
        :align: center
 
-    An ``OverlayDisplayPanel`` uses a :class:`.WidgetGrid` to organise the
+    An ``OverlayDisplayPanel`` uses a :class:`.WidgetList` to organise the
     settings into two main sections:
 
       - Settings which are common across all overlays - these are defined