   recalculateMatrices: ->
     @validate() unless @isValid()
     @_stale = false
-    mat4.fromRotationTranslation @rotation, @position, @matrices.mv
-    mat4.inverse @matrices.mv, @matrices.imv
-    mat4.toInverseMat3 @matrices.mv, @matrices.n
-    mat3.transpose @matrices.n
+    GLMatrix.mat4.fromRotationTranslation @matrices.mv, @rotation, @position
+    GLMatrix.mat4.invert @matrices.imv, @matrices.mv
+    GLMatrix.mat3.fromMat4 @matrices.n, @matrices.imv
+    GLMatrix.mat3.transpose @matrices.n, @matrices.n
     @fireEvent 'matrixUpdated'
   
   validate: () ->
     @_isValid = true
-    @_viewVector  = quat4.multiplyVec3 @rotation, LOCAL_VIEW,  @_viewVector
-    @_rightVector = quat4.multiplyVec3 @rotation, LOCAL_RIGHT, @_rightVector
-    @_upVector    = quat4.multiplyVec3 @rotation, LOCAL_UP,    @_upVector
+    @_viewVector  = GLMatrix.vec3.transformQuat @_viewVector,  LOCAL_VIEW,  @rotation
+    @_rightVector = GLMatrix.vec3.transformQuat @_rightVector, LOCAL_RIGHT, @rotation
+    @_upVector    = GLMatrix.vec3.transformQuat @_upVector,    LOCAL_UP,    @rotation
     
   setFixedYawAxis: (useFixedYaw, axis) ->
     @_fixedYaw = useFixedYaw

    @_frustum

    
  _dirVec = vec3.create()
  _dirRightVec = vec3.create()
  _dirUpVec = vec3.create()
  _dirQuat = quat4.create()
  @define 'direction',
    get: ->
      @validate() unless @isValid()
      @_viewVector
    set: (dir) ->
      vec = vec3.set dir, _dirVec
      vec3.normalize vec
      if @_fixedYaw
        # FIXME why am I negating? Can't remember...
        vec3.negate vec
        right = vec3.normalize vec3.cross @_fixedYawAxis, vec, _dirRightVec
        up    = vec3.normalize vec3.cross vec, right, _dirUpVec
        quat4.fromAxes vec, right, up, @rotation
      else
        rotquat = vec3.rotationTo @direction, vec, _dirQuat
        quat4.multiply rotquat, @rotation, @rotation
      quat4.normalize @rotation
      @invalidate()
      @fireEvent 'updated'
    

    
    view = vec3.scale @direction, forward
    right = vec3.scale @right, strafe
    GLMatrix.vec3.copy dest, @position
    vec3.add view, dest, dest
    vec3.add right, dest, dest
    return dest
