Algorithms ----------