     M4x4.scale(scale, m, m)
     @currentMatrix = m
 
-    updateMacro(@)
-
-
-  resetRotation : ->
-
-    { currentMatrix } = @
-
-    x = currentMatrix[12]
-    y = currentMatrix[13]
-    z = currentMatrix[14]
-
-    @reset()
-    @setPosition([x, y, z])
+    if position? and not resetPosition
+      @setPosition(position)
+
+    # Apply 180° Rotation to keep it consistent with plane view
+    @roll Math.PI
 
     updateMacro(@)
 


  setRotation : ([x, y, z]) ->

    @resetRotation()
    @roll  -z * Math.PI / 180
    @yaw   -y * Math.PI / 180
    @pitch -x * Math.PI / 180

    object = new THREE.Object3D()
    matrix = (new THREE.Matrix4()).fromArray( @currentMatrix ).transpose()
    object.applyMatrix( matrix )

    # Fix JS modulo bug
    # http://javascript.about.com/od/problemsolving/a/modulobug.htm
    mod = (x, n) ->
      return ((x % n) + n) % n

    return _.map [
      object.rotation.x
      object.rotation.y
      object.rotation.z - Math.PI
      ], (e) -> mod(180 / Math.PI * e, 360)



