 	 * recently set
 	 */
 	private function validatePropertiesFromMatrix():void
-	{
-	    
+	{	    
 	    if(sourceOfTruth == SOURCE_MATRIX3D)
 	    {
 	    	var result:Vector.<Vector3D> = _matrix3D.decompose();
-	    	_x = result[0].x;
-	    	_y = result[0].y;
-	    	_z = result[0].z;
-	    	_rotationX = result[1].x;
-	    	_rotationY = result[1].y;
-	    	_rotationZ = result[1].z;
+	    	_rotationX = result[1].x / RADIANS_PER_DEGREES;
+	    	_rotationY = result[1].y / RADIANS_PER_DEGREES;
+	    	_rotationZ = result[1].z / RADIANS_PER_DEGREES;
 	    	_scaleX = result[2].x;
 	    	_scaleY = result[2].y;
 	    	_scaleZ = result[2].z;
-	    	_transformX = _transformY = _transformZ = 0;
+
+			if(_transformX != 0 || _transformY != 0 || _transformZ != 0)
+			{
+				var postTransformTCenter:Vector3D = _matrix3D.transformVector(new Vector3D(_transformX,_transformY,_transformZ));
+		    	_x = postTransformTCenter.x - _transformX;
+	    		_y = postTransformTCenter.y - _transformY;
+	    		_z = postTransformTCenter.z - _transformZ;
+			}
+			else
+			{
+		    	_x = result[0].x;
+		    	_y = result[0].y;
+	    		_z = result[0].z;
+	  		}
 	    }                        
 	    else if(sourceOfTruth == SOURCE_MATRIX)
 	    {
-	    	decomposeMatrix(decomposition,_matrix);
+	    	decomposeMatrix(decomposition,_matrix,_transformX,_transformY);
 	    	_x = decomposition[0];
 	    	_y = decomposition[1];
 	    	_z = 0;

     */
	mx_internal function get transformX():Number
	{
		if ((_flags & PROPERTIES_VALID) == false) validatePropertiesFromMatrix();
		return _transformX;
	}


	    	_scaleX = decomposition[3];
	    	_scaleY = decomposition[4];
	    	_scaleZ = 1;
	    }
	    _flags |= PROPERTIES_VALID;
		
