diff --git a/fsl/fsleyes/displaycontext/display.py b/fsl/fsleyes/displaycontext/display.py
index 4041d2473506ba1559532b4ef17464a423ff7e28..cd21c97086fb8f56e151debdab24e76a4becd330 100644
--- a/fsl/fsleyes/displaycontext/display.py
+++ b/fsl/fsleyes/displaycontext/display.py
@@ -436,6 +436,8 @@ class DisplayOpts(actions.ActionProvider):
         """
         actions.ActionProvider.destroy(self)
 
+        self.detachFromParent()
+
         self.overlay     = None
         self.display     = None
         self.overlayList = None
diff --git a/fsl/fsleyes/displaycontext/displaycontext.py b/fsl/fsleyes/displaycontext/displaycontext.py
index 2d592eae925e3429789be6fc1988503183163865..d9914af10131a542aa1edc15aa1dda06a1219746 100644
--- a/fsl/fsleyes/displaycontext/displaycontext.py
+++ b/fsl/fsleyes/displaycontext/displaycontext.py
@@ -246,6 +246,8 @@ class DisplayContext(props.SyncableHasProperties):
         instances managed by it are destroyed as well.
         """
 
+        self.detachFromParent()
+
         self.__overlayList.removeListener('overlays', self.__name)
 
         for overlay, display in self.__displays.items():
diff --git a/fsl/fsleyes/frame.py b/fsl/fsleyes/frame.py
index 5c1f8d63a074e0c74fb822cb9b37c4707ebe1fce..4f51e483f7e99e8ed96cab28c19addbac76e2a2e 100644
--- a/fsl/fsleyes/frame.py
+++ b/fsl/fsleyes/frame.py
@@ -186,8 +186,8 @@ class FSLEyesFrame(wx.Frame):
         paneInfo = (aui.AuiPaneInfo()
                     .Name(title)
                     .Caption(title)
-                    .Dockable()
                     .CloseButton()
+                    .Dockable()
                     .Resizable()
                     .DestroyOnClose())
 
@@ -199,7 +199,7 @@ class FSLEyesFrame(wx.Frame):
         # So if we only have one panel, we
         # hide the caption bar
         if panelId == 1:
-            paneInfo.Centre().CaptionVisible(False)
+            paneInfo.Centre().Dockable(False).CaptionVisible(False)
             
         # But then re-show it when another
         # panel is added. The __viewPanels
@@ -330,9 +330,9 @@ class FSLEyesFrame(wx.Frame):
         numPanels = len(self.__viewPanels)
         wasCentre = paneInfo.dock_direction_get() == aui.AUI_DOCK_CENTRE
         
-        if numPanels == 1 or (numPanels > 0 and wasCentre):
+        if numPanels >= 1 and wasCentre:
             paneInfo = self.__viewPanels.keys()[0]
-            paneInfo.Centre().CaptionVisible(False)
+            paneInfo.Centre().Dockable(False).CaptionVisible(numPanels > 1)
 
         
     def __onClose(self, ev):