Now with abstract classes and nicer packaging - now the choosable elements are all implemented in algorithm.first_attempt, and they implement/extend those in algorithm.virtual.