reimplementing nested protocols WIP