 					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
+				);
 			}
 		}
 

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

		public function configure(program		: Program3DResource,
								  geometry		: Geometry,
								  meshBindings	: DataBindings,
								  sceneBindings	: DataBindings,
								  computeDepth	: Boolean) : void
		{
			if (_bindings != null)
				unsetBindings(meshBindings, sceneBindings);
		
			setProgram(program);
			updateGeometry(geometry);
			setGeometry(geometry);
			setBindings(meshBindings, sceneBindings, computeDepth);
		}
		
		private function unsetBindings(meshBindings		: DataBindings,
