Started to implement AbstractFactory pattern