use Supplier instead of Factory