diff --git a/fsl/fslview/displaycontext/modelopts.py b/fsl/fslview/displaycontext/modelopts.py
index 0c5ef4c009d2892309b8d98ef6e908156ae472f8..b8089fb202db66933f65a3d96eb05d60e442feaf 100644
--- a/fsl/fslview/displaycontext/modelopts.py
+++ b/fsl/fslview/displaycontext/modelopts.py
@@ -56,7 +56,18 @@ class ModelOpts(fsldisplay.DisplayOpts):
                                      self.name,
                                      self.__overlayListChanged)
 
-        self.addListener('refImage', self.name, self.__refImageChanged)
+        # This attribute tracks the name of the
+        # space-related property (refImage,
+        # coordSpace, or transform) which most
+        # recently changed. It is updated by
+        # the corresponding listener callbacks,
+        # and used by the transformDisplayLocation
+        # method.
+        self.__lastPropChanged = None
+        
+        self.addListener('refImage',   self.name, self.__refImageChanged)
+        self.addListener('transform',  self.name, self.__transformChanged)
+        self.addListener('coordSpace', self.name, self.__coordSpaceChanged)
         
         self.__overlayListChanged() 
 
@@ -71,7 +82,6 @@ class ModelOpts(fsldisplay.DisplayOpts):
         fsldisplay.DisplayOpts.destroy(self)
 
 
-
     def getReferenceImage(self):
         """Overrides :meth:`.DisplayOpts.getReferenceIamge`.
 
@@ -81,19 +91,6 @@ class ModelOpts(fsldisplay.DisplayOpts):
         if self.refImage == 'none':
             return None
         return self.refImage
-            
-
-    def getDisplayBounds(self):
-
-        lo, hi = self.overlay.getBounds()
-        xform  = self.getCoordSpaceTransform()
-
-        if xform is None:
-            return lo, hi
-
-        lohi = transform.transform([lo, hi], xform)
-
-        return lohi[0, :], lohi[1, :]
 
     
     def getCoordSpaceTransform(self):
@@ -109,9 +106,10 @@ class ModelOpts(fsldisplay.DisplayOpts):
         return opts.getTransform(self.coordSpace, self.transform)
 
 
-    def transformDisplayLocation(self, propName, oldLoc):
+    def transformDisplayLocation(self, oldLoc):
 
-        newLoc = oldLoc
+        newLoc   = oldLoc
+        propName = self.__lastPropChanged
         
         if propName == 'refImage':
 
@@ -154,9 +152,23 @@ class ModelOpts(fsldisplay.DisplayOpts):
         return newLoc
 
 
+    def __transformChanged(self, *a):
+        self.__lastPropChanged = 'transform'
+        self.__updateBounds()
+
+
+    def __coordSpaceChanged(self, *a):
+        self.__lastPropChanged = 'coordSpace'
+        self.__updateBounds()
+
+
     def __refImageChanged(self, *a):
 
-        if self.__oldRefImage != 'none':
+        self.__lastPropChanged = 'refImage'
+
+        if self.__oldRefImage != 'none' and \
+           self.__oldRefImage in self._overlayList:
+            
             opts = self.displayCtx.getOpts(self.__oldRefImage)
             self.unbindProps('transform', opts)
 
@@ -165,6 +177,25 @@ class ModelOpts(fsldisplay.DisplayOpts):
         if self.refImage != 'none':
             opts = self.displayCtx.getOpts(self.refImage)
             self.bindProps('transform', opts)
+
+        self.__updateBounds()
+
+
+    def __updateBounds(self):
+        """Called whenever any of the :attr:`refImage`, :attr:`coordSpace`, 
+        or :attr:`transform` properties change.
+
+        Updates the :attr:`.DisplayOpts.bounds` property accordingly.
+        """
+
+        lo, hi = self.overlay.getBounds()
+        xform  = self.getCoordSpaceTransform()
+
+        if xform is not None:
+            lohi   = transform.transform([lo, hi], xform)
+            lo, hi = lohi[0, :], lohi[1, :]
+
+        self.bounds = [lo[0], hi[0], lo[1], hi[1], lo[2], hi[2]]
             
     
     def __overlayListChanged(self, *a):
diff --git a/fsl/fslview/gl/glmodel.py b/fsl/fslview/gl/glmodel.py
index a1d339292e7306e4c130a4a06c7a1b80153cdfbc..187667583afecec287a9e8e759196457ea57d382 100644
--- a/fsl/fslview/gl/glmodel.py
+++ b/fsl/fslview/gl/glmodel.py
@@ -101,7 +101,8 @@ class GLModel(globject.GLObject):
 
         
     def getDisplayBounds(self):
-        return self.opts.getDisplayBounds()
+        return (self.opts.bounds.getLo(),
+                self.opts.bounds.getHi()) 
 
     
     def getDataResolution(self, xax, yax):