improved button class