removed abstract methods and added factories.