 			sceneBindings.removeCallback('viewportHeight', viewportSizeChanged);
 		}
 		
-		private function localToWorldChangedHandler(localToWorld : Matrix4x4, propertyName : String) : void
+		private function worldToLocalChangedHandler(worldToLocal : Matrix4x4, propertyName : String) : void
 		{
-			var transform 	: Matrix4x4 			= _camera.transform;
 			var cameraData	: CameraDataProvider	= _camera.cameraData;
-			
-			transform.transformVector(Vector4.ZERO,		cameraData.position);
-			transform.transformVector(Vector4.Z_AXIS,	cameraData.lookAt);
-			transform.transformVector(Vector4.Y_AXIS,	cameraData.up);
-			
-			localToWorld.transformVector(Vector4.ZERO,		cameraData.worldPosition);
-			localToWorld.transformVector(Vector4.Z_AXIS,	cameraData.worldLookAt);
-			localToWorld.transformVector(Vector4.Y_AXIS,	cameraData.worldUp);
-			
-			cameraData.screenToWorld.lock()
-				.copyFrom(cameraData.screenToView)
-				.append(localToWorld)
-				.unlock();
 			
 			cameraData.worldToScreen.lock()
 				.copyFrom(_camera.worldToLocal)
 				.append(cameraData.projection)
+				.unlock();
+			
+			cameraData.screenToWorld.lock()
+				.copyFrom(cameraData.screenToView)
+				.append(_camera.localToWorld)
 				.unlock();
 		}
 		

			_camera = target;
			_camera.addedToScene.add(addedToSceneHandler);
			_camera.removedFromScene.add(removedFromSceneHandler);
			_camera.localToWorld.changed.add(localToWorldChangedHandler);
		}
		
		private function targetRemovedHandler(controller	: CameraController,

		
		private function updateProjection() : void
		{
			var cameraData		: CameraDataProvider	= _camera.cameraData;
			var screenToView	: Matrix4x4				= cameraData.screenToView;
			var sceneBindings	: DataBindings			= Scene(_camera.root).bindings;
			var viewportWidth	: Number				= sceneBindings.getProperty('viewportWidth');
			var viewportHeight	: Number				= sceneBindings.getProperty('viewportHeight');
			var ratio			: Number				= viewportWidth / viewportHeight;
			
			cameraData.projection.perspectiveFoV(cameraData.fieldOfView, ratio, cameraData.zNear, cameraData.zFar);
			
			screenToView.lock()
				.copyFrom(cameraData.projection)
				.invert()
				.unlock();
			
			cameraData.screenToWorld.lock()
				.copyFrom(cameraData.screenToView)
				.append(_camera.localToWorld)
				.unlock();
			
			cameraData.worldToScreen.lock()
				.copyFrom(_camera.worldToLocal)
				.append(cameraData.projection)
				.unlock();
		}
	}
}