Reworkig some OO design flaws