made listeners automatically unlisten on destruction