finally fix events being cleaned up on dispose