 												 newValue		: Object) : void
 		{
 			newValue && setParameter(property, newValue);
-			
-			if (property == 'localToWorld')
-			{
-				_localToWorld = Matrix4x4.copy(newValue as Matrix4x4, _localToWorld);
-				_invalidDepth = true;
-			}
-			else if (property == 'worldToView')
-			{
-				_worldToView = Matrix4x4.copy(newValue as Matrix4x4, _worldToView);
-				_invalidDepth = true;
-			}
-			else if (property == 'projection')
-			{
-				_projection = Matrix4x4.copy(newValue as Matrix4x4, _projection);
-				_invalidDepth = true;
-			}
-			else if (property == 'worldToScreen')
-			{
-				_worldToScreen = Matrix4x4.copy(newValue as Matrix4x4, _worldToScreen);
-				_invalidDepth = true;
-			}
+		}
+		
+		private function transformChangedHandler(bindings 	: DataBindings,
+										  property 	: String,
+										  value 	: Matrix4x4) : void
+		{
+			if (property == "worldToScreen")
+				_worldToScreen = value;
+			else if (property == "localToWorld")
+				_localToWorld = value;
+			
+			_invalidDepth = true;
 		}
 		
 		public static function sort(drawCalls : Vector.<DrawCall>, numDrawCalls : uint) : void

		 * @fixme it should be done on the compiler also to avoid this ugly hack
		 */		
		private function setBindings(meshBindings	: DataBindings,
									 sceneBindings	: DataBindings) : void
		{
			for (var parameter : String in _bindings)
			{

		private var _depth				: Number							= 0.;
		private var _invalidDepth		: Boolean							= false;
		private var _localToWorld		: Matrix4x4							= null;
		private var _worldToScreen		: Matrix4x4							= null;
		
		public function get vertexComponents() : Vector.<VertexComponent>
