 			}
 			
 			_effectToMeshes[meshEffect].push(mesh);
+			
+			//register to visibility change signal
+			mesh.visibilityChanged.add(meshVisibilityChangedHandler);
 		}
 		
 		private function removeMesh(mesh : Mesh) : void

			{
				// fork pass if needed
				var asShader		: ActionScriptShader	= meshEffect.getPass(i);
				var passInstance	: ShaderInstance			= asShader.fork(meshBindings, sceneBindings);
				
				// create drawcall
				var drawCall		: DrawCall		= new DrawCall();

				delete _effectToMeshes[meshEffect];
				meshEffect.passesChanged.remove(effectPassesChangedHandler);
			}
			
			//remove to visibility change signal
			mesh.visibilityChanged.remove(meshVisibilityChangedHandler);
		}
		
		private function meshVisibilityChangedHandler(mesh		 : Mesh,
