better OO design and its more clear