moving the track logic away from the interface