added Button class (untested!)