Button refactor

Refs #3101 & #916