don't assume Object.keys