sclass VMBusListenerWithLivelinessCheck implements IF2 { Set listeners; // where we were added IF0 livelinessCheck; O listener; *(Set *listeners, IF0 *livelinessCheck, O *listener) {} *(Set *listeners, IF0 *livelinessCheck, IVF2 *listener) {} public O get(S msg, O arg) { if (livelinessCheck != null && !livelinessCheck.get()) { ifdef VMBusListenerWithLivelinessCheck_debug print VMBusListenerWithLivelinessCheck("Removing VM bus listener"); endifdef remove(listeners, this); } ret callF(listener, msg, arg); } }