button refactor WIP