accidentally made it into this pull request. i'll remove and make it separately.