Move with() to decorator. Optimize done()