lots of extra work with api