very much work in progress improved API