Abstact factory refactored....