add save restore, and rationalize