finished except for list.select