refactor Button