             
             meshLocalToWorldChangedHandler(mesh, mesh.getLocalToWorldTransform());
 			mesh.localToWorldTransformChanged.add(meshLocalToWorldChangedHandler);
-            mesh.visibilityChanged.add(visiblityChangedHandler);
-            mesh.parent.computedVisibilityChanged.add(visiblityChangedHandler);
-            mesh.removed.add(meshRemovedHandler);
-		}
-		
-        private function meshRemovedHandler(mesh : Mesh, ancestor : Group) : void
-        {
-            if (!mesh.parent)
-                ancestor.computedVisibilityChanged.remove(visiblityChangedHandler);
-        }
-        
+            mesh.computedVisibilityChanged.add(computedVisiblityChangedHandler);
+            mesh.bindings.addProvider(_data);
+		}
+		
 		private function removedHandler(mesh : Mesh, ancestor : Group) : void
 		{
 			var scene : Scene = ancestor.scene;

		
		override public function clone() : AbstractController
		{
			return new MeshVisibilityController();;
		}
	}
}

		
        private var _frustumCulling     : uint;
        private var _insideFrustum      : Boolean;
		
		public function get frustumCulling() : uint
		{
