Abstract factory.