diff --git a/fsl/fsleyes/displaycontext/vectoropts.py b/fsl/fsleyes/displaycontext/vectoropts.py
index 7d0dab1667feb3256f8b08e1d6e8fc0a266f1741..7a270265810f0d21b08c4f75860a0bb26941e014 100644
--- a/fsl/fsleyes/displaycontext/vectoropts.py
+++ b/fsl/fsleyes/displaycontext/vectoropts.py
@@ -93,7 +93,9 @@ class VectorOpts(volumeopts.Nifti1Opts):
         
         volumeopts.Nifti1Opts.__init__(self, *args, **kwargs)
 
-        if self.getParent() is not None:
+        self.__registered = self.getParent() is not None
+
+        if self.__registered:
             
             self.overlayList.addListener('overlays',
                                          self.name,
@@ -101,6 +103,14 @@ class VectorOpts(volumeopts.Nifti1Opts):
             self            .addListener('clipImage',
                                          self.name,
                                          self.__clipImageChanged)
+
+            if not self.isSyncedToParent('modulateImage'):
+                self.__refreshAuxImage('modulateImage')
+            if not self.isSyncedToParent('clipImage'):
+                self.__refreshAuxImage('clipImage')
+            if not self.isSyncedToParent('colourImage'):
+                self.__refreshAuxImage('colourImage') 
+
         else:
             self.__overlayListChanged()
             self.__clipImageChanged()
@@ -110,8 +120,9 @@ class VectorOpts(volumeopts.Nifti1Opts):
         """Removes some property listeners, and calls the
         :meth:`.Nifti1Opts.destroy` method.
         """
-        self.overlayList.removeListener('overlays',  self.name)
-        self            .removeListener('clipImage', self.name)
+        if self.__registered:
+            self.overlayList.removeListener('overlays',  self.name)
+            self            .removeListener('clipImage', self.name)
 
         volumeopts.Nifti1Opts.destroy(self)
 
@@ -145,27 +156,35 @@ class VectorOpts(volumeopts.Nifti1Opts):
         image.
         """
         
-        modProp    = self.getProp('modulateImage')
-        clipProp   = self.getProp('clipImage')
-        colourProp = self.getProp('colourImage')
-        modVal     = self.modulateImage
-        clipVal    = self.clipImage
-        colourVal  = self.colourImage
-        overlays   = self.displayCtx.getOrderedOverlays()
+        overlays = self.displayCtx.getOrderedOverlays()
 
         # the image for this VectorOpts
         # instance has been removed
         if self.overlay not in overlays:
-            self.overlayList.removeListener('overlays', self.name)
             return
+        
+        self.__refreshAuxImage('modulateImage')
+        self.__refreshAuxImage('clipImage')
+        self.__refreshAuxImage('colourImage')
+
+
+    def __refreshAuxImage(self, imageName):
+        """Updates the named image property (:attr:`modulateImage`,
+        :attr:`colourImage` or :attr:`clipImage`) so that it contains a list
+        of overlays which could be used to modulate the vector image.
+        """
+        
+        prop     = self.getProp(imageName)
+        val      = self.modulateImage
+        overlays = self.displayCtx.getOrderedOverlays()
 
         options = [None]
 
         for overlay in overlays:
             
             # It doesn't make sense to
-            # modulate/clip the image by
-            # itself.
+            # modulate/clip/colour the
+            # image by itself.
             if overlay is self.overlay:
                 continue
 
@@ -184,16 +203,10 @@ class VectorOpts(volumeopts.Nifti1Opts):
 
             options.append(overlay)
             
-        modProp   .setChoices(options, instance=self)
-        clipProp  .setChoices(options, instance=self)
-        colourProp.setChoices(options, instance=self)
-
-        if modVal    in options: self.modulateImage = modVal
-        else:                    self.modulateImage = None
-        if clipVal   in options: self.clipImage     = clipVal
-        else:                    self.clipImage     = None
-        if colourVal in options: self.colourImage   = colourVal
-        else:                    self.colourImage   = None 
+        prop.setChoices(options, instance=self)
+
+        if val in options: setattr(self, imageName, val)
+        else:              setattr(self, imageName, None)
 
 
 class LineVectorOpts(VectorOpts):
diff --git a/fsl/fsleyes/frame.py b/fsl/fsleyes/frame.py
index ea6675c3d4412f6bc566897a1470f7746b5d2461..a2f467e3eb381bfb89d35fcdde2f0126283a915f 100644
--- a/fsl/fsleyes/frame.py
+++ b/fsl/fsleyes/frame.py
@@ -452,7 +452,22 @@ class FSLEyesFrame(wx.Frame):
         if numPanels >= 1 and wasCentre:
             paneInfo = self.__auiManager.GetPane(self.__viewPanels[0])
             paneInfo.Centre().Dockable(False).CaptionVisible(numPanels > 1)
-
+            
+        # If there's only one panel left,
+        # and it is a canvas panel, sync
+        # its display properties to the
+        # master display context.
+        if numPanels == 1 and \
+           isinstance(self.__viewPanels[0], views.CanvasPanel):
+            dctx = self.__viewPanels[0].getDisplayContext()
+
+            # TODO Currently this causes the child
+            # context to inherit the values of the
+            # parent context. But we need the
+            # opposite - for the parent to inherit
+            # the values of the child.
+            dctx.syncOverlayDisplay = True
+            dctx.syncToParent('overlayOrder')
         
     def __onClose(self, ev):
         """Called when the user closes this ``FSLEyesFrame``.