impl Memento pattern