self.toolbar.AddControl(self.layerSpin)
                self.Bind(wx.EVT_SPINCTRL, self.OnLayerNrChange, self.layerSpin)
 
-               self.OnViewChange()
-               
                sizer = wx.BoxSizer(wx.VERTICAL)
                sizer.Add(self.toolbar, 0, flag=wx.EXPAND|wx.TOP|wx.LEFT|wx.RIGHT, border=1)
                sizer.Add(self.glCanvas, 1, flag=wx.EXPAND)
                self.scaleUniform = openglGui.glCheckbox(self.scaleForm, True, (1,8), None)
                self.scaleForm.setHidden(True)
 
+               self.OnViewChange()
                self.returnToModelViewAndUpdateModel()
 
                self.matrix = numpy.matrix(numpy.array(profile.getObjectMatrix(), numpy.float64).reshape((3,3,)))
                        value = float(value)
                except:
                        return
-               scale = numpy.linalg.norm(self.matrix[axis].getA().flatten())
+               scale = numpy.linalg.norm(self.matrix[::,axis].getA().flatten())
                scale = value / scale
                if scale == 0:
                        return
                if self.scaleUniform.getValue():
                        matrix = [[scale,0,0], [0, scale, 0], [0, 0, scale]]
                else:
-                       matrix = [[1,0,0], [0, 1, 0], [0, 0, 1]]
+                       matrix = [[1.0,0,0], [0, 1.0, 0], [0, 0, 1.0]]
                        matrix[axis][axis] = scale
                self.matrix *= numpy.matrix(matrix, numpy.float64)
                self.updateModelTransform()
                self.updateModelTransform()
 
        def OnRotateReset(self):
-               x = numpy.linalg.norm(self.matrix[0].getA().flatten())
-               y = numpy.linalg.norm(self.matrix[1].getA().flatten())
-               z = numpy.linalg.norm(self.matrix[2].getA().flatten())
+               x = numpy.linalg.norm(self.matrix[::,0].getA().flatten())
+               y = numpy.linalg.norm(self.matrix[::,1].getA().flatten())
+               z = numpy.linalg.norm(self.matrix[::,2].getA().flatten())
                self.matrix = numpy.matrix([[x,0,0],[0,y,0],[0,0,z]], numpy.float64)
                for obj in self.objectList:
                        obj.steepDirty = True
                self.updateModelTransform()
 
        def OnScaleReset(self):
-               x = 1/numpy.linalg.norm(self.matrix[0].getA().flatten())
-               y = 1/numpy.linalg.norm(self.matrix[1].getA().flatten())
-               z = 1/numpy.linalg.norm(self.matrix[2].getA().flatten())
+               x = 1/numpy.linalg.norm(self.matrix[::,0].getA().flatten())
+               y = 1/numpy.linalg.norm(self.matrix[::,1].getA().flatten())
+               z = 1/numpy.linalg.norm(self.matrix[::,2].getA().flatten())
                self.matrix *= numpy.matrix([[x,0,0],[0,y,0],[0,0,z]], numpy.float64)
                for obj in self.objectList:
                        obj.steepDirty = True
                self.gcodeViewButton.Show(self.gcode is not None)
                self.mixedViewButton.Show(self.gcode is not None)
                self.layerSpin.Show(self.glCanvas.viewMode == "GCode" or self.glCanvas.viewMode == "Mixed")
+               self.printButton.setDisabled(self.gcode is None)
                if self.gcode is not None:
                        self.layerSpin.SetRange(1, len(self.gcode.layerList) - 1)
                self.toolbar.Realize()
                self.objectsSize = self.objectsMaxV - self.objectsMinV
                self.objectsBoundaryCircleSize = objectsBoundaryCircleSize
 
-               scaleX = numpy.linalg.norm(self.matrix[0].getA().flatten())
-               scaleY = numpy.linalg.norm(self.matrix[1].getA().flatten())
-               scaleZ = numpy.linalg.norm(self.matrix[2].getA().flatten())
+               scaleX = numpy.linalg.norm(self.matrix[::,0].getA().flatten())
+               scaleY = numpy.linalg.norm(self.matrix[::,1].getA().flatten())
+               scaleZ = numpy.linalg.norm(self.matrix[::,2].getA().flatten())
                self.scaleXctrl.setValue(round(scaleX, 2))
                self.scaleYctrl.setValue(round(scaleY, 2))
                self.scaleZctrl.setValue(round(scaleZ, 2))
 
                scale = self._lineLineCrossingDistOnLine(p0, p1, numpy.array([0,0,0], numpy.float32), numpy.array(endPoint, numpy.float32)) / 15.0 / s
                if not wx.GetKeyState(wx.WXK_SHIFT):
                        objMatrix = self.parent.getObjectMatrix()
-                       scaleX = numpy.linalg.norm(objMatrix[0].getA().flatten())
-                       scaleY = numpy.linalg.norm(objMatrix[1].getA().flatten())
-                       scaleZ = numpy.linalg.norm(objMatrix[2].getA().flatten())
+                       scaleX = numpy.linalg.norm(objMatrix[::,0].getA().flatten())
+                       scaleY = numpy.linalg.norm(objMatrix[::,1].getA().flatten())
+                       scaleZ = numpy.linalg.norm(objMatrix[::,2].getA().flatten())
                        if self.node == 1 or not wx.GetKeyState(wx.WXK_CONTROL):
                                matrixScale = (scaleX + scaleY + scaleZ) / 3
                        elif self.node == 2:
                if self.node == 4 and self.scale is not None:
                        sz *= self.scale
                objMatrix = self.parent.getObjectMatrix()
-               scaleX = numpy.linalg.norm(objMatrix[0].getA().flatten())
-               scaleY = numpy.linalg.norm(objMatrix[1].getA().flatten())
-               scaleZ = numpy.linalg.norm(objMatrix[2].getA().flatten())
+               scaleX = numpy.linalg.norm(objMatrix[::,0].getA().flatten())
+               scaleY = numpy.linalg.norm(objMatrix[::,1].getA().flatten())
+               scaleZ = numpy.linalg.norm(objMatrix[::,2].getA().flatten())
                if self.scale is not None:
                        scaleX *= self.scale
                        scaleY *= self.scale