algorithm factories.