diff --git a/fsl/fslview/views/canvaspanel.py b/fsl/fslview/views/canvaspanel.py
index db5c1bb86512af65c9e29e1cf12e794093c09232..ffb550de6a5d13c9484b9d909564df5af6777d64 100644
--- a/fsl/fslview/views/canvaspanel.py
+++ b/fsl/fslview/views/canvaspanel.py
@@ -119,8 +119,8 @@ class CanvasPanel(viewpanel.ViewPanel):
             self.__colourBar.orientation = 'vertical'
 
         if self.colourBarLocation in ('top', 'left'):
-            self.__sizer.Add(self.__colourBar,   flag=flag)
-            self.__sizer.Add(self.__canvasPanel, flag=wx.EXPAND, proportion=1)
+            self.__sizer.Add(self.__colourBar,   flag=wx.EXPAND)
+            self.__sizer.Add(self.__canvasPanel, flag=flag, proportion=1)
         else:
             self.__sizer.Add(self.__canvasPanel, flag=flag, proportion=1)
             self.__sizer.Add(self.__colourBar,   flag=wx.EXPAND)
diff --git a/fsl/fslview/views/orthopanel.py b/fsl/fslview/views/orthopanel.py
index d753f3fa076cecc0aa1f58e64beebfad25687560..0239094db180bd1468694f8c21e7fc59452a8174 100644
--- a/fsl/fslview/views/orthopanel.py
+++ b/fsl/fslview/views/orthopanel.py
@@ -264,19 +264,9 @@ class OrthoPanel(canvaspanel.CanvasPanel):
         self._displayCtx.addListener('location', self._name, move) 
 
         # Callbacks for toggling x/y/z canvas display
-        def toggle(canvas, toggle):
-            self._canvasSizer.Show(canvas, toggle)
-            self._layoutChanged()
-
-        self.addListener('showXCanvas', self._name,
-                         lambda *a: toggle(self._xCanvasPanel,
-                                           self.showXCanvas))
-        self.addListener('showYCanvas', self._name,
-                         lambda *a: toggle(self._yCanvasPanel,
-                                           self.showYCanvas))
-        self.addListener('showZCanvas', self._name,
-                         lambda *a: toggle(self._zCanvasPanel,
-                                           self.showZCanvas))
+        self.addListener('showXCanvas', self._name, self._layoutChanged)
+        self.addListener('showYCanvas', self._name, self._layoutChanged)
+        self.addListener('showZCanvas', self._name, self._layoutChanged)
 
         # Do some cleaning up if/when this panel is destroyed
         self.Bind(wx.EVT_WINDOW_DESTROY, self._onDestroy)
@@ -292,6 +282,9 @@ class OrthoPanel(canvaspanel.CanvasPanel):
         Adds a listener to the currently selected image, to listen
         for changes on its affine transformation matrix.
         """
+        
+        self._refreshLabels()
+
         if len(self._imageList) == 0: return
 
         for i, img in enumerate(self._imageList):
@@ -303,8 +296,6 @@ class OrthoPanel(canvaspanel.CanvasPanel):
             if i == self._displayCtx.selectedImage:
                 img.addListener('transform', self._name, self._refreshLabels)
 
-        self._refreshLabels()
-
 
     def _onDestroy(self, ev):
         """Called when this panel is destroyed. 
@@ -543,11 +534,15 @@ class OrthoPanel(canvaspanel.CanvasPanel):
         # TODO This assumes RAS orientation - we could
         # automaticaly generate the canvas order from 
         # anatomical orientation labels
-        self._xcanvas.invertX = layout == 'grid'
+        self._zcanvas.invertY = layout == 'grid'
         if layout == 'grid':
             canvases = [self._yCanvasPanel,
                         self._xCanvasPanel,
                         self._zCanvasPanel]
+            show     = [self.showYCanvas,
+                        self.showXCanvas,
+                        self.showZCanvas] 
+                        
 
         # For vertical/horizontal
         # layouts, we just go with XYZ
@@ -555,10 +550,12 @@ class OrthoPanel(canvaspanel.CanvasPanel):
             canvases = [self._xCanvasPanel,
                         self._yCanvasPanel,
                         self._zCanvasPanel]
+            show     = [self.showXCanvas,
+                        self.showYCanvas,
+                        self.showZCanvas] 
 
-        # Generate a list of canvases for which
+        # Pick out the canvases for which
         # the 'show*Canvas' property is true 
-        show = [self.showXCanvas, self.showYCanvas, self.showZCanvas]
 
         if any(show): 
             canvases = list(
@@ -566,6 +563,10 @@ class OrthoPanel(canvaspanel.CanvasPanel):
         else:
             canvases = []
 
+        self._xCanvasPanel.Show(self.showXCanvas)
+        self._yCanvasPanel.Show(self.showYCanvas)
+        self._zCanvasPanel.Show(self.showZCanvas)
+
         if len(canvases) == 0:
             return
 
@@ -619,9 +620,9 @@ class OrthoPanel(canvaspanel.CanvasPanel):
         widgets += [space] * (ncols + 2)
 
         # Add all those widgets to the grid sizer
-        for w in widgets:
-            self._canvasSizer.Add( w, flag=wx.ALIGN_CENTRE_HORIZONTAL |
-                                           wx.ALIGN_CENTRE_VERTICAL)
+        for i, w in enumerate(widgets):
+            self._canvasSizer.Add(w, flag=wx.ALIGN_CENTRE_HORIZONTAL |
+                                          wx.ALIGN_CENTRE_VERTICAL)
 
         self.getCanvasPanel().SetSizer(self._canvasSizer)
 
diff --git a/fsl/fslview/views/spacepanel.py b/fsl/fslview/views/spacepanel.py
index 7ace114910152fde17d897cee39232345ce17ad9..d85d751b364026afca295ac2454406d27d967716 100644
--- a/fsl/fslview/views/spacepanel.py
+++ b/fsl/fslview/views/spacepanel.py
@@ -53,9 +53,19 @@ class SpacePanel(viewpanel.ViewPanel):
         self.SetSizer(self._sizer)
         self._sizer.Add(self._canvas, flag=wx.EXPAND, proportion=1)
 
+        self.Bind(wx.EVT_WINDOW_DESTROY, self._onDestroy)
+        
         self._selectedImageChanged()
 
 
+    def _onDestroy(self, ev):
+        ev.Skip()
+        self._iamgeList.removeListener('images',        self._name)
+        self._iamgeList.removeListener('selectedImage', self._name)
+
+        
+
+
     def _selectedImageChanged(self, *a):
 
         self._axis.clear()