 
 			return this;
 		}
+		
+		private function updateComponents(components : uint = 7) : void
+		{
+			if (_invalidComponents & components & COMPONENT_TRANSLATION)
+			{
+				_invalidComponents &= ~COMPONENT_TRANSLATION;
+				getTranslation(_translation);
+			}
+			if (_invalidComponents & components & COMPONENT_ROTATION)
+			{
+				_invalidComponents &= ~COMPONENT_ROTATION;
+				getRotation(_rotation);
+			}
+			if (_invalidComponents & components & COMPONENT_SCALE)
+			{
+				_invalidComponents &= ~COMPONENT_SCALE;
+				getScale(_scale);
+			}
+		}
 	}
 }

		
		public function setScale(x : Number, y : Number, z : Number) : Matrix4x4
		{
			var components 	: Vector.<Vector3D>	= _matrix.decompose();
			var scale		: Vector3D			= components[2];
			
			if (!isNaN(x))
				scale.x = x;
			if (!isNaN(y))
				scale.y = y;
			if (!isNaN(z))
				scale.z = z;
			
			_matrix.recompose(components);
			
			if (!_locked)
				_changed.execute(this);

		
		public function appendUniformScale(scale : Number) : Matrix4x4
		{
			_invalidComponents = COMPONENT_ALL;
			_matrix.appendScale(scale, scale, scale);
			
			if (!_locked)
