more generic button class