 					setParameter(parameter, meshBindings.getProperty(parameter));
 				else if (sceneBindings.propertyExists(parameter))
 					setParameter(parameter, sceneBindings.getProperty(parameter));
+			}
+			
+			if (computeDepth)
+			{
+				sceneBindings.getPropertyChangedSignal('worldToScreen').add(
+					transformChangedHandler
+				);
+				
+				meshBindings.getPropertyChangedSignal('localToWorld').add(
+					transformChangedHandler
+				);
 			}
 		}
 

												 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;
			}
		}
		
		public static function sort(drawCalls : Vector.<DrawCall>, numDrawCalls : uint) : void

			{
				_invalidDepth = false;
				
				if (_localToWorld != null && _worldToScreen != null)
				{
					_localToWorld.transformVector(Vector4.ZERO, TMP_VECTOR4);
					_depth = _worldToScreen.transformVector(TMP_VECTOR4, TMP_VECTOR4).z;
				}
			}
			
			return _depth;
