diff --git a/fsl/fslview/displaycontext/group.py b/fsl/fslview/displaycontext/group.py
index 493280b96d5a87ccbdd7d09de62de96d6095b795..a2098d6282607bccdc886f988a0de310debc7e38 100644
--- a/fsl/fslview/displaycontext/group.py
+++ b/fsl/fslview/displaycontext/group.py
@@ -59,6 +59,7 @@ class OverlayGroup(props.HasProperties):
 
         self.__displayCtx  = displayCtx
         self.__overlayList = overlayList
+        self.__hasBeenSet  = {}
         self.__name        = '{}_{}'.format(type(self).__name__, id(self))
 
         # Copy all of the properties listed
@@ -80,6 +81,8 @@ class OverlayGroup(props.HasProperties):
             for propName in propNames:
                 prop = copy.copy(getattr(cls, propName))
                 self.addProperty('{}_{}'.format(clsName, propName), prop)
+                
+                self.__hasBeenSet[clsName, propName] = False
 
 
     def __copy__(self):
@@ -93,6 +96,9 @@ class OverlayGroup(props.HasProperties):
         display = self.__displayCtx.getDisplay(overlay)
         opts    = display.getDisplayOpts()
 
+        log.debug('Adding overlay {} to group {}'.format(
+            overlay.name, self.__name))
+
         self.__bindDisplayOpts(display)
         self.__bindDisplayOpts(opts)
 
@@ -108,11 +114,18 @@ class OverlayGroup(props.HasProperties):
         display = self.__displayCtx.getDisplay(overlay)
         opts    = display.getDisplayOpts()
 
-        self.__bindDisplayOpts(display, True)
-        self.__bindDisplayOpts(opts,    True)
+        log.debug('Removing overlay {} from group {}'.format(
+            overlay.name, self.__name)) 
+
+        self.__bindDisplayOpts(display, unbind=True)
+        self.__bindDisplayOpts(opts,    unbind=True)
 
         display.removeListener('overlayType', self.__name)
 
+        if len(self.overlays) == 0:
+            for key in self.__hasBeenSet.keys():
+                self.__hasBeenSet[key] = False
+
 
     def __bindDisplayOpts(self, target, unbind=False):
         
@@ -129,15 +142,28 @@ class OverlayGroup(props.HasProperties):
         bindProps = OverlayGroup._groupBindings.get(target,
                                                     allhits=True,
                                                     bykey=True)
-        
+
         for clsName, propNames in bindProps.items():
             for propName in propNames:
 
+                groupName = '{}_{}'.format(clsName, propName)
+
+                # If the group property has not yet
+                # taken on a value, initialise it
+                # to the property value being bound.
+                # 
+                # We do this to avoid clobbering
+                # property values with un-initialised
+                # group property values.
+                #
+                if not self.__hasBeenSet[clsName, propName]:
+                    setattr(self, groupName, getattr(target, propName))
+
                 if slave is self:
                     otherName = propName
-                    propName  = '{}_{}'.format(clsName, propName)
+                    propName  = groupName
                 else:
-                    otherName = '{}_{}'.format(clsName, propName)
+                    otherName = groupName
 
                 slave.bindProps(propName,
                                 master,