Refactoring button-base to better support extension