diff --git a/fsl/fslview/slicecanvas.py b/fsl/fslview/slicecanvas.py
index 221d64b0003855e3ebfc053081d5ad6d0347d724..4f90886cd7fd68d0b7c05b3d0efc2957ac4d37db 100644
--- a/fsl/fslview/slicecanvas.py
+++ b/fsl/fslview/slicecanvas.py
@@ -57,24 +57,8 @@ class GLImageData(object):
           - canvas: The SliceCanvas object which is rendering the image.
         """
 
-        self.image      = image
-        self.canvas     = canvas
-
-        # Here, x,y, and z refer to screen
-        # coordinates, not image coordinates:
-        #   - x: horizontal
-        #   - y: vertical
-        #   - z: depth
-
-        # number of voxels along each axis
-        self.xdim = image.shape[ canvas.xax]
-        self.ydim = image.shape[ canvas.yax]
-        self.zdim = image.shape[ canvas.zax]
-
-        # length of a voxel along each axis
-        self.xlen = image.pixdim[canvas.xax]
-        self.ylen = image.pixdim[canvas.yax]
-        self.zlen = image.pixdim[canvas.zax]
+        self.image  = image
+        self.canvas = canvas
 
         # Maximum number of colours used to draw image data
         self.colourResolution = 256
@@ -113,7 +97,8 @@ class GLImageData(object):
         # times - we are drawing row-wise, and opengl does not
         # allow us to loop over a VBO in a single instance
         # rendering call
-        voxData[canvas.xax] = np.tile(voxData[canvas.xax], self.ydim)
+        voxData[canvas.xax] = np.tile(voxData[    canvas.xax],
+                                      image.shape[canvas.yax])
         
         xBuffer = vbo.VBO(voxData[0], gl.GL_STATIC_DRAW)
         yBuffer = vbo.VBO(voxData[1], gl.GL_STATIC_DRAW)
@@ -121,11 +106,11 @@ class GLImageData(object):
         
         geomBuffer = vbo.VBO(geomData, gl.GL_STATIC_DRAW)
 
-        self.dataBuffer      = self.initImageBuffer()
-        self.voxXBuffer      = xBuffer
-        self.voxYBuffer      = yBuffer
-        self.voxZBuffer      = zBuffer
-        self.geomBuffer      = geomBuffer
+        self.dataBuffer = self.initImageBuffer()
+        self.voxXBuffer = xBuffer
+        self.voxYBuffer = yBuffer
+        self.voxZBuffer = zBuffer
+        self.geomBuffer = geomBuffer
 
         # Add listeners to this image so the view can be
         # updated when its display properties are changed
@@ -495,12 +480,6 @@ class SliceCanvas(wxgl.GLCanvas):
                 glData = GLImageData(image, self)
                 image.setAttribute(self.name, glData)
 
-
-        print 'bounds: '
-        print 'X: {} {}'.format(self.xmin, self.xmax)
-        print 'Y: {} {}'.format(self.ymin, self.ymax)
-        print 'Z: {} {}'.format(self.zmin, self.zmax)
-                
         self.Refresh()
 
 
@@ -559,7 +538,7 @@ class SliceCanvas(wxgl.GLCanvas):
 
         size = self.GetSize()
 
-        # set up 2D drawing
+        # set up 2D orthographic drawing
         gl.glViewport(0, 0, size.width, size.height)
         gl.glMatrixMode(gl.GL_PROJECTION)
         gl.glLoadIdentity()
@@ -572,6 +551,10 @@ class SliceCanvas(wxgl.GLCanvas):
         eye[self.zax] = self.zmax
         up[ self.yax] = 1
 
+        # I don't know why this is necessary :(
+        if self.zax == 1:
+            eye[self.zax] = self.zmin
+
         gl.glMatrixMode(gl.GL_MODELVIEW)
         gl.glLoadIdentity()
         glu.gluLookAt(
@@ -625,9 +608,9 @@ class SliceCanvas(wxgl.GLCanvas):
             voxZBuffer      = glImageData.voxZBuffer
             geomBuffer      = glImageData.geomBuffer
 
-            xdim = glImageData.xdim
-            ydim = glImageData.ydim
-            zdim = glImageData.zdim
+            xdim = image.shape[self.xax]
+            ydim = image.shape[self.yax]
+            zdim = image.shape[self.zax]
 
             # Don't draw the slice if this
             # image display is disabled