added algorithm interface