 			if( !_spaceTransform || !_transform )
 			{
 				_transform = spaceTransform.clone();
-				var projectionTransform:Matrix3D = new Matrix3D( Vector.<Number>( [
+				_projectionTransform.rawData = Vector.<Number>( [
 					_projectionDistance, 0, 0, 0,
 					0, _projectionDistance, 0, 0,
 					0, 0, 1, 1,
 					0, 0, 0, 0
-				] ) );
-				_transform.append( projectionTransform );
+				] );
+				_transform.append( _projectionTransform );
 			}
 			return _transform;
 		}

		{
			if( !_spaceTransform )
			{
				var realDown:Vector3D = _direction.crossProduct( _track );
				_spaceTransform = Matrix3DUtils.newBasisTransform( 
					Vector3DUtils.cloneUnit( _track ),
					Vector3DUtils.cloneUnit( realDown ), 
					Vector3DUtils.cloneUnit( _direction ) );
				_spaceTransform.prependTranslation( -_position.x, -_position.y, -_position.z );
			}

			_target = new Vector3D( 0, 0, 0, 1 );
			_down = new Vector3D( 0, 1, 0 );
			_pDirection = new Vector3D( 0, 0, 1 );
			_realDown = new Vector3D();
			_projectionTransform = new Matrix3D;
		}

		/**
