work in progress
work in progress, client done (mostly)
merge upstream