should be possible to undo anything
add load/save support