abstract algorithm can't be removed because it's used for lookup