implemented new way of doing adaptations - using observers that perform the adaptation testing logic within themselves, and then set an 'adaptations' variable; the adaptation detector periodically checks this adaptations variable and then implements the appropriate adaptation with the driver