Introduced factory.
Changed to abstract factory.