better OO design