refactor + event