API still in flux, trying to work out exactly how it should work