made the variant names more human. changed more fields to be values instead of functions. supplied an ordered slice of variants