For undo/redo, added a layer of indirection between tools and the world