button: refactoring