Simplify implementation, removing events