implements now the factory interface