finished undo/redo, still need to do a little more testing but it works!