initial version with save support