diff --git a/fsl/fsleyes/controls/clusterpanel.py b/fsl/fsleyes/controls/clusterpanel.py
index 717407cf48f56154a95960d078c39014d73b2970..c24ae0cc2b2979a3c1c52a97f18dbc03ec29803f 100644
--- a/fsl/fsleyes/controls/clusterpanel.py
+++ b/fsl/fsleyes/controls/clusterpanel.py
@@ -439,16 +439,26 @@ class ClusterPanel(fslpanel.FSLEyesPanel):
         # WidgetGrid panels for overlays
         # that have been removed from the
         # list.
-        for overlay in self.__featImages.keys():
+        for overlay in list(self.__featImages.keys()):
             if overlay not in self._overlayList:
                 
-                featImage = self.__featImages  .pop(overlay)
-                grids     = self.__clusterGrids.pop(featImage)
-                
-                for grid in grids:
-                    if grid is not None:
-                        self.__mainSizer.Detach(grid)
-                        grid.Destroy()
+                featImage = self.__featImages.pop(overlay)
+
+                # Has the feat image associated with
+                # this overlay also been removed?
+                if featImage is overlay or \
+                   featImage not in self._overlayList:
+
+                    # The grid widgets for the feat image
+                    # associated with this overlay may
+                    # have already been destroyed.
+                    try:             grids = self.__clusterGrids.pop(featImage)
+                    except KeyError: grids = []
+
+                    for grid in grids:
+                        if grid is not None:
+                            self.__mainSizer.Detach(grid)
+                            grid.Destroy()
         
         self.__selectedOverlayChanged()
         self.__enableOverlayButtons()