adding the actual algorithm factory